diff --git a/.gitignore b/.gitignore index 6f23ffd4..c6d09bd7 100644 --- a/.gitignore +++ b/.gitignore @@ -251,3 +251,10 @@ paket-files/ # JetBrains Rider .idea/ *.sln.iml + +# Include ALL files in 'docs' folder (movistartv.alphacentaury.org website files) +!/docs/* + +#Include ALL files in Assemblies/Third Party +!Assemblies/Third-Party +*.backup diff --git a/1.5 'Kruger 60'/.defaults/licensing.defaults.internal.xml b/1.5 'Kruger 60'/.defaults/licensing.defaults.internal.xml new file mode 100644 index 00000000..102a2b95 --- /dev/null +++ b/1.5 'Kruger 60'/.defaults/licensing.defaults.internal.xml @@ -0,0 +1,20 @@ + + + + + Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 + + diff --git a/1.5 'Kruger 60'/.defaults/licensing.defaults.solution.xml b/1.5 'Kruger 60'/.defaults/licensing.defaults.solution.xml new file mode 100644 index 00000000..b40fc839 --- /dev/null +++ b/1.5 'Kruger 60'/.defaults/licensing.defaults.solution.xml @@ -0,0 +1,89 @@ + + + + + + + + + diff --git a/1.5 'Kruger 60'/.defaults/licensing.defaults.xml b/1.5 'Kruger 60'/.defaults/licensing.defaults.xml new file mode 100644 index 00000000..e06a52bd --- /dev/null +++ b/1.5 'Kruger 60'/.defaults/licensing.defaults.xml @@ -0,0 +1,138 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/.defaults/licensing.pool.licenses.xml b/1.5 'Kruger 60'/.defaults/licensing.pool.licenses.xml new file mode 100644 index 00000000..867b0573 --- /dev/null +++ b/1.5 'Kruger 60'/.defaults/licensing.pool.licenses.xml @@ -0,0 +1,311 @@ + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/.defaults/licensing.pool.thirdparty.xml b/1.5 'Kruger 60'/.defaults/licensing.pool.thirdparty.xml new file mode 100644 index 00000000..c484399c --- /dev/null +++ b/1.5 'Kruger 60'/.defaults/licensing.pool.thirdparty.xml @@ -0,0 +1,45 @@ + + + + + MIT + Copyright (c) 2007 James Newton-King + James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Copyright (c) 2016 JetBrains http://www.jetbrains.com + JetBrains + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + Copyright (c) .NET Foundation and Contributors + Microsoft + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/AlphaCentaury.Licensing.Data.Ui.csproj b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/AlphaCentaury.Licensing.Data.Ui.csproj new file mode 100644 index 00000000..4a2cd396 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/AlphaCentaury.Licensing.Data.Ui.csproj @@ -0,0 +1,160 @@ + + + + + Debug + AnyCPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06} + Library + Properties + AlphaCentaury.Licensing.Data.Ui + AlphaCentaury.Licensing.Data.Ui + v4.6.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + 8 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + 8 + + + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {42b71db3-2e34-43bb-bf87-88f422bcf861} + AlphaCentaury.Licensing.Data + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LICENSE.ES.MD new file mode 100644 index 00000000..360638f1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LICENSE.ES.MD @@ -0,0 +1,114 @@ +# Biblioteca 'AlphaCentaury.Licensing.Data.Ui' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. AlphaCentaury.Licensing.Data +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data.Ui +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LICENSE.MD new file mode 100644 index 00000000..2e16a12d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LICENSE.MD @@ -0,0 +1,86 @@ +# Library 'AlphaCentaury.Licensing.Data.Ui' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. AlphaCentaury.Licensing.Data +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data.Ui +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LicensingDataUi.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LicensingDataUi.cs new file mode 100644 index 00000000..d4165500 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LicensingDataUi.cs @@ -0,0 +1,180 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using AlphaCentaury.Licensing.Data.Serialization; +using JetBrains.Annotations; +using System.Collections.Generic; +using System.Globalization; +using System.Windows.Forms; +using AlphaCentaury.Licensing.Data.Ui.Properties; + +namespace AlphaCentaury.Licensing.Data.Ui +{ + public sealed class LicensingDataUi + { + private readonly LicensingUiImages _images; + + public LicensingDataUi(LicensingUiImages images) + { + _images = images; + } // constructor + + [PublicAPI] + public TreeNode DataToTree(string name, LicensingData data) + { + var root = new TreeNode(name, _images.LicensingData, _images.LicensingData) { Tag = data }; + var node = LicensedItemToNode(data.Licensed); + root.Nodes.Add(node); + + AddDependenciesNodes(root, data.Dependencies); + AddLicensesNodes(root, data.Licenses); + + root.Expand(); + return root; + } // DataToTree + + public void AddDependenciesNodes(TreeNode treeNode, LicensingDependencies dependencies) + { + if (dependencies == null) return; + if (!dependencies.LibrariesSpecified && !dependencies.ThirdPartySpecified) return; + + var root = new TreeNode(Resources.DependenciesNode, _images.Dependencies, _images.Dependencies) + { + Tag = dependencies + }; + treeNode.Nodes.Add(root); + + if (dependencies.LibrariesSpecified) + { + var nodeLibraries = new TreeNode(Resources.DependenciesLibrariesNode, _images.DependenciesLibraries, _images.DependenciesLibraries) + { + Tag = dependencies.Libraries + }; + root.Nodes.Add(nodeLibraries); + AddLibraryDependenciesNodes(nodeLibraries, dependencies.Libraries); + } // if + + if (!dependencies.ThirdPartySpecified) return; + + var nodeThirdParty = new TreeNode(Resources.DependenciesThirdPartyNode, _images.DependenciesThirdParty, _images.DependenciesThirdParty) + { + Tag = dependencies.ThirdParty + }; + root.Nodes.Add(nodeThirdParty); + foreach (var dependency in dependencies.ThirdParty) + { + nodeThirdParty.Nodes.Add(ThirdPartyDependencyToNode(dependency)); + } // foreach + } // AddDependenciesNodes + + private void AddLibraryDependenciesNodes(TreeNode treeNode, ICollection libraries) + { + if ((libraries == null) || (libraries.Count == 0)) return; + + foreach (var library in libraries) + { + treeNode.Nodes.Add(LibraryDependencyToNode(library)); + } // foreach + } // AddLibraryDependenciesNodes + + public void AddLicensesNodes(TreeNode treeNode, ICollection licenses) + { + if ((licenses == null) || (licenses.Count == 0)) return; + + var node = new TreeNode(Resources.LicensesNode, _images.Licenses, _images.Licenses) + { + Tag = licenses + }; + node.Expand(); + treeNode.Nodes.Add(node); + + foreach (var license in licenses) + { + node.Nodes.Add(LicenseToNode(license)); + } // foreach + } // AddLicensesNodes + + public TreeNode LicensedItemToNode(LicensedItem item) + { + if (item == null) throw new ArgumentNullException(nameof(item)); + + var image = item switch + { + LicensedLibrary _ => _images.LicensedLibrary, + LicensedInstaller _ => _images.LicensedInstaller, + LicensedProgram program => program.IsGuiApp ? _images.LicensedProgramGui : _images.LicensedProgramCli, + _ => _images.LicensedUnknown + }; + + var node = new TreeNode(item.Name ?? Resources.NoName, image, image) { Tag = item }; + if (!item.TermsConditionsSpecified) return node; + + image = _images.TermsAndConditionsNode; + var terms = new TreeNode(Resources.TermsAndConditionsNode, image, image) { Tag = item.TermsConditions }; + foreach (var term in item.TermsConditions) + { + string name; + + try + { + if (string.IsNullOrEmpty(term.Language)) + { + name = "(Default)"; + } + else + { + var culture = CultureInfo.GetCultureInfo(term.Language); + name = $"{culture.DisplayName} ({culture.NativeName})"; + } // if-else + } + catch (CultureNotFoundException) + { + name = $"({term.Language})"; + } // try-catch + + image = _images.TermsAndConditions; + var termNode = new TreeNode(name, image, image) { Tag = term }; + terms.Nodes.Add(termNode); + } // foreach term + + node.Nodes.Add(terms); + return node; + } // LicensedItemToNode + + public TreeNode ThirdPartyDependencyToNode(ThirdPartyDependency dependency) + { + var image = dependency.Type switch + { + ThirdPartyDependencyType.ImageLibrary => _images.DependencyImageLibrary, + ThirdPartyDependencyType.Library => _images.DependencyLibrary, + ThirdPartyDependencyType.NugetPackage => _images.DependencyNuget, + ThirdPartyDependencyType.Other => _images.DependencyUnknown, + ThirdPartyDependencyType.SourceCode => _images.DependencySourceCode, + _ => _images.DependencyUnknown + }; + + return new TreeNode(dependency.Name, image, image) { Tag = dependency }; + } // ThirdPartyDependencyToNode + + public TreeNode LibraryDependencyToNode(LibraryDependency library) + { + return new TreeNode(library.Name, _images.DependencyProject, _images.DependencyProject) { Tag = library }; + } // LicenseToNode + + public TreeNode LicenseToNode(License license) + { + return new TreeNode(license.Name ?? Resources.NoName, _images.License, _images.License) { Tag = license }; + } // LicenseToNode + } // class LicensingDataUi +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LicensingUiImages.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LicensingUiImages.cs new file mode 100644 index 00000000..a5ee75db --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/LicensingUiImages.cs @@ -0,0 +1,172 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Drawing; +using System.Windows.Forms; +using AlphaCentaury.Licensing.Data.Ui.Properties; + +namespace AlphaCentaury.Licensing.Data.Ui +{ + public class LicensingUiImages + { + public const string KeyLicensingData = "LicensingData"; + public const string KeyLicensedProgramCli = "ApplicationCli"; + public const string KeyLicensedProgramGui = "ApplicationGui"; + public const string KeyLicensedLibrary = "LicensedLibrary"; + public const string KeyLicensedInstaller = "LicensedInstaller"; + public const string KeyLicensedUnknown = "LicensedUnknown"; + public const string KeyDependencies = "Dependencies"; + public const string KeyDependenciesLibraries = "DependenciesLibraries"; + public const string KeyDependenciesThirdParty = "DependenciesThirdParty"; + public const string KeyDependencyImageLibrary = "ImageLibrary"; + public const string KeyDependencyLibrary = "Library"; + public const string KeyDependencyNuget = "nuget"; + public const string KeyDependencyProject = "Project"; + public const string KeyDependencySourceCode = "SourceCode"; + public const string KeyDependencyUnknown = "Unknown"; + public const string KeyLicenses = "Licenses"; + public const string KeyLicense = "License"; + public const string KeyTermsAndConditionsNode = "TermsConditionsList"; + public const string KeyTermsAndConditions = "TermsConditions"; + + private readonly ImageList _list; + + public LicensingUiImages(ImageList list) + { + _list = list; + + var images = list.Images; + LicensingData = images.IndexOfKey(KeyLicensingData); + LicensedProgramCli = images.IndexOfKey(KeyLicensedProgramCli); + LicensedProgramGui = images.IndexOfKey(KeyLicensedProgramGui); + LicensedLibrary = images.IndexOfKey(KeyLicensedLibrary); + LicensedInstaller = images.IndexOfKey(KeyLicensedInstaller); + LicensedUnknown = images.IndexOfKey(KeyLicensedUnknown); + Dependencies = images.IndexOfKey(KeyDependencies); + DependenciesLibraries = images.IndexOfKey(KeyDependenciesLibraries); + DependenciesThirdParty = images.IndexOfKey(KeyDependenciesThirdParty); + DependencyImageLibrary = images.IndexOfKey(KeyDependencyImageLibrary); + DependencyLibrary = images.IndexOfKey(KeyDependencyLibrary); + DependencyNuget = images.IndexOfKey(KeyDependencyNuget); + DependencyProject = images.IndexOfKey(KeyDependencyProject); + DependencySourceCode = images.IndexOfKey(KeyDependencySourceCode); + DependencyUnknown = images.IndexOfKey(KeyDependencyUnknown); + Licenses = images.IndexOfKey(KeyLicenses); + License = images.IndexOfKey(KeyLicense); + TermsAndConditionsNode = images.IndexOfKey(KeyTermsAndConditionsNode); + TermsAndConditions = images.IndexOfKey(KeyTermsAndConditions); + } // constructor + + public int this[string key] => _list.Images.IndexOfKey(key); + public Image this[int index] => _list.Images[index]; + + public int LicensingData { get; } + public int LicensedProgramCli { get; } + public int LicensedProgramGui { get; } + public int LicensedLibrary { get; } + public int LicensedInstaller { get; } + public int LicensedUnknown { get; } + public int Dependencies { get; } + public int DependenciesLibraries { get; } + public int DependenciesThirdParty { get; } + public int DependencyImageLibrary { get; } + public int DependencyLibrary { get; } + public int DependencyNuget { get; } + public int DependencyProject { get; } + public int DependencySourceCode { get; } + public int DependencyUnknown { get; } + public int Licenses { get; } + public int License { get; } + public int TermsAndConditionsNode { get; } + public int TermsAndConditions { get; } + + public static void GetImageListSmall(ImageList list) + { + list.Images.Clear(); + list.ColorDepth = ColorDepth.Depth32Bit; + list.ImageSize = new Size(16, 16); + list.Images.Add(KeyLicensingData, Resources.Certificate_16x); + list.Images.Add(KeyLicensedProgramCli, Resources.ApplicationCli_16x); + list.Images.Add(KeyLicensedProgramGui, Resources.ApplicationGui_16x); + list.Images.Add(KeyLicensedLibrary, Resources.Library_16x); + list.Images.Add(KeyLicensedInstaller, Resources.Installer_16x); + list.Images.Add(KeyLicensedUnknown, Resources.LicensedUnknown_16x); + list.Images.Add(KeyDependencies, Resources.Dependencies_16x); + list.Images.Add(KeyDependenciesLibraries, Resources.Library_16x); + list.Images.Add(KeyDependenciesThirdParty, Resources.ThirdParty_16x); + list.Images.Add(KeyDependencyImageLibrary, Resources.ImageLibrary_16x); + list.Images.Add(KeyDependencyLibrary, Resources.Library_16x); + list.Images.Add(KeyDependencyProject, Resources.Link_16x); + list.Images.Add(KeyDependencyNuget, Resources.nuget_16x); + list.Images.Add(KeyDependencySourceCode, Resources.SourceCode_16x); + list.Images.Add(KeyDependencyUnknown, Resources.Unknown_16x); + list.Images.Add(KeyLicenses, Resources.Certificate_16x); + list.Images.Add(KeyLicense, Resources.LicenseFile_16x); + list.Images.Add(KeyTermsAndConditionsNode, Resources.TermsConditionsList_16x); + list.Images.Add(KeyTermsAndConditions, Resources.TermsConditions_16x); + } // GetImageListSmall + + public static void GetImageListMedium(ImageList list) + { + list.Images.Clear(); + list.ColorDepth = ColorDepth.Depth32Bit; + list.ImageSize = new Size(24, 24); + list.Images.Add(KeyLicensingData, Resources.Certificate_24x); + list.Images.Add(KeyLicensedProgramCli, Resources.ApplicationCli_24x); + list.Images.Add(KeyLicensedProgramGui, Resources.ApplicationGui_24x); + list.Images.Add(KeyLicensedLibrary, Resources.Library_24x); + list.Images.Add(KeyLicensedInstaller, Resources.Installer_24x); + list.Images.Add(KeyLicensedUnknown, Resources.LicensedUnknown_24x); + list.Images.Add(KeyDependencies, Resources.Dependencies_24x); + list.Images.Add(KeyDependenciesLibraries, Resources.Library_24x); + list.Images.Add(KeyDependenciesThirdParty, Resources.ThirdParty_24x); + list.Images.Add(KeyDependencyImageLibrary, Resources.ImageLibrary_24x); + list.Images.Add(KeyDependencyLibrary, Resources.Library_24x); + list.Images.Add(KeyDependencyProject, Resources.Link_24x); + list.Images.Add(KeyDependencyNuget, Resources.nuget_24x); + list.Images.Add(KeyDependencySourceCode, Resources.SourceCode_24x); + list.Images.Add(KeyDependencyUnknown, Resources.Unknown_24x); + list.Images.Add(KeyLicenses, Resources.Certificate_24x); + list.Images.Add(KeyLicense, Resources.LicenseFile_24x); + list.Images.Add(KeyTermsAndConditionsNode, Resources.TermsConditionsList_24x); + list.Images.Add(KeyTermsAndConditions, Resources.TermsConditions_24x); + + } // GetImageListMedium + + public static void GetImageListLarge(ImageList list) + { + list.Images.Clear(); + list.ColorDepth = ColorDepth.Depth32Bit; + list.ImageSize = new Size(32, 32); + list.Images.Add(KeyLicensingData, Resources.Certificate_32x); + list.Images.Add(KeyLicensedProgramCli, Resources.ApplicationCli_32x); + list.Images.Add(KeyLicensedProgramGui, Resources.ApplicationGui_32x); + list.Images.Add(KeyLicensedLibrary, Resources.Library_32x); + list.Images.Add(KeyLicensedInstaller, Resources.Installer_32x); + list.Images.Add(KeyLicensedUnknown, Resources.LicensedUnknown_32x); + list.Images.Add(KeyDependencies, Resources.Dependencies_32x); + list.Images.Add(KeyDependenciesLibraries, Resources.Library_32x); + list.Images.Add(KeyDependenciesThirdParty, Resources.ThirdParty_32x); + list.Images.Add(KeyDependencyImageLibrary, Resources.ImageLibrary_32x); + list.Images.Add(KeyDependencyLibrary, Resources.Library_32x); + list.Images.Add(KeyDependencyProject, Resources.Link_32x); + list.Images.Add(KeyDependencyNuget, Resources.nuget_32x); + list.Images.Add(KeyDependencySourceCode, Resources.SourceCode_32x); + list.Images.Add(KeyDependencyUnknown, Resources.Unknown_32x); + list.Images.Add(KeyLicenses, Resources.Certificate_32x); + list.Images.Add(KeyLicense, Resources.LicenseFile_32x); + list.Images.Add(KeyTermsAndConditionsNode, Resources.TermsConditionsList_32x); + list.Images.Add(KeyTermsAndConditions, Resources.TermsConditions_32x); + } // GetImageListLarge + } // class LicensingUiImages +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0d6d92e0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AlphaCentaury.Licensing.Data.Ui")] +[assembly: AssemblyDescription("AlphaCentaury UI for licensing data")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("30bbda25-ba29-43a4-888c-4ee2896697ce")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/Resources.Designer.cs new file mode 100644 index 00000000..e314e59a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/Resources.Designer.cs @@ -0,0 +1,658 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AlphaCentaury.Licensing.Data.Ui.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AlphaCentaury.Licensing.Data.Ui.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ApplicationCli_16x { + get { + object obj = ResourceManager.GetObject("ApplicationCli_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ApplicationCli_24x { + get { + object obj = ResourceManager.GetObject("ApplicationCli_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ApplicationCli_32x { + get { + object obj = ResourceManager.GetObject("ApplicationCli_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ApplicationGui_16x { + get { + object obj = ResourceManager.GetObject("ApplicationGui_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ApplicationGui_24x { + get { + object obj = ResourceManager.GetObject("ApplicationGui_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ApplicationGui_32x { + get { + object obj = ResourceManager.GetObject("ApplicationGui_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Certificate_16x { + get { + object obj = ResourceManager.GetObject("Certificate_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Certificate_24x { + get { + object obj = ResourceManager.GetObject("Certificate_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Certificate_32x { + get { + object obj = ResourceManager.GetObject("Certificate_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Dependencies_16x { + get { + object obj = ResourceManager.GetObject("Dependencies_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Dependencies_24x { + get { + object obj = ResourceManager.GetObject("Dependencies_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Dependencies_32x { + get { + object obj = ResourceManager.GetObject("Dependencies_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to Libraries. + /// + internal static string DependenciesLibrariesNode { + get { + return ResourceManager.GetString("DependenciesLibrariesNode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Dependencies. + /// + internal static string DependenciesNode { + get { + return ResourceManager.GetString("DependenciesNode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Third-party. + /// + internal static string DependenciesThirdPartyNode { + get { + return ResourceManager.GetString("DependenciesThirdPartyNode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Libraries. + /// + internal static string GroupLibrariesName { + get { + return ResourceManager.GetString("GroupLibrariesName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Third-party components. + /// + internal static string GroupThirdPartyName { + get { + return ResourceManager.GetString("GroupThirdPartyName", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ImageLibrary_16x { + get { + object obj = ResourceManager.GetObject("ImageLibrary_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ImageLibrary_24x { + get { + object obj = ResourceManager.GetObject("ImageLibrary_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ImageLibrary_32x { + get { + object obj = ResourceManager.GetObject("ImageLibrary_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Installer_16x { + get { + object obj = ResourceManager.GetObject("Installer_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Installer_24x { + get { + object obj = ResourceManager.GetObject("Installer_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Installer_32x { + get { + object obj = ResourceManager.GetObject("Installer_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Library_16x { + get { + object obj = ResourceManager.GetObject("Library_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Library_24x { + get { + object obj = ResourceManager.GetObject("Library_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Library_32x { + get { + object obj = ResourceManager.GetObject("Library_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LicensedUnknown_16x { + get { + object obj = ResourceManager.GetObject("LicensedUnknown_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LicensedUnknown_24x { + get { + object obj = ResourceManager.GetObject("LicensedUnknown_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LicensedUnknown_32x { + get { + object obj = ResourceManager.GetObject("LicensedUnknown_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LicenseFile_16x { + get { + object obj = ResourceManager.GetObject("LicenseFile_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LicenseFile_24x { + get { + object obj = ResourceManager.GetObject("LicenseFile_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LicenseFile_32x { + get { + object obj = ResourceManager.GetObject("LicenseFile_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to Licenses. + /// + internal static string LicensesNode { + get { + return ResourceManager.GetString("LicensesNode", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Link_16x { + get { + object obj = ResourceManager.GetObject("Link_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Link_24x { + get { + object obj = ResourceManager.GetObject("Link_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Link_32x { + get { + object obj = ResourceManager.GetObject("Link_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Link_48x { + get { + object obj = ResourceManager.GetObject("Link_48x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to <no name>. + /// + internal static string NoName { + get { + return ResourceManager.GetString("NoName", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nuget_16x { + get { + object obj = ResourceManager.GetObject("nuget_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nuget_24x { + get { + object obj = ResourceManager.GetObject("nuget_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nuget_32x { + get { + object obj = ResourceManager.GetObject("nuget_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SourceCode_16x { + get { + object obj = ResourceManager.GetObject("SourceCode_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SourceCode_24x { + get { + object obj = ResourceManager.GetObject("SourceCode_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SourceCode_32x { + get { + object obj = ResourceManager.GetObject("SourceCode_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to Terms and Conditions. + /// + internal static string TermsAndConditionsNode { + get { + return ResourceManager.GetString("TermsAndConditionsNode", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TermsConditions_16x { + get { + object obj = ResourceManager.GetObject("TermsConditions_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TermsConditions_24x { + get { + object obj = ResourceManager.GetObject("TermsConditions_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TermsConditions_32x { + get { + object obj = ResourceManager.GetObject("TermsConditions_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TermsConditions_48x { + get { + object obj = ResourceManager.GetObject("TermsConditions_48x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TermsConditionsList_16x { + get { + object obj = ResourceManager.GetObject("TermsConditionsList_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TermsConditionsList_24x { + get { + object obj = ResourceManager.GetObject("TermsConditionsList_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TermsConditionsList_32x { + get { + object obj = ResourceManager.GetObject("TermsConditionsList_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TermsConditionsList_48x { + get { + object obj = ResourceManager.GetObject("TermsConditionsList_48x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThirdParty_16x { + get { + object obj = ResourceManager.GetObject("ThirdParty_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThirdParty_24x { + get { + object obj = ResourceManager.GetObject("ThirdParty_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThirdParty_32x { + get { + object obj = ResourceManager.GetObject("ThirdParty_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Unknown_16x { + get { + object obj = ResourceManager.GetObject("Unknown_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Unknown_24x { + get { + object obj = ResourceManager.GetObject("Unknown_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Unknown_32x { + get { + object obj = ResourceManager.GetObject("Unknown_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/Resources.es.resx b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/Resources.es.resx new file mode 100644 index 00000000..2d90113c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/Resources.es.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bibliotecas + + + Dependencias + + + Terceras partes + + + Bibliotecas + + + Componentes de terceras partes + + + Licencias + + + <sin nombre> + + + Términos y condiciones de uso + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/Resources.resx new file mode 100644 index 00000000..5c633d6d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Properties/Resources.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\resources\applicationcli_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\applicationcli_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\applicationcli_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\applicationgui_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\applicationgui_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\applicationgui_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\certificate_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\certificate_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\certificate_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Libraries + + + Dependencies + + + Third-party + + + ..\resources\dependencies_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\dependencies_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\dependencies_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Libraries + + + Third-party components + + + ..\resources\imagelibrary_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\imagelibrary_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\imagelibrary_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\installer_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\installer_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\installer_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\library_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\library_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\library_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\licensedunknown_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\licensedunknown_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\licensedunknown_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\licensefile_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\licensefile_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\licensefile_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Licenses + + + ..\resources\link_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\link_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\link_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\link_48x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + <no name> + + + ..\resources\nuget_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\nuget_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\nuget_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\sourcecode_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\sourcecode_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\sourcecode_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Terms and Conditions + + + ..\resources\termsconditionslist_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\termsconditionslist_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\termsconditionslist_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\termsconditionslist_48x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\termsconditions_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\termsconditions_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\termsconditions_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\termsconditions_48x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\thirdparty_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\thirdparty_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\thirdparty_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\unknown_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\unknown_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\unknown_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli.svg new file mode 100644 index 00000000..230ac1d1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_16x.png new file mode 100644 index 00000000..a08399b5 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_24x.png new file mode 100644 index 00000000..fcef02fa Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_32x.png new file mode 100644 index 00000000..95a67349 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_48x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_48x.png new file mode 100644 index 00000000..1ea985ed Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationCli_48x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui.svg new file mode 100644 index 00000000..3a74f39d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_16x.png new file mode 100644 index 00000000..06487954 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_24x.png new file mode 100644 index 00000000..014457da Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_32x.png new file mode 100644 index 00000000..e561e7d2 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_48x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_48x.png new file mode 100644 index 00000000..280092ed Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ApplicationGui_48x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate.svg new file mode 100644 index 00000000..2178e9ab --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate_16x.png new file mode 100644 index 00000000..c6db9967 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate_24x.png new file mode 100644 index 00000000..8d645d86 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate_32x.png new file mode 100644 index 00000000..49006ba9 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Certificate_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies.svg new file mode 100644 index 00000000..39bd11c1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies_16x.png new file mode 100644 index 00000000..0e0e13d0 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies_24x.png new file mode 100644 index 00000000..ebc1f8f3 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies_32x.png new file mode 100644 index 00000000..98f9ae33 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Dependencies_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder.svg new file mode 100644 index 00000000..481bb01a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen.svg new file mode 100644 index 00000000..4c8a03f5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen_16x.png new file mode 100644 index 00000000..c1684f48 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen_24x.png new file mode 100644 index 00000000..2e2d909f Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen_32x.png new file mode 100644 index 00000000..ad3778bb Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/FolderOpen_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder_16x.png new file mode 100644 index 00000000..ccb1725f Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder_24x.png new file mode 100644 index 00000000..55f30fb8 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder_32x.png new file mode 100644 index 00000000..1606b25d Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Folder_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary.svg new file mode 100644 index 00000000..152f360d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary_16x.png new file mode 100644 index 00000000..73c0dd72 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary_24x.png new file mode 100644 index 00000000..dc4c9120 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary_32x.png new file mode 100644 index 00000000..304aa64d Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ImageLibrary_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer.svg new file mode 100644 index 00000000..baecb080 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_16x.png new file mode 100644 index 00000000..1871d63c Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_24x.png new file mode 100644 index 00000000..31735860 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_32x.png new file mode 100644 index 00000000..f88a9c71 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_48x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_48x.png new file mode 100644 index 00000000..092e3fdd Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Installer_48x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library.svg new file mode 100644 index 00000000..0ffa85f6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library_16x.png new file mode 100644 index 00000000..77e9f0e0 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library_24x.png new file mode 100644 index 00000000..68c60b88 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library_32x.png new file mode 100644 index 00000000..3c7c4e48 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Library_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile.svg new file mode 100644 index 00000000..dca155a3 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_16x.png new file mode 100644 index 00000000..f1fcbaf2 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_24x.png new file mode 100644 index 00000000..7d711819 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_32x.png new file mode 100644 index 00000000..ee2feb28 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_48x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_48x.png new file mode 100644 index 00000000..4ef06c77 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicenseFile_48x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown.svg new file mode 100644 index 00000000..9e3deddf --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown_16x.png new file mode 100644 index 00000000..8eae2a4e Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown_24x.png new file mode 100644 index 00000000..2641f9e6 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown_32x.png new file mode 100644 index 00000000..47b42cf4 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/LicensedUnknown_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link.svg new file mode 100644 index 00000000..4a7f396d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_16x.png new file mode 100644 index 00000000..42f34c48 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_24x.png new file mode 100644 index 00000000..b76dbbd7 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_32x.png new file mode 100644 index 00000000..1c2a0d0d Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_48x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_48x.png new file mode 100644 index 00000000..596a0439 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Link_48x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode.svg new file mode 100644 index 00000000..ab98ce2e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode_16x.png new file mode 100644 index 00000000..3e50591e Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode_24x.png new file mode 100644 index 00000000..dff39928 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode_32x.png new file mode 100644 index 00000000..1f78cf61 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/SourceCode_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions.svg new file mode 100644 index 00000000..48f22efd --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList.svg new file mode 100644 index 00000000..9e174147 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_16x.png new file mode 100644 index 00000000..1d95f785 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_24x.png new file mode 100644 index 00000000..1f13846a Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_32x.png new file mode 100644 index 00000000..0f81a102 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_48x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_48x.png new file mode 100644 index 00000000..f3048cc1 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditionsList_48x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_16x.png new file mode 100644 index 00000000..b2f34f68 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_24x.png new file mode 100644 index 00000000..ad4e709e Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_32x.png new file mode 100644 index 00000000..4b431f84 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_48x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_48x.png new file mode 100644 index 00000000..518930ca Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/TermsConditions_48x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty.svg new file mode 100644 index 00000000..b68167ca --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_16x.png new file mode 100644 index 00000000..2feee638 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_24x.png new file mode 100644 index 00000000..d33a30eb Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_32x.png new file mode 100644 index 00000000..3bd68937 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_48x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_48x.png new file mode 100644 index 00000000..7a635930 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/ThirdParty_48x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown.svg new file mode 100644 index 00000000..263782e6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown_16x.png new file mode 100644 index 00000000..a23a93a1 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown_24x.png new file mode 100644 index 00000000..cdc8b14b Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown_32x.png new file mode 100644 index 00000000..06afbfd2 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/Unknown_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget.svg b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget.svg new file mode 100644 index 00000000..a27b5d34 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget_16x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget_16x.png new file mode 100644 index 00000000..80527069 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget_16x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget_24x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget_24x.png new file mode 100644 index 00000000..af6aa249 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget_24x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget_32x.png b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget_32x.png new file mode 100644 index 00000000..a260b162 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/Resources/nuget_32x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/license.txt b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/license.txt new file mode 100644 index 00000000..098f4c54 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/license.txt @@ -0,0 +1,103 @@ +############################################################################## +## +## Library 'AlphaCentaury.Licensing.Data.Ui' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. AlphaCentaury.Licensing.Data +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. AlphaCentaury.Licensing.Data.Ui +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/licensing.xml b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/licensing.xml new file mode 100644 index 00000000..a2d546cd --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/licensing.xml @@ -0,0 +1,126 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + AlphaCentaury.Licensing.Data + Library + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/packages.config b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/packages.config new file mode 100644 index 00000000..52cb031c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data.Ui/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/AlphaCentaury.Licensing.Data.csproj b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/AlphaCentaury.Licensing.Data.csproj new file mode 100644 index 00000000..c17c632f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/AlphaCentaury.Licensing.Data.csproj @@ -0,0 +1,89 @@ + + + + + Debug + AnyCPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861} + Library + Properties + AlphaCentaury.Licensing.Data + AlphaCentaury.Licensing.Data + v4.6.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + 8.0 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + 8.0 + + + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/DependencyLibraryNameComparer.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/DependencyLibraryNameComparer.cs new file mode 100644 index 00000000..b3001210 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/DependencyLibraryNameComparer.cs @@ -0,0 +1,72 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using AlphaCentaury.Licensing.Data.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data +{ + public sealed class DependencyLibraryNameComparer : IEqualityComparer, IComparer + { + private readonly StringComparison _comparisonType; + + public DependencyLibraryNameComparer() + { + _comparisonType = StringComparison.InvariantCulture; + } // constructor + + [PublicAPI] + public DependencyLibraryNameComparer(StringComparison comparisonType) + { + _comparisonType = comparisonType; + } // constructor + + #region IEqualityComparer implementation + + public bool Equals(LibraryDependency x, LibraryDependency y) + { + if (ReferenceEquals(x, y)) return true; + if (x == null) return false; + + if (!string.Equals(x.Name, y?.Name, _comparisonType)) return false; + return string.Equals(x.Assembly, y?.Assembly, _comparisonType); + } // Equals + + public int GetHashCode(LibraryDependency obj) + { + return obj.Name.GetHashCode(); + } // GetHashCode + + #endregion + + #region IComparable implementation + + public int Compare(LibraryDependency x, LibraryDependency y) + { + if (ReferenceEquals(x, y)) return 0; + if (y == null) return 1; // x goes after y + if (x == null) return -1; // x goes before y + + var diffType = x.DependencyType - y.DependencyType; + if (diffType != 0) return diffType; + + var compare = string.Compare(x.Name, y.Name, _comparisonType); + if (compare != 0) return compare; + return string.Compare(x.Assembly, y.Assembly, _comparisonType); + } // Compare + + #endregion + } // DependencyLibraryNameComparer +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/ExpandDependencies.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/ExpandDependencies.cs new file mode 100644 index 00000000..08e60099 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/ExpandDependencies.cs @@ -0,0 +1,193 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Net.Sockets; +using AlphaCentaury.Licensing.Data.Serialization; + +namespace AlphaCentaury.Licensing.Data +{ + internal class ExpandDependencies + { + private readonly List _dataList; + private readonly Dictionary _libraries; + private readonly Dictionary _allLicenses; + + public ExpandDependencies(List list) + { + // validate arguments + if (list == null) throw new ArgumentNullException(nameof(list)); + if (list.Count == 0) return; + _dataList = list; + + // create dictionary of libraries + _libraries = list.ToDictionary(data => data.Licensed.Name); + + // create dictionary of licenses + _allLicenses = new Dictionary(StringComparer.InvariantCultureIgnoreCase); + } // constructor + + public void Expand() + { + if (_dataList.Count == 0) return; + + // validate data + var q = from data in _dataList + where (data.Licensed == null) + select data; + if (q.FirstOrDefault() != null) throw new ArgumentException(); + + // create dictionary of licenses + var licenses = from data in _dataList + where data.LicensesSpecified + from license in data.Licenses + select license; + licenses.ForEach(license => _allLicenses[license.Id] = license); + + AddIndirectLibraryDependencies(); + AddIndirectThirdParty(); + SortThirdParty(); + AddMissingLicenses(); + } // Expand + + private void AddIndirectLibraryDependencies() + { + // clear indirect dependencies + _dataList.Where(data => data.Dependencies != null).ForEach(data => + { + data.Dependencies.Libraries?.RemoveAll(library => library.DependencyType == LicensedDependencyType.Indirect); + data.Dependencies.ThirdParty?.RemoveAll(component => component.DependencyType == LicensedDependencyType.Indirect); + }); + + // re-add indirect dependencies + var comparer = new DependencyLibraryNameComparer(); + var visited = new HashSet(StringComparer.InvariantCulture); + _dataList.ForEach(data => + { + AddIndirectLibraryDependencies(data, visited); + data.Dependencies?.Libraries?.Sort(comparer); + }); + } // AddIndirectLibraryDependencies + private void SortThirdParty() + { + var comparer = new ThirdPartyDependencyNameComparer(); + _dataList.Where(data => data.Dependencies?.ThirdPartySpecified ?? false).ForEach(data => + { + data.Dependencies.ThirdParty.Sort(comparer); + }); + } // ShortThirdParty + + private void AddIndirectThirdParty() + { + _dataList.Where(data => data.Dependencies?.Libraries != null).ForEach(AddIndirectThirdParty); + } // AddIndirectThirdParty + + private void AddIndirectLibraryDependencies(LicensingData data, HashSet visited) + { + if (data.Dependencies?.Libraries == null) return; + + // avoid circular references + if (visited.Contains(data.Licensed.Name)) return; + visited.Add(data.Licensed.Name); + + // add indirect library dependencies + var q = from dependency in data.Dependencies.Libraries + select _libraries[dependency.Name]; + q.ForEach(AddIndirectLibraryDependencies, visited); + + // create hashset to avoid adding duplicated dependencies + var added = new HashSet(); + data.Dependencies.Libraries.ForEach(lib => added.Add(lib.Name ?? throw new ArgumentException())); + + var libraries = (from dependency in data.Dependencies.Libraries + select _libraries[dependency.Name]).ToArray(); + + var dependencies = from library in libraries + where library.Dependencies?.Libraries != null + from dependency in library.Dependencies.Libraries + select dependency.Clone(); + + dependencies.ForEach(dependency => + { + if (added.Contains(dependency.Name)) return; + + var library = dependency.Clone(); + library.DependencyType = LicensedDependencyType.Indirect; + data.Dependencies.Libraries.Add(library); + added.Add(dependency.Name); + }); + } // AddIndirectLibraryDependencies + + private void AddIndirectThirdParty(LicensingData data) + { + if ((data.Dependencies == null) || !data.Dependencies.LibrariesSpecified) return; + + var added = new HashSet(); + data.Dependencies.ThirdParty?.ForEach(component => added.Add(component.Name)); + + var q = from dependency in data.Dependencies.Libraries + let library = _libraries[dependency.Name] + where (library.Dependencies != null) && library.Dependencies.ThirdPartySpecified + from thirdParty in library.Dependencies.ThirdParty + select thirdParty.Clone(); + + q.ForEach(dependency => + { + if (added.Contains(dependency.Name)) return; + + dependency.DependencyType = LicensedDependencyType.Indirect; + data.Dependencies.ThirdParty ??= new List(); + data.Dependencies.ThirdParty.Add(dependency); + added.Add(dependency.Name); + }); + + data.Dependencies.ThirdParty?.Sort(new ThirdPartyDependencyNameComparer()); + } // AddIndirectThirdParty + + private void AddMissingLicenses() + { + var q = from data in _dataList + where data.DependenciesSpecified + select data.Dependencies; + + _dataList.Where(data => data.DependenciesSpecified).ForEach(data => + { + var missingFromLibraries = MissingLicenses(data, data.Dependencies.Libraries); + var missingFromThirdParty = MissingLicenses(data, data.Dependencies.ThirdParty); + var missing = missingFromLibraries.Concat(missingFromThirdParty); + + data.Licenses.AddRange(missing); + }); + + IEnumerable MissingLicenses(LicensingData data, IEnumerable list) + { + if (list == null) return Enumerable.Empty(); + + return from dependency in list + where !string.IsNullOrEmpty(dependency.LicenseId) + where data.GetLicense(dependency.LicenseId) == null + let license = GetLicenseFromPool(dependency.LicenseId) + where license != null + select license; + } // local MissingLicenses + + License GetLicenseFromPool(string licenseId) + { + return _allLicenses.TryGetValue(licenseId, out var license) ? license : null; + } // local GetLicenseFromPool + } // AddMissingLicenses + } // class ExpandDependencies +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/GetLicensingUsage.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/GetLicensingUsage.cs new file mode 100644 index 00000000..e32f9810 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/GetLicensingUsage.cs @@ -0,0 +1,137 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.IO; +using AlphaCentaury.Licensing.Data.Serialization; + +namespace AlphaCentaury.Licensing.Data +{ + internal class GetLicensingUsage + { + private readonly LicensingData _data; + private Dictionary _licenses; + private Dictionary> _libraries; + private Dictionary> _thirdParty; + + public GetLicensingUsage(LicensingData data) + { + _data = data; + } // constructor + + public LicensingUsage Get() + { + if (_data.Licenses == null) throw new InvalidDataException(); + if (_data.Licenses.Count == 0) throw new InvalidDataException(); + + _licenses = new Dictionary(_data.Licenses.Count, StringComparer.InvariantCultureIgnoreCase); + _libraries = new Dictionary>(StringComparer.InvariantCultureIgnoreCase); + _thirdParty = new Dictionary>(StringComparer.InvariantCultureIgnoreCase); + + foreach (var license in _data.Licenses) + { + _licenses.Add(license.Id, new LicenseAppliesTo + { + Libraries = new List(), + ThirdParty = new List() + }); + _libraries.Add(license.Id, new HashSet(StringComparer.InvariantCulture)); + _thirdParty.Add(license.Id, new HashSet(StringComparer.InvariantCulture)); + } // foreach + + AddLibrary(_data.Licensed.ConvertToLibraryDependency()); + AddLibraries(_data.Dependencies?.Libraries); + AddThirdParty(_data.Dependencies?.ThirdParty); + Sort(); + + var result = new LicensingUsage + { + Licensed = _data.Licensed, + Usage = new List(_data.Licenses.Count) + }; + + foreach (var license in _data.Licenses) + { + var expanded = new LicenseUsage {License = license, AppliesTo = _licenses[license.Id]}; + if (!expanded.AppliesTo.LibrariesSpecified && !expanded.AppliesTo.ThirdPartySpecified) + { + expanded.AppliesTo = null; + } // if + + result.Usage.Add(expanded); + } // foreach license + + return result; + } // Get + + private void AddLibraries(IEnumerable libraries) + { + libraries?.ForEach(AddLibrary); + } // AddLibraries + + private void AddLibrary(LibraryDependency library) + { + var key = $"{library.Name}:{library.Assembly}"; + var set = _libraries[library.LicenseId]; + + if (set.Contains(key)) return; + + _licenses[library.LicenseId].Libraries.Add(library); + set.Add(key); + } // AddLibrary + + private void AddThirdParty(IEnumerable licensingThirdParty) + { + if (licensingThirdParty == null) return; + foreach (var dependency in licensingThirdParty) + { + var key = $"{dependency.Type}:{dependency.Name}"; + var set = _thirdParty[dependency.LicenseId]; + + if (set.Contains(key)) continue; + + _licenses[dependency.LicenseId].ThirdParty.Add(dependency); + set.Add(key); + } // foreach + } // AddThirdParty + + private void Sort() + { + var libraryComparer = new DependencyLibraryNameComparer(); + var thirdPartyComparer = new ThirdPartyDependencyNameComparer(); + + foreach (var item in _licenses) + { + var usedBy = item.Value; + if (usedBy.Libraries.Count == 0) + { + usedBy.Libraries = null; + } + else + { + usedBy.Libraries.Sort(libraryComparer); + } // if-else + + if (usedBy.ThirdParty.Count == 0) + { + usedBy.ThirdParty = null; + } + else + { + usedBy.ThirdParty.Sort(thirdPartyComparer); + } // if-else + } // foreach + } // Sort + } // class GetLicensingUsage +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/ICloneable.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/ICloneable.cs new file mode 100644 index 00000000..4bc557b2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/ICloneable.cs @@ -0,0 +1,22 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace AlphaCentaury.Licensing.Data +{ + public interface ICloneable: ICloneable + { + new T Clone(); + } // interface ICloneable +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LICENSE.ES.MD new file mode 100644 index 00000000..d63c7bf9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LICENSE.ES.MD @@ -0,0 +1,108 @@ +# Biblioteca 'AlphaCentaury.Licensing.Data' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. AlphaCentaury.Licensing.Data +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LICENSE.MD new file mode 100644 index 00000000..f58d7dca --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LICENSE.MD @@ -0,0 +1,80 @@ +# Library 'AlphaCentaury.Licensing.Data' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. AlphaCentaury.Licensing.Data +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LicensingDataExtensions.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LicensingDataExtensions.cs new file mode 100644 index 00000000..b318b17e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LicensingDataExtensions.cs @@ -0,0 +1,82 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using AlphaCentaury.Licensing.Data.Serialization; + +namespace AlphaCentaury.Licensing.Data +{ + public static class LicensingDataExtensions + { + public static void ForEach(this IEnumerable enumerable, Action action) + { + if (enumerable == null) return; + foreach (var item in enumerable) + { + action(item); + } // foreach + } // ForEach + + public static void ForEach(this IEnumerable enumerable, Action action, TData data) + { + if (enumerable == null) return; + foreach (var item in enumerable) + { + action(item, data); + } // foreach + } // ForEach + + public static List Clone(this IList list) where T : ICloneable + { + if (list == null) return null; + + var clone = new List(list.Count); + clone.AddRange(list.Select(item => item.Clone())); + + return clone; + } // Clone + + public static LicensedProgram MorphToProgram(this LicensedLibrary library, bool isGuiApp) + { + return new LicensedProgram + { + Name = library.Name, + LicenseId = library.LicenseId, + Copyright = library.Copyright, + Authors = library.Authors, + Remarks = library.Remarks, + TermsConditions = library.TermsConditions, + Product = library.Product, + Assembly = library.Assembly, + IsGuiApp = isGuiApp + }; + } // MorphToProgram LicensedLibrary + + public static LicensedLibrary MorphToLibrary(this LicensedProgram program) + { + return new LicensedLibrary + { + Name = program.Name, + LicenseId = program.LicenseId, + Copyright = program.Copyright, + Authors = program.Authors, + Remarks = program.Remarks, + TermsConditions = program.TermsConditions, + Product = program.Product, + Assembly = program.Assembly, + }; + } // MorphToLibrary LicensedProgram + } // class LicenseFileUtils +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LicensingDataTools.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LicensingDataTools.cs new file mode 100644 index 00000000..5f86f6a8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/LicensingDataTools.cs @@ -0,0 +1,31 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; +using AlphaCentaury.Licensing.Data.Serialization; + +namespace AlphaCentaury.Licensing.Data +{ + public static class LicensingDataTools + { + public static void ExpandDependencies(this List list) + { + new ExpandDependencies(list).Expand(); + } // ExpandDependencies + + public static LicensingUsage GetUsage(this LicensingData data) + { + return new GetLicensingUsage(data).Get(); + } // GetUsage + } // class LicensingDataTools +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..39352561 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AlphaCentaury.Licensing.Data")] +[assembly: AssemblyDescription("AlphaCentaury licensing data")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("42b71db3-2e34-43bb-bf87-88f422bcf861")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/FormattedMultilineText.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/FormattedMultilineText.cs new file mode 100644 index 00000000..50694a89 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/FormattedMultilineText.cs @@ -0,0 +1,208 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public class FormattedMultilineText : IXmlSerializable, ICloneable, IEquatable, IEquatable, IComparable, IComparable, IComparable + { + public FormattedMultilineText() + { + // no-op + } // constructor + + public FormattedMultilineText(string text, string format) + { + Text = text; + Format = format; + } // constructor + + public string Format { get; set; } + + public string Text { get; set; } + + public override string ToString() => Text; + + public FormattedMultilineText Clone() + { + return new FormattedMultilineText(Text, Format); + } // Clone + + object ICloneable.Clone() => Clone(); + + protected void CopyTo(FormattedMultilineText other) + { + other.Text = Text; + other.Format = Format; + } // CopyTo + + XmlSchema IXmlSerializable.GetSchema() + { + return null; + } // IXmlSerializable.GetSchema + + void IXmlSerializable.ReadXml(XmlReader reader) => ReadXml(reader); + + void IXmlSerializable.WriteXml(XmlWriter writer) => WriteXml(writer); + + protected virtual void ReadXml([NotNull] XmlReader reader) + { + if (reader.MoveToAttribute("format")) + { + Format = reader.Value; + reader.MoveToElement(); + } // if + + Text = reader.ReadElementContentAsString(); + } // ReadXml + + protected virtual void WriteXml([NotNull] XmlWriter writer) + { + if (string.IsNullOrWhiteSpace(Text)) return; + if (Format != null) writer.WriteAttributeString("format", Format); + + if (Text.Contains("\r") || Text.Contains("\n")) + { + writer.WriteCData(Text); + } + else + { + writer.WriteString(Text); + } // if-else + } // WriteXml + + public static implicit operator FormattedMultilineText(string text) => new FormattedMultilineText(text, null); + + public static implicit operator string(FormattedMultilineText multiline) => multiline?.Text; + + #region Equality members + + public bool Equals(FormattedMultilineText other) + { + if (other is null) return false; + if (ReferenceEquals(this, other)) return true; + return string.Equals(Text, other.Text, StringComparison.CurrentCulture); + } // Equals + + public bool Equals(string other) + { + if (other is null) return false; + return string.Equals(Text, other, StringComparison.CurrentCulture); + } // Equals + + public override bool Equals(object obj) + { + return ReferenceEquals(this, obj) || (obj is FormattedMultilineText other && Equals(other)) || (obj is string text && Equals(text)); + } // Equals + + public override int GetHashCode() + { + return (Text != null ? StringComparer.CurrentCulture.GetHashCode(Text) : 0); + } // GetHashCode + + public static bool operator ==(FormattedMultilineText left, FormattedMultilineText right) + { + if (ReferenceEquals(left, right)) return true; + return !(left is null) && left.Equals(right); + } // operator == + + public static bool operator !=(FormattedMultilineText left, FormattedMultilineText right) + { + return !(left == right); + } // operator != + + public static bool operator ==(FormattedMultilineText left, string right) + { + return !(left is null) && left.Equals(right); + } // operator == + + public static bool operator !=(FormattedMultilineText left, string right) + { + return !(left == right); + } // operator != + + public static bool operator ==(string left, FormattedMultilineText right) + { + return !(right is null) && right.Equals(left); + } // operator == + + public static bool operator !=(string left, FormattedMultilineText right) + { + return !(left == right); + } // operator != + + #endregion + + #region Relational members: MultilineText + + public int CompareTo(FormattedMultilineText other) + { + if (ReferenceEquals(this, other)) return 0; + if (other is null) return 1; + return string.Compare(Text, other.Text, StringComparison.CurrentCulture); + } + + public int CompareTo(object obj) + { + if (obj is null) return 1; + if (ReferenceEquals(this, obj)) return 0; + switch (obj) + { + case FormattedMultilineText other: + return CompareTo(other); + case string text: + return CompareTo(text); + default: + throw new ArgumentException($"CompareTo: Object must be of type {nameof(FormattedMultilineText)} -or- {nameof(String)}"); + } // switch + } // CompareTo + + public static bool operator <(FormattedMultilineText left, FormattedMultilineText right) + { + return Comparer.Default.Compare(left, right) < 0; + } // operator < + + public static bool operator >(FormattedMultilineText left, FormattedMultilineText right) + { + return Comparer.Default.Compare(left, right) > 0; + } // operator > + + public static bool operator <=(FormattedMultilineText left, FormattedMultilineText right) + { + return Comparer.Default.Compare(left, right) <= 0; + } // operator <= + + public static bool operator >=(FormattedMultilineText left, FormattedMultilineText right) + { + return Comparer.Default.Compare(left, right) >= 0; + } // operator >= + + #endregion + + #region Relational members: string + + public int CompareTo(string other) + { + return (other is null) ? 1 : string.Compare(Text, other, StringComparison.CurrentCulture); + } // CompareTo + + #endregion + } // class MultilineText +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LibraryDependency.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LibraryDependency.cs new file mode 100644 index 00000000..8e1938f1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LibraryDependency.cs @@ -0,0 +1,53 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public sealed class LibraryDependency : LicensedComponentDependency, ICloneable + { + [XmlElement("File")] + public string Assembly { get; set; } + + public LicensedItemType Type { get; set; } + + public override string ToString() => $"{DependencyTypeMark}{Name}"; + + public LibraryDependency Clone() + { + var clone = new LibraryDependency + { + Assembly = Assembly + }; + CopyToDependency(clone); + + return clone; + } // Clone + + object ICloneable.Clone() => Clone(); + + public void Inherit([CanBeNull] LibraryDependency from) + { + if (from == null) return; + + Assembly ??= from.Assembly; + if (Type == LicensedItemType.Unknown) Type = from.Type; + + base.Inherit(from); + } // Inherit + } // class LibraryDependency +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/License.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/License.cs new file mode 100644 index 00000000..150f14df --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/License.cs @@ -0,0 +1,141 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public sealed class License : IXmlSerializable, IEquatable, ICloneable + { + public string Id { get; set; } + + public string Name { get; set; } + + public string Format { get; set; } + + public string Text { get; set; } + + public override string ToString() => Id; + + public License Clone() + { + return new License + { + Id = Id, + Name = Name, + Format = Format, + Text = Text + }; + } // Clone + + object ICloneable.Clone() => Clone(); + + public void Inherit(License from) + { + if (from == null) return; + + Id ??= from.Id; + Name ??= from.Name; + Format ??= from.Format; + Text ??= from.Format; + } // Inherit + + #region IEquatable + + public bool Equals(License other) + { + return string.Compare(Id, other?.Id, StringComparison.InvariantCulture) == 0; + } // Equals + + public override int GetHashCode() + { + unchecked + { + return 539060726 + Id.GetHashCode(); + } // unchecked + } // GetHashCode + + public override bool Equals(object obj) + { + if ((obj is null) || !(obj is License other)) return false; + + return Equals(other); + } // Equals + + public static bool operator ==(License left, License right) + { + if (ReferenceEquals(left, right)) return true; + return left?.Equals(right) ?? false; + } // operator == + + public static bool operator !=(License left, License right) + { + return !(left == right); + } // operator != + + #endregion + + #region IXmlSerializable + + XmlSchema IXmlSerializable.GetSchema() + { + return null; + } // IXmlSerializable.GetSchema + + void IXmlSerializable.ReadXml(XmlReader reader) + { + if (reader.MoveToAttribute("id")) + { + Id = reader.Value; + reader.MoveToElement(); + } // if + + if (reader.MoveToAttribute("name")) + { + Name = reader.Value; + reader.MoveToElement(); + } // if + + if (reader.MoveToAttribute("format")) + { + Format = reader.Value; + reader.MoveToElement(); + } // if + + Text = reader.ReadElementContentAsString(); + } // IXmlSerializable.ReadXml + + void IXmlSerializable.WriteXml(XmlWriter writer) + { + if (Id != null) writer.WriteAttributeString("id", Id); + if (Name != null) writer.WriteAttributeString("name", Name); + if (Format != null) writer.WriteAttributeString("format", Format); + + if (Text == null) return; + if (Text.Contains("'\r") || Text.Contains("\n")) + { + writer.WriteCData(Text); + } + else + { + writer.WriteString(Text); + } // if-else + } // IXmlSerializable.WriteXml + + #endregion + } // class License +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicenseAppliesTo.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicenseAppliesTo.cs new file mode 100644 index 00000000..991170cd --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicenseAppliesTo.cs @@ -0,0 +1,48 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public class LicenseAppliesTo: ICloneable + { + [XmlArrayItem("Library")] + public List Libraries { get; set; } + + [XmlArrayItem("Component")] + public List ThirdParty { get; set; } + + public LicenseAppliesTo Clone() + { + var clone = new LicenseAppliesTo(); + if (LibrariesSpecified) clone.Libraries = Libraries.Clone(); + if (ThirdPartySpecified) clone.ThirdParty = ThirdParty.Clone(); + + return clone; + } // Clone + + object ICloneable.Clone() => Clone(); + + public override string ToString() => $"{nameof(Libraries)}={(Libraries != null ? Libraries.Count.ToString(CultureInfo.InvariantCulture) : "")}; {nameof(ThirdParty)}={(ThirdParty != null ? ThirdParty.Count.ToString(CultureInfo.InvariantCulture) : "")}"; + + // avoid empty lists when serializing + public bool LibrariesSpecified => (Libraries != null) && (Libraries.Count > 0); + + public bool ThirdPartySpecified => (ThirdParty != null) && (ThirdParty.Count > 0); + } // class LicenseAppliesTo +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicenseUsage.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicenseUsage.cs new file mode 100644 index 00000000..897308e9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicenseUsage.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public class LicenseUsage: ICloneable + { + public License License { get; set; } + + public override string ToString() => $"{nameof(License.Id)} = {License?.ToString() ?? ""}"; + + public LicenseAppliesTo AppliesTo { get; set; } + + public LicenseUsage Clone() + { + return new LicenseUsage + { + License = License.Clone(), + AppliesTo = AppliesTo.Clone() + }; + } // Clone + + object ICloneable.Clone() => Clone(); + } // class LicenseUsage +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedComponent.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedComponent.cs new file mode 100644 index 00000000..2853e6d8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedComponent.cs @@ -0,0 +1,56 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public abstract class LicensedComponent + { + [XmlAttribute("name")] + public string Name { get; set; } + + [XmlElement("License")] + public string LicenseId { get; set; } + + public string Authors { get; set; } + + public string Copyright { get; set; } + + public FormattedMultilineText Remarks { get; set; } + + public void Inherit(LicensedComponent from) + { + if (from == null) return; + + Name ??= from.Name; + LicenseId ??= from.LicenseId; + Authors ??= from.Authors; + Copyright ??= from.Copyright; + Remarks ??= from.Remarks; + } // Inherit + + public override string ToString() => Name; + + protected void CopyToComponent(LicensedComponent other) + { + other.Name = Name; + other.LicenseId = LicenseId; + other.Authors = Authors; + other.Copyright = Copyright; + other.Remarks = Remarks?.Clone(); + } // CopyToComponent + } // class Component +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedComponentDependency.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedComponentDependency.cs new file mode 100644 index 00000000..0473bed3 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedComponentDependency.cs @@ -0,0 +1,53 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using JetBrains.Annotations; +using System.ComponentModel; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + public abstract class LicensedComponentDependency: LicensedComponent + { + [XmlAttribute("dependency")] + [DefaultValue(LicensedDependencyType.Direct)] + public LicensedDependencyType DependencyType { get; set; } + + [XmlAttribute("version")] + public string Version { get; set; } + + protected string DependencyTypeMark => DependencyType switch + { + LicensedDependencyType.Direct => null, + LicensedDependencyType.Indirect => "+", + LicensedDependencyType.Dynamic => "*", + _ => "?" + }; + + public void Inherit([CanBeNull] LicensedComponentDependency from) + { + if (from == null) return; + + if (DependencyType != LicensedDependencyType.Direct) DependencyType = from.DependencyType; + + base.Inherit(from); + } // Inherit + + protected void CopyToDependency(LicensedComponentDependency other) + { + other.DependencyType = DependencyType; + other.Version = Version; + CopyToComponent(other); + } // CopyToDependency + } // class ComponentDependency: +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedDependencyType.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedDependencyType.cs new file mode 100644 index 00000000..946d628f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedDependencyType.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + public enum LicensedDependencyType + { + [XmlEnum("direct")] + Direct = 0, + + [XmlEnum("dynamic")] + Dynamic = 5, // a.k.a. runtime + + [XmlEnum("indirect")] + Indirect = 10 + } // enum LicensedDependencyType +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedInstaller.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedInstaller.cs new file mode 100644 index 00000000..00087192 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedInstaller.cs @@ -0,0 +1,63 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + public class LicensedInstaller: LicensedProgram, ICloneable + { + public string Technology { get; set; } + + public override LicensedItemType Type => LicensedItemType.Installer; + + public new LicensedInstaller Clone() + { + return (LicensedInstaller) base.Clone(); + } // Clone + + object ICloneable.Clone() => Clone(); + + public void Inherit([CanBeNull] LicensedInstaller from) + { + if (from == null) return; + + Technology ??= from.Technology; + + ProtectedInherit(from); + } // Inherit + + public override void Inherit([CanBeNull] LicensedItem from) + { + if (from is LicensedInstaller installer) + { + Inherit(installer); + } + else + { + ProtectedInherit(from); + } // if-else + } // Override + + protected override LicensedItem CreateNewForCloning() + { + var result = new LicensedInstaller + { + Technology = Technology + }; + + return result; + } // CreateNewForCloning + } // class LicensedInstaller +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedItem.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedItem.cs new file mode 100644 index 00000000..f2e8b4d5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedItem.cs @@ -0,0 +1,109 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public abstract class LicensedItem : LicensedComponent, ICloneable + { + [XmlAttribute("file")] + public string Assembly { get; set; } + + public string Product { get; set; } + + [XmlElement("TermsAndConditions")] + public List TermsConditions { get; set; } + + public FormattedMultilineText Notes { get; set; } + + [XmlIgnore] + public abstract LicensedItemType Type { get; } + + public override string ToString() + { + return $"{Type}:{Name}"; + } // ToString + + public LicensedItem Clone() + { + var clone = CreateNewForCloning(); + clone.Assembly = Assembly; + clone.Product = Product; + clone.Notes = Notes?.Clone(); + if (TermsConditionsSpecified) + { + clone.TermsConditions = TermsConditions.Select(term => term.Clone()).ToList(); + } // if + + return clone; + } // Clone + + object ICloneable.Clone() => Clone(); + + public abstract void Inherit([CanBeNull] LicensedItem from); + + public void CopyTo(LibraryDependency item) => CopyToLibraryDependency(item); + + public void CopyTo(LicensedItem item) + { + if (item == null) return; + item.Assembly = Assembly; + item.Product = Product; + item.TermsConditions = TermsConditions.Clone(); + item.Notes = Notes.Clone(); + + CopyToComponent(item); + } // CopyTo + + public LibraryDependency ConvertToLibraryDependency() + { + var item = new LibraryDependency(); + CopyToLibraryDependency(item); + + return item; + } // ConvertTo + + public bool TermsConditionsSpecified => (TermsConditions != null) && (TermsConditions.Count > 0); + + protected abstract LicensedItem CreateNewForCloning(); + + protected virtual void CopyToLibraryDependency(LibraryDependency item) + { + item.Type = Type; + item.Name = Name; + item.Assembly = Assembly; + item.LicenseId = LicenseId; + item.Authors = Authors; + item.Copyright = Copyright; + item.Remarks = Remarks?.Clone(); + } // CopyToLibraryDependency + + protected void ProtectedInherit([CanBeNull] LicensedItem from) + { + if (from == null) return; + + Assembly ??= from.Assembly; + Product ??= from.Product; + TermsConditions = TermsAndConditions.Inherit(TermsConditions, from.TermsConditions); + Notes ??= from.Notes?.Clone(); + + Inherit((LicensedComponent)from); + } // ProtectedOverride + } // class LicensedItem +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedItemType.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedItemType.cs new file mode 100644 index 00000000..35939300 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedItemType.cs @@ -0,0 +1,24 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + public enum LicensedItemType + { + Unknown, + Library, + Program, + Installer, + Solution + } // enum LicensedItemType +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedLibrary.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedLibrary.cs new file mode 100644 index 00000000..b2970474 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedLibrary.cs @@ -0,0 +1,48 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public class LicensedLibrary: LicensedItem, ICloneable + { + public override LicensedItemType Type => LicensedItemType.Library; + + public new LicensedLibrary Clone() + { + return (LicensedLibrary)base.Clone(); + } // Clone + + public void Inherit([CanBeNull] LicensedLibrary from) + { + ProtectedInherit(from); + } // Inherit + + public override void Inherit([CanBeNull] LicensedItem from) + { + if (from is LicensedLibrary library) + { + Inherit(library); + } + else + { + ProtectedInherit(from); + } // if-else + } // Inherit + + protected override LicensedItem CreateNewForCloning() => new LicensedLibrary(); + } // class LicensedLibrary +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedProgram.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedProgram.cs new file mode 100644 index 00000000..a3287b91 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedProgram.cs @@ -0,0 +1,73 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Xml.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public class LicensedProgram: LicensedItem, ICloneable + { + [XmlAttribute("userInterface")] + [DefaultValue(true)] + public bool IsGuiApp { get; set; } + + public LicensedProgram() + { + IsGuiApp = true; + } // constructor + + public override LicensedItemType Type => LicensedItemType.Program; + + public new LicensedProgram Clone() + { + return (LicensedProgram)base.Clone(); + } // Clone + + public void CopyTo(LicensedProgram program) + { + if (program == null) return; + + program.IsGuiApp = IsGuiApp; + CopyTo((LicensedItem) program); + } // CopyTo + + public void Inherit([CanBeNull] LicensedProgram from) + { + if (from == null) return; + + if (!IsGuiApp) IsGuiApp = from.IsGuiApp; + ProtectedInherit(from); + } // Inherit + + public override void Inherit([CanBeNull] LicensedItem from) + { + if (from is LicensedProgram program) + { + Inherit(program); + } + else + { + ProtectedInherit(from); + } // if-else + } // Override + + protected override LicensedItem CreateNewForCloning() => new LicensedProgram + { + IsGuiApp = IsGuiApp + }; + } // class LicensedProgram +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedSolution.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedSolution.cs new file mode 100644 index 00000000..1cd71ebb --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensedSolution.cs @@ -0,0 +1,46 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + public class LicensedSolution: LicensedLibrary + { + public override LicensedItemType Type => LicensedItemType.Solution; + + public new LicensedSolution Clone() + { + return (LicensedSolution)base.Clone(); + } // Clone + + public void Inherit([CanBeNull] LicensedSolution from) + { + ProtectedInherit(from); + } // Inherit + + public override void Inherit([CanBeNull] LicensedItem from) + { + if (from is LicensedSolution solution) + { + Inherit(solution); + } + else + { + ProtectedInherit(from); + } // if-else + } // Inherit + + protected override LicensedItem CreateNewForCloning() => new LicensedSolution(); + } // class LicensedSolution +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensesPool.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensesPool.cs new file mode 100644 index 00000000..34df5f8e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensesPool.cs @@ -0,0 +1,44 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + [XmlRoot("Licenses.Pool", Namespace = LicensingData.Namespace)] + public class LicensesPool: ICloneable + { + [XmlElement("License")] + public List Licenses { get; set; } + + public License GetLicense(string licenseId) + { + if ((Licenses == null) || (Licenses.Count == 0)) return null; + return Licenses.FirstOrDefault(license => string.Equals(license.Id, licenseId, StringComparison.InvariantCultureIgnoreCase)); + } // GetLicense + + public LicensesPool Clone() + { + return new LicensesPool + { + Licenses = Licenses.Clone() + }; + } // Clone + + object ICloneable.Clone() => Clone(); + } // class LicensesPool +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingData.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingData.cs new file mode 100644 index 00000000..dc9795fd --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingData.cs @@ -0,0 +1,70 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + [XmlRoot("Licensing", Namespace = Namespace, IsNullable = false)] + public class LicensingData: ICloneable + { + public const string Namespace = "http://alphacentaury.org/Licensing.Data/v1"; + + [XmlElement("Library", typeof(LicensedLibrary))] + [XmlElement("Program", typeof(LicensedProgram))] + [XmlElement("Installer", typeof(LicensedInstaller))] + [XmlElement("Solution", typeof(LicensedSolution))] + public LicensedItem Licensed { get; set; } + + public LicensingDependencies Dependencies { get; set; } + + public List Licenses { get; set; } + + [XmlIgnore] + public string FilePath { get; set; } + + public override string ToString() + { + return Licensed?.ToString() ?? ""; + } // ToString + + public License GetLicense(string licenseId) + { + if (!LicensesSpecified || string.IsNullOrEmpty(licenseId)) return null; + return Licenses.FirstOrDefault(license => string.Equals(license.Id, licenseId, StringComparison.InvariantCultureIgnoreCase)); + } // GetLicense + + public LicensingData Clone() + { + var clone = new LicensingData + { + Licensed = Licensed.Clone(), + Dependencies = Dependencies.Clone(), + Licenses = Licenses.Clone() + }; + + return clone; + } // Clone + + object ICloneable.Clone() => Clone(); + + public bool DependenciesSpecified => (Dependencies != null) && (Dependencies.LibrariesSpecified || Dependencies.ThirdPartySpecified); + + // avoid serializing empty lists + public bool LicensesSpecified => (Licenses != null) && (Licenses.Count > 0); + } // class LicensingData +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingDefaults.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingDefaults.cs new file mode 100644 index 00000000..f52cfa66 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingDefaults.cs @@ -0,0 +1,84 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom; +using System.Collections.Generic; +using System.Xml.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + [XmlRoot("Licensing.Defaults", Namespace = LicensingData.Namespace)] + public class LicensingDefaults : ICloneable + { + public class CommonDefaults : LicensedItem + { + public override LicensedItemType Type => LicensedItemType.Unknown; + + public override void Inherit(LicensedItem from) => ProtectedInherit(from); + + protected override LicensedItem CreateNewForCloning() => new CommonDefaults(); + } // class CommonDefaults + + [XmlAttribute("appliesTo")] + public string AppliesTo { get; set; } + + [XmlAttribute("inheritsFrom")] + public string InheritsFrom { get; set; } + + [XmlElement("Common", typeof(CommonDefaults))] + public CommonDefaults Common { get; set; } + + [XmlElement("Libraries", typeof(LicensedLibrary))] + public LicensedLibrary ForLibraries { get; set; } + + [XmlElement("Programs", typeof(LicensedProgram))] + public LicensedProgram ForPrograms { get; set; } + + [XmlArrayItem("License")] + public List Licenses { get; set; } + + public void Inherit([CanBeNull] LicensingDefaults inheritFrom) + { + Common ??= new CommonDefaults(); + ForLibraries ??= new LicensedLibrary(); + ForPrograms ??= new LicensedProgram(); + + Common.Inherit(inheritFrom?.Common); + + ForLibraries.Inherit(Common); + ForLibraries.Inherit(inheritFrom?.ForLibraries); + + ForPrograms.Inherit(Common); + ForPrograms.Inherit(inheritFrom?.ForPrograms); + } // Inherit + + public LicensingDefaults Clone() + { + return new LicensingDefaults + { + AppliesTo = AppliesTo, + ForLibraries = ForLibraries.Clone(), + ForPrograms = ForPrograms.Clone(), + Licenses = Licenses.Clone() + }; + } // Clone + + object ICloneable.Clone() => Clone(); + + // avoid empty list when serializing + public bool LicensesSpecified => (Licenses != null) && (Licenses.Count > 0); + } // class LicensingDefaults +} // class LicensingDefaults diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingDependencies.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingDependencies.cs new file mode 100644 index 00000000..73b2fb48 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingDependencies.cs @@ -0,0 +1,49 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public sealed class LicensingDependencies: ICloneable + { + [XmlArrayItem("Library")] + public List Libraries { get; set; } + + [XmlArrayItem("Component")] + public List ThirdParty { get; set; } + + public override string ToString() => $"{nameof(Libraries)}={(Libraries != null ? Libraries.Count.ToString(CultureInfo.InvariantCulture) : "")}; {nameof(ThirdParty)}={(ThirdParty != null ? ThirdParty.Count.ToString(CultureInfo.InvariantCulture) : "")}"; + + public LicensingDependencies Clone() + { + return new LicensingDependencies + { + Libraries = LibrariesSpecified ? Libraries.Clone() : null, + ThirdParty = ThirdPartySpecified ? ThirdParty.Clone() : null, + }; + } // Clone + + object ICloneable.Clone() => Clone(); + + // avoid serializing empty lists + public bool LibrariesSpecified => (Libraries != null) && (Libraries.Count > 0); + + public bool ThirdPartySpecified => (ThirdParty != null) && (ThirdParty.Count > 0); + } // class LicensingDependencies +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingThirdPartyPool.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingThirdPartyPool.cs new file mode 100644 index 00000000..bce1eb22 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingThirdPartyPool.cs @@ -0,0 +1,64 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + [XmlRoot("Licensing.ThirdParty.Pool", Namespace = LicensingData.Namespace)] + + public class LicensingThirdPartyPool: ICloneable + { + private IReadOnlyDictionary _components; + + [XmlElement("Component")] + public List Components { get; set; } + + public bool ComponentsSpecified => (Components != null) && (Components.Count > 0); + + public ThirdPartyDependency this[[CanBeNull] ThirdPartyDependency component] => ComponentsDictionary.TryGetValue(GetComponentKey(component), out var value) ? value : null; + + public LicensingThirdPartyPool Clone() + { + return new LicensingThirdPartyPool + { + Components = ComponentsSpecified ? Components.Clone() : null + }; + } // Clone + + object ICloneable.Clone() => Clone(); + + private IReadOnlyDictionary ComponentsDictionary + { + get + { + if (_components != null) return _components; + + _components = ComponentsSpecified switch + { + true => Components.ToDictionary(GetComponentKey), + false => new Dictionary() + }; + + return _components; + } // get + } // ComponentsDictionary + + private string GetComponentKey([CanBeNull] ThirdPartyDependency component) => (component == null)? "" : component.GetKey(); + } // class LicensingThirdPartyPool +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingUsage.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingUsage.cs new file mode 100644 index 00000000..ccbd7506 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/LicensingUsage.cs @@ -0,0 +1,48 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + [XmlRoot("Licensing.Usage", Namespace = LicensingData.Namespace)] + + public class LicensingUsage: ICloneable + { + [XmlElement("Library", typeof(LicensedLibrary))] + [XmlElement("Program", typeof(LicensedProgram))] + [XmlElement("Installer", typeof(LicensedInstaller))] + public LicensedItem Licensed { get; set; } + + [XmlElement("Usage")] + public List Usage { get; set; } + + public override string ToString() => (Usage != null) ? $"{nameof(Usage.Count)} = {Usage.Count}" : ""; + + public LicensingUsage Clone() + { + return new LicensingUsage + { + Licensed = Licensed.Clone(), + Usage = UsageSpecified ? Usage.Clone() : null + }; + } // Clone + + object ICloneable.Clone() => Clone(); + + public bool UsageSpecified => (Usage != null) && (Usage.Count > 0); + } // ReversedLicensingFile +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/TermsAndConditions.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/TermsAndConditions.cs new file mode 100644 index 00000000..014abf02 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/TermsAndConditions.cs @@ -0,0 +1,95 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using System.Xml.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public class TermsAndConditions: FormattedMultilineText, ICloneable + { + [XmlAttribute("language")] + public string Language { set; get; } + + public new TermsAndConditions Clone() + { + var clone = new TermsAndConditions + { + Language = Language + }; + CopyTo(clone); + + return clone; + } // Clone + + object ICloneable.Clone() => Clone(); + + public void CopyTo(TermsAndConditions other) + { + other.Language = Language; + base.CopyTo(other); + } // CopyTo + + public static List Inherit([CanBeNull] List list, [CanBeNull]IList from) + { + if (from == null) return null; + + if ((list is null) || (list.Count == 0)) + { + return from.Clone(); + } // if + + var d = new HashSet(StringComparer.InvariantCultureIgnoreCase); + foreach (var terms in list) + { + d.Add(terms.Language ?? ""); + } // foreach + + foreach (var fromTerms in from) + { + if (d.Contains(fromTerms.Language ?? "")) continue; + + d.Add(fromTerms.Language ?? ""); + list.Add(fromTerms.Clone()); + } // foreach + + return list; + } // if + + #region Overrides of FormattedMultilineText + + protected override void ReadXml(XmlReader reader) + { + if (reader.MoveToAttribute("language")) + { + Language = reader.Value; + reader.MoveToElement(); + } // if + + base.ReadXml(reader); + } // ReadXml + + protected override void WriteXml(XmlWriter writer) + { + if (Language != null) writer.WriteAttributeString("language", Language); + base.WriteXml(writer); + } // WriteXml + + #endregion + } // class TermsAndConditions +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/ThirdPartyDependency.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/ThirdPartyDependency.cs new file mode 100644 index 00000000..cd142630 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/ThirdPartyDependency.cs @@ -0,0 +1,98 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + [Serializable] + public sealed class ThirdPartyDependency: LicensedComponentDependency, ICloneable, IEquatable + { + [XmlAttribute("type")] + [DefaultValue(ThirdPartyDependencyType.Other)] + public ThirdPartyDependencyType Type { get; set; } + + public string Description { get; set; } + + public override string ToString() => $"{DependencyTypeMark}{Type}:{Name}"; + + public ThirdPartyDependency Clone() + { + var clone = new ThirdPartyDependency + { + Type = Type, + Description = Description, + }; + CopyToDependency(clone); + + return clone; + } // Clone + + object ICloneable.Clone() => Clone(); + + #region Equality members + + public bool Equals(ThirdPartyDependency x, ThirdPartyDependency y) + { + return (x?.Equals(y)) ?? false; + } // Equals + + public bool Equals(ThirdPartyDependency other) => Equals(other, StringComparison.InvariantCulture); + + public bool Equals(ThirdPartyDependency other, StringComparison stringComparison) + { + if (other is null) return false; + if (ReferenceEquals(this, other)) return true; + + if (Type != other.Type) return false; + if (LicenseId != other.LicenseId) return false; + if (!string.Equals(Name, other.Name, stringComparison)) return false; + if (!string.Equals(Version, other.Version, StringComparison.InvariantCultureIgnoreCase)) return false; + if (!string.Equals(LicenseId, other.LicenseId, StringComparison.InvariantCultureIgnoreCase)) return false; + if (!string.Equals(Copyright, other.Copyright, stringComparison)) return false; + if (!string.Equals(Authors, other.Authors, stringComparison)) return false; + if (!string.Equals(Description, other.Description, stringComparison)) return false; + if (!string.Equals(Remarks?.Text, other.Remarks?.Text, stringComparison)) return false; + if (!string.Equals(Remarks?.Format, other.Remarks?.Format, stringComparison)) return false; + + return true; + } // Equals + + public override bool Equals(object obj) + { + return ReferenceEquals(this, obj) || (obj is ThirdPartyDependency other && Equals(other)); + } // Equals + + public override int GetHashCode() + { + return StringComparer.CurrentCulture.GetHashCode(GetKey()); + } // GetHashCode + + public string GetKey() => Type + "~" + Name + (string.IsNullOrEmpty(Version) ? "" : " #") + Version; + + public static bool operator ==(ThirdPartyDependency left, ThirdPartyDependency right) + { + if (ReferenceEquals(left, right)) return true; + return !(left is null) && left.Equals(right); + } // operator == + + public static bool operator !=(ThirdPartyDependency left, ThirdPartyDependency right) + { + return !(left == right); + } // operator != + + #endregion + } // class ThirdPartyDependency +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/ThirdPartyDependencyType.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/ThirdPartyDependencyType.cs new file mode 100644 index 00000000..35f4b4b1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/Serialization/ThirdPartyDependencyType.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Xml.Serialization; + +namespace AlphaCentaury.Licensing.Data.Serialization +{ + public enum ThirdPartyDependencyType + { + [XmlEnum("other")] + Other = 0, + + [XmlEnum("nuget")] + NugetPackage, + + [XmlEnum("library")] + Library, + + [XmlEnum("images")] + ImageLibrary, + + [XmlEnum("code")] + SourceCode, + } // enum ThirdPartyDependencyType +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/ThirdPartyDependencyNameComparer.cs b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/ThirdPartyDependencyNameComparer.cs new file mode 100644 index 00000000..f561cda9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/ThirdPartyDependencyNameComparer.cs @@ -0,0 +1,69 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using AlphaCentaury.Licensing.Data.Serialization; + +namespace AlphaCentaury.Licensing.Data +{ + public class ThirdPartyDependencyNameComparer : IEqualityComparer, IComparer + { + private readonly StringComparison _comparisonType; + + public ThirdPartyDependencyNameComparer() + { + _comparisonType = StringComparison.InvariantCulture; + } // constructor + + public ThirdPartyDependencyNameComparer(StringComparison comparisonType) + { + _comparisonType = comparisonType; + } // constructor + + #region Implementation of IEqualityComparer + + public bool Equals(ThirdPartyDependency x, ThirdPartyDependency y) + { + if (ReferenceEquals(x, y)) return true; + if (x == null) return false; + if (y == null) return false; + + if (x.Type != y.Type) return false; + if (!string.Equals(x.LicenseId, y.LicenseId, StringComparison.InvariantCultureIgnoreCase)) return false; + return string.Equals(x?.Name, y?.Name, _comparisonType); + } // Equals + + public int GetHashCode(ThirdPartyDependency obj) + { + return obj.Name.GetHashCode(); + } // GetHashCode + + #endregion + + #region Implementation of IComparer + + public int Compare(ThirdPartyDependency x, ThirdPartyDependency y) + { + if (ReferenceEquals(x, y)) return 0; + if (x == null) return -1; + if (y == null) return 1; + + if (x.Type != y.Type) return (int)(x.Type - y.Type); + var compare = string.Compare(x.LicenseId, y.LicenseId, StringComparison.InvariantCultureIgnoreCase); + return compare != 0 ? compare : string.Compare(x.Name, y.Name, _comparisonType); + } // Compare + + #endregion + } // class ThirdPartyLibraryComparer +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/license.txt b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/license.txt new file mode 100644 index 00000000..9bb8ebdf --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/license.txt @@ -0,0 +1,98 @@ +############################################################################## +## +## Library 'AlphaCentaury.Licensing.Data' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. AlphaCentaury.Licensing.Data +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/licensing.xml b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/licensing.xml new file mode 100644 index 00000000..3a79e508 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/licensing.xml @@ -0,0 +1,117 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/packages.config b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/packages.config new file mode 100644 index 00000000..52cb031c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/AlphaCentaury.Licensing.Data/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/EPG/ProgramEpgInfo.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/EPG/ProgramEpgInfo.cs new file mode 100644 index 00000000..e6782967 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/EPG/ProgramEpgInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; +using IpTviewr.Services.EpgDiscovery; + +namespace IpTviewr.IpTvServices.EPG +{ + public class ProgramEpgInfo + { + public BroadcastDiscoveryRoot Service + { + get; + set; + } // Service + + public EpgProgram Base + { + get; + set; + } // Base + + public EpgProgramExtended Extended + { + get; + set; + } // Extended + } // ProgramEpgInfo +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/EpgProviderCapabilities.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/EpgProviderCapabilities.cs new file mode 100644 index 00000000..50ea7de6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/EpgProviderCapabilities.cs @@ -0,0 +1,24 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.IpTvServices +{ + [Flags] + public enum EpgProviderCapabilities + { + ExtendedInfo = 0x01, + ProgramThumbnail = 0x02, + } // enum EpgProviderCapabilities +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/IEpgInfoProvider.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/IEpgInfoProvider.cs new file mode 100644 index 00000000..4335b18b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/IEpgInfoProvider.cs @@ -0,0 +1,24 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.IpTvServices +{ + public interface IEpgInfoProvider + { + EpgProviderCapabilities Capabilities { get; } + + //EpgProgramExtended GetEpgInfo(UiBroadcastService service, EpgProgram epgEvent, bool portrait); + + //string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgProgram epgEvent, bool portrait); + } // interface IEpgInfoProvider +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/ITvService.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/ITvService.cs new file mode 100644 index 00000000..0ae07e4b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/ITvService.cs @@ -0,0 +1,26 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Configuration; + +namespace IpTviewr.IpTvServices +{ + public interface ITvService + { + IEpgInfoProvider EpgInfo { get; } + + ITvServiceTexts Texts { get; } + + InitializationResult Initialize(); + } // interface ITvService +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/ITvServiceProviderTexts.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/ITvServiceProviderTexts.cs new file mode 100644 index 00000000..4f9f994c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/ITvServiceProviderTexts.cs @@ -0,0 +1,48 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.IpTvServices +{ + public interface ITvServiceProviderTexts + { + string MenuEntry { get; } + + string MenuSelect { get; } + + string MenuDetails { get; } + + string NoSelection { get; } + + string ListRefreshError { get; } + + string ObtainingList { get; } + + string ParsingList { get; } + + string PropertiesCaption { get; } + + string LogoLoadError { get; } + + string LogoNotFound { get; } + + string UnknownDisplayDescription { get; } + + // UiServices.Discovery.Texts: FormatProviderFriendlyDisplayName + string FormatFriendlyName { get; } + + // UiServices.Discovery.Texts: FormatProviderUnknownDisplayName + string FormatUnknownName { get; } + + string SelectCaption { get; } + } // interface ITvServiceProviderTexts +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/ITvServiceTexts.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/ITvServiceTexts.cs new file mode 100644 index 00000000..a57865ce --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/ITvServiceTexts.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.IpTvServices +{ + public interface ITvServiceTexts + { + ITvServiceProviderTexts Provider { get; } + } // interface ITvServiceTexts +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Implementation/DvbIpTvService.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Implementation/DvbIpTvService.cs new file mode 100644 index 00000000..226fe0b1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Implementation/DvbIpTvService.cs @@ -0,0 +1,27 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.IpTvServices.Implementation +{ + public sealed class DvbIpTvService : IpTvService + { + public override IEpgInfoProvider EpgInfo => null; + + /* + public override InitializationResult Initialize() + { + throw new NotImplementedException(); + } + */ + } +} diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Implementation/ServiceProviderTexts.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Implementation/ServiceProviderTexts.cs new file mode 100644 index 00000000..abd7e532 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Implementation/ServiceProviderTexts.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.IpTvServices.Properties; + +namespace IpTviewr.IpTvServices.Implementation +{ + public class ServiceProviderTexts : ITvServiceProviderTexts + { + public string MenuEntry => Texts.ProviderMenuEntry; + public string MenuSelect => Texts.ProviderMenuSelect; + public string MenuDetails => Texts.ProviderMenuDetails; + public string NoSelection => Texts.ProviderNoSelection; + public string ListRefreshError => Texts.ProviderListRefreshError; + public string ObtainingList => Texts.ProviderObtainingList; + public string ParsingList => Texts.ProviderParsingList; + public string PropertiesCaption => Texts.ProviderPropertiesCaption; + public string LogoLoadError => Texts.ProviderLogoLoadError; + public string LogoNotFound => Texts.ProviderLogoNotFound; + public string UnknownDisplayDescription => Texts.ProviderUnknownDisplayDescription; + public string FormatFriendlyName => Texts.ProviderFormatFriendlyName; + public string FormatUnknownName => Texts.ProviderFormatUnknownName; + public string SelectCaption => Texts.ProviderSelectCaption; + } // class ServiceProviderTexts; +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Implementation/ServiceTexts.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Implementation/ServiceTexts.cs new file mode 100644 index 00000000..f4985c67 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Implementation/ServiceTexts.cs @@ -0,0 +1,27 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.IpTvServices.Implementation +{ + public class ServiceTexts: ITvServiceTexts + { + public ITvServiceProviderTexts Provider { get; private set; } + + public void Initialize() + { + Provider = GetProviderTexts(); + } // Initialize + + protected virtual ITvServiceProviderTexts GetProviderTexts() => new ServiceProviderTexts(); + } // class ServiceTexts +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/IpTvService.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/IpTvService.cs new file mode 100644 index 00000000..e284f56e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/IpTvService.cs @@ -0,0 +1,48 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Configuration; +using IpTviewr.IpTvServices.Implementation; + +namespace IpTviewr.IpTvServices +{ + public abstract class IpTvService : ITvService + { + #region ITvService implementation + + public abstract IEpgInfoProvider EpgInfo { get; } + + public ITvServiceTexts Texts { get; private set; } + + public virtual InitializationResult Initialize() + { + Texts = CreateServiceTexts(); + if (Texts is ServiceTexts texts) + { + texts.Initialize(); + } // if + + return InitializationResult.Ok; + } // Initialize + + #endregion + + protected virtual ITvServiceTexts CreateServiceTexts() + { + var result = new ServiceTexts(); + result.Initialize(); + + return result; + } // CreateServiceTexts + } // class IpTvService +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/IpTviewr.IpTvServices.csproj b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/IpTviewr.IpTvServices.csproj new file mode 100644 index 00000000..02e1497d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/IpTviewr.IpTvServices.csproj @@ -0,0 +1,100 @@ + + + + + Debug + AnyCPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA} + Library + Properties + IpTviewr.IpTvServices + IpTViewr.IpTvServices + v4.6.2 + 512 + SAK + SAK + SAK + SAK + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + + + + + + True + True + Texts.resx + + + + + + + + + {B91C438D-0333-4D06-86CD-74CE82DF6F40} + Etsi.Ts102034 + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common + + + {5A171DBB-855C-452B-93C6-229C7AA6C7A6} + Services.EpgDiscovery + + + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/LICENSE.ES.MD new file mode 100644 index 00000000..f013df67 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/LICENSE.ES.MD @@ -0,0 +1,132 @@ +# Biblioteca 'IpTViewr.IpTvServices' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. Services.EpgDiscovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/LICENSE.MD new file mode 100644 index 00000000..89206296 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/LICENSE.MD @@ -0,0 +1,104 @@ +# Library 'IpTViewr.IpTvServices' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. Services.EpgDiscovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/License.txt b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/License.txt new file mode 100644 index 00000000..fbaf8fa1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/License.txt @@ -0,0 +1,118 @@ +############################################################################## +## +## Library 'IpTViewr.IpTvServices' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. Services.EpgDiscovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..c3faa8d1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IpTViewr.IpTvService")] +[assembly: AssemblyDescription("IpTviewr.Core.IpTvService")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("64e2117e-9b83-4d77-8cf0-243bc3864598")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/Texts.Designer.cs new file mode 100644 index 00000000..f6683350 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/Texts.Designer.cs @@ -0,0 +1,192 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.IpTvServices.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.IpTvServices.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to {0} (*). + /// + internal static string ProviderFormatFriendlyName { + get { + return ResourceManager.GetString("ProviderFormatFriendlyName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to (Name not provided) {0}. + /// + internal static string ProviderFormatUnknownName { + get { + return ResourceManager.GetString("ProviderFormatUnknownName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to obtain the list of service providers.. + /// + internal static string ProviderListRefreshError { + get { + return ResourceManager.GetString("ProviderListRefreshError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load provider logo file <{0}>.. + /// + internal static string ProviderLogoLoadError { + get { + return ResourceManager.GetString("ProviderLogoLoadError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Provider logo file <{0}> not found.. + /// + internal static string ProviderLogoNotFound { + get { + return ResourceManager.GetString("ProviderLogoNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Show technical &details.... + /// + internal static string ProviderMenuDetails { + get { + return ResourceManager.GetString("ProviderMenuDetails", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to &Provider. + /// + internal static string ProviderMenuEntry { + get { + return ResourceManager.GetString("ProviderMenuEntry", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to &Select provider.... + /// + internal static string ProviderMenuSelect { + get { + return ResourceManager.GetString("ProviderMenuSelect", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No service provider has been selected.. + /// + internal static string ProviderNoSelection { + get { + return ResourceManager.GetString("ProviderNoSelection", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Obtaining the list of service providers.... + /// + internal static string ProviderObtainingList { + get { + return ResourceManager.GetString("ProviderObtainingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Parsing and extracting the list of providers.... + /// + internal static string ProviderParsingList { + get { + return ResourceManager.GetString("ProviderParsingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Properties of service provider. + /// + internal static string ProviderPropertiesCaption { + get { + return ResourceManager.GetString("ProviderPropertiesCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Select service provider. + /// + internal static string ProviderSelectCaption { + get { + return ResourceManager.GetString("ProviderSelectCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No description is available for this service provider.. + /// + internal static string ProviderUnknownDisplayDescription { + get { + return ResourceManager.GetString("ProviderUnknownDisplayDescription", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/Texts.es.resx new file mode 100644 index 00000000..ea5ac88b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/Texts.es.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} (*) + + + (Sin nombre) {0} + + + No ha sido posible obtener la lista de proveedores de servicios. + + + Error al cargar el archivo con el logo del proveedor <{0}>. + + + El archivo con el logo del proveedor <{0}> no existe. + + + Ver &detalles técnicos... + + + &Proveedor + + + &Seleccionar proveedor... + + + No se ha seleccionado un proveedor de servicios. + + + Obteniendo la lista de proveedores de servicios... + + + Analizando y extrayendo la lista de proveedores... + + + Propiedades del proveedor de servicios + + + Seleccionar proveedor de servicios + + + No existe una descripción de este proveedor de servicios. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/Texts.resx new file mode 100644 index 00000000..0ec8932a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/Properties/Texts.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} (*) + + + (Name not provided) {0} + + + Unable to obtain the list of service providers. + + + Unable to load provider logo file <{0}>. + + + Provider logo file <{0}> not found. + + + Show technical &details... + + + &Provider + + + &Select provider... + + + No service provider has been selected. + + + Obtaining the list of service providers... + + + Parsing and extracting the list of providers... + + + Properties of service provider + + + Select service provider + + + No description is available for this service provider. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/licensing.xml b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/licensing.xml new file mode 100644 index 00000000..8059016a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Core.IpTvProvider/licensing.xml @@ -0,0 +1,147 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/DvbStpClient/DvbStpBaseClient.cs b/1.5 'Kruger 60'/Assemblies/DvbStpClient/DvbStpBaseClient.cs new file mode 100644 index 00000000..2837f087 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/DvbStpClient/DvbStpBaseClient.cs @@ -0,0 +1,234 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Threading; + +namespace IpTviewr.DvbStp.Client +{ + public abstract class DvbStpBaseClient + { + public const int UdpMaxDatagramSize = 0xFFFF; + + protected DvbStpBaseClient(IPAddress ip, int port) : this(ip, port, CancellationToken.None) + { + // no-op + } // constructor + + protected DvbStpBaseClient(IPAddress ip, int port, CancellationToken cancellationToken) + { + MulticastIpAddress = ip; + MulticastPort = port; + ReceiveDatagramTimeout = 20000; // 20 seconds (20 s * 1,000 ms) + OperationTimeout = 600000; // 10 minutes (10 m * 60 s * 1,000 ms) + CancellationToken = cancellationToken; + } // constructor + + public IPAddress MulticastIpAddress + { + get; + } // MulticastIpAddress + + public int MulticastPort + { + get; + } // MulticastPort + + public CancellationToken CancellationToken + { + get; + } // CancellationToken + + public int ReceiveDatagramTimeout // in milliseconds + { + get; + set; + } // ReceiveDatagramTimeout + + public int DatagramCount + { + get; + private set; + } // public + + public bool CancelRequested => CancellationToken.IsCancellationRequested; + + public DateTime StartTime + { + get; + private set; + } // StartTime + + public DateTime NoDataTimeoutStartTime + { + get; + private set; + } // NoDataTimeoutStartTime + + public int NoDataTimeout // in milliseconds + { + get; + set; + } // NoDataTimeout + + public int OperationTimeout // in milliseconds + { + get; + set; + } // OperationTimeout + + protected Socket Socket + { + get; + private set; + } // Socket + + protected byte[] DatagramData + { + get; + private set; + } // DatagramData + + protected DvbStpHeader Header + { + get; + private set; + } // Header + + protected int ReceivedBytes + { + get; + private set; + } // ReceivedBytes + + public virtual void Close() + { + if (Socket == null) return; + + Socket.Close(); + DatagramData = null; + Header = null; + } // Close + + protected void ReceiveData() + { + Connect(); + + while (!CancelRequested) + { + CheckTimeouts(); + + Receive(); + if (Header.Version != 0) continue; + + // filter received section + if (FilterSection()) continue; + + // requested payloadId & segmentId found! + DecodeHeader(); + + // process data + ProcessReceivedData(); + + // got all expected data? + if (EndReceptionLoop) + { + break; + } // if + } // while + } // ReceiveData + + protected virtual bool FilterSection() + { + return false; + } // FilterSection + + protected abstract void ProcessReceivedData(); + + protected bool EndReceptionLoop + { + get; + set; + } // EndReceptionLoop + + protected virtual void Connect() + { + if (Socket != null) return; + + DatagramData = new byte[UdpMaxDatagramSize]; + + var s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + s.ReceiveTimeout = ReceiveDatagramTimeout; + s.Bind(new IPEndPoint(IPAddress.Any, MulticastPort)); + var multicastData = new MulticastOption(MulticastIpAddress, IPAddress.Any); + s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, multicastData); + + Socket = s; + StartNoDataTimeout(); + } // Connect + + protected void Receive(bool decodeHeader = false) + { + ReceivedBytes = Socket.Receive(DatagramData); + DatagramCount += 1; + + if (ReceivedBytes < DvbStpHeader.MinHeaderLength) throw new InvalidDataException("ReceivedBytes < MinHeaderLength"); + + Header = (decodeHeader)? DvbStpHeader.Decode(DatagramData, ReceivedBytes) : DvbStpHeader.PartialDecode(DatagramData); + } // Receive + + protected void DecodeHeader() + { + Header.CompleteDecoding(DatagramData, ReceivedBytes); + if ((Header.Encryption != 0) || (Header.Compression != DvbStpHeader.CompressionMethod.None)) + { + throw new NotImplementedException(); + } // if + } // DecodeHeader + + #region Timeout handling + + private void StartNoDataTimeout() + { + StartTime = DateTime.Now; + NoDataTimeoutStartTime = StartTime; + } // StartTimeout + + protected void ResetNoDataTimeout() + { + NoDataTimeoutStartTime = DateTime.Now; + } // ResetNoDataTimeout + + protected void CheckTimeouts() + { + TimeSpan elapsed; + + if (NoDataTimeout > 0) + { + elapsed = DateTime.Now - NoDataTimeoutStartTime; + if (elapsed.TotalMilliseconds > NoDataTimeout) throw new TimeoutException(); + } // if + if (OperationTimeout > 0) + { + elapsed = DateTime.Now - StartTime; + if (elapsed.TotalMilliseconds > OperationTimeout) throw new TimeoutException(); + } // if + } // CheckTimeouts + + #endregion + } // class DvbStpBaseClient +} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj b/1.5 'Kruger 60'/Assemblies/DvbStpClient/DvbStpClient.csproj similarity index 80% rename from 1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj rename to 1.5 'Kruger 60'/Assemblies/DvbStpClient/DvbStpClient.csproj index 5a2b24b7..9f0fedfb 100644 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpClient.csproj +++ b/1.5 'Kruger 60'/Assemblies/DvbStpClient/DvbStpClient.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.DvbStp.Client DvbStpClient - v4.5.2 + v4.6.2 512 SAK SAK @@ -37,23 +37,25 @@ false + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + - - - - - - + Properties\AssemblySolutionInfo.cs + + + + @@ -70,6 +72,12 @@ + + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/DvbStpClient/packages.config b/1.5 'Kruger 60'/Assemblies/DvbStpClient/packages.config new file mode 100644 index 00000000..3d5fd2ef --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/DvbStpClient/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/DVB-IPTV_Factsheet.pdf b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/DVB-IPTV_Factsheet.pdf similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/DVB-IPTV_Factsheet.pdf rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/DVB-IPTV_Factsheet.pdf diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-01-01.pdf b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-01-01.pdf similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-01-01.pdf rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-01-01.pdf diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-01-01.zip b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-01-01.zip similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-01-01.zip rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-01-01.zip diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-02-01.pdf b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-02-01.pdf similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-02-01.pdf rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-02-01.pdf diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-02-01.zip b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-02-01.zip similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-02-01.zip rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-02-01.zip diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-03-01.pdf b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-03-01.pdf similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-03-01.pdf rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-03-01.pdf diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-03-01.zip b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-03-01.zip similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-03-01.zip rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-03-01.zip diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-04-01.pdf b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-04-01.pdf similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-04-01.pdf rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-04-01.pdf diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-04-01.zip b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-04-01.zip similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-04-01.zip rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-04-01.zip diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-05-01.pdf b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-05-01.pdf similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-05-01.pdf rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-05-01.pdf diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-05-01.zip b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-05-01.zip similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Docs/TS 102 034 v01-05-01.zip rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Docs/TS 102 034 v01-05-01.zip diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Etsi.Ts102034.csproj b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Etsi.Ts102034.csproj similarity index 97% rename from 1.5 'Kruger 60'/Etsi.Ts102034/Etsi.Ts102034.csproj rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Etsi.Ts102034.csproj index 3874a2f3..f9a85837 100644 --- a/1.5 'Kruger 60'/Etsi.Ts102034/Etsi.Ts102034.csproj +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Etsi.Ts102034.csproj @@ -9,7 +9,7 @@ Properties Etsi.Ts102034 Etsi.Ts102034 - v4.5.2 + v4.6.2 512 SAK SAK @@ -38,14 +38,10 @@ - - - - - + Properties\AssemblySolutionInfo.cs @@ -128,10 +124,13 @@ + + + diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/LICENSE.ES.MD new file mode 100644 index 00000000..73dfe3a5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/LICENSE.ES.MD @@ -0,0 +1,87 @@ +# Biblioteca 'Etsi.Ts102034' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. Etsi.Ts102034 +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/LICENSE.MD new file mode 100644 index 00000000..769f6508 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/LICENSE.MD @@ -0,0 +1,59 @@ +# Library 'Etsi.Ts102034' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. Etsi.Ts102034 +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/License.txt b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/License.txt new file mode 100644 index 00000000..3d4cc979 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/License.txt @@ -0,0 +1,73 @@ +############################################################################## +## +## Library 'Etsi.Ts102034' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..cab1a975 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ETSI TS 102-034 XML data types")] +[assembly: AssemblyDescription("Etsi.Ts102034")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e7f4ce33-4e27-4f04-a71d-11e98480534d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/licensing.xml b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/licensing.xml new file mode 100644 index 00000000..59b57a96 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/licensing.xml @@ -0,0 +1,100 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupport.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupport.cs new file mode 100644 index 00000000..05d76d75 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupport.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + /// + /// [en] Implementation of the Announcement support indicator from ETSI EN 300 468. + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:AnnouncementSupport + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class AnnouncementSupport + { + [XmlElement("Announcement")] + public AnnouncementSupportAnnouncement[] Announcement; + + [XmlAttribute] + public string SupportIndicator; + } // class AnnouncementSupport +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupportAnnouncement.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupportAnnouncement.cs new file mode 100644 index 00000000..5d3520e9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupportAnnouncement.cs @@ -0,0 +1,45 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class AnnouncementSupportAnnouncement + { + [XmlElement("DVBTriplet", typeof(DvbTriplet))] + public DvbTriplet DvbTriplet; + + [XmlElement("TextualIdentifier", typeof(TextualIdentifier))] + public TextualIdentifier TextualIdentifier; + + [XmlAttribute] + public string Type; + + [XmlAttribute] + public string ReferenceType; + + [XmlAttribute] + public string ComponentTag; + } // class AnnouncementSupportAnnouncement +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastDiscoveryRoot.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastDiscoveryRoot.cs new file mode 100644 index 00000000..eb5bfb49 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastDiscoveryRoot.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlRoot(ElementName = "ServiceDiscovery", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1", IsNullable = false)] + public class BroadcastDiscoveryRoot + { + /// + /// Version of this record. A change in this value indicates a change in one of the BroadcastDiscovery Records + /// + [XmlAttribute] + public string Version; + + [XmlElement("BroadcastDiscovery")] + public BroadcastOffering[] BroadcastDiscovery; + } // class BroadcastDiscoveryRoot +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastOffering.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastOffering.cs new file mode 100644 index 00000000..4ff71f52 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastOffering.cs @@ -0,0 +1,37 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + /// + /// [en] Provides a list of TS or services discovery information + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:BroadcastOffering + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName = "BroadcastOffering", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class BroadcastOffering : OfferingBase + { + [XmlElement("ServiceList")] + public IpServiceList[] Services; + } // class BroadcastOffering +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/CountryAvailability.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/CountryAvailability.cs new file mode 100644 index 00000000..3f1f29f6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/CountryAvailability.cs @@ -0,0 +1,41 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class CountryAvailability + { + [XmlAttribute] + public string Countries; + + [XmlAttribute] + [DefaultValue(true)] + public bool Available; + + public CountryAvailability() + { + Available = true; + } // default constructor + } // class CountryAvailability +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/FecLayerAddress.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/FecLayerAddress.cs new file mode 100644 index 00000000..c3af4021 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/FecLayerAddress.cs @@ -0,0 +1,59 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName="FecLayerAddress", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class FecLayerAddress + { + [XmlAttribute] + public string Address; + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public ushort Port; + + [XmlIgnore] + public bool PortSpecified; + + [XmlAttribute(DataType = "positiveInteger")] + public string MaxBitrate; + + [XmlAttribute("RTSPControlURL", DataType = "anyURI")] + public string RtspControlUrl; + + [XmlAttribute("PayloadTypeNumber")] + public uint PayloadTypeNumber; + + [XmlIgnore] + public bool PayloadTypeNumberSpecified; + + [XmlAttribute("TransportProtocol")] + public TransportProtocolKind TransportProtocol; + + [XmlIgnore] + public bool TransportProtocolSpecified; + } // class FecLayerAddress +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpMulticastAddress.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpMulticastAddress.cs new file mode 100644 index 00000000..2501a141 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpMulticastAddress.cs @@ -0,0 +1,88 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class IpMulticastAddress + { + [XmlElement("FECBaseLayer")] + public FecLayerAddress FecBaseLayer; + + [XmlElement("FECEnhancementLayer")] + public FecLayerAddress[] FecEnhancementLayer; + + [XmlElement("CNAME")] + public string CName; + + [XmlElement("ssrc")] + public uint Ssrc; + + [XmlIgnore] + public bool SsrcSpecified; + + [XmlElement("RTPRetransmission")] + public RetransmissionInfo RtpRetransmission; + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public ushort Port; + + [XmlAttribute("Streaming")] + public StreamingKind Streaming; + + /// + [XmlIgnore] + public bool StreamingSpecified; + + [XmlIgnore] + public string Url => $"{Protocol}://@{Address}:{Port}"; + + [XmlIgnore] + public string Protocol + { + get + { + if ((!StreamingSpecified) || (Streaming == StreamingKind.Rtp)) + { + return "rtp"; + } // if + + if (Streaming == StreamingKind.Udp) + { + return "udp"; + } // if + + throw new IndexOutOfRangeException(); + } // get + } // Protocol + + public override string ToString() => Url; + + } // class IpMulticastAddress +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpService.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpService.cs new file mode 100644 index 00000000..bf595b03 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpService.cs @@ -0,0 +1,63 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName="IPService", Namespace = Namespace)] + public class IpService + { + public const string Namespace = "urn:dvb:metadata:iptv:sdns:2012-1"; + + [XmlElement("ServiceLocation")] + public ServiceLocation ServiceLocation; + + [XmlElement("TextualIdentifier")] + public TextualIdentifier TextualIdentifier; + + [XmlElement("DVBTriplet")] + public DvbTriplet[] DvbTriplet; + + [XmlElement(DataType = "positiveInteger")] + public string MaxBitrate; + + [XmlElement("SI")] + public ServiceInformation ServiceInformation; + + [XmlElement("AudioAttributes")] + public AudioAttributes[] AudioAttributes; + + [XmlElement("VideoAttributes")] + public VideoAttributes[] VideoAttributes; + + [XmlElement("ServiceAvailability")] + public ServiceAvailability[] ServiceAvailability; + + [XmlElement("Usage")] + public ServiceUsage[] Usage; + + [XmlElement("LinkedService")] + public IpService[] LinkedService; + } // class IpService +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpServiceList.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpServiceList.cs new file mode 100644 index 00000000..5b15256a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpServiceList.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName="IPServiceList", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class IpServiceList + { + [XmlElement("ServicesDescriptionLocation")] + public DescriptionLocation[] ServicesDescriptionLocation; + + [XmlElement("SingleService")] + public IpService[] Services; + } // class IpServiceList +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescription.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescription.cs new file mode 100644 index 00000000..2f441c57 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescription.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class MosaicDescription + { + [XmlElement("LogicalCell")] + public MosaicDescriptionLogicalCell[] LogicalCell; + + [XmlAttribute] + [DefaultValue(true)] + public bool EntryPoint; + + [XmlAttribute] + public string HorizontalCellsNumber; + + [XmlAttribute] + public string VerticalCellsNumber; + + public MosaicDescription() + { + EntryPoint = true; + } // default constructor + } // class MosaicDescription +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionAudioLink.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionAudioLink.cs new file mode 100644 index 00000000..c44149f2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionAudioLink.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class MosaicDescriptionAudioLink + { + [XmlAttribute] + public string Language; + + [XmlAttribute] + public string ComponentTag; + }// class MosaicDescriptionAudioLink +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionElementaryCell.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionElementaryCell.cs new file mode 100644 index 00000000..50192df2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionElementaryCell.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class MosaicDescriptionElementaryCell + { + [XmlAttribute] + public ushort CellId; + } // class MosaicDescriptionElementaryCell +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionLogicalCell.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionLogicalCell.cs new file mode 100644 index 00000000..eff1086c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionLogicalCell.cs @@ -0,0 +1,57 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class MosaicDescriptionLogicalCell + { + [XmlElement("ElementaryCell")] + public MosaicDescriptionElementaryCell[] ElementaryCell; + + [XmlElement("AudioLink")] + public MosaicDescriptionAudioLink[] AudioLink; + + [XmlElement("DVBTriplet", typeof(DvbTriplet))] + public DvbTriplet DvbTriplet; + + [XmlElement("PackageId", typeof(MosaicDescriptionPackageId))] + public MosaicDescriptionPackageId PackageId; + + [XmlElement("TextualId", typeof(TextualIdentifier))] + public TextualIdentifier TextualId; + + [XmlAttribute] + public ushort CellId; + + [XmlAttribute] + public string PresentationInfo; + + [XmlAttribute] + public string LinkageInfo; + + [XmlAttribute] + public string EventId; + } // class MosaicDescriptionLogicalCell +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionPackageId.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionPackageId.cs new file mode 100644 index 00000000..8ceeb562 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionPackageId.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class MosaicDescriptionPackageId + { + [XmlAttribute] + public string Domain; + + [XmlText] + public string Value; + } // class MosaicDescriptionPackageId +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MulticastRetransmission.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MulticastRetransmission.cs new file mode 100644 index 00000000..6d1f5408 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MulticastRetransmission.cs @@ -0,0 +1,71 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class MulticastRetransmission + { + [XmlAttribute] + public string SourceAddress; + + [XmlAttribute] + public string GroupAddress; + + [XmlAttribute("ssrc")] + public uint Ssrc; + + [XmlIgnore] + public bool SsrcSpecified; + + [XmlAttribute("RTPPayloadTypeNumber")] + public uint RtpPayloadTypeNumber; + + [XmlIgnore] + public bool RtpPayloadTypeNumberSpecified; + + [XmlAttribute("dvb-original-copy-ret")] + public bool DvbOriginalCopyRet; + + [XmlIgnore] + public bool DvbOriginalCopyRetSpecified; + + [XmlAttribute("rtcp-mux")] + [DefaultValue(false)] + public bool RtcpMux; + + [XmlAttribute] + public uint DestinationPort; + + [XmlIgnore] + public bool DestinationPortSpecified; + + [XmlAttribute("rtx-time")] + public uint RtxTime; + + public MulticastRetransmission() + { + RtcpMux = false; + } // default constructor + } // MulticastRetransmission +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/PrimaryServiceInformationSource.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/PrimaryServiceInformationSource.cs new file mode 100644 index 00000000..abae7ae6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/PrimaryServiceInformationSource.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType("PrimaryServiceInformationSource", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public enum PrimaryServiceInformationSource + { + [XmlEnum("Stream")] + Stream, + [XmlEnum("XML")] + Xml, + } // enum PrimaryServiceInformationSource +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ProprietaryServiceGenre.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ProprietaryServiceGenre.cs new file mode 100644 index 00000000..4323fc06 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ProprietaryServiceGenre.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [Serializable] + [DebuggerStepThrough] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class ProprietaryServiceGenre + { + [XmlAttribute("href")] + public string Code + { + get; + set; + } // Code + + [XmlElement(Namespace = "urn:tva:metadata:2007")] + public string Name + { + get; + set; + } // Name + } // class ProprietaryServiceGenre +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ReplacementService.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ReplacementService.cs new file mode 100644 index 00000000..431c8900 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ReplacementService.cs @@ -0,0 +1,49 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + /// + /// [en] implementation of The replacement_Service part of the Linkage_Descriptor in ETSI EN 300 468. Describes a service to try if the specified one fails. + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:ReplacementService + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class ReplacementService + { + [XmlElement("DVBTriplet", typeof(DvbTriplet))] + public DvbTriplet DvbTriplet; + + [XmlElement("TextualIdentifier", typeof(TextualIdentifier))] + public TextualIdentifier TextualIdentifier; + + [XmlAttribute("ReplacementType")] + [DefaultValue("5")] + public string Kind; + + public ReplacementService() + { + Kind = "5"; + } // default constructor + } // class ReplacementService +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RetransmissionInfo.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RetransmissionInfo.cs new file mode 100644 index 00000000..fbfbc256 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RetransmissionInfo.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("RetransmissionInfo", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class RetransmissionInfo + { + [XmlElement("RTCPReporting")] + public RtcpRetransmissionReporting RtcpReporting; + + [XmlElement("UnicastRET")] + public UnicastRetransmission UnicastRetransmission; + + [XmlElement("MulticastRET")] + public MulticastRetransmission MulticastRetransmission; + } // class RetransmissionInfo +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtcpRetransmissionReporting.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtcpRetransmissionReporting.cs new file mode 100644 index 00000000..0b0b9ca5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtcpRetransmissionReporting.cs @@ -0,0 +1,88 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("RtcpRetransmissionReporting", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class RtcpRetransmissionReporting + { + [XmlAttribute] + public string DestinationAddress; + + [XmlAttribute] + public ushort DestinationPort; + + [XmlIgnore] + public bool DestinationPortSpecified; + + [XmlAttribute("dvb-t-ret", DataType = "positiveInteger")] + public string DvbRetransmission; + + [XmlAttribute("rtcp-bandwidth", DataType = "positiveInteger")] + public string TtcpBandwidth; + + [XmlAttribute("rtcp-rsize", DataType = "positiveInteger")] + public string RtcpRetransmissionSize; + + [XmlAttribute("trr-int", DataType = "positiveInteger")] + public string TrrInt; + + [XmlAttribute("dvb-disable-rtcp-rr")] + [DefaultValue(false)] + public bool DvbDisableTtcpRr; + + [XmlAttribute("dvb-enable-byte")] + [DefaultValue(false)] + public bool DvbEnableByte; + + [XmlAttribute("dvb-t-wait-min")] + [DefaultValue(typeof(uint), "0")] + public uint DvbTWaitMin; + + [XmlAttribute("dvb-t-wait-max")] + [DefaultValue(typeof(uint), "0")] + public uint DvbTWaitMax; + + [XmlAttribute("dvb-ssrc-bitmask")] + [DefaultValue("ffffffff")] + public string DvbSsrcBitmask; + + [XmlAttribute("dvb-rsi-mc-ret")] + public bool DvbRsiMcRet; + + [XmlIgnore] + public bool DvbRsiMcRetSpecified; + + [XmlAttribute("dvb-ssrc-upstream-client", DataType = "positiveInteger")] + public string DvbSsrcUpstreamClient; + + public RtcpRetransmissionReporting() + { + DvbDisableTtcpRr = false; + DvbEnableByte = false; + DvbTWaitMin = 0; + DvbTWaitMax = 0; + DvbSsrcBitmask = "ffffffff"; + } // default constructor + } // class RtcpRetransmissionReporting +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtspUrl.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtspUrl.cs new file mode 100644 index 00000000..e5fc2c3f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtspUrl.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class RtspUrl + { + [XmlAttribute("RTSPControlURL", DataType = "anyURI")] + public string ControlUrl; + + [XmlText(DataType = "anyURI")] + public string Value; + } // class RtspUrl +} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceInformation.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceInformation.cs similarity index 79% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceInformation.cs rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceInformation.cs index fab89888..22e72208 100644 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceInformation.cs +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceInformation.cs @@ -1,85 +1,94 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - /// - /// Implementation of traditional DVB SI information about a service - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SI - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("SI", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServiceInformation - { - [XmlElement("Name")] - public MultilingualText[] Name; - - [XmlElement("Description")] - public MultilingualText[] Description; - - [XmlElement("ServiceDescriptionLocation")] - public DescriptionLocation[] ServiceDescriptionLocation; - - [XmlElement("ContentGenre")] - public sbyte[] ContentGenre; - - [XmlElement("CountryAvailability")] - public CountryAvailability[] CountryAvailability; - - [XmlElement("ReplacementService")] - public ReplacementService[] ReplacementService; - - [XmlElement("MosaicDescription")] - public MosaicDescription MosaicDescription; - - [XmlElement("AnnouncementSupport")] - public AnnouncementSupport AnnouncementSupport; - - [XmlAttribute] - public string ServiceType; - - [XmlAttribute] - [DefaultValue(PrimaryServiceInformationSource.Xml)] - public PrimaryServiceInformationSource PrimaryServiceInformationSource; - - #region Extensions -- Content provider proprietary tags - - [XmlAnyElement()] - public XmlElement[] ExtraData - { - get; - set; - } // ExtraData - - /// - /// movistar+ short name - /// - [XmlElement("ShortName")] - public MultilingualText[] ProprietaryShortName; - - [XmlElement("Genre")] - public ProprietaryServiceGenre ProprietaryGenre; - - [XmlElement("ParentalGuidance")] - public TvAnytime.Mpeg7.ParentalGuidance ProprietaryParentalGuidance; - - #endregion - - public ServiceInformation() - { - this.PrimaryServiceInformationSource = PrimaryServiceInformationSource.Xml; - } // default constructor - } // class ServiceInformation -} // namespace +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + /// + /// Implementation of traditional DVB SI information about a service + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SI + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("SI", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class ServiceInformation + { + [XmlElement("Name")] + public MultilingualText[] Name; + + [XmlElement("Description")] + public MultilingualText[] Description; + + [XmlElement("ServiceDescriptionLocation")] + public DescriptionLocation[] ServiceDescriptionLocation; + + [XmlElement("ContentGenre")] + public sbyte[] ContentGenre; + + [XmlElement("CountryAvailability")] + public CountryAvailability[] CountryAvailability; + + [XmlElement("ReplacementService")] + public ReplacementService[] ReplacementService; + + [XmlElement("MosaicDescription")] + public MosaicDescription MosaicDescription; + + [XmlElement("AnnouncementSupport")] + public AnnouncementSupport AnnouncementSupport; + + [XmlAttribute] + public string ServiceType; + + [XmlAttribute] + [DefaultValue(PrimaryServiceInformationSource.Xml)] + public PrimaryServiceInformationSource PrimaryServiceInformationSource; + + #region Extensions -- Content provider proprietary tags + + [XmlAnyElement()] + public XmlElement[] ExtraData + { + get; + set; + } // ExtraData + + /// + /// movistar+ short name + /// + [XmlElement("ShortName")] + public MultilingualText[] ProprietaryShortName; + + [XmlElement("Genre")] + public ProprietaryServiceGenre ProprietaryGenre; + + [XmlElement("ParentalGuidance")] + public TvAnytime.Mpeg7.ParentalGuidance ProprietaryParentalGuidance; + + #endregion + + public ServiceInformation() + { + PrimaryServiceInformationSource = PrimaryServiceInformationSource.Xml; + } // default constructor + } // class ServiceInformation +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceLocation.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceLocation.cs new file mode 100644 index 00000000..29048608 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceLocation.cs @@ -0,0 +1,52 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + /// + /// [en] The location of a service. Currently this supports either a broadcast system identifier or a multicast address (ASM and SSM) or RTSP. + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:ServiceLocation + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName = "ServiceLocation", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class ServiceLocation + { + [XmlElement("BroadcastSystem", typeof(string))] + public string BroadcastSystem; + + [XmlElement("IPMulticastAddress", typeof(IpMulticastAddress))] + public IpMulticastAddress IpMulticastAddress; + + [XmlElement("RTSPURL", typeof(RtspUrl))] + public RtspUrl RtspUrl; + + [XmlIgnore] + public string LocationUrl + { + get + { + if (IpMulticastAddress != null) return IpMulticastAddress.Url; + return RtspUrl?.Value; + } // get + } // LocationUrl + } // class ServiceLocation +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceUsage.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceUsage.cs new file mode 100644 index 00000000..b4b2ed30 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceUsage.cs @@ -0,0 +1,34 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType("Usage", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public enum ServiceUsage + { + Fcc, + PiP, + Main, + Hd, + Sd, + [XmlEnum("3D")] + ThreeD, + } // ServiceUsage +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/StreamingKind.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/StreamingKind.cs new file mode 100644 index 00000000..3ae14233 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/StreamingKind.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(TypeName="StreamingType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public enum StreamingKind + { + [XmlEnum("rtp")] + Rtp, + [XmlEnum("udp")] + Udp, + } // enum StreamingKind +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/TransportProtocolKind.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/TransportProtocolKind.cs new file mode 100644 index 00000000..0e5f7022 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/TransportProtocolKind.cs @@ -0,0 +1,31 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Xml.Serialization; + + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType("TransportProtocolType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public enum TransportProtocolKind + { + [XmlEnum("RTP-AVP")] + RtpAvp, + [XmlEnum("UDP-FEC")] + UdpFec, + } // enum TransportProtocolKind +} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/UnicastRetransmission.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/UnicastRetransmission.cs similarity index 77% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/UnicastRetransmission.cs rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/UnicastRetransmission.cs index 03374c49..5e69cdc3 100644 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/UnicastRetransmission.cs +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/UnicastRetransmission.cs @@ -1,78 +1,87 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("UnicastRetransmission", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class UnicastRetransmission - { - [XmlAttribute("trr-int")] - public uint TrrInt; - - [XmlIgnore] - public bool TrrIntSpecified; - - [XmlAttribute("DestinationPort-ForRTCPReporting")] - public uint DestinationPortForRtcpReporting; - - /// - [XmlIgnore] - public bool DestinationPortForRtcpReportingSpecified; - - [XmlAttribute] - public uint SourcePort; - - [XmlIgnore] - public bool SourcePortSpecified; - - [XmlAttribute("RTSPControlURL", DataType = "anyURI")] - public string RtspControlUrl; - - [XmlAttribute("ssrc")] - public uint Ssrc; - - [XmlIgnore] - public bool SsrcSpecified; - - [XmlAttribute("RTPPayloadTypeNumber")] - public uint RtpPayloadTypeNumber; - - [XmlIgnore] - public bool RtpPayloadTypeNumberSpecified; - - [XmlAttribute("dvb-original-copy-ret")] - public bool DvbOriginalCopyRet; - - [XmlIgnore] - public bool DvbOriginalCopyRetSpecified; - - [XmlAttribute("rtcp-mux")] - [DefaultValue(false)] - public bool RtcpMux; - - [XmlAttribute] - public uint DestinationPort; - - [XmlIgnore] - public bool DestinationPortSpecified; - - [XmlAttribute("rtx-time")] - public uint RtxTime; - - public UnicastRetransmission() - { - this.RtcpMux = false; - } // default constructor - } // class UnicastRetransmission -} // namespace +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("UnicastRetransmission", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class UnicastRetransmission + { + [XmlAttribute("trr-int")] + public uint TrrInt; + + [XmlIgnore] + public bool TrrIntSpecified; + + [XmlAttribute("DestinationPort-ForRTCPReporting")] + public uint DestinationPortForRtcpReporting; + + /// + [XmlIgnore] + public bool DestinationPortForRtcpReportingSpecified; + + [XmlAttribute] + public uint SourcePort; + + [XmlIgnore] + public bool SourcePortSpecified; + + [XmlAttribute("RTSPControlURL", DataType = "anyURI")] + public string RtspControlUrl; + + [XmlAttribute("ssrc")] + public uint Ssrc; + + [XmlIgnore] + public bool SsrcSpecified; + + [XmlAttribute("RTPPayloadTypeNumber")] + public uint RtpPayloadTypeNumber; + + [XmlIgnore] + public bool RtpPayloadTypeNumberSpecified; + + [XmlAttribute("dvb-original-copy-ret")] + public bool DvbOriginalCopyRet; + + [XmlIgnore] + public bool DvbOriginalCopyRetSpecified; + + [XmlAttribute("rtcp-mux")] + [DefaultValue(false)] + public bool RtcpMux; + + [XmlAttribute] + public uint DestinationPort; + + [XmlIgnore] + public bool DestinationPortSpecified; + + [XmlAttribute("rtx-time")] + public uint RtxTime; + + public UnicastRetransmission() + { + RtcpMux = false; + } // default constructor + } // class UnicastRetransmission +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/DescriptionLocation.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/DescriptionLocation.cs new file mode 100644 index 00000000..2b482c08 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/DescriptionLocation.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName = "DescriptionLocationBCG", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class DescriptionLocation + { + [XmlAttribute("preferred")] + public bool Preferred; + + /// True if Preferred is present in XML + [XmlIgnore] + public bool PreferredSpecified; + + [XmlText] + public string Value; + } // class DescriptionLocation +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbStpTransportMode.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbStpTransportMode.cs new file mode 100644 index 00000000..2a8b9d5b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbStpTransportMode.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class DvbStpTransportMode : PayloadList + { + [XmlAttribute] + public string Source; + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public ushort Port; + } // class DvbStpTransportMode +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbTriplet.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbTriplet.cs new file mode 100644 index 00000000..da582da9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbTriplet.cs @@ -0,0 +1,46 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class DvbTriplet + { + [XmlAttribute] + public ushort OrigNetId; + + [XmlAttribute] + public ushort TsId; + + [XmlAttribute] + public ushort ServiceId; + + [XmlAttribute] + public string TsIdWildcard; + + public DvbTriplet() + { + TsIdWildcard = "*"; + } // default constructor + } // class DvbTriplet +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/HttpTransportMode.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/HttpTransportMode.cs new file mode 100644 index 00000000..efb24c69 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/HttpTransportMode.cs @@ -0,0 +1,41 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class HttpTransportMode : PayloadList + { + [XmlAttribute(DataType = "anyURI")] + public string Location; + + [XmlAttribute("SOAP")] + [DefaultValue("false")] + public string Soap; + + public HttpTransportMode() + { + Soap = "false"; + } // default constructor + } // class HttpTransportMode +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/MultilingualText.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/MultilingualText.cs new file mode 100644 index 00000000..a9a2b8fc --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/MultilingualText.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + /// + /// Specifies an element containing a textual message, which has a Language attribute specifying the language of the + /// string, using the ISO 639-2 three letter language code. + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class MultilingualText + { + [XmlAttribute] + public string Language; + + [XmlText] + public string Value; + } // class MultilingualText +} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/OfferingBase.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/OfferingBase.cs similarity index 76% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/OfferingBase.cs rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/OfferingBase.cs index 753d973b..9b816dfa 100644 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/OfferingBase.cs +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/OfferingBase.cs @@ -1,47 +1,56 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; -using Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - /// - /// [en] Base class from which all offerings should be derived - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:OfferingBase - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - //[XmlInclude(typeof(RmsFusDiscovery))] - //[XmlInclude(typeof(RegionalizationOffering))] - //[XmlInclude(typeof(BroadcastContentGuideOffering))] - //[XmlInclude(typeof(CoDOffering))] - //[XmlInclude(typeof(SRMOffering))] - //[XmlInclude(typeof(ReferencedServices))] - [XmlInclude(typeof(PackagedServices))] - [XmlInclude(typeof(BroadcastOffering))] - public abstract partial class OfferingBase - { - /// - /// An internet DNS domain name registered by the Service Provider that uniquely identifies the Service Provider - /// - [XmlAttribute] - public string DomainName; - - /// - /// Version of the Service Provider(s) Discovery record; the version number shall be incremented every time a change in - /// any of the records that comprise the service discovery information for this Service Provider occurs. - /// - [XmlAttribute] - public string Version; - } // class OfferingBase -} // namespace +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; +using Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + /// + /// [en] Base class from which all offerings should be derived + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:OfferingBase + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + //[XmlInclude(typeof(RmsFusDiscovery))] + //[XmlInclude(typeof(RegionalizationOffering))] + //[XmlInclude(typeof(BroadcastContentGuideOffering))] + //[XmlInclude(typeof(CoDOffering))] + //[XmlInclude(typeof(SRMOffering))] + //[XmlInclude(typeof(ReferencedServices))] + [XmlInclude(typeof(PackagedServices))] + [XmlInclude(typeof(BroadcastOffering))] + public abstract class OfferingBase + { + /// + /// An internet DNS domain name registered by the Service Provider that uniquely identifies the Service Provider + /// + [XmlAttribute] + public string DomainName; + + /// + /// Version of the Service Provider(s) Discovery record; the version number shall be incremented every time a change in + /// any of the records that comprise the service discovery information for this Service Provider occurs. + /// + [XmlAttribute] + public string Version; + } // class OfferingBase +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PackageAvailabilityCountryCode.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PackageAvailabilityCountryCode.cs new file mode 100644 index 00000000..0b08fdf0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PackageAvailabilityCountryCode.cs @@ -0,0 +1,41 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class PackageAvailabilityCountryCode + { + [XmlAttribute("Availability")] + [DefaultValue(true)] + public bool Availability; + + [XmlText] + public string Value; + + public PackageAvailabilityCountryCode() + { + Availability = true; + } // default constructor + } // class PackageAvailabilityCountryCode +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadList.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadList.cs new file mode 100644 index 00000000..c60912ec --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadList.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlInclude(typeof(DvbStpTransportMode))] + [XmlInclude(typeof(HttpTransportMode))] + [XmlInclude(typeof(ProviderOfferingPull))] + public class PayloadList + { + [XmlElement("PayloadId")] + public PayloadListPayloadId[] PayloadId; + } // PayloadList +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListPayloadId.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListPayloadId.cs new file mode 100644 index 00000000..0f95d754 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListPayloadId.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class PayloadListPayloadId + { + [XmlElement("Segment")] + public PayloadListSegment[] Segment; + + [XmlAttribute] + public string Id; + } // PayloadListPayloadId +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListSegment.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListSegment.cs new file mode 100644 index 00000000..26a7f3ef --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListSegment.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("PayloadListSegmentType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class PayloadListSegment + { + [XmlElement("TargetPackage")] + public TargetPackage[] TargetPackage; + + [XmlAttribute] + public string Version; + + [XmlAttribute("ID")] + public string Id; + } // class PayloadListSegment +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/ServiceAvailability.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/ServiceAvailability.cs new file mode 100644 index 00000000..226c98d9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/ServiceAvailability.cs @@ -0,0 +1,34 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class ServiceAvailability + { + public PackageAvailabilityCountryCode CountryCode; + + [XmlElement("Cells")] + public string[] Cells; + } // ServiceAvailability +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/TargetPackage.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/TargetPackage.cs new file mode 100644 index 00000000..94b9fd20 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/TargetPackage.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("TargetPackageType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class TargetPackage + { + [XmlElement("PackageType")] + public MultilingualText[] PackageType; + + [XmlAttribute("PackageIDRef")] + public string PackageIdRef; + } // class TargetPackage +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/TextualIdentifier.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/TextualIdentifier.cs new file mode 100644 index 00000000..653c2593 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Common/TextualIdentifier.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.Common +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + //[XmlInclude(typeof(PackageTextualIdentifier))] + public class TextualIdentifier + { + [XmlAttribute] + public string DomainName; + + [XmlAttribute] + public string ServiceName; + } // class TextualIdentifier +} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuide.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuide.cs similarity index 77% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuide.cs rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuide.cs index 64a045b7..483ca3cd 100644 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuide.cs +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuide.cs @@ -1,65 +1,74 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.ContentGuideDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class BroadcastContentGuide - { - // TODO: clean-up code - public class TransportModeClass - { - [XmlElement("DVBSTP", typeof(DvbStpTransportMode), IsNullable = false)] - public DvbStpTransportMode[] Push; - - [XmlElement("HTTP", typeof(HttpTransportMode), IsNullable = false)] - public HttpTransportMode[] Pull; - } // class TransportModeClass - - [XmlElement("Name")] - public MultilingualText[] Name; - - [XmlElement("Description")] - public MultilingualText[] Description; - - [XmlElement("TransportMode")] - public TransportModeClass TransportMode; - - [XmlElement("Logo", DataType = "anyURI")] - public string Logo; - - [XmlElement("Type")] - public ControlledTerm GuideType; - - [XmlElement("TargetProvider")] - public string[] TargetProvider; - - [XmlElement("BCGProviderName")] - public MultilingualText[] BCGProviderName; - - /* - [XmlArrayItem("DVBSTP", typeof(CdsDownloadSessionDescriptionLocationDVBSTP), IsNullable = false)] - [XmlArrayItem("SAP", typeof(CdsDownloadSessionDescriptionLocationSAP), IsNullable = false)] - public object[] CDSDownloadSessionDescriptionLocation; - */ - - [XmlAttribute("Id")] - public string Id; - - [XmlAttribute("Version")] - public string Version; - } // class BroadcastContentGuide -} // namespace +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.ContentGuideDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class BroadcastContentGuide + { + // TODO: clean-up code + public class TransportModeClass + { + [XmlElement("DVBSTP", typeof(DvbStpTransportMode), IsNullable = false)] + public DvbStpTransportMode[] Push; + + [XmlElement("HTTP", typeof(HttpTransportMode), IsNullable = false)] + public HttpTransportMode[] Pull; + } // class TransportModeClass + + [XmlElement("Name")] + public MultilingualText[] Name; + + [XmlElement("Description")] + public MultilingualText[] Description; + + [XmlElement("TransportMode")] + public TransportModeClass TransportMode; + + [XmlElement("Logo", DataType = "anyURI")] + public string Logo; + + [XmlElement("Type")] + public ControlledTerm GuideType; + + [XmlElement("TargetProvider")] + public string[] TargetProvider; + + [XmlElement("BCGProviderName")] + public MultilingualText[] BcgProviderName; + + /* + [XmlArrayItem("DVBSTP", typeof(CdsDownloadSessionDescriptionLocationDVBSTP), IsNullable = false)] + [XmlArrayItem("SAP", typeof(CdsDownloadSessionDescriptionLocationSAP), IsNullable = false)] + public object[] CDSDownloadSessionDescriptionLocation; + */ + + [XmlAttribute("Id")] + public string Id; + + [XmlAttribute("Version")] + public string Version; + } // class BroadcastContentGuide +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideDiscoveryRoot.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideDiscoveryRoot.cs new file mode 100644 index 00000000..8e37b400 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideDiscoveryRoot.cs @@ -0,0 +1,48 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.ContentGuideDiscovery +{ + /// + /// This element is used in the first stage of service discovery. It is sent by service providers and is used as a link to their + /// own service discovery information. + /// + /// + /// An aggregating service provide may send multiple ServiceProvider elements in a single document. + /// If the element Offering is missing, then the ServiceProvider is not currently providing any services, but simply + /// announcing its presence. + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlRoot(ElementName = "ServiceDiscovery", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1", IsNullable = false)] + public class BroadcastContentGuideDiscoveryRoot // ServiceDiscovery + { + /// + /// Version of this record. A change in this value indicates a change in one of the ServiceProviderDiscovery Records + /// + [XmlAttribute] + public string Version; + + [XmlElement("BCGDiscovery")] + public BroadcastContentGuideOffering[] Offering; + } // class BroadcastContentGuideDiscoveryRoot +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideOffering.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideOffering.cs new file mode 100644 index 00000000..b9664d13 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideOffering.cs @@ -0,0 +1,37 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.ContentGuideDiscovery +{ + /// + /// [en] Provides information on Broadband Content Guide Offerings + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:BroadcastContentGuideOffering + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class BroadcastContentGuideOffering : OfferingBase + { + [XmlElement("BCG")] + public BroadcastContentGuide[] ContentGuides; + } // class BroadcastContentGuideOffering +} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Extensions.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Extensions.cs similarity index 82% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Extensions.cs rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Extensions.cs index 76e4d81d..2e89365b 100644 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Extensions.cs +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/Extensions.cs @@ -1,89 +1,95 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Etsi.Ts102034.v010501.XmlSerialization -{ - public static class Extensions - { - private class LanguageOrder - { - public int Order; - public string Language; - } // private class LanguageOrder - - public static MultilingualText SafeGetFirstItem(this MultilingualText[] text) - { - return SafeGetLanguageItem(text, null, true); - } // MultilingualText[].SafeGetFirstItem - - public static MultilingualText SafeGetLanguageItem(this MultilingualText[] text, IEnumerable preferredLanguages, bool preferredOrFirst) - { - if (text == null) return null; - if (text.Length == 0) return null; - if (text[0] == null) return null; - if (preferredLanguages == null) return text[0]; - - var q = from lang in OrderLanguages(preferredLanguages) - join item in text on lang.Language equals item.Language.ToLowerInvariant() - orderby lang.Order - select new { Item = item, Order = lang.Order }; - - var found = q.FirstOrDefault(); - if (found == null) - { - if (preferredOrFirst) return text[0]; - return null; - } // if - - return found.Item; - } // MultilingualText[].SafeGetLanguageItem - - public static string SafeGetValue(this MultilingualText text) - { - if (text == null) return null; - return text.Value; - } // MultilingualText.SafeGetValue - - public static string SafeGetValue(this MultilingualText text, string defaultValue) - { - if (text == null) return defaultValue; - return text.Value ?? defaultValue; - } // MultilingualText.SafeGetValue - - public static string SafeGetValue(this MultilingualText[] text) - { - return text.SafeGetFirstItem().SafeGetValue(); - } // MultilingualText[].SafeGetValue - - public static string SafeGetValue(this MultilingualText[] text, string defaultValue) - { - return text.SafeGetFirstItem().SafeGetValue(defaultValue); - } // MultilingualText[].SafeGetValue - - public static string SafeGetLanguageValue(this MultilingualText[] text, IEnumerable preferredLanguages, bool preferredOrFirst, string defaultValue) - { - return text.SafeGetLanguageItem(preferredLanguages, preferredOrFirst).SafeGetValue(defaultValue); - } // SafeGetLanguageValue - - private static IEnumerable OrderLanguages(IEnumerable preferredLanguages) - { - int order; - - order = 0; - foreach (string lang in preferredLanguages) - { - yield return new LanguageOrder() - { - Order = order++, - Language = lang, - }; - } // foreach - } // OrderLanguages - } // static class Extensions -} // namespace +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System.Collections.Generic; +using System.Linq; + +namespace Etsi.Ts102034.v010501.XmlSerialization +{ + public static class Extensions + { + private class LanguageOrder + { + public int Order; + public string Language; + } // private class LanguageOrder + + public static MultilingualText SafeGetFirstItem(this MultilingualText[] text) + { + return SafeGetLanguageItem(text, null, true); + } // MultilingualText[].SafeGetFirstItem + + public static MultilingualText SafeGetLanguageItem(this MultilingualText[] text, IEnumerable preferredLanguages, bool preferredOrFirst) + { + if (text == null) return null; + if (text.Length == 0) return null; + if (text[0] == null) return null; + if (preferredLanguages == null) return text[0]; + + var q = from lang in OrderLanguages(preferredLanguages) + join item in text on lang.Language equals item.Language.ToLowerInvariant() + orderby lang.Order + select new { Item = item, Order = lang.Order }; + + var found = q.FirstOrDefault(); + if (found == null) + { + return preferredOrFirst ? text[0] : null; + } // if + + return found.Item; + } // MultilingualText[].SafeGetLanguageItem + + public static string SafeGetValue(this MultilingualText text) + { + return text?.Value; + } // MultilingualText.SafeGetValue + + public static string SafeGetValue(this MultilingualText text, string defaultValue) + { + if (text == null) return defaultValue; + return text.Value ?? defaultValue; + } // MultilingualText.SafeGetValue + + public static string SafeGetValue(this MultilingualText[] text) + { + return text.SafeGetFirstItem().SafeGetValue(); + } // MultilingualText[].SafeGetValue + + public static string SafeGetValue(this MultilingualText[] text, string defaultValue) + { + return text.SafeGetFirstItem().SafeGetValue(defaultValue); + } // MultilingualText[].SafeGetValue + + public static string SafeGetLanguageValue(this MultilingualText[] text, IEnumerable preferredLanguages, bool preferredOrFirst, string defaultValue) + { + return text.SafeGetLanguageItem(preferredLanguages, preferredOrFirst).SafeGetValue(defaultValue); + } // SafeGetLanguageValue + + private static IEnumerable OrderLanguages(IEnumerable preferredLanguages) + { + int order; + + order = 0; + foreach (var lang in preferredLanguages) + { + yield return new LanguageOrder() + { + Order = order++, + Language = lang, + }; + } // foreach + } // OrderLanguages + } // static class Extensions +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/NamespaceUnification.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/NamespaceUnification.cs new file mode 100644 index 00000000..d39937de --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/NamespaceUnification.cs @@ -0,0 +1,50 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace Etsi.Ts102034.v010501.XmlSerialization +{ + /// + /// This class is intended to help in "unifying" the different TS 102 034 namespaces. + /// This allows to parse all XML documents from v01.01.01 to v01.05.01 using the same + /// XML .Net objects, regardless of document version. This is possible as v01.05.01 is + /// 100% backwards-compatible (at XML schema level, but not at code level) + /// + public static class NamespaceUnification + { + /// + /// + /// + /// Original TS 102 034 XML document namespace, possibly obsolete or not up-to-date + /// v01.05.01 equivalent up-to-date namespace + public static string Replacer(string ns) + { + switch (ns) + { + //v01.01.01 + case "urn:dvb:ipisdns:2003": return "urn:dvb:metadata:iptv:sdns:2012-1"; + // v01.02.01 + case "urn:dvb:ipisdns:2006": return "urn:dvb:metadata:iptv:sdns:2012-1"; + case "urn:tva:metadata:2004": return "urn:tva:metadata:2011"; + case "urn:mpeg:mpeg7:schema:2001": return "urn:tva:mpeg7:2008"; + // v01.03.01 + case "urn:dvb:ipi:sdns:2006": return "urn:dvb:metadata:iptv:sdns:2012-1"; + case "urn:tva:metadata:2005": return "urn:tva:metadata:2011"; + case "urn:tva:mpeg7:2005": return "urn:tva:mpeg7:2008"; + // v01.04.01 + case "urn:dvb:metadata:iptv:sdns:2008-1": return "urn:dvb:metadata:iptv:sdns:2012-1"; + default: + return ns; + } // switch + } // Replacer + } // NamespaceUnification +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/Package.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/Package.cs new file mode 100644 index 00000000..b7b45f28 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/Package.cs @@ -0,0 +1,62 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class Package + { + [XmlElement("PackageName")] + public MultilingualText[] Name; + + [XmlElement("CountryAvailability")] + public CountryAvailability[] CountryAvailability; + + [XmlElement("PackageDescription")] + public DescriptionLocation[] Description; + + [XmlElement("Service")] + public List Services; + + [XmlElement("PackageReference")] + public PackageReference[] References; + + [XmlElement("PackageAvailability")] + public ServiceAvailability[] PackageAvailability; + + [XmlAttribute] + public string Id; + + [XmlAttribute] + [DefaultValue(true)] + public bool Visible; + + public Package() + { + Visible = true; + } // default constructor + } // class Package +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageDiscoveryRoot.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageDiscoveryRoot.cs new file mode 100644 index 00000000..0b42039b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageDiscoveryRoot.cs @@ -0,0 +1,54 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlRoot(ElementName = "ServiceDiscovery", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1", IsNullable = false)] + public class PackageDiscoveryRoot + { + /// + /// Version of this record. A change in this value indicates a change in one of the PackageDiscovery Records + /// + [XmlAttribute] + public string Version; + + [XmlElement("PackageDiscovery")] + public PackagedServices[] PackageDiscovery; + + /// + /// Returns all packages of all PackageDiscoveries in a linear fashion + /// + /// Inemerable of all packages + public IEnumerable GetPackages() + { + var packages = from discovery in PackageDiscovery + from package in discovery.Packages + select package; + + return packages; + } // GetPackages + } // class BroadcastDiscoveryRoot +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageReference.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageReference.cs new file mode 100644 index 00000000..db8bbdfc --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageReference.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class PackageReference + { + [XmlAttribute] + public string Id; + } // PackageReference +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageTextualIdentifier.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageTextualIdentifier.cs new file mode 100644 index 00000000..be3e9e49 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageTextualIdentifier.cs @@ -0,0 +1,33 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class PackageTextualIdentifier : TextualIdentifier + { + [XmlAttribute(DataType = "positiveInteger")] + public string Priority; + } // PackageTextualIdentifier +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedService.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedService.cs new file mode 100644 index 00000000..890ff90a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedService.cs @@ -0,0 +1,41 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("PackagedServiceType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class PackagedService + { + [XmlElement("TextualID")] + public PackageTextualIdentifier[] TextualIdentifiers; + + [XmlElement("DVBTriplet")] + public DvbTriplet DvbTriplet; + + public DescriptionLocation DescriptionLocation; + + [XmlElement(DataType = "positiveInteger")] + public string LogicalChannelNumber; + } // class PackagedService +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedServices.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedServices.cs new file mode 100644 index 00000000..ab8083db --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedServices.cs @@ -0,0 +1,33 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class PackagedServices : OfferingBase + { + [XmlElement("Package")] + public Package[] Packages; + } // class PackagedServices +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderDiscoveryRoot.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderDiscoveryRoot.cs new file mode 100644 index 00000000..bc4abfba --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderDiscoveryRoot.cs @@ -0,0 +1,48 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery +{ + /// + /// This element is used in the first stage of service discovery. It is sent by service providers and is used as a link to their + /// own service discovery information. + /// + /// + /// An aggregating service provide may send multiple ServiceProvider elements in a single document. + /// If the element Offering is missing, then the ServiceProvider is not currently providing any services, but simply + /// announcing its presence. + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlRoot(ElementName = "ServiceDiscovery", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1", IsNullable = false)] + public class ProviderDiscoveryRoot // ServiceDiscovery + { + /// + /// Version of this record. A change in this value indicates a change in one of the ServiceProviderDiscovery Records + /// + [XmlAttribute] + public string Version; + + [XmlElement("ServiceProviderDiscovery")] + public ServiceProviderDiscovery[] ServiceProviderDiscovery; + } // class BroadcastDiscoveryRoot +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOffering.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOffering.cs new file mode 100644 index 00000000..efb64246 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOffering.cs @@ -0,0 +1,51 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery +{ + /// + /// Provides the Push and/or Pull Offering of the Service Provider + /// + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class ProviderOffering + { + /// + /// One entry per Pull Offering + /// + [XmlElement("Pull")] + public ProviderOfferingPull[] Pull + { + get; + set; + } // PullOffering + + /// + /// One entry per Push Offering + /// + [XmlElement("Push")] + public DvbStpTransportMode[] Push + { + get; + set; + } // PullOffering + } // class ProviderOffering +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOfferingPull.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOfferingPull.cs new file mode 100644 index 00000000..c2640742 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOfferingPull.cs @@ -0,0 +1,33 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class ProviderOfferingPull : PayloadList + { + [XmlAttribute(DataType = "anyURI")] + public string Location; + } // class ProviderOfferingPull +} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProvider.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProvider.cs similarity index 76% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProvider.cs rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProvider.cs index 65e853f9..d6334de6 100644 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProvider.cs +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProvider.cs @@ -1,51 +1,60 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServiceProvider - { - /// - /// Name of the Service Provider for display in one or more languages; one Service Provider name is allowed per - /// language code, and at least one language shall be provided (though not necessarily more than one). - /// - [XmlElement("Name")] - public MultilingualText[] Name; - - /// - /// Description of the Service Provider for potential display in one or more languages; one description is allowed per language code. - /// - [XmlElement("Description")] - public MultilingualText[] Description; - - /// - /// Provides the Push and/or Pull Offering of the Service Provider - /// - public ProviderOffering Offering; - - [XmlAttribute] - public string DomainName; - - [XmlAttribute] - public string Version; - - /// - /// Pointer to a Service Provider logo for potential display. The pointer shall be a URI - /// - [XmlAttribute("LogoURI", DataType = "anyURI")] - public string LogoUrl; - } // class ServiceProvider -} // namespace +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class ServiceProvider + { + /// + /// Name of the Service Provider for display in one or more languages; one Service Provider name is allowed per + /// language code, and at least one language shall be provided (though not necessarily more than one). + /// + [XmlElement("Name")] + public MultilingualText[] Name; + + /// + /// Description of the Service Provider for potential display in one or more languages; one description is allowed per language code. + /// + [XmlElement("Description")] + public MultilingualText[] Description; + + /// + /// Provides the Push and/or Pull Offering of the Service Provider + /// + public ProviderOffering Offering; + + [XmlAttribute] + public string DomainName; + + [XmlAttribute] + public string Version; + + /// + /// Pointer to a Service Provider logo for potential display. The pointer shall be a URI + /// + [XmlAttribute("LogoURI", DataType = "anyURI")] + public string LogoUrl; + } // class ServiceProvider +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProviderDiscovery.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProviderDiscovery.cs new file mode 100644 index 00000000..536f4802 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProviderDiscovery.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] + public class ServiceProviderDiscovery + { + [XmlElement("ServiceProvider")] + public ServiceProvider[] Providers; + + [XmlAttribute] + public string Version; + } // ServiceProviderDiscovery +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatio.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatio.cs new file mode 100644 index 00000000..eb0dc1a2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatio.cs @@ -0,0 +1,41 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("AspectRatioType", Namespace = "urn:tva:metadata:2011")] + public class AspectRatio + { + [XmlAttribute("type")] + [DefaultValue(AspectRatioKind.Original)] + public AspectRatioKind Kind; + + [XmlText] + public string Value; + + public AspectRatio() + { + Kind = AspectRatioKind.Original; + } // default constructor + } // class AspectRatio +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatioKind.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatioKind.cs new file mode 100644 index 00000000..573a42b1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatioKind.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType = true, Namespace = "urn:tva:metadata:2011")] + public enum AspectRatioKind + { + [XmlEnum("original")] + Original, + [XmlEnum("publication")] + Publication, + } // enum AspectRatioKind +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioAttributes.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioAttributes.cs new file mode 100644 index 00000000..87956b9b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioAttributes.cs @@ -0,0 +1,53 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("AudioAttributesType", Namespace = "urn:tva:metadata:2011")] + public class AudioAttributes + { + public ControlledTerm Coding; + + [XmlElement("NumOfChannels")] + public ushort NumberOfChannels; + + [XmlIgnore] + public bool NumberOfChannelsSpecified; + + public ControlledTerm MixType; + + public AudioLanguage AudioLanguage; + + public uint SampleFrequency; + + [XmlIgnore] + public bool SampleFrequencySpecified; + + public uint BitsPerSample; + + [XmlIgnore] + public bool BitsPerSampleSpecified; + + public BitRate BitRate; + } // class AudioAttributes +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioLanguage.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioLanguage.cs new file mode 100644 index 00000000..69096df2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioLanguage.cs @@ -0,0 +1,33 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("AudioLanguageType", Namespace = "urn:tva:metadata:2011")] + public class AudioLanguage : ExtendedLanguage + { + [XmlAttribute("purpose")] + public string Purpose; + } // AudioLanguage +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/BitRate.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/BitRate.cs new file mode 100644 index 00000000..14343db0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/BitRate.cs @@ -0,0 +1,59 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("BitRateType", Namespace = "urn:tva:metadata:2011")] + public class BitRate + { + [XmlAttribute("variable")] + [DefaultValue(false)] + public bool Variable; + + [XmlAttribute("minimum")] + public ulong Minimum; + + [XmlIgnore] + public bool MinimumSpecified; + + [XmlAttribute("average")] + public ulong Average; + + [XmlIgnore] + public bool AverageSpecified; + + [XmlAttribute("maximum")] + public ulong Maximum; + + [XmlIgnore] + public bool MaximumSpecified; + + [XmlText(DataType = "nonNegativeInteger")] + public string Value; + + public BitRate() + { + Variable = false; + } // default constructor + } // class BitRate +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ControlledTerm.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ControlledTerm.cs new file mode 100644 index 00000000..31f8e740 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ControlledTerm.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("ControlledTermType", Namespace = "urn:tva:metadata:2011")] + //[XmlInclude(typeof(GenreType))] + public class ControlledTerm + { + public TermName Name; + + public TextualData Definition; + + [XmlAttribute("href")] + public string Href; + } // ControlledTerm +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/Explanation.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/Explanation.cs new file mode 100644 index 00000000..05df06da --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/Explanation.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace = "urn:tva:metadata:2011")] + public class Explanation : TextualData + { + [XmlAttribute("length")] + public ExplanationLength Length; + + [XmlIgnore] + public bool LengthSpecified; + } // class Explanation +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ExplanationLength.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ExplanationLength.cs new file mode 100644 index 00000000..602577d9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ExplanationLength.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType("ExplanationLengthType", Namespace = "urn:tva:metadata:2011")] + public enum ExplanationLength + { + [XmlEnum("short")] + Short, + [XmlEnum("medium")] + Medium, + [XmlEnum("long")] + Long, + } // enum ExplanationLength +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ScanKind.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ScanKind.cs new file mode 100644 index 00000000..bacfc116 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ScanKind.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType("ScanType", Namespace = "urn:tva:metadata:2011")] + public enum ScanKind + { + [XmlEnum("interlaced")] + Interlaced, + [XmlEnum("progressive")] + Progressive, + } // enum ScanKind +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TermName.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TermName.cs new file mode 100644 index 00000000..fe92f2bb --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TermName.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("TermNameType", Namespace = "urn:tva:metadata:2011")] + public class TermName : TextualData + { + [XmlAttribute("preferred")] + public bool Preferred; + + [XmlIgnore] + public bool PreferredSpecified; + } // TextualData +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TvaParentalGuidance.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TvaParentalGuidance.cs new file mode 100644 index 00000000..ee2cd29f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TvaParentalGuidance.cs @@ -0,0 +1,33 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("TVAParentalGuidanceType", Namespace = "urn:tva:metadata:2011")] + public class TvaParentalGuidance : ParentalGuidance + { + [XmlElement("ExplanatoryText")] + public Explanation[] ExplanatoryText; + } // class TvaParentalGuidance +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoAttributes.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoAttributes.cs new file mode 100644 index 00000000..4829ba75 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoAttributes.cs @@ -0,0 +1,57 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("VideoAttributesType", Namespace = "urn:tva:metadata:2011")] + public class VideoAttributes + { + public ControlledTerm Coding; + + public ScanKind Scan; + + [XmlIgnore] + public bool ScanSpecified; + + public ushort HorizontalSize; + + [XmlIgnore] + public bool HorizontalSizeSpecified; + + public ushort VerticalSize; + + [XmlIgnore] + public bool VerticalSizeSpecified; + + [XmlElement("AspectRatio")] + public AspectRatio[] AspectRatio; + + public VideoColor Color; + + public string FrameRate; + + public BitRate BitRate; + + public ControlledTerm PictureFormat; + } // class VideoAttributes +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColor.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColor.cs new file mode 100644 index 00000000..bbefe35b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColor.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("ColorType", Namespace = "urn:tva:metadata:2011")] + public class VideoColor + { + [XmlAttribute("type")] + public VideoColorKind Kind; + } // class VideoColor +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColorKind.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColorKind.cs new file mode 100644 index 00000000..86059bcb --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColorKind.cs @@ -0,0 +1,37 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType("ColorTypeType", Namespace = "urn:tva:metadata:2011")] + public enum VideoColorKind + { + [XmlEnum("color")] + Color, + + [XmlEnum("blackAndWhite")] + BlackAndWhite, + + [XmlEnum("blackAndWhiteAndColor")] + BlackAndWhiteAndColor, + + [XmlEnum("colorized")] + Colorized, + } // VideoColorKind +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ControlledTermUse.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ControlledTermUse.cs new file mode 100644 index 00000000..9db24331 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ControlledTermUse.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("ControlledTermUseType", Namespace = "urn:tva:mpeg7:2008")] + public class ControlledTermUse : InlineTermDefinition + { + [XmlAttribute("href")] + public string TermUrl; + } // class ControlledTermUse +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguage.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguage.cs new file mode 100644 index 00000000..de88d5ab --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguage.cs @@ -0,0 +1,49 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("ExtendedLanguageType", Namespace = "urn:tva:mpeg7:2008")] + [XmlInclude(typeof(AudioLanguage))] + public class ExtendedLanguage + { + + [XmlAttribute("type")] + [DefaultValue(ExtendedLanguageKind.Original)] + public ExtendedLanguageKind Kind; + + [XmlAttribute("supplemental")] + [DefaultValue(false)] + public bool Supplemental; + + [XmlText(DataType = "language")] + public string Value; + + public ExtendedLanguage() + { + Kind = ExtendedLanguageKind.Original; + Supplemental = false; + } // default constructor + } // class ExtendedLanguage +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguageKind.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguageKind.cs new file mode 100644 index 00000000..7d59d355 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguageKind.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType = true, Namespace = "urn:tva:mpeg7:2008")] + public enum ExtendedLanguageKind // original: ExtendedLanguageTypeType + { + [XmlEnum("original")] + Original, + [XmlEnum("dubbed")] + Dubbed, + [XmlEnum("background")] + Background, + } // enum ExtendedLanguageKind +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinition.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinition.cs new file mode 100644 index 00000000..7ea2a46c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinition.cs @@ -0,0 +1,37 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("InlineTermDefinitionType", Namespace = "urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TermUse))] + [XmlInclude(typeof(ControlledTermUse))] + public abstract class InlineTermDefinition + { + [XmlElement("Name")] + public InlineTermDefinitionTypeName[] Name; + + [XmlElement("Definition")] + public TextualData[] Definition; + } // class InlineTermDefinitionType +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinitionTypeName.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinitionTypeName.cs new file mode 100644 index 00000000..be3b1f0b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinitionTypeName.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = "urn:tva:mpeg7:2008")] + public class InlineTermDefinitionTypeName : TextualData + { + [XmlAttribute("preferred")] + public bool Preferred; + + [XmlIgnore] + public bool PreferredSpecified; + } // class InlineTermDefinitionTypeName +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ParentalGuidance.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ParentalGuidance.cs new file mode 100644 index 00000000..9a3381f5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ParentalGuidance.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("ParentalGuidance", Namespace = "urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TvaParentalGuidance))] + public class ParentalGuidance + { + [XmlElement("MinimumAge", typeof(string), DataType = "nonNegativeInteger")] + public string MinimumAge; + + [XmlElement("ParentalRating", typeof(ControlledTermUse))] + public ControlledTermUse ParentalRating; + + [XmlElement("Region")] + public string[] Region; + } // ParentalGuidance +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TermUse.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TermUse.cs new file mode 100644 index 00000000..9e16d3b5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TermUse.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("TermUseType", Namespace = "urn:tva:mpeg7:2008")] + public class TermUse : InlineTermDefinition + { + [XmlAttribute("href")] + public string TermUrl; + } // class TermUseType +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualBase.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualBase.cs new file mode 100644 index 00000000..890ef953 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualBase.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Schema; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("TextualBaseType", Namespace = "urn:tva:mpeg7:2008")] + //[XmlInclude(typeof(TitleType))] + //[XmlInclude(typeof(ShortTitleType))] + //[XmlInclude(typeof(TextualType))] + //[XmlInclude(typeof(OrganizationNameType))] + //[XmlInclude(typeof(ServiceInformationNameType))] + [XmlInclude(typeof(Explanation))] + //[XmlInclude(typeof(SynopsisType))] + //[XmlInclude(typeof(KeywordType))] + [XmlInclude(typeof(TermName))] + //[XmlInclude(typeof(NameComponentType))] + public abstract class TextualBase + { + [XmlAttribute("lang", Form = XmlSchemaForm.Qualified, Namespace = "http://www.w3.org/XML/1998/namespace")] + public string Language; + + [XmlText] + public string Value; + } // TextualBase +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualData.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualData.cs new file mode 100644 index 00000000..f17d7088 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualData.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 +{ + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType("TextualType", Namespace = "urn:tva:mpeg7:2008")] + //[XmlInclude(typeof(OrganizationNameType))] + //[XmlInclude(typeof(ServiceInformationNameType))] + [XmlInclude(typeof(Explanation))] + //[XmlInclude(typeof(SynopsisType))] + //[XmlInclude(typeof(KeywordType))] + [XmlInclude(typeof(TermName))] + public class TextualData : TextualBase + { + // no new elements or attributes + } // class TextualData +} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.4r13_subset.xsd b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.4r13_subset.xsd similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.4r13_subset.xsd rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.4r13_subset.xsd diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.5r25b.xsd b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.5r25b.xsd similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.5r25b.xsd rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.5r25b.xsd diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.cs b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.cs similarity index 96% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.cs rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.cs index 10bce63e..4ed2dc63 100644 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.cs +++ b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/sdns_v1.cs @@ -1,6951 +1,6951 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -using System; -using System.CodeDom.Compiler; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -// -// This source code was auto-generated by myxsdtool, Version=0.0.0.0. -// Sun, 12 Oct 2014 02:56:35 GMT -// - -namespace v010501r3 { - using System.Xml.Serialization; - using System; - using System.Diagnostics; - using System.ComponentModel; - - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlRoot(Namespace="urn:dvb:metadata:iptv:sdns:2012-1", IsNullable=false)] - public partial class ServiceDiscovery { - - [XmlElement("BCGDiscovery", typeof(BroadcastContentGuideOffering))] - [XmlElement("BroadcastDiscovery", typeof(BroadcastOffering))] - [XmlElement("CoDDiscovery", typeof(CoDOffering))] - [XmlElement("PackageDiscovery", typeof(PackagedServices))] - [XmlElement("RMSFUSDiscovery", typeof(RmsFusDiscovery))] - [XmlElement("RegionalizationDiscovery", typeof(RegionalizationOffering))] - [XmlElement("SRMDiscovery", typeof(SRMOffering))] - [XmlElement("ServiceProviderDiscovery", typeof(ServiceProviderDiscovery))] - [XmlElement("ServicesFromOtherSP", typeof(ReferencedServices))] - public object[] Items; - - [XmlAttribute] - public string Version; - } - - /// - /// [en] Provides information on Broadband Content Guide Offerings - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:BroadcastContentGuideOffering - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class BroadcastContentGuideOffering : OfferingBase { - - [XmlElement("BCG")] - public BroadcastContentGuideOfferingBCG[] BCG; - } - - /// - /// [en] Provides a list of TS or services discovery information - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:BroadcastOffering - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class BroadcastOffering : OfferingBase { - - [XmlElement("ServiceList")] - public IPServiceList[] ServiceList; - } - - /// - /// [en] Provides information on Content on Demand Offerings. Note that use of this is now deprecated and BCGOffering should be used instead - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:CoDOffering - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class CoDOffering : OfferingBase { - - [XmlElement("Catalogue")] - public CoDOfferingCatalogue[] Catalogue; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackagedServices : OfferingBase { - - [XmlElement("Package")] - public Package[] Package; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RmsFusDiscovery : OfferingBase { - - [XmlElement("FUSProvider", typeof(FirmwareUpdateProvider))] - [XmlElement("RMSProvider", typeof(RemoteManagementProvider))] - public object[] Items; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RegionalizationOffering : OfferingBase { - - [XmlElement("Cell")] - public RegionalizationCell[] Cell; - } - - /// - /// [en] Provides a list of SRM Announcement and Download Services - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMOffering - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SRMOffering : OfferingBase { - - [XmlElement("SRMAnnouncementService")] - public SRMAnnouncementServiceType[] SRMAnnouncementService; - - [XmlElement("SRMDownloadService")] - public SRMDownloadServiceType[] SRMDownloadService; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServiceProviderDiscovery { - - [XmlElement("ServiceProvider")] - public ServiceProvider[] ServiceProvider; - - [XmlAttribute] - public string Version; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ReferencedServices : OfferingBase { - - [XmlElement("ReferencedServiceProvider")] - public ReferencedServiceProviderType[] ReferencedServiceProvider; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class BroadcastContentGuideOfferingBCG { - - [XmlElement("Name")] - public MultilingualText[] Name; - - [XmlElement("Description")] - public MultilingualText[] Description; - - [XmlArrayItem("DVBSTP", typeof(DvbStpTransportMode), IsNullable=false)] - [XmlArrayItem("HTTP", typeof(HttpTransportMode), IsNullable=false)] - public PayloadList[] TransportMode; - - [XmlElement(DataType="anyURI")] - public string Logo; - - public ControlledTermType Type; - - [XmlElement("TargetProvider")] - public string[] TargetProvider; - - [XmlElement("BCGProviderName")] - public MultilingualText[] BCGProviderName; - - [XmlArrayItem("DVBSTP", typeof(CdsDownloadSessionDescriptionLocationDVBSTP), IsNullable=false)] - [XmlArrayItem("SAP", typeof(CdsDownloadSessionDescriptionLocationSAP), IsNullable=false)] - public object[] CDSDownloadSessionDescriptionLocation; - - [XmlAttribute] - public string Id; - - [XmlAttribute] - public string Version; - } - - /// - /// [en] Base class from which all offerings should be derived - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:OfferingBase - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlInclude(typeof(RmsFusDiscovery))] - [XmlInclude(typeof(RegionalizationOffering))] - [XmlInclude(typeof(BroadcastContentGuideOffering))] - [XmlInclude(typeof(CoDOffering))] - [XmlInclude(typeof(SRMOffering))] - [XmlInclude(typeof(ReferencedServices))] - [XmlInclude(typeof(PackagedServices))] - [XmlInclude(typeof(BroadcastOffering))] - public partial class OfferingBase { - - [XmlAttribute] - public string DomainName; - - [XmlAttribute] - public string Version; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class IPServiceList { - - [XmlElement("ServicesDescriptionLocation")] - public DescriptionLocationBCG[] ServicesDescriptionLocation; - - [XmlElement("SingleService")] - public IPService[] SingleService; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class CoDOfferingCatalogue { - - [XmlElement("Name")] - public MultilingualText[] Name; - - [XmlElement("Description")] - public MultilingualText[] Description; - - [XmlElement("Locator", DataType="anyURI")] - public string[] Locator; - - [XmlAttribute] - public string Id; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class Package { - - [XmlElement("PackageName")] - public MultilingualText[] PackageName; - - [XmlElement("CountryAvailability")] - public CountryAvailability[] CountryAvailability; - - [XmlElement("PackageDescription")] - public DescriptionLocationBCG[] PackageDescription; - - [XmlElement("Service")] - public PackagedServiceType[] Service; - - [XmlElement("PackageReference")] - public PackagePackageReference[] PackageReference; - - [XmlElement("PackageAvailability")] - public ServiceAvailability[] PackageAvailability; - - [XmlAttribute] - public string Id; - - [XmlAttribute] - [DefaultValue(true)] - public bool Visible; - - public Package() { - this.Visible = true; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class FirmwareUpdateProvider { - - [XmlElement("FUSName")] - public MultilingualText[] FUSName; - - public decimal FUSID; - - [XmlElement("Description")] - public MultilingualText[] Description; - - [XmlElement("FUSAnnouncement")] - public FirmwareUpdateAnnouncement[] FUSAnnouncement; - - [XmlAttribute(DataType="anyURI")] - public string LogoURI; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RemoteManagementProvider { - - [XmlElement("RMSName")] - public MultilingualText[] RMSName; - - public decimal RMSID; - - /// - [XmlIgnore] - public bool RMSIDSpecified; - - [XmlElement("Description")] - public MultilingualText[] Description; - - [XmlAttribute(DataType="anyURI")] - public string LogoURI; - - [XmlAttribute(DataType="anyURI")] - public string RMSLocation; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RegionalizationCell { - - public string CountryCode; - - [XmlElement("CA")] - public CivicAddress[] CA; - - [XmlAttribute] - public string Id; - } - - /// - /// [en] SRM Announcement Service information - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMAnnouncementServiceType - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SRMAnnouncementServiceType { - - [XmlElement("SRMID")] - public SRMIDType[] SRMID; - - public SRMAnnouncementModeType SRMAnnouncementMode; - - [XmlAttribute] - public string AnnouncementServiceVersion; - } - - /// - /// [en] FLUTE or HTTP download of SRM files - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMDownloadServiceType - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SRMDownloadServiceType { - - [XmlElement("FLUTE", typeof(SRMDownloadServiceFLUTEType))] - [XmlElement("HTTP", typeof(SRMDownloadServiceHTTPType))] - public object Item; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServiceProvider { - - [XmlElement("Name")] - public MultilingualText[] Name; - - [XmlElement("Description")] - public MultilingualText[] Description; - - [XmlArrayItem("Pull", typeof(ProviderOfferingPull), IsNullable=false)] - [XmlArrayItem("Push", typeof(DvbStpTransportMode), IsNullable=false)] - public PayloadList[] Offering; - - [XmlAttribute] - public string DomainName; - - [XmlAttribute] - public string Version; - - [XmlAttribute(DataType="anyURI")] - public string LogoURI; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ReferencedServiceProviderType { - - [XmlElement("Service")] - public ReferencedServiceProviderTypeService[] Service; - - [XmlAttribute] - public string Domain; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class UserDescriptionType { - - public UserPreferencesType UserPreferences; - - public UsageHistoryType UsageHistory; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ProgramDescriptionType { - - public ProgramInformationTableType ProgramInformationTable; - - public GroupInformationTableType GroupInformationTable; - - public ProgramLocationTableType ProgramLocationTable; - - public ServiceInformationTableType ServiceInformationTable; - - public CreditsInformationTableType CreditsInformationTable; - - public ProgramReviewTableType ProgramReviewTable; - - public SegmentInformationTableType SegmentInformationTable; - - public PurchaseInformationTableType PurchaseInformationTable; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(CreatorType))] - public partial class MediaAgentType { - - public ControlledTermUseType Role; - - [XmlElement("Agent", typeof(AgentType))] - [XmlElement("AgentRef", typeof(ReferenceType))] - public object Item; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class ElectronicAddressType { - - [XmlElement("Telephone")] - public ElectronicAddressTypeTelephone[] Telephone; - - [XmlElement("Fax")] - public string[] Fax; - - [XmlElement("Email")] - public string[] Email; - - [XmlElement("Url", DataType="anyURI")] - public string[] Url; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class GeographicPointType { - - [XmlAttribute] - public double longitude; - - [XmlAttribute] - public double latitude; - - [XmlAttribute] - public double altitude; - - /// - [XmlIgnore] - public bool altitudeSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class MappingTermType { - - public TextualType ClassificationSchemeAcronym; - - public TextualType ClassificationSchemeName; - - [XmlElement(DataType="anyURI")] - public string ClassificationSchemeURL; - - [XmlElement("OriginalTermName")] - public TextualType[] OriginalTermName; - - [XmlElement("OriginalTermDefinition")] - public TextualType[] OriginalTermDefinition; - - [XmlElement(DataType="date")] - public System.DateTime MappingDate; - - /// - [XmlIgnore] - public bool MappingDateSpecified; - - [XmlAttribute] - public string originalTermID; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class ReferenceType { - - [XmlAttribute(DataType="IDREF")] - public string idref; - - [XmlAttribute(DataType="anyURI")] - public string href; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class IncrDurationType { - - [XmlAttribute] - public string timeUnit; - - [XmlText(DataType="integer")] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class RelIncrTimePointType { - - [XmlAttribute] - public string timeUnit; - - [XmlAttribute(DataType="token")] - public string timeBase; - - [XmlText(DataType="integer")] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class RelTimePointType { - - [XmlAttribute(DataType="token")] - public string timeBase; - - [XmlText] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class TimeType { - - [XmlElement("RelIncrTimePoint", typeof(RelIncrTimePointType))] - [XmlElement("RelTimePoint", typeof(RelTimePointType))] - [XmlElement("TimePoint", typeof(string))] - public object Item; - - [XmlElement("Duration", typeof(string))] - [XmlElement("IncrDuration", typeof(IncrDurationType))] - public object Item1; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(HeaderType))] - [XmlInclude(typeof(ClassificationSchemeAliasType))] - [XmlInclude(typeof(CSAliasType))] - [XmlInclude(typeof(DType))] - [XmlInclude(typeof(PreferenceConditionType))] - [XmlInclude(typeof(MediaFormatType))] - [XmlInclude(typeof(DSType))] - [XmlInclude(typeof(UserPreferencesType))] - [XmlInclude(typeof(UserActionListType1))] - [XmlInclude(typeof(UserActionHistoryType1))] - [XmlInclude(typeof(UsageHistoryType1))] - [XmlInclude(typeof(SourcePreferencesType))] - [XmlInclude(typeof(FilteringAndSearchPreferencesType))] - [XmlInclude(typeof(CreationPreferencesType))] - [XmlInclude(typeof(ClassificationPreferencesType))] - [XmlInclude(typeof(SummaryPreferencesType))] - [XmlInclude(typeof(BrowsingPreferencesType))] - [XmlInclude(typeof(AgentType))] - [XmlInclude(typeof(PersonType))] - [XmlInclude(typeof(PersonGroupType))] - [XmlInclude(typeof(OrganizationType))] - [XmlInclude(typeof(PlaceType))] - [XmlInclude(typeof(TVAPlaceType))] - [XmlInclude(typeof(TermDefinitionBaseType))] - [XmlInclude(typeof(TermDefinitionType))] - [XmlInclude(typeof(ClassificationSchemeBaseType))] - [XmlInclude(typeof(ClassificationSchemeType))] - [XmlInclude(typeof(TVAClassificationSchemeType))] - [XmlInclude(typeof(TVATermDefinitionBaseType))] - [XmlInclude(typeof(TVATermDefinitionType))] - [XmlInclude(typeof(UserActionType))] - [XmlInclude(typeof(UserActionType1))] - [XmlInclude(typeof(UserActionListType))] - [XmlInclude(typeof(UserActionHistoryType))] - [XmlInclude(typeof(UsageHistoryType))] - public abstract partial class Mpeg7BaseType { - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ClassificationSchemeTableType { - - [XmlElement("CSAlias")] - public CSAliasType[] CSAlias; - - [XmlElement("ClassificationScheme")] - public TVAClassificationSchemeType[] ClassificationScheme; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class MetadataOriginationInformationType { - - [XmlElement("Publisher")] - public TextualType[] Publisher; - - [XmlElement("RightsOwner")] - public TextualType[] RightsOwner; - - [XmlElement("CopyrightNotice")] - public TextualType[] CopyrightNotice; - - [XmlAttribute] - public string originID; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class MetadataOriginationInformationTableType { - - [XmlElement("MetadataOriginationInformation")] - public MetadataOriginationInformationType[] MetadataOriginationInformation; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlRoot("TVAMain", Namespace="urn:tva:metadata:2011", IsNullable=false)] - public partial class TVAMainType { - - [XmlElement("CopyrightNotice")] - public TextualType[] CopyrightNotice; - - public MetadataOriginationInformationTableType MetadataOriginationInformationTable; - - public ClassificationSchemeTableType ClassificationSchemeTable; - - public ProgramDescriptionType ProgramDescription; - - [XmlElement("UserDescription")] - public UserDescriptionType[] UserDescription; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - - [XmlAttribute] - public string publisher; - - [XmlAttribute] - public System.DateTime publicationTime; - - /// - [XmlIgnore] - public bool publicationTimeSpecified; - - [XmlAttribute] - public string rightsOwner; - - [XmlAttribute] - public string originID; - - [XmlAttribute] - public uint version; - - /// - [XmlIgnore] - public bool versionSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class PurchaseInformationTableType { - - [XmlElement("PurchaseInformation")] - public PurchaseInformationType[] PurchaseInformation; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class CreditsInformationTableType { - - [XmlElement("OrganizationName", typeof(OrganizationNameType))] - [XmlElement("PersonName", typeof(TVAPersonNameType))] - public object[] Items; - - [XmlAttribute] - public string copyrightNotice; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ServiceInformationTableType { - - [XmlElement("ServiceInformation")] - public ServiceInformationType[] ServiceInformation; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ProgramLocationTableType { - - [XmlElement("Schedule")] - public ScheduleType[] Schedule; - - [XmlElement("BroadcastEvent")] - public BroadcastEventType[] BroadcastEvent; - - [XmlElement("OnDemandProgram")] - public OnDemandProgramType[] OnDemandProgram; - - [XmlElement("OnDemandService")] - public OnDemandServiceType[] OnDemandService; - - [XmlElement("PushDownloadProgram")] - public PushDownloadType[] PushDownloadProgram; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class GroupInformationTableType { - - [XmlElement("GroupInformation")] - public GroupInformationType[] GroupInformation; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ProgramInformationTableType { - - [XmlElement("ProgramInformation")] - public ProgramInformationType[] ProgramInformation; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class SegmentInformationTableType { - - [XmlArrayItem("SegmentInformation", IsNullable=false)] - public SegmentInformationType[] SegmentList; - - [XmlArrayItem("SegmentGroupInformation", IsNullable=false)] - public SegmentGroupInformationType[] SegmentGroupList; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(SegmentGroupTypeType))] - public abstract partial class BaseSegmentGroupTypeType { - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class SegmentGroupInformationType { - - public CRIDRefType ProgramRef; - - public TimeBaseReferenceType TimeBaseReference; - - [XmlElement("GroupType")] - public BaseSegmentGroupTypeType[] GroupType; - - public BasicSegmentDescriptionType Description; - - public GroupIntervalType GroupInterval; - - [XmlElement("Groups", typeof(GroupsType))] - [XmlElement("Segments", typeof(SegmentsType))] - public object Item; - - [XmlElement("KeyFrameLocator")] - public TVAMediaTimeType[] KeyFrameLocator; - - [XmlElement("OtherIdentifier")] - public UniqueIDType[] OtherIdentifier; - - [XmlAttribute] - public string groupId; - - [XmlAttribute] - [DefaultValue(true)] - public bool ordered; - - [XmlAttribute] - public ushort numberOfSegments; - - /// - [XmlIgnore] - public bool numberOfSegmentsSpecified; - - [XmlAttribute] - public ushort numberOfKeyFrames; - - /// - [XmlIgnore] - public bool numberOfKeyFramesSpecified; - - [XmlAttribute] - public string duration; - - [XmlAttribute] - public bool topLevel; - - /// - [XmlIgnore] - public bool topLevelSpecified; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - - public SegmentGroupInformationType() { - this.ordered = true; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class GroupsType { - - [XmlAttribute] - public string[] refList; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class SegmentsType { - - [XmlAttribute] - public string[] refList; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class GroupIntervalType { - - [XmlAttribute] - public string @ref; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class SegmentInformationType { - - public CRIDRefType ProgramRef; - - public TimeBaseReferenceType TimeBaseReference; - - public BasicSegmentDescriptionType Description; - - public TVAMediaTimeType SegmentLocator; - - [XmlElement("KeyFrameLocator")] - public TVAMediaTimeType[] KeyFrameLocator; - - [XmlElement("OtherIdentifier")] - public UniqueIDType[] OtherIdentifier; - - [XmlAttribute] - public string segmentId; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TimeBaseReferenceType { - - [XmlElement("MediaRelIncrTimePoint", typeof(MediaRelIncrTimePointType))] - [XmlElement("MediaTimePoint", typeof(string))] - public object Item; - - [XmlAttribute] - public string timebaseId; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TVAMediaRelIncrTimePointType))] - public partial class MediaRelIncrTimePointType { - - [XmlAttribute] - public string mediaTimeUnit; - - [XmlText(DataType="integer")] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class MediaRelTimePointType { - - [XmlText] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TVAMediaTimeType { - - [XmlElement("MediaRelIncrTimePoint", typeof(TVAMediaRelIncrTimePointType))] - [XmlElement("MediaRelTimePoint", typeof(MediaRelTimePointType))] - public object Item; - - [XmlElement("MediaDuration", typeof(string))] - [XmlElement("MediaIncrDuration", typeof(MediaIncrDurationType))] - public object Item1; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class BasicSegmentDescriptionType { - - [XmlElement("Title")] - public TitleType[] Title; - - [XmlElement("Synopsis")] - public SynopsisType[] Synopsis; - - [XmlElement("Genre")] - public GenreType[] Genre; - - [XmlElement("Keyword")] - public KeywordType[] Keyword; - - [XmlElement("RelatedMaterial")] - public RelatedMaterialType[] RelatedMaterial; - - [XmlArrayItem("CreditsItem", IsNullable=false)] - public CreditsItemType[] CreditsList; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ServiceInformationType { - - [XmlElement("Name")] - public ServiceInformationNameType[] Name; - - [XmlElement("Owner")] - public string[] Owner; - - [XmlElement(DataType="anyURI")] - public string ServiceURL; - - [XmlElement("Logo")] - public MediaLocatorType[] Logo; - - [XmlElement("ServiceDescription")] - public SynopsisType[] ServiceDescription; - - [XmlElement("ServiceGenre")] - public GenreType[] ServiceGenre; - - [XmlElement("ServiceLanguage", DataType="language")] - public string[] ServiceLanguage; - - [XmlElement("ParentService")] - public ServiceRefType[] ParentService; - - [XmlElement("RelatedMaterial")] - public RelatedMaterialType[] RelatedMaterial; - - public PurchaseListType PurchaseList; - - [XmlElement("GroupPurchaseIDRef")] - public string[] GroupPurchaseIDRef; - - [XmlAttribute] - public string serviceId; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ServiceRefType { - - [XmlElement("ValidPeriod")] - public ValidPeriodType[] ValidPeriod; - - [XmlAttribute] - public string serviceIDRef; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ValidPeriodType { - - public System.DateTime ValidFrom; - - /// - [XmlIgnore] - public bool ValidFromSpecified; - - public System.DateTime ValidTo; - - /// - [XmlIgnore] - public bool ValidToSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class OnDemandServiceType { - - [XmlElement("OnDemandProgram")] - public OnDemandProgramType[] OnDemandProgram; - - [XmlAttribute] - public string[] serviceIDRef; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ScheduleType { - - [XmlElement("ScheduleEvent")] - public ScheduleEventType[] ScheduleEvent; - - [XmlAttribute] - public string[] serviceIDRef; - - [XmlAttribute] - public System.DateTime start; - - /// - [XmlIgnore] - public bool startSpecified; - - [XmlAttribute] - public System.DateTime end; - - /// - [XmlIgnore] - public bool endSpecified; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class InstanceDescriptionType { - - [XmlElement("Title")] - public TitleType[] Title; - - [XmlElement("Synopsis")] - public SynopsisType[] Synopsis; - - [XmlElement("Genre")] - public GenreType[] Genre; - - public PurchaseListType PurchaseList; - - [XmlElement("CaptionLanguage")] - public CaptionLanguageType[] CaptionLanguage; - - [XmlElement("SignLanguage")] - public SignLanguageType[] SignLanguage; - - public AVAttributesType AVAttributes; - - [XmlElement("MemberOf")] - public BaseMemberOfType[] MemberOf; - - [XmlElement("OtherIdentifier")] - public UniqueIDType[] OtherIdentifier; - - [XmlElement("RelatedMaterial")] - public RelatedMaterialType[] RelatedMaterial; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(PushDownloadType))] - [XmlInclude(typeof(OnDemandProgramType))] - [XmlInclude(typeof(ScheduleEventType))] - [XmlInclude(typeof(BroadcastEventType))] - public abstract partial class ProgramLocationType { - - public CRIDRefType Program; - - [XmlElement(DataType="anyURI")] - public string ProgramURL; - - [XmlElement(DataType="anyURI")] - public string InstanceMetadataId; - - public InstanceDescriptionType InstanceDescription; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ProgramReviewTableType { - - [XmlElement("Review")] - public ReviewType[] Review; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class UserIdentifierType { - - public TextualType Name; - - [XmlAttribute] - [DefaultValue(userChoiceType.@true)] - public userChoiceType @protected; - - public UserIdentifierType() { - this.@protected = userChoiceType.@true; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class RatingType { - - public float RatingValue; - - public RatingTypeRatingScheme RatingScheme; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(ReviewType))] - public partial class MediaReviewType { - - [XmlElement("Rating")] - public RatingType[] Rating; - - [XmlElement("FreeTextReview")] - public TextualType[] FreeTextReview; - - [XmlElement("Reviewer")] - public ReviewerType[] Reviewer; - - [XmlElement(DataType="anyURI")] - public string ReviewReference; - - [XmlElement("Target")] - public UserIdentifierType[] Target; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class GroupInformationType { - - public BaseProgramGroupTypeType GroupType; - - public BasicContentDescriptionType BasicDescription; - - [XmlElement("MemberOf")] - public BaseMemberOfType[] MemberOf; - - [XmlElement("OtherIdentifier")] - public UniqueIDType[] OtherIdentifier; - - [XmlElement(DataType="anyURI")] - public string PartOfAggregatedGroup; - - public AggregationOfType AggregationOf; - - [XmlAttribute(DataType="anyURI")] - public string groupId; - - [XmlAttribute] - [DefaultValue(false)] - public bool ordered; - - [XmlAttribute] - public uint numOfItems; - - /// - [XmlIgnore] - public bool numOfItemsSpecified; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - - [XmlAttribute] - public string[] serviceIDRef; - - public GroupInformationType() { - this.ordered = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(ProgramGroupTypeType))] - public abstract partial class BaseProgramGroupTypeType { - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ProgramInformationType { - - public BasicContentDescriptionType BasicDescription; - - [XmlElement("OtherIdentifier")] - public UniqueIDType[] OtherIdentifier; - - public AVAttributesType AVAttributes; - - [XmlElement("MemberOf")] - public BaseMemberOfType[] MemberOf; - - public DerivedFromType DerivedFrom; - - public EpisodeOfType EpisodeOf; - - [XmlElement(DataType="anyURI")] - public string PartOfAggregatedProgram; - - public AggregationOfType AggregationOf; - - [XmlAttribute(DataType="anyURI")] - public string programId; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class AggregationOfType { - - [XmlElement("AggregatedProgram")] - public CRIDRefType[] AggregatedProgram; - - [XmlAttribute] - public AggregationOfTypeType type; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class AVAttributesType { - - public ControlledTermType FileFormat; - - public ulong FileSize; - - /// - [XmlIgnore] - public bool FileSizeSpecified; - - public ControlledTermType System; - - [XmlElement("BitRate")] - public BitRateType[] BitRate; - - [XmlElement("AudioAttributes")] - public AudioAttributesType[] AudioAttributes; - - public VideoAttributesType VideoAttributes; - - [XmlElement("CaptioningAttributes")] - public CaptioningAttributesType[] CaptioningAttributes; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class CaptioningAttributesType { - - public ControlledTermType Coding; - - public BitRateType BitRate; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class PurchaseListType { - - [XmlElement("PurchaseIdRef", typeof(string))] - [XmlElement("PurchaseItem", typeof(PurchaseItemType))] - public object[] Items; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class PriceType { - - [XmlAttribute] - public string currency; - - [XmlText] - public float Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(PurchaseInformationType))] - public partial class PurchaseItemType { - - [XmlElement("Price")] - public PriceType[] Price; - - [XmlElement("Purchase")] - public PurchaseType[] Purchase; - - [XmlElement("Description")] - public TextualType[] Description; - - [XmlElement("PricingServerURL", DataType="anyURI")] - public string[] PricingServerURL; - - public DRMDeclarationType DRMDeclaration; - - [XmlAttribute] - public System.DateTime start; - - /// - [XmlIgnore] - public bool startSpecified; - - [XmlAttribute] - public System.DateTime end; - - /// - [XmlIgnore] - public bool endSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class PurchaseType { - - [XmlElement("PurchaseType")] - public ControlledTermType PurchaseType1; - - public ControlledTermType QuantityUnit; - - public PurchaseTypeQuantityRange QuantityRange; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class DRMDeclarationType { - - [XmlElement(DataType="anyURI")] - public string DRM; - - [XmlElement("LicenseExpression", typeof(string))] - [XmlElement("LicenseLocator", typeof(string), DataType="anyURI")] - [XmlChoiceIdentifier("ItemElementName")] - public string Item; - - [XmlIgnore] - public ItemChoiceType2 ItemElementName; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ReleaseInformationType { - - public ReleaseDateType ReleaseDate; - - public string ReleaseLocation; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ReleaseDateType { - - [XmlElement("DayAndYear", typeof(System.DateTime), DataType="date")] - [XmlElement("Year", typeof(string), DataType="gYear")] - public object Item; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class FlagType { - - [XmlAttribute] - public bool value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(GenericDerivationReasonType))] - [XmlInclude(typeof(DerivationReasonType))] - public abstract partial class BaseDerivationReasonType { - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(BaseMemberOfType))] - [XmlInclude(typeof(DerivedFromType))] - [XmlInclude(typeof(MemberOfType))] - [XmlInclude(typeof(EpisodeOfType))] - public partial class CRIDRefType { - - [XmlAttribute(DataType="anyURI")] - public string crid; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class FecInfo { - - public FecLayerAddress FECBaseLayer; - - public FecLayerAddress FECEnhancementLayer; - - [XmlAttribute] - public ushort FECMaxBlockSize; - - /// - [XmlIgnore] - public bool FECMaxBlockSizeSpecified; - - [XmlAttribute] - public ushort FECMaxBlockTime; - - /// - [XmlIgnore] - public bool FECMaxBlockTimeSpecified; - - [XmlAttribute(DataType="base64Binary")] - public byte[] FECOTI; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RETInfoType { - - public RtcpRetransmissionReporting RTCPReporting; - - public UnicastRETType UnicastRET; - - public MulticastRETType MulticastRET; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServerBasedEnhancementServiceInfoType { - - public EnhancementServiceType EnhancementService; - - public RtcpRetransmissionReporting RTCPReporting; - - public UnicastRETType Retransmission_session; - - public MulticastRETType MulticastRET; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MulticastRETType { - - [XmlAttribute] - public string SourceAddress; - - [XmlAttribute] - public string GroupAddress; - - [XmlAttribute] - public uint ssrc; - - /// - [XmlIgnore] - public bool ssrcSpecified; - - [XmlAttribute] - public uint RTPPayloadTypeNumber; - - /// - [XmlIgnore] - public bool RTPPayloadTypeNumberSpecified; - - [XmlAttribute("rtcp-mux")] - [DefaultValue(false)] - public bool rtcpmux; - - [XmlAttribute] - public uint DestinationPort; - - /// - [XmlIgnore] - public bool DestinationPortSpecified; - - [XmlAttribute("rtx-time")] - public uint rtxtime; - - public MulticastRETType() { - this.rtcpmux = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class UnicastRETType { - - [XmlAttribute("trr-int")] - public uint trrint; - - /// - [XmlIgnore] - public bool trrintSpecified; - - [XmlAttribute("DestinationPort-ForRTCPReporting")] - public uint DestinationPortForRTCPReporting; - - /// - [XmlIgnore] - public bool DestinationPortForRTCPReportingSpecified; - - [XmlAttribute] - public string SourceAddress; - - [XmlAttribute] - public uint SourcePort; - - /// - [XmlIgnore] - public bool SourcePortSpecified; - - [XmlAttribute(DataType="anyURI")] - public string RTSPControlURL; - - [XmlAttribute] - public uint ssrc; - - /// - [XmlIgnore] - public bool ssrcSpecified; - - [XmlAttribute] - public uint RTPPayloadTypeNumber; - - /// - [XmlIgnore] - public bool RTPPayloadTypeNumberSpecified; - - [XmlAttribute("rtcp-mux")] - [DefaultValue(false)] - public bool rtcpmux; - - [XmlAttribute] - public uint DestinationPort; - - /// - [XmlIgnore] - public bool DestinationPortSpecified; - - [XmlAttribute("rtx-time")] - public uint rtxtime; - - public UnicastRETType() { - this.rtcpmux = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class DepictedCoordinatesType { - - public TVATimeType DepictedDate; - - public TVAPlaceType DepictedLocation; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class CreationCoordinatesType { - - public TVATimeType CreationDate; - - public string CreationLocation; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TVATimeType { - - public string TimePoint; - - public string Duration; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class AwardType { - - public TextualType Category; - - [XmlElement("Nominee", typeof(CreditsItemType))] - [XmlElement("Recipient", typeof(CreditsItemType))] - [XmlChoiceIdentifier("ItemElementName")] - public CreditsItemType Item; - - [XmlIgnore] - public ItemChoiceType1 ItemElementName; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class AwardsListItemType { - - public TextualType Title; - - [XmlElement(DataType="gYear")] - public string Year; - - [XmlElement("Award")] - public AwardType[] Award; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class SegmentReferenceType { - - [XmlAttribute] - [DefaultValue(segmentTypeType.segment)] - public segmentTypeType segmentType; - - [XmlAttribute] - public string @ref; - - public SegmentReferenceType() { - this.segmentType = segmentTypeType.segment; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class RelatedMaterialType { - - public ControlledTermType HowRelated; - - public ControlledTermType Format; - - [XmlElement("MediaLocator", typeof(MediaLocatorType))] - [XmlElement("SegmentReference", typeof(SegmentReferenceType))] - public object[] Items; - - [XmlElement("PromotionalText")] - public TextualType[] PromotionalText; - - [XmlElement("PromotionalMedia")] - public TitleMediaType[] PromotionalMedia; - - public MediaLocatorType SourceMediaLocator; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TVAIDRefElementType { - - [XmlAttribute] - public string @ref; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class UniqueIDType { - - [XmlAttribute(DataType="NMTOKEN")] - [DefaultValue("URI")] - public string type; - - [XmlAttribute(DataType="NMTOKEN")] - public string organization; - - [XmlAttribute(DataType="NMTOKEN")] - public string authority; - - [XmlAttribute] - [DefaultValue(UniqueIDTypeEncoding.text)] - public UniqueIDTypeEncoding encoding; - - [XmlText] - public string Value; - - public UniqueIDType() { - this.type = "URI"; - this.encoding = UniqueIDTypeEncoding.text; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TVAPersonNameType))] - public partial class PersonNameType { - - [XmlElement("FamilyName", typeof(NameComponentType))] - [XmlElement("GivenName", typeof(NameComponentType))] - [XmlElement("LinkingName", typeof(NameComponentType))] - [XmlElement("Numeration", typeof(string))] - [XmlElement("Salutation", typeof(NameComponentType))] - [XmlElement("Title", typeof(NameComponentType))] - [XmlChoiceIdentifier("ItemsElementName")] - public object[] Items; - - [XmlElement("ItemsElementName")] - [XmlIgnore] - public ItemsChoiceType[] ItemsElementName; - - [XmlAttribute] - public string dateFrom; - - [XmlAttribute] - public string dateTo; - - [XmlAttribute] - public PersonNameTypeType type; - - /// - [XmlIgnore] - public bool typeSpecified; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(ReviewerType))] - [XmlInclude(typeof(CreditsItemType))] - public partial class TVAAgentType { - - [XmlElement("OrganizationName", typeof(TextualType))] - [XmlElement("OrganizationNameIDRef", typeof(TVAIDRefElementType))] - [XmlElement("PersonName", typeof(PersonNameType))] - [XmlElement("PersonNameIDRef", typeof(TVAIDRefElementType))] - [XmlChoiceIdentifier("ItemsElementName")] - public object[] Items; - - [XmlElement("ItemsElementName")] - [XmlIgnore] - public ItemsChoiceType1[] ItemsElementName; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class SignLanguageType { - - [XmlAttribute] - public bool primary; - - /// - [XmlIgnore] - public bool primarySpecified; - - [XmlAttribute] - public bool translation; - - /// - [XmlIgnore] - public bool translationSpecified; - - [XmlAttribute] - public string type; - - [XmlAttribute] - public bool closed; - - /// - [XmlIgnore] - public bool closedSpecified; - - [XmlText(DataType="language")] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class CaptionLanguageType { - - [XmlAttribute] - public bool primary; - - /// - [XmlIgnore] - public bool primarySpecified; - - [XmlAttribute] - public bool translation; - - /// - [XmlIgnore] - public bool translationSpecified; - - [XmlAttribute] - [DefaultValue(true)] - public bool closed; - - [XmlAttribute] - [DefaultValue(false)] - public bool supplemental; - - [XmlText(DataType="language")] - public string Value; - - public CaptionLanguageType() { - this.closed = true; - this.supplemental = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TermUseType))] - [XmlInclude(typeof(ControlledTermUseType))] - public abstract partial class InlineTermDefinitionType { - - [XmlElement("Name")] - public InlineTermDefinitionTypeName[] Name; - - [XmlElement("Definition")] - public TextualType[] Definition; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TVAParentalGuidanceType))] - public partial class ParentalGuidanceType { - - [XmlElement("MinimumAge", typeof(string), DataType="nonNegativeInteger")] - [XmlElement("ParentalRating", typeof(ControlledTermUseType))] - public object Item; - - [XmlElement("Region")] - public string[] Region; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class MediaIncrDurationType { - - [XmlAttribute] - public string mediaTimeUnit; - - [XmlText(DataType="integer")] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class MediaTimeType { - - [XmlElement("MediaTimePoint")] - public string Item; - - [XmlElement("MediaDuration", typeof(string))] - [XmlElement("MediaIncrDuration", typeof(MediaIncrDurationType))] - public object Item1; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class InlineMediaType { - - [XmlElement("MediaData16", typeof(byte[]), DataType="hexBinary")] - [XmlElement("MediaData64", typeof(byte[]), DataType="base64Binary")] - [XmlChoiceIdentifier("ItemElementName")] - public byte[] Item; - - [XmlIgnore] - public ItemChoiceType ItemElementName; - - [XmlAttribute] - public string type; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TemporalSegmentLocatorType))] - [XmlInclude(typeof(ImageLocatorType))] - public partial class MediaLocatorType { - - [XmlElement("InlineMedia", typeof(InlineMediaType))] - [XmlElement("MediaUri", typeof(string), DataType="anyURI")] - public object Item; - - [XmlElement(DataType="nonNegativeInteger")] - public string StreamID; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class TitleMediaType { - - public ImageLocatorType TitleImage; - - public TemporalSegmentLocatorType TitleVideo; - - public TemporalSegmentLocatorType TitleAudio; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class BasicContentDescriptionType { - - [XmlElement("Title")] - public TitleType[] Title; - - [XmlElement("MediaTitle")] - public TitleMediaType[] MediaTitle; - - [XmlElement("ShortTitle")] - public ShortTitleType[] ShortTitle; - - [XmlElement("Synopsis")] - public SynopsisType[] Synopsis; - - [XmlElement("PromotionalInformation")] - public TextualType[] PromotionalInformation; - - [XmlElement("Keyword")] - public KeywordType[] Keyword; - - [XmlElement("Genre")] - public GenreType[] Genre; - - [XmlElement("ParentalGuidance")] - public TVAParentalGuidanceType[] ParentalGuidance; - - [XmlElement("Language")] - public ExtendedLanguageType[] Language; - - [XmlElement("CaptionLanguage")] - public CaptionLanguageType[] CaptionLanguage; - - [XmlElement("SignLanguage")] - public SignLanguageType[] SignLanguage; - - [XmlArrayItem("CreditsItem", IsNullable=false)] - public CreditsItemType[] CreditsList; - - [XmlArrayItem("AwardsListItem", IsNullable=false)] - public AwardsListItemType[] AwardsList; - - [XmlElement("RelatedMaterial")] - public RelatedMaterialType[] RelatedMaterial; - - public TVATimeType ProductionDate; - - [XmlElement("ProductionLocation")] - public string[] ProductionLocation; - - [XmlElement("CreationCoordinates")] - public CreationCoordinatesType[] CreationCoordinates; - - [XmlElement("DepictedCoordinates")] - public DepictedCoordinatesType[] DepictedCoordinates; - - [XmlElement("ReleaseInformation")] - public ReleaseInformationType[] ReleaseInformation; - - [XmlElement(DataType="duration")] - public string Duration; - - public PurchaseListType PurchaseList; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RmsFusMulticastAddressKind { - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public ushort Port; - - [XmlAttribute] - public RmsFusMulticastAddressKindProtocol Protocol; - - /// - [XmlIgnore] - public bool ProtocolSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class FirmwareUpdateAnnouncement { - - public string FUSAnnouncementDescription; - - public RmsFusMulticastAddressKind MulticastAnnouncementAddress; - - [XmlElement(DataType="anyURI")] - public string FUSUnicastAnnouncement; - - [XmlElement(DataType="anyURI")] - public string QRCLocation; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class CivicAddress { - - [XmlElement("CA")] - public CivicAddress[] CA; - - [XmlAttribute] - public string Type; - - [XmlAttribute] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class TargetPackageType { - - [XmlElement("PackageType")] - public MultilingualText[] PackageType; - - [XmlAttribute] - public string PackageIDRef; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PayloadListSegmentType { - - [XmlElement("TargetPackage")] - public TargetPackageType[] TargetPackage; - - [XmlAttribute] - public string Version; - - [XmlAttribute] - public string ID; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlInclude(typeof(DvbStpTransportMode))] - [XmlInclude(typeof(HttpTransportMode))] - public partial class PayloadList { - - [XmlElement("PayloadId")] - public PayloadListPayloadId[] PayloadId; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SRMDownloadServiceHTTPType { - - public SRMIDVerUType SRMIDVer; - - [XmlAttribute(DataType="anyURI")] - public string Location; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SRMDownloadServiceFLUTEType { - - [XmlElement("SRMIDVer")] - public SRMIDVerMType[] SRMIDVer; - - [XmlAttribute] - public string FLUTESessionVersion; - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public ushort Port; - - [XmlAttribute] - public ushort TSI; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SRMAnnouncementModeSAPType { - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public ushort Port; - } - - /// - /// [en] SAP or HTTP delivery of SRM Announcement Services - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMAnnouncementModeType - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SRMAnnouncementModeType { - - [XmlElement("HTTP", typeof(string), DataType="anyURI")] - [XmlElement("SAP", typeof(SRMAnnouncementModeSAPType))] - public object Item; - } - - /// - /// SRM specific ID (CP System ID, CP System SRM ID) - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMIDType - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlInclude(typeof(SRMIDVerUType))] - [XmlInclude(typeof(SRMIDVerMType))] - public partial class SRMIDType { - - [XmlAttribute] - public string CPSystemID; - - [XmlAttribute] - public string CPSystemSRMID; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackagedServiceType { - - [XmlElement("TextualID")] - public PackageTextualIdentifier[] TextualID; - - public DvbTriplet DVBTriplet; - - public DescriptionLocationBCG DescriptionLocation; - - [XmlElement(DataType="positiveInteger")] - public string LogicalChannelNumber; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackageAvailabilityCountryCode { - - [XmlAttribute] - [DefaultValue(true)] - public bool Availability; - - [XmlText] - public string Value; - - public PackageAvailabilityCountryCode() { - this.Availability = true; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServiceAvailability { - - public PackageAvailabilityCountryCode CountryCode; - - [XmlElement("Cells")] - public string[] Cells; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ColorType { - - [XmlAttribute] - public ColorTypeType type; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class AspectRatioType { - - [XmlAttribute] - [DefaultValue(AspectRatioTypeType.original)] - public AspectRatioTypeType type; - - [XmlText] - public string Value; - - public AspectRatioType() { - this.type = AspectRatioTypeType.original; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class VideoAttributesType { - - public ControlledTermType Coding; - - public ScanType Scan; - - /// - [XmlIgnore] - public bool ScanSpecified; - - public ushort HorizontalSize; - - /// - [XmlIgnore] - public bool HorizontalSizeSpecified; - - public ushort VerticalSize; - - /// - [XmlIgnore] - public bool VerticalSizeSpecified; - - [XmlElement("AspectRatio")] - public AspectRatioType[] AspectRatio; - - public ColorType Color; - - public string FrameRate; - - public BitRateType BitRate; - - public ControlledTermType PictureFormat; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class BitRateType { - - [XmlAttribute] - [DefaultValue(false)] - public bool variable; - - [XmlAttribute] - public ulong minimum; - - /// - [XmlIgnore] - public bool minimumSpecified; - - [XmlAttribute] - public ulong average; - - /// - [XmlIgnore] - public bool averageSpecified; - - [XmlAttribute] - public ulong maximum; - - /// - [XmlIgnore] - public bool maximumSpecified; - - [XmlText(DataType="nonNegativeInteger")] - public string Value; - - public BitRateType() { - this.variable = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(AudioLanguageType))] - public partial class ExtendedLanguageType { - - [XmlAttribute] - [DefaultValue(ExtendedLanguageTypeType.original)] - public ExtendedLanguageTypeType type; - - [XmlAttribute] - [DefaultValue(false)] - public bool supplemental; - - [XmlText(DataType="language")] - public string Value; - - public ExtendedLanguageType() { - this.type = ExtendedLanguageTypeType.original; - this.supplemental = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TitleType))] - [XmlInclude(typeof(ShortTitleType))] - [XmlInclude(typeof(TextualType))] - [XmlInclude(typeof(OrganizationNameType))] - [XmlInclude(typeof(ServiceInformationNameType))] - [XmlInclude(typeof(ExplanationType))] - [XmlInclude(typeof(SynopsisType))] - [XmlInclude(typeof(KeywordType))] - [XmlInclude(typeof(TermNameType))] - [XmlInclude(typeof(NameComponentType))] - public abstract partial class TextualBaseType { - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - - [XmlText] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(GenreType))] - public partial class ControlledTermType { - - public TermNameType Name; - - public TextualType Definition; - - [XmlAttribute] - public string href; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class AudioAttributesType { - - public ControlledTermType Coding; - - public ushort NumOfChannels; - - /// - [XmlIgnore] - public bool NumOfChannelsSpecified; - - public ControlledTermType MixType; - - public AudioLanguageType AudioLanguage; - - public uint SampleFrequency; - - /// - [XmlIgnore] - public bool SampleFrequencySpecified; - - public uint BitsPerSample; - - /// - [XmlIgnore] - public bool BitsPerSampleSpecified; - - public BitRateType BitRate; - } - - /// - /// [en] Implementation of the Announcement support indicator from ETSI EN 300 468. - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:AnnouncementSupport - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class AnnouncementSupport { - - [XmlElement("Announcement")] - public AnnouncementSupportAnnouncement[] Announcement; - - [XmlAttribute] - public string SupportIndicator; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescription { - - [XmlElement("LogicalCell")] - public MosaicDescriptionLogicalCell[] LogicalCell; - - [XmlAttribute] - [DefaultValue(true)] - public bool EntryPoint; - - [XmlAttribute] - public string HorizontalCellsNumber; - - [XmlAttribute] - public string VerticalCellsNumber; - - public MosaicDescription() { - this.EntryPoint = true; - } - } - - /// - /// [en] implementation of The replacement_Service part of the Linkage_Descriptor in ETSI EN 300 468. Describes a service to try if the specified one fails. - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:ReplacementService - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ReplacementService { - - [XmlElement("DVBTriplet", typeof(DvbTriplet))] - [XmlElement("TextualIdentifier", typeof(TextualIdentifier))] - public object Item; - - [XmlAttribute] - [DefaultValue("5")] - public string ReplacementType; - - public ReplacementService() { - this.ReplacementType = "5"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class CountryAvailability { - - [XmlAttribute] - public string Countries; - - [XmlAttribute] - [DefaultValue(true)] - public bool Available; - - public CountryAvailability() { - this.Available = true; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MultilingualText { - - [XmlAttribute] - public string Language; - - [XmlText] - public string Value; - } - - /// - /// Implementation of traditional DVB SI information about a service - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SI - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SI { - - [XmlElement("Name")] - public MultilingualText[] Name; - - [XmlElement("Description")] - public MultilingualText[] Description; - - [XmlElement("ServiceDescriptionLocation")] - public DescriptionLocationBCG[] ServiceDescriptionLocation; - - [XmlElement("ContentGenre")] - public sbyte[] ContentGenre; - - [XmlElement("CountryAvailability")] - public CountryAvailability[] CountryAvailability; - - [XmlElement("ReplacementService")] - public ReplacementService[] ReplacementService; - - public MosaicDescription MosaicDescription; - - public AnnouncementSupport AnnouncementSupport; - - [XmlAttribute] - public string ServiceType; - - [XmlAttribute] - [DefaultValue(PrimaryServiceInformationSource.XML)] - public PrimaryServiceInformationSource PrimarySISource; - - public SI() { - this.PrimarySISource = PrimaryServiceInformationSource.XML; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class DvbTriplet { - - [XmlAttribute] - public ushort OrigNetId; - - [XmlAttribute] - public ushort TSId; - - [XmlAttribute] - public ushort ServiceId; - - [XmlAttribute] - public string TSIdWildcard; - - public DvbTriplet() { - this.TSIdWildcard = "*"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlInclude(typeof(PackageTextualIdentifier))] - public partial class TextualIdentifier { - - [XmlAttribute] - public string DomainName; - - [XmlAttribute] - public string ServiceName; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RtspUrl { - - [XmlAttribute(DataType="anyURI")] - public string RTSPControlURL; - - [XmlText(DataType="anyURI")] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MulticastRetransmission { - - [XmlAttribute] - public string SourceAddress; - - [XmlAttribute] - public string GroupAddress; - - [XmlAttribute] - public uint ssrc; - - /// - [XmlIgnore] - public bool ssrcSpecified; - - [XmlAttribute] - public uint RTPPayloadTypeNumber; - - /// - [XmlIgnore] - public bool RTPPayloadTypeNumberSpecified; - - [XmlAttribute("dvb-original-copy-ret")] - public bool dvboriginalcopyret; - - /// - [XmlIgnore] - public bool dvboriginalcopyretSpecified; - - [XmlAttribute("rtcp-mux")] - [DefaultValue(false)] - public bool rtcpmux; - - [XmlAttribute] - public uint DestinationPort; - - /// - [XmlIgnore] - public bool DestinationPortSpecified; - - [XmlAttribute("rtx-time")] - public uint rtxtime; - - public MulticastRetransmission() { - this.rtcpmux = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class UnicastRetransmission { - - [XmlAttribute("trr-int")] - public uint trrint; - - /// - [XmlIgnore] - public bool trrintSpecified; - - [XmlAttribute("DestinationPort-ForRTCPReporting")] - public uint DestinationPortForRTCPReporting; - - /// - [XmlIgnore] - public bool DestinationPortForRTCPReportingSpecified; - - [XmlAttribute] - public uint SourcePort; - - /// - [XmlIgnore] - public bool SourcePortSpecified; - - [XmlAttribute(DataType="anyURI")] - public string RTSPControlURL; - - [XmlAttribute] - public uint ssrc; - - /// - [XmlIgnore] - public bool ssrcSpecified; - - [XmlAttribute] - public uint RTPPayloadTypeNumber; - - /// - [XmlIgnore] - public bool RTPPayloadTypeNumberSpecified; - - [XmlAttribute("dvb-original-copy-ret")] - public bool dvboriginalcopyret; - - /// - [XmlIgnore] - public bool dvboriginalcopyretSpecified; - - [XmlAttribute("rtcp-mux")] - [DefaultValue(false)] - public bool rtcpmux; - - [XmlAttribute] - public uint DestinationPort; - - /// - [XmlIgnore] - public bool DestinationPortSpecified; - - [XmlAttribute("rtx-time")] - public uint rtxtime; - - public UnicastRetransmission() { - this.rtcpmux = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RtcpRetransmissionReporting { - - [XmlAttribute] - public string DestinationAddress; - - [XmlAttribute] - public ushort DestinationPort; - - /// - [XmlIgnore] - public bool DestinationPortSpecified; - - [XmlAttribute("dvb-t-ret", DataType="positiveInteger")] - public string dvbtret; - - [XmlAttribute("rtcp-bandwidth", DataType="positiveInteger")] - public string rtcpbandwidth; - - [XmlAttribute("rtcp-rsize", DataType="positiveInteger")] - public string rtcprsize; - - [XmlAttribute("trr-int", DataType="positiveInteger")] - public string trrint; - - [XmlAttribute("dvb-disable-rtcp-rr")] - [DefaultValue(false)] - public bool dvbdisablertcprr; - - [XmlAttribute("dvb-enable-byte")] - [DefaultValue(false)] - public bool dvbenablebyte; - - [XmlAttribute("dvb-t-wait-min")] - [DefaultValue(typeof(uint), "0")] - public uint dvbtwaitmin; - - [XmlAttribute("dvb-t-wait-max")] - [DefaultValue(typeof(uint), "0")] - public uint dvbtwaitmax; - - [XmlAttribute("dvb-ssrc-bitmask")] - [DefaultValue("ffffffff")] - public string dvbssrcbitmask; - - [XmlAttribute("dvb-rsi-mc-ret")] - public bool dvbrsimcret; - - /// - [XmlIgnore] - public bool dvbrsimcretSpecified; - - [XmlAttribute("dvb-ssrc-upstream-client", DataType="positiveInteger")] - public string dvbssrcupstreamclient; - - public RtcpRetransmissionReporting() { - this.dvbdisablertcprr = false; - this.dvbenablebyte = false; - this.dvbtwaitmin = ((uint)(0)); - this.dvbtwaitmax = ((uint)(0)); - this.dvbssrcbitmask = "ffffffff"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RetransmissionInfo { - - public RtcpRetransmissionReporting RTCPReporting; - - public UnicastRetransmission UnicastRET; - - public MulticastRetransmission MulticastRET; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class FecLayerAddress { - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public ushort Port; - - /// - [XmlIgnore] - public bool PortSpecified; - - [XmlAttribute(DataType="positiveInteger")] - public string MaxBitrate; - - [XmlAttribute(DataType="anyURI")] - public string RTSPControlURL; - - [XmlAttribute] - public uint PayloadTypeNumber; - - /// - [XmlIgnore] - public bool PayloadTypeNumberSpecified; - - [XmlAttribute] - public TransportProtocolType TransportProtocol; - - /// - [XmlIgnore] - public bool TransportProtocolSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class IpMulticastAddress { - - public FecLayerAddress FECBaseLayer; - - [XmlElement("FECEnhancementLayer")] - public FecLayerAddress[] FECEnhancementLayer; - - public string CNAME; - - public uint ssrc; - - /// - [XmlIgnore] - public bool ssrcSpecified; - - public RetransmissionInfo RTPRetransmission; - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public ushort Port; - - [XmlAttribute] - public StreamingType Streaming; - - /// - [XmlIgnore] - public bool StreamingSpecified; - } - - /// - /// [en] The location of a service. Currently this supports either a broadcast system identifier or a multicast address (ASM and SSM) or RTSP. - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:ServiceLocation - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServiceLocation { - - [XmlElement("BroadcastSystem", typeof(string))] - [XmlElement("IPMulticastAddress", typeof(IpMulticastAddress))] - [XmlElement("RTSPURL", typeof(RtspUrl))] - public object[] Items; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class IPService { - - public ServiceLocation ServiceLocation; - - public TextualIdentifier TextualIdentifier; - - [XmlElement("DVBTriplet")] - public DvbTriplet[] DVBTriplet; - - [XmlElement(DataType="positiveInteger")] - public string MaxBitrate; - - public SI SI; - - [XmlElement("AudioAttributes")] - public AudioAttributesType[] AudioAttributes; - - [XmlElement("VideoAttributes")] - public VideoAttributesType[] VideoAttributes; - - [XmlElement("ServiceAvailability")] - public ServiceAvailability[] ServiceAvailability; - - [XmlElement("Usage")] - public Usage[] Usage; - - [XmlElement("LinkedService")] - public IPService[] LinkedService; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class DescriptionLocationBCG { - - [XmlAttribute] - public bool preferred; - - /// - [XmlIgnore] - public bool preferredSpecified; - - [XmlText] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackagePackageReference { - - [XmlAttribute] - public string Id; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ReferencedServiceProviderTypeService { - - [XmlAttribute] - public string Name; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class UserPreferencesType : DSType { - - public UserIdentifierType UserIdentifier; - - [XmlElement("FilteringAndSearchPreferences")] - public FilteringAndSearchPreferencesType[] FilteringAndSearchPreferences; - - [XmlElement("BrowsingPreferences")] - public BrowsingPreferencesType[] BrowsingPreferences; - - [XmlAttribute] - [DefaultValue(userChoiceType.@false)] - public userChoiceType allowAutomaticUpdate; - - public UserPreferencesType() { - this.allowAutomaticUpdate = userChoiceType.@false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class UsageHistoryType : DSType { - - public UserIdentifierType UserIdentifier; - - [XmlElement("UserActionHistory")] - public UserActionHistoryType[] UserActionHistory; - - [XmlAttribute] - [DefaultValue(userChoiceType.@false)] - public userChoiceType allowCollection; - - public UsageHistoryType() { - this.allowCollection = userChoiceType.@false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class ControlledTermUseType : InlineTermDefinitionType { - - [XmlAttribute] - public string href; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(PersonType))] - [XmlInclude(typeof(PersonGroupType))] - [XmlInclude(typeof(OrganizationType))] - public abstract partial class AgentType : DSType { - - [XmlElement("Icon")] - public MediaLocatorType[] Icon; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class CreatorType : MediaAgentType { - - [XmlElement("Character")] - public PersonNameType[] Character; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ElectronicAddressTypeTelephone { - - [XmlAttribute] - public ElectronicAddressTypeTelephoneType type; - - /// - [XmlIgnore] - public bool typeSpecified; - - [XmlText] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(OrganizationNameType))] - [XmlInclude(typeof(ServiceInformationNameType))] - [XmlInclude(typeof(ExplanationType))] - [XmlInclude(typeof(SynopsisType))] - [XmlInclude(typeof(KeywordType))] - [XmlInclude(typeof(TermNameType))] - public partial class TextualType : TextualBaseType { - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(ClassificationSchemeAliasType))] - [XmlInclude(typeof(CSAliasType))] - public abstract partial class HeaderType : Mpeg7BaseType { - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(PreferenceConditionType))] - [XmlInclude(typeof(MediaFormatType))] - public abstract partial class DType : Mpeg7BaseType { - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(UserPreferencesType))] - [XmlInclude(typeof(UserActionListType1))] - [XmlInclude(typeof(UserActionHistoryType1))] - [XmlInclude(typeof(UsageHistoryType1))] - [XmlInclude(typeof(SourcePreferencesType))] - [XmlInclude(typeof(FilteringAndSearchPreferencesType))] - [XmlInclude(typeof(CreationPreferencesType))] - [XmlInclude(typeof(ClassificationPreferencesType))] - [XmlInclude(typeof(SummaryPreferencesType))] - [XmlInclude(typeof(BrowsingPreferencesType))] - [XmlInclude(typeof(AgentType))] - [XmlInclude(typeof(PersonType))] - [XmlInclude(typeof(PersonGroupType))] - [XmlInclude(typeof(OrganizationType))] - [XmlInclude(typeof(PlaceType))] - [XmlInclude(typeof(TVAPlaceType))] - [XmlInclude(typeof(TermDefinitionBaseType))] - [XmlInclude(typeof(TermDefinitionType))] - [XmlInclude(typeof(ClassificationSchemeBaseType))] - [XmlInclude(typeof(ClassificationSchemeType))] - [XmlInclude(typeof(TVAClassificationSchemeType))] - [XmlInclude(typeof(TVATermDefinitionBaseType))] - [XmlInclude(typeof(TVATermDefinitionType))] - [XmlInclude(typeof(UserActionType))] - [XmlInclude(typeof(UserActionType1))] - [XmlInclude(typeof(UserActionListType))] - [XmlInclude(typeof(UserActionHistoryType))] - [XmlInclude(typeof(UsageHistoryType))] - public abstract partial class DSType : Mpeg7BaseType { - - [XmlAttribute(DataType="ID")] - public string id; - - [XmlAttribute(DataType="token")] - public string timeBase; - - [XmlAttribute] - public string timeUnit; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class CSAliasType : ClassificationSchemeAliasType { - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TVAClassificationSchemeType : ClassificationSchemeBaseType { - - [XmlElement("Term")] - public TVATermDefinitionType[] Term; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class PurchaseInformationType : PurchaseItemType { - - [XmlAttribute] - public string purchaseId; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class OrganizationNameType : TextualType { - - [XmlAttribute] - public string organizationNameId; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TVAPersonNameType : PersonNameType { - - [XmlElement("OtherIdentifier")] - public UniqueIDType[] OtherIdentifier; - - [XmlAttribute] - public string personNameId; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class BroadcastEventType : ScheduleEventType { - - [XmlAttribute] - public string[] serviceIDRef; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class OnDemandProgramType : ProgramLocationType { - - [XmlElement(DataType="duration")] - public string PublishedDuration; - - public System.DateTime StartOfAvailability; - - /// - [XmlIgnore] - public bool StartOfAvailabilitySpecified; - - public System.DateTime EndOfAvailability; - - /// - [XmlIgnore] - public bool EndOfAvailabilitySpecified; - - public FlagType FirstAvailability; - - public FlagType LastAvailability; - - public FlagType ImmediateViewing; - - public DeliveryModeType DeliveryMode; - - /// - [XmlIgnore] - public bool DeliveryModeSpecified; - - public byte ContentVersion; - - /// - [XmlIgnore] - public bool ContentVersionSpecified; - - public System.DateTime ExpiryTime; - - /// - [XmlIgnore] - public bool ExpiryTimeSpecified; - - public FlagType EarlyPlayout; - - public FlagType Free; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - - [XmlAttribute] - public string[] serviceIDRef; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class PushDownloadType : ProgramLocationType { - - [XmlElement(DataType="duration")] - public string PublishedDuration; - - public System.DateTime StartOfAvailability; - - /// - [XmlIgnore] - public bool StartOfAvailabilitySpecified; - - public System.DateTime EndOfAvailability; - - /// - [XmlIgnore] - public bool EndOfAvailabilitySpecified; - - public byte ContentVersion; - - /// - [XmlIgnore] - public bool ContentVersionSpecified; - - public System.DateTime ExpiryTime; - - /// - [XmlIgnore] - public bool ExpiryTimeSpecified; - - public System.DateTime ActivationTime; - - /// - [XmlIgnore] - public bool ActivationTimeSpecified; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - - [XmlAttribute] - public string[] serviceIDRef; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class SegmentGroupTypeType : BaseSegmentGroupTypeType { - - [XmlAttribute] - public SegmentGroupTypeTypeValue value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TVAMediaRelIncrTimePointType : MediaRelIncrTimePointType { - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(ShortTitleType))] - public partial class TitleType : TextualBaseType { - - [XmlAttribute] - [DefaultValue("main")] - public string type; - - public TitleType() { - this.type = "main"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class SynopsisType : TextualType { - - [XmlAttribute] - public SynopsisLengthType length; - - /// - [XmlIgnore] - public bool lengthSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class GenreType : ControlledTermType { - - [XmlAttribute] - [DefaultValue(GenreTypeType.main)] - public GenreTypeType type; - - [XmlAttribute] - public string metadataOriginIDRef; - - public GenreType() { - this.type = GenreTypeType.main; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class KeywordType : TextualType { - - [XmlAttribute] - [DefaultValue(KeywordTypeType.main)] - public KeywordTypeType type; - - [XmlAttribute] - public string metadataOriginIDRef; - - public KeywordType() { - this.type = KeywordTypeType.main; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ServiceInformationNameType : TextualType { - - [XmlAttribute] - public serviceInformationNameLengthType length; - - /// - [XmlIgnore] - public bool lengthSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(BroadcastEventType))] - public partial class ScheduleEventType : ProgramLocationType { - - public System.DateTime PublishedStartTime; - - /// - [XmlIgnore] - public bool PublishedStartTimeSpecified; - - public System.DateTime PublishedEndTime; - - /// - [XmlIgnore] - public bool PublishedEndTimeSpecified; - - [XmlElement(DataType="duration")] - public string PublishedDuration; - - public FlagType Live; - - public FlagType Repeat; - - public FlagType FirstShowing; - - public FlagType LastShowing; - - public FlagType Free; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(DerivedFromType))] - [XmlInclude(typeof(MemberOfType))] - [XmlInclude(typeof(EpisodeOfType))] - public abstract partial class BaseMemberOfType : CRIDRefType { - - [XmlAttribute] - public uint index; - - /// - [XmlIgnore] - public bool indexSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ReviewType : MediaReviewType { - - [XmlAttribute(DataType="anyURI")] - public string programId; - - [XmlAttribute] - public string fragmentId; - - [XmlAttribute] - public ulong fragmentVersion; - - /// - [XmlIgnore] - public bool fragmentVersionSpecified; - - [XmlAttribute] - public System.DateTime fragmentExpirationDate; - - /// - [XmlIgnore] - public bool fragmentExpirationDateSpecified; - - [XmlAttribute] - public string metadataOriginIDRef; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public enum userChoiceType { - - /// - @true, - - /// - @false, - - /// - user, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class RatingTypeRatingScheme : TermUseType { - - [XmlAttribute] - public float best; - - /// - [XmlIgnore] - public bool bestSpecified; - - [XmlAttribute] - public float worst; - - /// - [XmlIgnore] - public bool worstSpecified; - - [XmlAttribute] - public RatingTypeRatingSchemeStyle style; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ReviewerType : TVAAgentType { - - public TextualType Publication; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ProgramGroupTypeType : BaseProgramGroupTypeType { - - [XmlAttribute] - public ProgramGroupTypeTypeValue value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class DerivedFromType : BaseMemberOfType { - - [XmlElement("DerivationReason")] - public GenericDerivationReasonType[] DerivationReason; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class EpisodeOfType : BaseMemberOfType { - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public enum AggregationOfTypeType { - - /// - omnibus, - - /// - magazine, - - /// - split, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public partial class PurchaseTypeQuantityRange { - - [XmlAttribute] - public uint min; - - /// - [XmlIgnore] - public bool minSpecified; - - [XmlAttribute] - public uint max; - - /// - [XmlIgnore] - public bool maxSpecified; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011", IncludeInSchema=false)] - public enum ItemChoiceType2 { - - /// - LicenseExpression, - - /// - LicenseLocator, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class GenericDerivationReasonType : BaseDerivationReasonType { - - [XmlElement("Classifier")] - public ControlledTermType[] Classifier; - - [XmlElement("Description")] - public TextualType[] Description; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class DerivationReasonType : BaseDerivationReasonType { - - [XmlAttribute] - public DerivationReasonTypeValue value; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public enum EnhancementServiceType { - - /// - FCC, - - /// - RET, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TVAPlaceType : PlaceType { - - [XmlAttribute] - [DefaultValue(false)] - public bool fictional; - - public TVAPlaceType() { - this.fictional = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class CreditsItemType : TVAAgentType { - - [XmlElement("Character", typeof(PersonNameType))] - [XmlElement("PresentationRole", typeof(TextualType))] - public object[] Items1; - - [XmlElement("RelatedMaterial")] - public RelatedMaterialType[] RelatedMaterial; - - [XmlAttribute] - public string role; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string index; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011", IncludeInSchema=false)] - public enum ItemChoiceType1 { - - /// - Nominee, - - /// - Recipient, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011")] - public enum segmentTypeType { - - /// - segment, - - /// - segmentgroup, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum UniqueIDTypeEncoding { - - /// - text, - - /// - base16, - - /// - base64, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class NameComponentType : TextualBaseType { - - [XmlAttribute] - public string initial; - - [XmlAttribute] - public string abbrev; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:mpeg7:2008", IncludeInSchema=false)] - public enum ItemsChoiceType { - - /// - FamilyName, - - /// - GivenName, - - /// - LinkingName, - - /// - Numeration, - - /// - Salutation, - - /// - Title, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum PersonNameTypeType { - - /// - former, - - /// - variant, - - /// - main, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011", IncludeInSchema=false)] - public enum ItemsChoiceType1 { - - /// - OrganizationName, - - /// - OrganizationNameIDRef, - - /// - PersonName, - - /// - PersonNameIDRef, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class InlineTermDefinitionTypeName : TextualType { - - [XmlAttribute] - public bool preferred; - - /// - [XmlIgnore] - public bool preferredSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class TermUseType : InlineTermDefinitionType { - - [XmlAttribute] - public string href; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TVAParentalGuidanceType : ParentalGuidanceType { - - [XmlElement("ExplanatoryText")] - public ExplanationType[] ExplanatoryText; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:mpeg7:2008", IncludeInSchema=false)] - public enum ItemChoiceType { - - /// - MediaData16, - - /// - MediaData64, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class TemporalSegmentLocatorType : MediaLocatorType { - - [XmlElement("BytePosition", typeof(TemporalSegmentLocatorTypeBytePosition))] - [XmlElement("MediaTime", typeof(MediaTimeType))] - public object Item1; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class ImageLocatorType : MediaLocatorType { - - [XmlElement("BytePosition", typeof(ImageLocatorTypeBytePosition))] - [XmlElement("MediaTimePoint", typeof(string))] - public object Item1; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ShortTitleType : TitleType { - - [XmlAttribute] - public ushort length; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public enum RmsFusMulticastAddressKindProtocol { - - /// - [XmlEnum("1 SAP")] - Item1SAP, - - /// - [XmlEnum("2 DVBSTP")] - Item2DVBSTP, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PayloadListPayloadId { - - [XmlElement("Segment")] - public PayloadListSegmentType[] Segment; - - [XmlAttribute] - public string Id; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class DvbStpTransportMode : PayloadList { - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public ushort Port; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class HttpTransportMode : PayloadList { - - [XmlAttribute(DataType="anyURI")] - public string Location; - - [XmlAttribute] - [DefaultValue("false")] - public string SOAP; - - public HttpTransportMode() { - this.SOAP = "false"; - } - } - - /// - /// SRM ID and SRM file version - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMIDVerUType - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SRMIDVerUType : SRMIDType { - - [XmlAttribute] - public string SRMFileVersion; - } - - /// - /// SRM ID and optional SRM file version - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMIDVerMType - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class SRMIDVerMType : SRMIDType { - - [XmlAttribute] - public string SRMFileVersion; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackageTextualIdentifier : TextualIdentifier { - - [XmlAttribute(DataType="positiveInteger")] - public string Priority; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011")] - public enum ColorTypeType { - - /// - color, - - /// - blackAndWhite, - - /// - blackAndWhiteAndColor, - - /// - colorized, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public enum AspectRatioTypeType { - - /// - original, - - /// - publication, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011")] - public enum ScanType { - - /// - interlaced, - - /// - progressive, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum ExtendedLanguageTypeType { - - /// - original, - - /// - dubbed, - - /// - background, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class AudioLanguageType : ExtendedLanguageType { - - [XmlAttribute] - public string purpose; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TermNameType : TextualType { - - [XmlAttribute] - public bool preferred; - - /// - [XmlIgnore] - public bool preferredSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class AnnouncementSupportAnnouncement { - - [XmlElement("DVBTriplet", typeof(DvbTriplet))] - [XmlElement("TextualIdentifier", typeof(TextualIdentifier))] - public object Item; - - [XmlAttribute] - public string Type; - - [XmlAttribute] - public string ReferenceType; - - [XmlAttribute] - public string ComponentTag; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescriptionLogicalCell { - - [XmlElement("ElementaryCell")] - public MosaicDescriptionLogicalCellElementaryCell[] ElementaryCell; - - [XmlElement("AudioLink")] - public MosaicDescriptionLogicalCellAudioLink[] AudioLink; - - [XmlElement("DVBTriplet", typeof(DvbTriplet))] - [XmlElement("PackageId", typeof(MosaicDescriptionLogicalCellPackageId))] - [XmlElement("TextualId", typeof(TextualIdentifier))] - public object Item; - - [XmlAttribute] - public ushort CellId; - - [XmlAttribute] - public string PresentationInfo; - - [XmlAttribute] - public string LinkageInfo; - - [XmlAttribute] - public string EventId; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public enum PrimaryServiceInformationSource { - - /// - Stream, - - /// - XML, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public enum TransportProtocolType { - - /// - [XmlEnum("RTP-AVP")] - RTPAVP, - - /// - [XmlEnum("UDP-FEC")] - UDPFEC, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public enum StreamingType { - - /// - rtp, - - /// - udp, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public enum Usage { - - /// - FCC, - - /// - PiP, - - /// - Main, - - /// - HD, - - /// - SD, - - /// - [XmlEnum("3D")] - Item3D, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class CdsDownloadSessionDescriptionLocationDVBSTP { - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public ushort Port; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class CdsDownloadSessionDescriptionLocationSAP { - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public ushort Port; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ProviderOfferingPull : PayloadList { - - [XmlAttribute(DataType="anyURI")] - public string Location; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class FilteringAndSearchPreferencesType : DSType { - - [XmlElement("CreationPreferences")] - public CreationPreferencesType[] CreationPreferences; - - [XmlElement("ClassificationPreferences")] - public ClassificationPreferencesType[] ClassificationPreferences; - - [XmlElement("SourcePreferences")] - public SourcePreferencesType[] SourcePreferences; - - [XmlElement("PreferenceCondition")] - public PreferenceConditionType[] PreferenceCondition; - - [XmlElement("FilteringAndSearchPreferences")] - public FilteringAndSearchPreferencesType[] FilteringAndSearchPreferences; - - [XmlAttribute] - [DefaultValue(userChoiceType.@true)] - public userChoiceType @protected; - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public FilteringAndSearchPreferencesType() { - this.@protected = userChoiceType.@true; - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class BrowsingPreferencesType : DSType { - - [XmlElement("SummaryPreferences")] - public SummaryPreferencesType[] SummaryPreferences; - - [XmlElement("PreferenceCondition")] - public BrowsingPreferencesTypePreferenceCondition[] PreferenceCondition; - - [XmlAttribute] - [DefaultValue(userChoiceType.@true)] - public userChoiceType @protected; - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public BrowsingPreferencesType() { - this.@protected = userChoiceType.@true; - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class UserActionHistoryType : DSType { - - [XmlElement("ObservationPeriod")] - public TimeType[] ObservationPeriod; - - [XmlElement("UserActionList")] - public UserActionListType[] UserActionList; - - [XmlAttribute] - [DefaultValue(userChoiceType.@true)] - public userChoiceType @protected; - - public UserActionHistoryType() { - this.@protected = userChoiceType.@true; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class PersonType : AgentType { - - [XmlElement("Name", typeof(PersonNameType))] - [XmlElement("NameTerm", typeof(ControlledTermUseType))] - public object[] Items; - - [XmlElement("Affiliation")] - public PersonTypeAffiliation[] Affiliation; - - [XmlElement("Citizenship")] - public string[] Citizenship; - - [XmlElement("Address", typeof(PlaceType))] - [XmlElement("AddressRef", typeof(ReferenceType))] - public object Item; - - [XmlElement("ElectronicAddress")] - public ElectronicAddressType[] ElectronicAddress; - - public TextualType PersonDescription; - - public string Nationality; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class PersonGroupType : AgentType { - - [XmlElement("Name")] - public PersonGroupTypeName[] Name; - - [XmlElement("NameTerm")] - public PersonGroupTypeNameTerm[] NameTerm; - - public TermUseType Kind; - - [XmlElement("Member", typeof(PersonType))] - [XmlElement("MemberRef", typeof(ReferenceType))] - public object[] Items; - - [XmlElement("Jurisdiction", typeof(PlaceType))] - [XmlElement("JurisdictionRef", typeof(ReferenceType))] - public object Item; - - [XmlElement("Address", typeof(PlaceType))] - [XmlElement("AddressRef", typeof(ReferenceType))] - public object Item1; - - public ElectronicAddressType ElectronicAddress; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class OrganizationType : AgentType { - - [XmlElement("Name")] - public OrganizationTypeName[] Name; - - [XmlElement("NameTerm")] - public OrganizationTypeNameTerm[] NameTerm; - - public TermUseType Kind; - - [XmlElement("Contact", typeof(AgentType))] - [XmlElement("ContactRef", typeof(ReferenceType))] - public object[] Items; - - [XmlElement("Jurisdiction", typeof(PlaceType))] - [XmlElement("JurisdictionRef", typeof(ReferenceType))] - public object Item; - - [XmlElement("Address", typeof(PlaceType))] - [XmlElement("AddressRef", typeof(ReferenceType))] - public object Item1; - - public ElectronicAddressType ElectronicAddress; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum ElectronicAddressTypeTelephoneType { - - /// - central, - - /// - secondary, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class ExplanationType : TextualType { - - [XmlAttribute] - public ExplanationLengthType length; - - /// - [XmlIgnore] - public bool lengthSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(CSAliasType))] - public partial class ClassificationSchemeAliasType : HeaderType { - - [XmlAttribute(DataType="NMTOKEN")] - public string alias; - - [XmlAttribute(DataType="anyURI")] - public string href; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class PreferenceConditionType : DType { - - public PlaceType Place; - - [XmlElement("Time")] - public PreferenceConditionTypeTime[] Time; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class MediaFormatType : DType { - - public ControlledTermUseType Content; - - public ControlledTermUseType Medium; - - public ControlledTermUseType FileFormat; - - [XmlElement(DataType="nonNegativeInteger")] - public string FileSize; - - public ControlledTermUseType System; - - public MediaFormatTypeBitRate BitRate; - - public MediaFormatTypeVisualCoding VisualCoding; - - public MediaFormatTypeAudioCoding AudioCoding; - - public ControlledTermUseType SceneCodingFormat; - - public ControlledTermUseType GraphicsCodingFormat; - - public ControlledTermUseType OtherCodingFormat; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName="UserActionListType", Namespace="urn:tva:mpeg7:2008")] - public partial class UserActionListType1 : DSType { - - public TermUseType ActionType; - - [XmlElement("UserAction")] - public UserActionType[] UserAction; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string numOfInstances; - - [XmlAttribute] - public string totalDuration; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName="UserActionHistoryType", Namespace="urn:tva:mpeg7:2008")] - public partial class UserActionHistoryType1 : DSType { - - [XmlElement("ObservationPeriod")] - public TimeType[] ObservationPeriod; - - [XmlElement("UserActionList")] - public UserActionListType1[] UserActionList; - - [XmlAttribute] - [DefaultValue(userChoiceType.@true)] - public userChoiceType @protected; - - public UserActionHistoryType1() { - this.@protected = userChoiceType.@true; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName="UsageHistoryType", Namespace="urn:tva:mpeg7:2008")] - public partial class UsageHistoryType1 : DSType { - - public UserIdentifierType UserIdentifier; - - [XmlElement("UserActionHistory")] - public UserActionHistoryType1[] UserActionHistory; - - [XmlAttribute] - [DefaultValue(userChoiceType.@false)] - public userChoiceType allowCollection; - - public UsageHistoryType1() { - this.allowCollection = userChoiceType.@false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class SourcePreferencesType : DSType { - - [XmlElement("DisseminationFormat")] - public SourcePreferencesTypeDisseminationFormat[] DisseminationFormat; - - [XmlElement("DisseminationSource")] - public SourcePreferencesTypeDisseminationSource[] DisseminationSource; - - [XmlElement("DisseminationLocation")] - public SourcePreferencesTypeDisseminationLocation[] DisseminationLocation; - - [XmlElement("DisseminationDate")] - public SourcePreferencesTypeDisseminationDate[] DisseminationDate; - - [XmlElement("Disseminator")] - public SourcePreferencesTypeDisseminator[] Disseminator; - - [XmlElement("MediaFormat")] - public SourcePreferencesTypeMediaFormat[] MediaFormat; - - [XmlAttribute] - public bool noRepeat; - - /// - [XmlIgnore] - public bool noRepeatSpecified; - - [XmlAttribute] - public bool noEncryption; - - /// - [XmlIgnore] - public bool noEncryptionSpecified; - - [XmlAttribute] - public bool noPayPerUse; - - /// - [XmlIgnore] - public bool noPayPerUseSpecified; - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public SourcePreferencesType() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class CreationPreferencesType : DSType { - - [XmlElement("Title")] - public CreationPreferencesTypeTitle[] Title; - - [XmlElement("Creator")] - public CreationPreferencesTypeCreator[] Creator; - - [XmlElement("Keyword")] - public CreationPreferencesTypeKeyword[] Keyword; - - [XmlElement("Location")] - public CreationPreferencesTypeLocation[] Location; - - [XmlElement("DatePeriod")] - public CreationPreferencesTypeDatePeriod[] DatePeriod; - - [XmlElement("Tool")] - public CreationPreferencesTypeTool[] Tool; - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public CreationPreferencesType() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesType : DSType { - - [XmlElement("Country")] - public ClassificationPreferencesTypeCountry[] Country; - - [XmlElement("DatePeriod")] - public ClassificationPreferencesTypeDatePeriod[] DatePeriod; - - [XmlElement("LanguageFormat")] - public ClassificationPreferencesTypeLanguageFormat[] LanguageFormat; - - [XmlElement("Language")] - public ClassificationPreferencesTypeLanguage[] Language; - - [XmlElement("CaptionLanguage")] - public ClassificationPreferencesTypeCaptionLanguage[] CaptionLanguage; - - [XmlElement("Form")] - public ClassificationPreferencesTypeForm[] Form; - - [XmlElement("Genre")] - public ClassificationPreferencesTypeGenre[] Genre; - - [XmlElement("Subject")] - public ClassificationPreferencesTypeSubject[] Subject; - - [XmlElement("Review")] - public ClassificationPreferencesTypeReview[] Review; - - [XmlElement("ParentalGuidance")] - public ClassificationPreferencesTypeParentalGuidance[] ParentalGuidance; - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public ClassificationPreferencesType() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class SummaryPreferencesType : DSType { - - [XmlElement("SummaryType")] - public SummaryPreferencesTypeSummaryType[] SummaryType; - - [XmlElement("SummaryTheme")] - public SummaryPreferencesTypeSummaryTheme[] SummaryTheme; - - public string SummaryDuration; - - public string MinSummaryDuration; - - public string MaxSummaryDuration; - - [XmlElement(DataType="positiveInteger")] - public string NumOfKeyFrames; - - [XmlElement(DataType="positiveInteger")] - public string MinNumOfKeyFrames; - - [XmlElement(DataType="positiveInteger")] - public string MaxNumOfKeyFrames; - - [XmlElement(DataType="positiveInteger")] - public string NumOfChars; - - [XmlElement(DataType="positiveInteger")] - public string MinNumOfChars; - - [XmlElement(DataType="positiveInteger")] - public string MaxNumOfChars; - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public SummaryPreferencesType() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TVAPlaceType))] - public partial class PlaceType : DSType { - - [XmlElement("Name")] - public TextualType[] Name; - - [XmlElement("NameTerm")] - public ControlledTermUseType[] NameTerm; - - public TermUseType Role; - - public PlaceTypeGeographicPosition GeographicPosition; - - [XmlElement("Region")] - public string[] Region; - - [XmlElement("AdministrativeUnit")] - public PlaceTypeAdministrativeUnit[] AdministrativeUnit; - - public PlaceTypePostalAddress PostalAddress; - - public string InternalCoordinates; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TermDefinitionType))] - public abstract partial class TermDefinitionBaseType : DSType { - - [XmlElement("Name")] - public TermDefinitionBaseTypeName[] Name; - - [XmlElement("Definition")] - public TextualType[] Definition; - - [XmlAttribute(DataType="NMTOKEN")] - public string termID; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(ClassificationSchemeType))] - [XmlInclude(typeof(TVAClassificationSchemeType))] - public abstract partial class ClassificationSchemeBaseType : DSType { - - [XmlElement("Import")] - public ReferenceType[] Import; - - [XmlAttribute(DataType="anyURI")] - public string uri; - - [XmlAttribute(DataType="token")] - public string[] domain; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - [XmlInclude(typeof(TVATermDefinitionType))] - public abstract partial class TVATermDefinitionBaseType : DSType { - - [XmlElement("Name")] - public TVATermDefinitionBaseTypeName[] Name; - - [XmlElement("Definition")] - public TextualType[] Definition; - - [XmlElement("EquivalentCSTerm", typeof(TVATermDefinitionBaseTypeEquivalentCSTerm))] - [XmlElement("mappingTerm", typeof(MappingTermType))] - public object[] Items; - - [XmlAttribute(DataType="NMTOKEN")] - public string termID; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - [XmlInclude(typeof(UserActionType1))] - public partial class UserActionType : DSType { - - public UserActionTypeActionTime ActionTime; - - public UniqueIDType ProgramIdentifier; - - [XmlElement("ActionDataItem")] - public ReferenceType[] ActionDataItem; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class UserActionListType : DSType { - - public TermUseType ActionType; - - [XmlElement("UserAction")] - public UserActionType1[] UserAction; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string numOfInstances; - - [XmlAttribute] - public string totalDuration; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class TVATermDefinitionType : TVATermDefinitionBaseType { - - [XmlElement("Term")] - public TVATermDefinitionTypeTerm[] Term; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011")] - public enum DeliveryModeType { - - /// - streaming, - - /// - download, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public enum SegmentGroupTypeTypeValue { - - /// - highlights, - - /// - [XmlEnum("highlights/objects")] - highlightsobjects, - - /// - [XmlEnum("highlights/events")] - highlightsevents, - - /// - bookmarks, - - /// - [XmlEnum("bookmarks/objects")] - bookmarksobjects, - - /// - [XmlEnum("bookmarks/events")] - bookmarksevents, - - /// - themeGroup, - - /// - preview, - - /// - [XmlEnum("preview/title")] - previewtitle, - - /// - [XmlEnum("preview/slideshow")] - previewslideshow, - - /// - tableOfContents, - - /// - synopsis, - - /// - shots, - - /// - insertionPoints, - - /// - alternativeGroups, - - /// - alternativeSegments, - - /// - other, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011")] - public enum SynopsisLengthType { - - /// - @short, - - /// - medium, - - /// - @long, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public enum GenreTypeType { - - /// - main, - - /// - secondary, - - /// - other, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public enum KeywordTypeType { - - /// - main, - - /// - secondary, - - /// - other, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011")] - public enum serviceInformationNameLengthType { - - /// - @short, - - /// - medium, - - /// - @long, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:metadata:2011")] - public partial class MemberOfType : BaseMemberOfType { - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum RatingTypeRatingSchemeStyle { - - /// - higherBetter, - - /// - lowerBetter, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public enum ProgramGroupTypeTypeValue { - - /// - series, - - /// - show, - - /// - programConcept, - - /// - programCompilation, - - /// - otherCollection, - - /// - otherChoice, - - /// - [XmlEnum("mini-series")] - miniseries, - - /// - brand, - - /// - automaticAcquisitionThemed, - - /// - automaticAcquisitionNonThemed, - - /// - clip, - - /// - application, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public enum DerivationReasonTypeValue { - - /// - violence, - - /// - language, - - /// - sex, - - /// - duration, - - /// - other, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class TemporalSegmentLocatorTypeBytePosition { - - [XmlAttribute(DataType="nonNegativeInteger")] - public string offset; - - [XmlAttribute(DataType="positiveInteger")] - public string length; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ImageLocatorTypeBytePosition { - - [XmlAttribute(DataType="nonNegativeInteger")] - public string offset; - - [XmlAttribute(DataType="positiveInteger")] - public string length; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescriptionLogicalCellElementaryCell { - - [XmlAttribute] - public ushort CellId; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescriptionLogicalCellAudioLink { - - [XmlAttribute] - public string Language; - - [XmlAttribute] - public string ComponentTag; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescriptionLogicalCellPackageId { - - [XmlAttribute] - public string Domain; - - [XmlText] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class BrowsingPreferencesTypePreferenceCondition : PreferenceConditionType { - - public TermUseType Genre; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class PersonTypeAffiliation { - - [XmlElement("Organization", typeof(OrganizationType))] - [XmlElement("OrganizationRef", typeof(ReferenceType))] - [XmlElement("PersonGroup", typeof(PersonGroupType))] - [XmlElement("PersonGroupRef", typeof(ReferenceType))] - [XmlChoiceIdentifier("ItemElementName")] - public object Item; - - [XmlIgnore] - public ItemChoiceType3 ItemElementName; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class PersonGroupTypeName : TextualType { - - [XmlAttribute] - public PersonGroupTypeNameType type; - - /// - [XmlIgnore] - public bool typeSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class PersonGroupTypeNameTerm : ControlledTermUseType { - - [XmlAttribute] - public PersonGroupTypeNameTermType type; - - /// - [XmlIgnore] - public bool typeSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class OrganizationTypeName : TextualType { - - [XmlAttribute] - public OrganizationTypeNameType type; - - /// - [XmlIgnore] - public bool typeSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class OrganizationTypeNameTerm : ControlledTermUseType { - - [XmlAttribute] - public OrganizationTypeNameTermType type; - - /// - [XmlIgnore] - public bool typeSpecified; - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:metadata:2011")] - public enum ExplanationLengthType { - - /// - @short, - - /// - medium, - - /// - @long, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class PreferenceConditionTypeTime : TimeType { - - [XmlAttribute] - [DefaultValue("none")] - public string recurrence; - - [XmlAttribute(DataType="positiveInteger")] - public string numOfRecurrences; - - public PreferenceConditionTypeTime() { - this.recurrence = "none"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class MediaFormatTypeBitRate { - - [XmlAttribute] - [DefaultValue(false)] - public bool variable; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string minimum; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string average; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string maximum; - - [XmlText(DataType="nonNegativeInteger")] - public string Value; - - public MediaFormatTypeBitRate() { - this.variable = false; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class MediaFormatTypeVisualCoding { - - public MediaFormatTypeVisualCodingFormat Format; - - public MediaFormatTypeVisualCodingPixel Pixel; - - public MediaFormatTypeVisualCodingFrame Frame; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class MediaFormatTypeAudioCoding { - - public ControlledTermUseType Format; - - public MediaFormatTypeAudioCodingAudioChannels AudioChannels; - - public MediaFormatTypeAudioCodingSample Sample; - - public string Emphasis; - - public ControlledTermUseType Presentation; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class SourcePreferencesTypeDisseminationFormat : TermUseType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public SourcePreferencesTypeDisseminationFormat() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class SourcePreferencesTypeDisseminationSource : TextualType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public SourcePreferencesTypeDisseminationSource() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class SourcePreferencesTypeDisseminationLocation : PlaceType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public SourcePreferencesTypeDisseminationLocation() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class SourcePreferencesTypeDisseminationDate : TimeType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public SourcePreferencesTypeDisseminationDate() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class SourcePreferencesTypeDisseminator : MediaAgentType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public SourcePreferencesTypeDisseminator() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class SourcePreferencesTypeMediaFormat : MediaFormatType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public SourcePreferencesTypeMediaFormat() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class CreationPreferencesTypeTitle : TitleType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public CreationPreferencesTypeTitle() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class CreationPreferencesTypeCreator : CreatorType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public CreationPreferencesTypeCreator() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class CreationPreferencesTypeKeyword : TextualType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public CreationPreferencesTypeKeyword() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class CreationPreferencesTypeLocation : PlaceType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public CreationPreferencesTypeLocation() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class CreationPreferencesTypeDatePeriod : TimeType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public CreationPreferencesTypeDatePeriod() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class CreationPreferencesTypeTool : TermUseType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public CreationPreferencesTypeTool() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeCountry { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - [XmlText] - public string Value; - - public ClassificationPreferencesTypeCountry() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeDatePeriod : TimeType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public ClassificationPreferencesTypeDatePeriod() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeLanguageFormat { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - [XmlText] - public string Value; - - public ClassificationPreferencesTypeLanguageFormat() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeLanguage : ExtendedLanguageType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public ClassificationPreferencesTypeLanguage() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeCaptionLanguage { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - [XmlText(DataType="language")] - public string Value; - - public ClassificationPreferencesTypeCaptionLanguage() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeForm : TermUseType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public ClassificationPreferencesTypeForm() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeGenre : TermUseType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public ClassificationPreferencesTypeGenre() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeSubject : TextualType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public ClassificationPreferencesTypeSubject() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeReview { - - public RatingType Rating; - - public AgentType Reviewer; - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public ClassificationPreferencesTypeReview() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationPreferencesTypeParentalGuidance : ParentalGuidanceType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public ClassificationPreferencesTypeParentalGuidance() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class SummaryPreferencesTypeSummaryType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - [XmlText] - public string Value; - - public SummaryPreferencesTypeSummaryType() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class SummaryPreferencesTypeSummaryTheme : TextualType { - - [XmlAttribute(DataType="integer")] - [DefaultValue("10")] - public string preferenceValue; - - public SummaryPreferencesTypeSummaryTheme() { - this.preferenceValue = "10"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class PlaceTypeGeographicPosition { - - public GeographicPointType Point; - - [XmlAttribute] - public string datum; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class PlaceTypeAdministrativeUnit { - - [XmlAttribute] - public string type; - - [XmlText] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class PlaceTypePostalAddress { - - [XmlElement("AddressLine")] - public TextualType[] AddressLine; - - public TextualType PostingIdentifier; - - [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] - public string lang; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class TermDefinitionBaseTypeName : TextualType { - - [XmlAttribute] - public bool preferred; - - /// - [XmlIgnore] - public bool preferredSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class TermDefinitionType : TermDefinitionBaseType { - - [XmlElement("Term")] - public TermDefinitionTypeTerm[] Term; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace="urn:tva:mpeg7:2008")] - public partial class ClassificationSchemeType : ClassificationSchemeBaseType { - - [XmlElement("Term")] - public TermDefinitionType[] Term; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public partial class TVATermDefinitionBaseTypeName : TextualType { - - [XmlAttribute] - public bool preferred; - - /// - [XmlIgnore] - public bool preferredSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public partial class TVATermDefinitionBaseTypeEquivalentCSTerm { - - [XmlAttribute] - public string href; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class UserActionTypeActionTime { - - public MediaTimeType MediaTime; - - public TimeType GeneralTime; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName="UserActionType", Namespace="urn:tva:metadata:2011")] - public partial class UserActionType1 : UserActionType { - - [XmlElement(DataType="anyURI")] - public string ProgramLocation; - - public RatingType Rating; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - public partial class TVATermDefinitionTypeTerm : TVATermDefinitionType { - - [XmlAttribute] - [DefaultValue("NT")] - public string relation; - - public TVATermDefinitionTypeTerm() { - this.relation = "NT"; - } - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(Namespace="urn:tva:mpeg7:2008", IncludeInSchema=false)] - public enum ItemChoiceType3 { - - /// - Organization, - - /// - OrganizationRef, - - /// - PersonGroup, - - /// - PersonGroupRef, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum PersonGroupTypeNameType { - - /// - former, - - /// - variant, - - /// - main, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum PersonGroupTypeNameTermType { - - /// - former, - - /// - variant, - - /// - main, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum OrganizationTypeNameType { - - /// - former, - - /// - variant, - - /// - main, - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum OrganizationTypeNameTermType { - - /// - former, - - /// - variant, - - /// - main, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class MediaFormatTypeVisualCodingFormat : ControlledTermUseType { - - [XmlAttribute] - [DefaultValue("color")] - public string colorDomain; - - public MediaFormatTypeVisualCodingFormat() { - this.colorDomain = "color"; - } - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class MediaFormatTypeVisualCodingPixel { - - [XmlAttribute(DataType="nonNegativeInteger")] - public string resolution; - - [XmlAttribute] - public double aspectRatio; - - /// - [XmlIgnore] - public bool aspectRatioSpecified; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string bitsPer; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class MediaFormatTypeVisualCodingFrame { - - [XmlAttribute(DataType="nonNegativeInteger")] - public string height; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string width; - - [XmlAttribute] - public double aspectRatio; - - /// - [XmlIgnore] - public bool aspectRatioSpecified; - - [XmlAttribute] - public double rate; - - /// - [XmlIgnore] - public bool rateSpecified; - - [XmlAttribute] - public MediaFormatTypeVisualCodingFrameStructure structure; - - /// - [XmlIgnore] - public bool structureSpecified; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class MediaFormatTypeAudioCodingAudioChannels { - - [XmlAttribute(DataType="nonNegativeInteger")] - public string front; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string side; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string rear; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string lfe; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string track; - - [XmlText(DataType="nonNegativeInteger")] - public string Value; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class MediaFormatTypeAudioCodingSample { - - [XmlAttribute] - public double rate; - - /// - [XmlIgnore] - public bool rateSpecified; - - [XmlAttribute(DataType="nonNegativeInteger")] - public string bitsPer; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public partial class TermDefinitionTypeTerm : TermDefinitionType { - - [XmlAttribute] - [DefaultValue("NT")] - public string relation; - - public TermDefinitionTypeTerm() { - this.relation = "NT"; - } - } - - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] - public enum MediaFormatTypeVisualCodingFrameStructure { - - /// - progressive, - - /// - interlaced, - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlRoot(Namespace="urn:dvb:metadata:iptv:sdns:2012-1", IsNullable=false)] - public partial class CoDAnnounceDescribe { - - public BasicContentDescriptionType ContentDescription; - - public FecInfo FECInfo; - - public RETInfoType RETInfo; - - public ServerBasedEnhancementServiceInfoType ServerBasedEnhancementServiceInfo; - - [XmlAttribute(DataType="anyURI")] - public string RTSPControlURL; - - [XmlAttribute] - public StreamingType Streaming; - - /// - [XmlIgnore] - public bool StreamingSpecified; - } - - /// - /// [en] Provides a list of SRM Download Services - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMDownloadRecord - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlRoot(Namespace="urn:dvb:metadata:iptv:sdns:2012-1", IsNullable=false)] - public partial class SRMDownloadRecord : OfferingBase { - - [XmlElement("SRMDownloadService")] - public SRMDownloadServiceType[] SRMDownloadService; - } - - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] - [XmlRoot(Namespace="urn:tva:metadata:2011", IsNullable=false)] - public partial class TVAContentLinks { - - [XmlElement("RelatedMaterial")] - public RelatedMaterialType[] RelatedMaterial; - } -} +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +// +// This source code was auto-generated by myxsdtool, Version=0.0.0.0. +// Sun, 12 Oct 2014 02:56:35 GMT +// + +namespace v010501r3 { + using System.Xml.Serialization; + using System; + using System.Diagnostics; + using System.ComponentModel; + + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlRoot(Namespace="urn:dvb:metadata:iptv:sdns:2012-1", IsNullable=false)] + public partial class ServiceDiscovery { + + [XmlElement("BCGDiscovery", typeof(BroadcastContentGuideOffering))] + [XmlElement("BroadcastDiscovery", typeof(BroadcastOffering))] + [XmlElement("CoDDiscovery", typeof(CoDOffering))] + [XmlElement("PackageDiscovery", typeof(PackagedServices))] + [XmlElement("RMSFUSDiscovery", typeof(RmsFusDiscovery))] + [XmlElement("RegionalizationDiscovery", typeof(RegionalizationOffering))] + [XmlElement("SRMDiscovery", typeof(SRMOffering))] + [XmlElement("ServiceProviderDiscovery", typeof(ServiceProviderDiscovery))] + [XmlElement("ServicesFromOtherSP", typeof(ReferencedServices))] + public object[] Items; + + [XmlAttribute] + public string Version; + } + + /// + /// [en] Provides information on Broadband Content Guide Offerings + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:BroadcastContentGuideOffering + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class BroadcastContentGuideOffering : OfferingBase { + + [XmlElement("BCG")] + public BroadcastContentGuideOfferingBCG[] BCG; + } + + /// + /// [en] Provides a list of TS or services discovery information + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:BroadcastOffering + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class BroadcastOffering : OfferingBase { + + [XmlElement("ServiceList")] + public IPServiceList[] ServiceList; + } + + /// + /// [en] Provides information on Content on Demand Offerings. Note that use of this is now deprecated and BCGOffering should be used instead + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:CoDOffering + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class CoDOffering : OfferingBase { + + [XmlElement("Catalogue")] + public CoDOfferingCatalogue[] Catalogue; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class PackagedServices : OfferingBase { + + [XmlElement("Package")] + public Package[] Package; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class RmsFusDiscovery : OfferingBase { + + [XmlElement("FUSProvider", typeof(FirmwareUpdateProvider))] + [XmlElement("RMSProvider", typeof(RemoteManagementProvider))] + public object[] Items; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class RegionalizationOffering : OfferingBase { + + [XmlElement("Cell")] + public RegionalizationCell[] Cell; + } + + /// + /// [en] Provides a list of SRM Announcement and Download Services + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMOffering + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SRMOffering : OfferingBase { + + [XmlElement("SRMAnnouncementService")] + public SRMAnnouncementServiceType[] SRMAnnouncementService; + + [XmlElement("SRMDownloadService")] + public SRMDownloadServiceType[] SRMDownloadService; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ServiceProviderDiscovery { + + [XmlElement("ServiceProvider")] + public ServiceProvider[] ServiceProvider; + + [XmlAttribute] + public string Version; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ReferencedServices : OfferingBase { + + [XmlElement("ReferencedServiceProvider")] + public ReferencedServiceProviderType[] ReferencedServiceProvider; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class BroadcastContentGuideOfferingBCG { + + [XmlElement("Name")] + public MultilingualText[] Name; + + [XmlElement("Description")] + public MultilingualText[] Description; + + [XmlArrayItem("DVBSTP", typeof(DvbStpTransportMode), IsNullable=false)] + [XmlArrayItem("HTTP", typeof(HttpTransportMode), IsNullable=false)] + public PayloadList[] TransportMode; + + [XmlElement(DataType="anyURI")] + public string Logo; + + public ControlledTermType Type; + + [XmlElement("TargetProvider")] + public string[] TargetProvider; + + [XmlElement("BCGProviderName")] + public MultilingualText[] BCGProviderName; + + [XmlArrayItem("DVBSTP", typeof(CdsDownloadSessionDescriptionLocationDVBSTP), IsNullable=false)] + [XmlArrayItem("SAP", typeof(CdsDownloadSessionDescriptionLocationSAP), IsNullable=false)] + public object[] CDSDownloadSessionDescriptionLocation; + + [XmlAttribute] + public string Id; + + [XmlAttribute] + public string Version; + } + + /// + /// [en] Base class from which all offerings should be derived + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:OfferingBase + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlInclude(typeof(RmsFusDiscovery))] + [XmlInclude(typeof(RegionalizationOffering))] + [XmlInclude(typeof(BroadcastContentGuideOffering))] + [XmlInclude(typeof(CoDOffering))] + [XmlInclude(typeof(SRMOffering))] + [XmlInclude(typeof(ReferencedServices))] + [XmlInclude(typeof(PackagedServices))] + [XmlInclude(typeof(BroadcastOffering))] + public partial class OfferingBase { + + [XmlAttribute] + public string DomainName; + + [XmlAttribute] + public string Version; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class IPServiceList { + + [XmlElement("ServicesDescriptionLocation")] + public DescriptionLocationBCG[] ServicesDescriptionLocation; + + [XmlElement("SingleService")] + public IPService[] SingleService; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class CoDOfferingCatalogue { + + [XmlElement("Name")] + public MultilingualText[] Name; + + [XmlElement("Description")] + public MultilingualText[] Description; + + [XmlElement("Locator", DataType="anyURI")] + public string[] Locator; + + [XmlAttribute] + public string Id; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class Package { + + [XmlElement("PackageName")] + public MultilingualText[] PackageName; + + [XmlElement("CountryAvailability")] + public CountryAvailability[] CountryAvailability; + + [XmlElement("PackageDescription")] + public DescriptionLocationBCG[] PackageDescription; + + [XmlElement("Service")] + public PackagedServiceType[] Service; + + [XmlElement("PackageReference")] + public PackagePackageReference[] PackageReference; + + [XmlElement("PackageAvailability")] + public ServiceAvailability[] PackageAvailability; + + [XmlAttribute] + public string Id; + + [XmlAttribute] + [DefaultValue(true)] + public bool Visible; + + public Package() { + this.Visible = true; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class FirmwareUpdateProvider { + + [XmlElement("FUSName")] + public MultilingualText[] FUSName; + + public decimal FUSID; + + [XmlElement("Description")] + public MultilingualText[] Description; + + [XmlElement("FUSAnnouncement")] + public FirmwareUpdateAnnouncement[] FUSAnnouncement; + + [XmlAttribute(DataType="anyURI")] + public string LogoURI; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class RemoteManagementProvider { + + [XmlElement("RMSName")] + public MultilingualText[] RMSName; + + public decimal RMSID; + + /// + [XmlIgnore] + public bool RMSIDSpecified; + + [XmlElement("Description")] + public MultilingualText[] Description; + + [XmlAttribute(DataType="anyURI")] + public string LogoURI; + + [XmlAttribute(DataType="anyURI")] + public string RMSLocation; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class RegionalizationCell { + + public string CountryCode; + + [XmlElement("CA")] + public CivicAddress[] CA; + + [XmlAttribute] + public string Id; + } + + /// + /// [en] SRM Announcement Service information + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMAnnouncementServiceType + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SRMAnnouncementServiceType { + + [XmlElement("SRMID")] + public SRMIDType[] SRMID; + + public SRMAnnouncementModeType SRMAnnouncementMode; + + [XmlAttribute] + public string AnnouncementServiceVersion; + } + + /// + /// [en] FLUTE or HTTP download of SRM files + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMDownloadServiceType + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SRMDownloadServiceType { + + [XmlElement("FLUTE", typeof(SRMDownloadServiceFLUTEType))] + [XmlElement("HTTP", typeof(SRMDownloadServiceHTTPType))] + public object Item; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ServiceProvider { + + [XmlElement("Name")] + public MultilingualText[] Name; + + [XmlElement("Description")] + public MultilingualText[] Description; + + [XmlArrayItem("Pull", typeof(ProviderOfferingPull), IsNullable=false)] + [XmlArrayItem("Push", typeof(DvbStpTransportMode), IsNullable=false)] + public PayloadList[] Offering; + + [XmlAttribute] + public string DomainName; + + [XmlAttribute] + public string Version; + + [XmlAttribute(DataType="anyURI")] + public string LogoURI; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ReferencedServiceProviderType { + + [XmlElement("Service")] + public ReferencedServiceProviderTypeService[] Service; + + [XmlAttribute] + public string Domain; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class UserDescriptionType { + + public UserPreferencesType UserPreferences; + + public UsageHistoryType UsageHistory; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ProgramDescriptionType { + + public ProgramInformationTableType ProgramInformationTable; + + public GroupInformationTableType GroupInformationTable; + + public ProgramLocationTableType ProgramLocationTable; + + public ServiceInformationTableType ServiceInformationTable; + + public CreditsInformationTableType CreditsInformationTable; + + public ProgramReviewTableType ProgramReviewTable; + + public SegmentInformationTableType SegmentInformationTable; + + public PurchaseInformationTableType PurchaseInformationTable; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(CreatorType))] + public partial class MediaAgentType { + + public ControlledTermUseType Role; + + [XmlElement("Agent", typeof(AgentType))] + [XmlElement("AgentRef", typeof(ReferenceType))] + public object Item; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class ElectronicAddressType { + + [XmlElement("Telephone")] + public ElectronicAddressTypeTelephone[] Telephone; + + [XmlElement("Fax")] + public string[] Fax; + + [XmlElement("Email")] + public string[] Email; + + [XmlElement("Url", DataType="anyURI")] + public string[] Url; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class GeographicPointType { + + [XmlAttribute] + public double longitude; + + [XmlAttribute] + public double latitude; + + [XmlAttribute] + public double altitude; + + /// + [XmlIgnore] + public bool altitudeSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class MappingTermType { + + public TextualType ClassificationSchemeAcronym; + + public TextualType ClassificationSchemeName; + + [XmlElement(DataType="anyURI")] + public string ClassificationSchemeURL; + + [XmlElement("OriginalTermName")] + public TextualType[] OriginalTermName; + + [XmlElement("OriginalTermDefinition")] + public TextualType[] OriginalTermDefinition; + + [XmlElement(DataType="date")] + public System.DateTime MappingDate; + + /// + [XmlIgnore] + public bool MappingDateSpecified; + + [XmlAttribute] + public string originalTermID; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class ReferenceType { + + [XmlAttribute(DataType="IDREF")] + public string idref; + + [XmlAttribute(DataType="anyURI")] + public string href; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class IncrDurationType { + + [XmlAttribute] + public string timeUnit; + + [XmlText(DataType="integer")] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class RelIncrTimePointType { + + [XmlAttribute] + public string timeUnit; + + [XmlAttribute(DataType="token")] + public string timeBase; + + [XmlText(DataType="integer")] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class RelTimePointType { + + [XmlAttribute(DataType="token")] + public string timeBase; + + [XmlText] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class TimeType { + + [XmlElement("RelIncrTimePoint", typeof(RelIncrTimePointType))] + [XmlElement("RelTimePoint", typeof(RelTimePointType))] + [XmlElement("TimePoint", typeof(string))] + public object Item; + + [XmlElement("Duration", typeof(string))] + [XmlElement("IncrDuration", typeof(IncrDurationType))] + public object Item1; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(HeaderType))] + [XmlInclude(typeof(ClassificationSchemeAliasType))] + [XmlInclude(typeof(CSAliasType))] + [XmlInclude(typeof(DType))] + [XmlInclude(typeof(PreferenceConditionType))] + [XmlInclude(typeof(MediaFormatType))] + [XmlInclude(typeof(DSType))] + [XmlInclude(typeof(UserPreferencesType))] + [XmlInclude(typeof(UserActionListType1))] + [XmlInclude(typeof(UserActionHistoryType1))] + [XmlInclude(typeof(UsageHistoryType1))] + [XmlInclude(typeof(SourcePreferencesType))] + [XmlInclude(typeof(FilteringAndSearchPreferencesType))] + [XmlInclude(typeof(CreationPreferencesType))] + [XmlInclude(typeof(ClassificationPreferencesType))] + [XmlInclude(typeof(SummaryPreferencesType))] + [XmlInclude(typeof(BrowsingPreferencesType))] + [XmlInclude(typeof(AgentType))] + [XmlInclude(typeof(PersonType))] + [XmlInclude(typeof(PersonGroupType))] + [XmlInclude(typeof(OrganizationType))] + [XmlInclude(typeof(PlaceType))] + [XmlInclude(typeof(TVAPlaceType))] + [XmlInclude(typeof(TermDefinitionBaseType))] + [XmlInclude(typeof(TermDefinitionType))] + [XmlInclude(typeof(ClassificationSchemeBaseType))] + [XmlInclude(typeof(ClassificationSchemeType))] + [XmlInclude(typeof(TVAClassificationSchemeType))] + [XmlInclude(typeof(TVATermDefinitionBaseType))] + [XmlInclude(typeof(TVATermDefinitionType))] + [XmlInclude(typeof(UserActionType))] + [XmlInclude(typeof(UserActionType1))] + [XmlInclude(typeof(UserActionListType))] + [XmlInclude(typeof(UserActionHistoryType))] + [XmlInclude(typeof(UsageHistoryType))] + public abstract partial class Mpeg7BaseType { + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ClassificationSchemeTableType { + + [XmlElement("CSAlias")] + public CSAliasType[] CSAlias; + + [XmlElement("ClassificationScheme")] + public TVAClassificationSchemeType[] ClassificationScheme; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class MetadataOriginationInformationType { + + [XmlElement("Publisher")] + public TextualType[] Publisher; + + [XmlElement("RightsOwner")] + public TextualType[] RightsOwner; + + [XmlElement("CopyrightNotice")] + public TextualType[] CopyrightNotice; + + [XmlAttribute] + public string originID; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class MetadataOriginationInformationTableType { + + [XmlElement("MetadataOriginationInformation")] + public MetadataOriginationInformationType[] MetadataOriginationInformation; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlRoot("TVAMain", Namespace="urn:tva:metadata:2011", IsNullable=false)] + public partial class TVAMainType { + + [XmlElement("CopyrightNotice")] + public TextualType[] CopyrightNotice; + + public MetadataOriginationInformationTableType MetadataOriginationInformationTable; + + public ClassificationSchemeTableType ClassificationSchemeTable; + + public ProgramDescriptionType ProgramDescription; + + [XmlElement("UserDescription")] + public UserDescriptionType[] UserDescription; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + + [XmlAttribute] + public string publisher; + + [XmlAttribute] + public System.DateTime publicationTime; + + /// + [XmlIgnore] + public bool publicationTimeSpecified; + + [XmlAttribute] + public string rightsOwner; + + [XmlAttribute] + public string originID; + + [XmlAttribute] + public uint version; + + /// + [XmlIgnore] + public bool versionSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class PurchaseInformationTableType { + + [XmlElement("PurchaseInformation")] + public PurchaseInformationType[] PurchaseInformation; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class CreditsInformationTableType { + + [XmlElement("OrganizationName", typeof(OrganizationNameType))] + [XmlElement("PersonName", typeof(TVAPersonNameType))] + public object[] Items; + + [XmlAttribute] + public string copyrightNotice; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ServiceInformationTableType { + + [XmlElement("ServiceInformation")] + public ServiceInformationType[] ServiceInformation; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ProgramLocationTableType { + + [XmlElement("Schedule")] + public ScheduleType[] Schedule; + + [XmlElement("BroadcastEvent")] + public BroadcastEventType[] BroadcastEvent; + + [XmlElement("OnDemandProgram")] + public OnDemandProgramType[] OnDemandProgram; + + [XmlElement("OnDemandService")] + public OnDemandServiceType[] OnDemandService; + + [XmlElement("PushDownloadProgram")] + public PushDownloadType[] PushDownloadProgram; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class GroupInformationTableType { + + [XmlElement("GroupInformation")] + public GroupInformationType[] GroupInformation; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ProgramInformationTableType { + + [XmlElement("ProgramInformation")] + public ProgramInformationType[] ProgramInformation; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class SegmentInformationTableType { + + [XmlArrayItem("SegmentInformation", IsNullable=false)] + public SegmentInformationType[] SegmentList; + + [XmlArrayItem("SegmentGroupInformation", IsNullable=false)] + public SegmentGroupInformationType[] SegmentGroupList; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(SegmentGroupTypeType))] + public abstract partial class BaseSegmentGroupTypeType { + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class SegmentGroupInformationType { + + public CRIDRefType ProgramRef; + + public TimeBaseReferenceType TimeBaseReference; + + [XmlElement("GroupType")] + public BaseSegmentGroupTypeType[] GroupType; + + public BasicSegmentDescriptionType Description; + + public GroupIntervalType GroupInterval; + + [XmlElement("Groups", typeof(GroupsType))] + [XmlElement("Segments", typeof(SegmentsType))] + public object Item; + + [XmlElement("KeyFrameLocator")] + public TVAMediaTimeType[] KeyFrameLocator; + + [XmlElement("OtherIdentifier")] + public UniqueIDType[] OtherIdentifier; + + [XmlAttribute] + public string groupId; + + [XmlAttribute] + [DefaultValue(true)] + public bool ordered; + + [XmlAttribute] + public ushort numberOfSegments; + + /// + [XmlIgnore] + public bool numberOfSegmentsSpecified; + + [XmlAttribute] + public ushort numberOfKeyFrames; + + /// + [XmlIgnore] + public bool numberOfKeyFramesSpecified; + + [XmlAttribute] + public string duration; + + [XmlAttribute] + public bool topLevel; + + /// + [XmlIgnore] + public bool topLevelSpecified; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + + public SegmentGroupInformationType() { + this.ordered = true; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class GroupsType { + + [XmlAttribute] + public string[] refList; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class SegmentsType { + + [XmlAttribute] + public string[] refList; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class GroupIntervalType { + + [XmlAttribute] + public string @ref; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class SegmentInformationType { + + public CRIDRefType ProgramRef; + + public TimeBaseReferenceType TimeBaseReference; + + public BasicSegmentDescriptionType Description; + + public TVAMediaTimeType SegmentLocator; + + [XmlElement("KeyFrameLocator")] + public TVAMediaTimeType[] KeyFrameLocator; + + [XmlElement("OtherIdentifier")] + public UniqueIDType[] OtherIdentifier; + + [XmlAttribute] + public string segmentId; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TimeBaseReferenceType { + + [XmlElement("MediaRelIncrTimePoint", typeof(MediaRelIncrTimePointType))] + [XmlElement("MediaTimePoint", typeof(string))] + public object Item; + + [XmlAttribute] + public string timebaseId; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TVAMediaRelIncrTimePointType))] + public partial class MediaRelIncrTimePointType { + + [XmlAttribute] + public string mediaTimeUnit; + + [XmlText(DataType="integer")] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class MediaRelTimePointType { + + [XmlText] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TVAMediaTimeType { + + [XmlElement("MediaRelIncrTimePoint", typeof(TVAMediaRelIncrTimePointType))] + [XmlElement("MediaRelTimePoint", typeof(MediaRelTimePointType))] + public object Item; + + [XmlElement("MediaDuration", typeof(string))] + [XmlElement("MediaIncrDuration", typeof(MediaIncrDurationType))] + public object Item1; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class BasicSegmentDescriptionType { + + [XmlElement("Title")] + public TitleType[] Title; + + [XmlElement("Synopsis")] + public SynopsisType[] Synopsis; + + [XmlElement("Genre")] + public GenreType[] Genre; + + [XmlElement("Keyword")] + public KeywordType[] Keyword; + + [XmlElement("RelatedMaterial")] + public RelatedMaterialType[] RelatedMaterial; + + [XmlArrayItem("CreditsItem", IsNullable=false)] + public CreditsItemType[] CreditsList; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ServiceInformationType { + + [XmlElement("Name")] + public ServiceInformationNameType[] Name; + + [XmlElement("Owner")] + public string[] Owner; + + [XmlElement(DataType="anyURI")] + public string ServiceURL; + + [XmlElement("Logo")] + public MediaLocatorType[] Logo; + + [XmlElement("ServiceDescription")] + public SynopsisType[] ServiceDescription; + + [XmlElement("ServiceGenre")] + public GenreType[] ServiceGenre; + + [XmlElement("ServiceLanguage", DataType="language")] + public string[] ServiceLanguage; + + [XmlElement("ParentService")] + public ServiceRefType[] ParentService; + + [XmlElement("RelatedMaterial")] + public RelatedMaterialType[] RelatedMaterial; + + public PurchaseListType PurchaseList; + + [XmlElement("GroupPurchaseIDRef")] + public string[] GroupPurchaseIDRef; + + [XmlAttribute] + public string serviceId; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ServiceRefType { + + [XmlElement("ValidPeriod")] + public ValidPeriodType[] ValidPeriod; + + [XmlAttribute] + public string serviceIDRef; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ValidPeriodType { + + public System.DateTime ValidFrom; + + /// + [XmlIgnore] + public bool ValidFromSpecified; + + public System.DateTime ValidTo; + + /// + [XmlIgnore] + public bool ValidToSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class OnDemandServiceType { + + [XmlElement("OnDemandProgram")] + public OnDemandProgramType[] OnDemandProgram; + + [XmlAttribute] + public string[] serviceIDRef; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ScheduleType { + + [XmlElement("ScheduleEvent")] + public ScheduleEventType[] ScheduleEvent; + + [XmlAttribute] + public string[] serviceIDRef; + + [XmlAttribute] + public System.DateTime start; + + /// + [XmlIgnore] + public bool startSpecified; + + [XmlAttribute] + public System.DateTime end; + + /// + [XmlIgnore] + public bool endSpecified; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class InstanceDescriptionType { + + [XmlElement("Title")] + public TitleType[] Title; + + [XmlElement("Synopsis")] + public SynopsisType[] Synopsis; + + [XmlElement("Genre")] + public GenreType[] Genre; + + public PurchaseListType PurchaseList; + + [XmlElement("CaptionLanguage")] + public CaptionLanguageType[] CaptionLanguage; + + [XmlElement("SignLanguage")] + public SignLanguageType[] SignLanguage; + + public AVAttributesType AVAttributes; + + [XmlElement("MemberOf")] + public BaseMemberOfType[] MemberOf; + + [XmlElement("OtherIdentifier")] + public UniqueIDType[] OtherIdentifier; + + [XmlElement("RelatedMaterial")] + public RelatedMaterialType[] RelatedMaterial; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(PushDownloadType))] + [XmlInclude(typeof(OnDemandProgramType))] + [XmlInclude(typeof(ScheduleEventType))] + [XmlInclude(typeof(BroadcastEventType))] + public abstract partial class ProgramLocationType { + + public CRIDRefType Program; + + [XmlElement(DataType="anyURI")] + public string ProgramURL; + + [XmlElement(DataType="anyURI")] + public string InstanceMetadataId; + + public InstanceDescriptionType InstanceDescription; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ProgramReviewTableType { + + [XmlElement("Review")] + public ReviewType[] Review; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class UserIdentifierType { + + public TextualType Name; + + [XmlAttribute] + [DefaultValue(userChoiceType.@true)] + public userChoiceType @protected; + + public UserIdentifierType() { + this.@protected = userChoiceType.@true; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class RatingType { + + public float RatingValue; + + public RatingTypeRatingScheme RatingScheme; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(ReviewType))] + public partial class MediaReviewType { + + [XmlElement("Rating")] + public RatingType[] Rating; + + [XmlElement("FreeTextReview")] + public TextualType[] FreeTextReview; + + [XmlElement("Reviewer")] + public ReviewerType[] Reviewer; + + [XmlElement(DataType="anyURI")] + public string ReviewReference; + + [XmlElement("Target")] + public UserIdentifierType[] Target; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class GroupInformationType { + + public BaseProgramGroupTypeType GroupType; + + public BasicContentDescriptionType BasicDescription; + + [XmlElement("MemberOf")] + public BaseMemberOfType[] MemberOf; + + [XmlElement("OtherIdentifier")] + public UniqueIDType[] OtherIdentifier; + + [XmlElement(DataType="anyURI")] + public string PartOfAggregatedGroup; + + public AggregationOfType AggregationOf; + + [XmlAttribute(DataType="anyURI")] + public string groupId; + + [XmlAttribute] + [DefaultValue(false)] + public bool ordered; + + [XmlAttribute] + public uint numOfItems; + + /// + [XmlIgnore] + public bool numOfItemsSpecified; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + + [XmlAttribute] + public string[] serviceIDRef; + + public GroupInformationType() { + this.ordered = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(ProgramGroupTypeType))] + public abstract partial class BaseProgramGroupTypeType { + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ProgramInformationType { + + public BasicContentDescriptionType BasicDescription; + + [XmlElement("OtherIdentifier")] + public UniqueIDType[] OtherIdentifier; + + public AVAttributesType AVAttributes; + + [XmlElement("MemberOf")] + public BaseMemberOfType[] MemberOf; + + public DerivedFromType DerivedFrom; + + public EpisodeOfType EpisodeOf; + + [XmlElement(DataType="anyURI")] + public string PartOfAggregatedProgram; + + public AggregationOfType AggregationOf; + + [XmlAttribute(DataType="anyURI")] + public string programId; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class AggregationOfType { + + [XmlElement("AggregatedProgram")] + public CRIDRefType[] AggregatedProgram; + + [XmlAttribute] + public AggregationOfTypeType type; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class AVAttributesType { + + public ControlledTermType FileFormat; + + public ulong FileSize; + + /// + [XmlIgnore] + public bool FileSizeSpecified; + + public ControlledTermType System; + + [XmlElement("BitRate")] + public BitRateType[] BitRate; + + [XmlElement("AudioAttributes")] + public AudioAttributesType[] AudioAttributes; + + public VideoAttributesType VideoAttributes; + + [XmlElement("CaptioningAttributes")] + public CaptioningAttributesType[] CaptioningAttributes; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class CaptioningAttributesType { + + public ControlledTermType Coding; + + public BitRateType BitRate; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class PurchaseListType { + + [XmlElement("PurchaseIdRef", typeof(string))] + [XmlElement("PurchaseItem", typeof(PurchaseItemType))] + public object[] Items; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class PriceType { + + [XmlAttribute] + public string currency; + + [XmlText] + public float Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(PurchaseInformationType))] + public partial class PurchaseItemType { + + [XmlElement("Price")] + public PriceType[] Price; + + [XmlElement("Purchase")] + public PurchaseType[] Purchase; + + [XmlElement("Description")] + public TextualType[] Description; + + [XmlElement("PricingServerURL", DataType="anyURI")] + public string[] PricingServerURL; + + public DRMDeclarationType DRMDeclaration; + + [XmlAttribute] + public System.DateTime start; + + /// + [XmlIgnore] + public bool startSpecified; + + [XmlAttribute] + public System.DateTime end; + + /// + [XmlIgnore] + public bool endSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class PurchaseType { + + [XmlElement("PurchaseType")] + public ControlledTermType PurchaseType1; + + public ControlledTermType QuantityUnit; + + public PurchaseTypeQuantityRange QuantityRange; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class DRMDeclarationType { + + [XmlElement(DataType="anyURI")] + public string DRM; + + [XmlElement("LicenseExpression", typeof(string))] + [XmlElement("LicenseLocator", typeof(string), DataType="anyURI")] + [XmlChoiceIdentifier("ItemElementName")] + public string Item; + + [XmlIgnore] + public ItemChoiceType2 ItemElementName; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ReleaseInformationType { + + public ReleaseDateType ReleaseDate; + + public string ReleaseLocation; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ReleaseDateType { + + [XmlElement("DayAndYear", typeof(System.DateTime), DataType="date")] + [XmlElement("Year", typeof(string), DataType="gYear")] + public object Item; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class FlagType { + + [XmlAttribute] + public bool value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(GenericDerivationReasonType))] + [XmlInclude(typeof(DerivationReasonType))] + public abstract partial class BaseDerivationReasonType { + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(BaseMemberOfType))] + [XmlInclude(typeof(DerivedFromType))] + [XmlInclude(typeof(MemberOfType))] + [XmlInclude(typeof(EpisodeOfType))] + public partial class CRIDRefType { + + [XmlAttribute(DataType="anyURI")] + public string crid; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class FecInfo { + + public FecLayerAddress FECBaseLayer; + + public FecLayerAddress FECEnhancementLayer; + + [XmlAttribute] + public ushort FECMaxBlockSize; + + /// + [XmlIgnore] + public bool FECMaxBlockSizeSpecified; + + [XmlAttribute] + public ushort FECMaxBlockTime; + + /// + [XmlIgnore] + public bool FECMaxBlockTimeSpecified; + + [XmlAttribute(DataType="base64Binary")] + public byte[] FECOTI; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class RETInfoType { + + public RtcpRetransmissionReporting RTCPReporting; + + public UnicastRETType UnicastRET; + + public MulticastRETType MulticastRET; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ServerBasedEnhancementServiceInfoType { + + public EnhancementServiceType EnhancementService; + + public RtcpRetransmissionReporting RTCPReporting; + + public UnicastRETType Retransmission_session; + + public MulticastRETType MulticastRET; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class MulticastRETType { + + [XmlAttribute] + public string SourceAddress; + + [XmlAttribute] + public string GroupAddress; + + [XmlAttribute] + public uint ssrc; + + /// + [XmlIgnore] + public bool ssrcSpecified; + + [XmlAttribute] + public uint RTPPayloadTypeNumber; + + /// + [XmlIgnore] + public bool RTPPayloadTypeNumberSpecified; + + [XmlAttribute("rtcp-mux")] + [DefaultValue(false)] + public bool rtcpmux; + + [XmlAttribute] + public uint DestinationPort; + + /// + [XmlIgnore] + public bool DestinationPortSpecified; + + [XmlAttribute("rtx-time")] + public uint rtxtime; + + public MulticastRETType() { + this.rtcpmux = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class UnicastRETType { + + [XmlAttribute("trr-int")] + public uint trrint; + + /// + [XmlIgnore] + public bool trrintSpecified; + + [XmlAttribute("DestinationPort-ForRTCPReporting")] + public uint DestinationPortForRTCPReporting; + + /// + [XmlIgnore] + public bool DestinationPortForRTCPReportingSpecified; + + [XmlAttribute] + public string SourceAddress; + + [XmlAttribute] + public uint SourcePort; + + /// + [XmlIgnore] + public bool SourcePortSpecified; + + [XmlAttribute(DataType="anyURI")] + public string RTSPControlURL; + + [XmlAttribute] + public uint ssrc; + + /// + [XmlIgnore] + public bool ssrcSpecified; + + [XmlAttribute] + public uint RTPPayloadTypeNumber; + + /// + [XmlIgnore] + public bool RTPPayloadTypeNumberSpecified; + + [XmlAttribute("rtcp-mux")] + [DefaultValue(false)] + public bool rtcpmux; + + [XmlAttribute] + public uint DestinationPort; + + /// + [XmlIgnore] + public bool DestinationPortSpecified; + + [XmlAttribute("rtx-time")] + public uint rtxtime; + + public UnicastRETType() { + this.rtcpmux = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class DepictedCoordinatesType { + + public TVATimeType DepictedDate; + + public TVAPlaceType DepictedLocation; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class CreationCoordinatesType { + + public TVATimeType CreationDate; + + public string CreationLocation; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TVATimeType { + + public string TimePoint; + + public string Duration; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class AwardType { + + public TextualType Category; + + [XmlElement("Nominee", typeof(CreditsItemType))] + [XmlElement("Recipient", typeof(CreditsItemType))] + [XmlChoiceIdentifier("ItemElementName")] + public CreditsItemType Item; + + [XmlIgnore] + public ItemChoiceType1 ItemElementName; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class AwardsListItemType { + + public TextualType Title; + + [XmlElement(DataType="gYear")] + public string Year; + + [XmlElement("Award")] + public AwardType[] Award; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class SegmentReferenceType { + + [XmlAttribute] + [DefaultValue(segmentTypeType.segment)] + public segmentTypeType segmentType; + + [XmlAttribute] + public string @ref; + + public SegmentReferenceType() { + this.segmentType = segmentTypeType.segment; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class RelatedMaterialType { + + public ControlledTermType HowRelated; + + public ControlledTermType Format; + + [XmlElement("MediaLocator", typeof(MediaLocatorType))] + [XmlElement("SegmentReference", typeof(SegmentReferenceType))] + public object[] Items; + + [XmlElement("PromotionalText")] + public TextualType[] PromotionalText; + + [XmlElement("PromotionalMedia")] + public TitleMediaType[] PromotionalMedia; + + public MediaLocatorType SourceMediaLocator; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TVAIDRefElementType { + + [XmlAttribute] + public string @ref; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class UniqueIDType { + + [XmlAttribute(DataType="NMTOKEN")] + [DefaultValue("URI")] + public string type; + + [XmlAttribute(DataType="NMTOKEN")] + public string organization; + + [XmlAttribute(DataType="NMTOKEN")] + public string authority; + + [XmlAttribute] + [DefaultValue(UniqueIDTypeEncoding.text)] + public UniqueIDTypeEncoding encoding; + + [XmlText] + public string Value; + + public UniqueIDType() { + this.type = "URI"; + this.encoding = UniqueIDTypeEncoding.text; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TVAPersonNameType))] + public partial class PersonNameType { + + [XmlElement("FamilyName", typeof(NameComponentType))] + [XmlElement("GivenName", typeof(NameComponentType))] + [XmlElement("LinkingName", typeof(NameComponentType))] + [XmlElement("Numeration", typeof(string))] + [XmlElement("Salutation", typeof(NameComponentType))] + [XmlElement("Title", typeof(NameComponentType))] + [XmlChoiceIdentifier("ItemsElementName")] + public object[] Items; + + [XmlElement("ItemsElementName")] + [XmlIgnore] + public ItemsChoiceType[] ItemsElementName; + + [XmlAttribute] + public string dateFrom; + + [XmlAttribute] + public string dateTo; + + [XmlAttribute] + public PersonNameTypeType type; + + /// + [XmlIgnore] + public bool typeSpecified; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(ReviewerType))] + [XmlInclude(typeof(CreditsItemType))] + public partial class TVAAgentType { + + [XmlElement("OrganizationName", typeof(TextualType))] + [XmlElement("OrganizationNameIDRef", typeof(TVAIDRefElementType))] + [XmlElement("PersonName", typeof(PersonNameType))] + [XmlElement("PersonNameIDRef", typeof(TVAIDRefElementType))] + [XmlChoiceIdentifier("ItemsElementName")] + public object[] Items; + + [XmlElement("ItemsElementName")] + [XmlIgnore] + public ItemsChoiceType1[] ItemsElementName; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class SignLanguageType { + + [XmlAttribute] + public bool primary; + + /// + [XmlIgnore] + public bool primarySpecified; + + [XmlAttribute] + public bool translation; + + /// + [XmlIgnore] + public bool translationSpecified; + + [XmlAttribute] + public string type; + + [XmlAttribute] + public bool closed; + + /// + [XmlIgnore] + public bool closedSpecified; + + [XmlText(DataType="language")] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class CaptionLanguageType { + + [XmlAttribute] + public bool primary; + + /// + [XmlIgnore] + public bool primarySpecified; + + [XmlAttribute] + public bool translation; + + /// + [XmlIgnore] + public bool translationSpecified; + + [XmlAttribute] + [DefaultValue(true)] + public bool closed; + + [XmlAttribute] + [DefaultValue(false)] + public bool supplemental; + + [XmlText(DataType="language")] + public string Value; + + public CaptionLanguageType() { + this.closed = true; + this.supplemental = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TermUseType))] + [XmlInclude(typeof(ControlledTermUseType))] + public abstract partial class InlineTermDefinitionType { + + [XmlElement("Name")] + public InlineTermDefinitionTypeName[] Name; + + [XmlElement("Definition")] + public TextualType[] Definition; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TVAParentalGuidanceType))] + public partial class ParentalGuidanceType { + + [XmlElement("MinimumAge", typeof(string), DataType="nonNegativeInteger")] + [XmlElement("ParentalRating", typeof(ControlledTermUseType))] + public object Item; + + [XmlElement("Region")] + public string[] Region; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class MediaIncrDurationType { + + [XmlAttribute] + public string mediaTimeUnit; + + [XmlText(DataType="integer")] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class MediaTimeType { + + [XmlElement("MediaTimePoint")] + public string Item; + + [XmlElement("MediaDuration", typeof(string))] + [XmlElement("MediaIncrDuration", typeof(MediaIncrDurationType))] + public object Item1; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class InlineMediaType { + + [XmlElement("MediaData16", typeof(byte[]), DataType="hexBinary")] + [XmlElement("MediaData64", typeof(byte[]), DataType="base64Binary")] + [XmlChoiceIdentifier("ItemElementName")] + public byte[] Item; + + [XmlIgnore] + public ItemChoiceType ItemElementName; + + [XmlAttribute] + public string type; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TemporalSegmentLocatorType))] + [XmlInclude(typeof(ImageLocatorType))] + public partial class MediaLocatorType { + + [XmlElement("InlineMedia", typeof(InlineMediaType))] + [XmlElement("MediaUri", typeof(string), DataType="anyURI")] + public object Item; + + [XmlElement(DataType="nonNegativeInteger")] + public string StreamID; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class TitleMediaType { + + public ImageLocatorType TitleImage; + + public TemporalSegmentLocatorType TitleVideo; + + public TemporalSegmentLocatorType TitleAudio; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class BasicContentDescriptionType { + + [XmlElement("Title")] + public TitleType[] Title; + + [XmlElement("MediaTitle")] + public TitleMediaType[] MediaTitle; + + [XmlElement("ShortTitle")] + public ShortTitleType[] ShortTitle; + + [XmlElement("Synopsis")] + public SynopsisType[] Synopsis; + + [XmlElement("PromotionalInformation")] + public TextualType[] PromotionalInformation; + + [XmlElement("Keyword")] + public KeywordType[] Keyword; + + [XmlElement("Genre")] + public GenreType[] Genre; + + [XmlElement("ParentalGuidance")] + public TVAParentalGuidanceType[] ParentalGuidance; + + [XmlElement("Language")] + public ExtendedLanguageType[] Language; + + [XmlElement("CaptionLanguage")] + public CaptionLanguageType[] CaptionLanguage; + + [XmlElement("SignLanguage")] + public SignLanguageType[] SignLanguage; + + [XmlArrayItem("CreditsItem", IsNullable=false)] + public CreditsItemType[] CreditsList; + + [XmlArrayItem("AwardsListItem", IsNullable=false)] + public AwardsListItemType[] AwardsList; + + [XmlElement("RelatedMaterial")] + public RelatedMaterialType[] RelatedMaterial; + + public TVATimeType ProductionDate; + + [XmlElement("ProductionLocation")] + public string[] ProductionLocation; + + [XmlElement("CreationCoordinates")] + public CreationCoordinatesType[] CreationCoordinates; + + [XmlElement("DepictedCoordinates")] + public DepictedCoordinatesType[] DepictedCoordinates; + + [XmlElement("ReleaseInformation")] + public ReleaseInformationType[] ReleaseInformation; + + [XmlElement(DataType="duration")] + public string Duration; + + public PurchaseListType PurchaseList; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class RmsFusMulticastAddressKind { + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public ushort Port; + + [XmlAttribute] + public RmsFusMulticastAddressKindProtocol Protocol; + + /// + [XmlIgnore] + public bool ProtocolSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class FirmwareUpdateAnnouncement { + + public string FUSAnnouncementDescription; + + public RmsFusMulticastAddressKind MulticastAnnouncementAddress; + + [XmlElement(DataType="anyURI")] + public string FUSUnicastAnnouncement; + + [XmlElement(DataType="anyURI")] + public string QRCLocation; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class CivicAddress { + + [XmlElement("CA")] + public CivicAddress[] CA; + + [XmlAttribute] + public string Type; + + [XmlAttribute] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class TargetPackageType { + + [XmlElement("PackageType")] + public MultilingualText[] PackageType; + + [XmlAttribute] + public string PackageIDRef; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class PayloadListSegmentType { + + [XmlElement("TargetPackage")] + public TargetPackageType[] TargetPackage; + + [XmlAttribute] + public string Version; + + [XmlAttribute] + public string ID; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlInclude(typeof(DvbStpTransportMode))] + [XmlInclude(typeof(HttpTransportMode))] + public partial class PayloadList { + + [XmlElement("PayloadId")] + public PayloadListPayloadId[] PayloadId; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SRMDownloadServiceHTTPType { + + public SRMIDVerUType SRMIDVer; + + [XmlAttribute(DataType="anyURI")] + public string Location; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SRMDownloadServiceFLUTEType { + + [XmlElement("SRMIDVer")] + public SRMIDVerMType[] SRMIDVer; + + [XmlAttribute] + public string FLUTESessionVersion; + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public ushort Port; + + [XmlAttribute] + public ushort TSI; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SRMAnnouncementModeSAPType { + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public ushort Port; + } + + /// + /// [en] SAP or HTTP delivery of SRM Announcement Services + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMAnnouncementModeType + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SRMAnnouncementModeType { + + [XmlElement("HTTP", typeof(string), DataType="anyURI")] + [XmlElement("SAP", typeof(SRMAnnouncementModeSAPType))] + public object Item; + } + + /// + /// SRM specific ID (CP System ID, CP System SRM ID) + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMIDType + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlInclude(typeof(SRMIDVerUType))] + [XmlInclude(typeof(SRMIDVerMType))] + public partial class SRMIDType { + + [XmlAttribute] + public string CPSystemID; + + [XmlAttribute] + public string CPSystemSRMID; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class PackagedServiceType { + + [XmlElement("TextualID")] + public PackageTextualIdentifier[] TextualID; + + public DvbTriplet DVBTriplet; + + public DescriptionLocationBCG DescriptionLocation; + + [XmlElement(DataType="positiveInteger")] + public string LogicalChannelNumber; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class PackageAvailabilityCountryCode { + + [XmlAttribute] + [DefaultValue(true)] + public bool Availability; + + [XmlText] + public string Value; + + public PackageAvailabilityCountryCode() { + this.Availability = true; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ServiceAvailability { + + public PackageAvailabilityCountryCode CountryCode; + + [XmlElement("Cells")] + public string[] Cells; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ColorType { + + [XmlAttribute] + public ColorTypeType type; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class AspectRatioType { + + [XmlAttribute] + [DefaultValue(AspectRatioTypeType.original)] + public AspectRatioTypeType type; + + [XmlText] + public string Value; + + public AspectRatioType() { + this.type = AspectRatioTypeType.original; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class VideoAttributesType { + + public ControlledTermType Coding; + + public ScanType Scan; + + /// + [XmlIgnore] + public bool ScanSpecified; + + public ushort HorizontalSize; + + /// + [XmlIgnore] + public bool HorizontalSizeSpecified; + + public ushort VerticalSize; + + /// + [XmlIgnore] + public bool VerticalSizeSpecified; + + [XmlElement("AspectRatio")] + public AspectRatioType[] AspectRatio; + + public ColorType Color; + + public string FrameRate; + + public BitRateType BitRate; + + public ControlledTermType PictureFormat; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class BitRateType { + + [XmlAttribute] + [DefaultValue(false)] + public bool variable; + + [XmlAttribute] + public ulong minimum; + + /// + [XmlIgnore] + public bool minimumSpecified; + + [XmlAttribute] + public ulong average; + + /// + [XmlIgnore] + public bool averageSpecified; + + [XmlAttribute] + public ulong maximum; + + /// + [XmlIgnore] + public bool maximumSpecified; + + [XmlText(DataType="nonNegativeInteger")] + public string Value; + + public BitRateType() { + this.variable = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(AudioLanguageType))] + public partial class ExtendedLanguageType { + + [XmlAttribute] + [DefaultValue(ExtendedLanguageTypeType.original)] + public ExtendedLanguageTypeType type; + + [XmlAttribute] + [DefaultValue(false)] + public bool supplemental; + + [XmlText(DataType="language")] + public string Value; + + public ExtendedLanguageType() { + this.type = ExtendedLanguageTypeType.original; + this.supplemental = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TitleType))] + [XmlInclude(typeof(ShortTitleType))] + [XmlInclude(typeof(TextualType))] + [XmlInclude(typeof(OrganizationNameType))] + [XmlInclude(typeof(ServiceInformationNameType))] + [XmlInclude(typeof(ExplanationType))] + [XmlInclude(typeof(SynopsisType))] + [XmlInclude(typeof(KeywordType))] + [XmlInclude(typeof(TermNameType))] + [XmlInclude(typeof(NameComponentType))] + public abstract partial class TextualBaseType { + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + + [XmlText] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(GenreType))] + public partial class ControlledTermType { + + public TermNameType Name; + + public TextualType Definition; + + [XmlAttribute] + public string href; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class AudioAttributesType { + + public ControlledTermType Coding; + + public ushort NumOfChannels; + + /// + [XmlIgnore] + public bool NumOfChannelsSpecified; + + public ControlledTermType MixType; + + public AudioLanguageType AudioLanguage; + + public uint SampleFrequency; + + /// + [XmlIgnore] + public bool SampleFrequencySpecified; + + public uint BitsPerSample; + + /// + [XmlIgnore] + public bool BitsPerSampleSpecified; + + public BitRateType BitRate; + } + + /// + /// [en] Implementation of the Announcement support indicator from ETSI EN 300 468. + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:AnnouncementSupport + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class AnnouncementSupport { + + [XmlElement("Announcement")] + public AnnouncementSupportAnnouncement[] Announcement; + + [XmlAttribute] + public string SupportIndicator; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class MosaicDescription { + + [XmlElement("LogicalCell")] + public MosaicDescriptionLogicalCell[] LogicalCell; + + [XmlAttribute] + [DefaultValue(true)] + public bool EntryPoint; + + [XmlAttribute] + public string HorizontalCellsNumber; + + [XmlAttribute] + public string VerticalCellsNumber; + + public MosaicDescription() { + this.EntryPoint = true; + } + } + + /// + /// [en] implementation of The replacement_Service part of the Linkage_Descriptor in ETSI EN 300 468. Describes a service to try if the specified one fails. + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:ReplacementService + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ReplacementService { + + [XmlElement("DVBTriplet", typeof(DvbTriplet))] + [XmlElement("TextualIdentifier", typeof(TextualIdentifier))] + public object Item; + + [XmlAttribute] + [DefaultValue("5")] + public string ReplacementType; + + public ReplacementService() { + this.ReplacementType = "5"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class CountryAvailability { + + [XmlAttribute] + public string Countries; + + [XmlAttribute] + [DefaultValue(true)] + public bool Available; + + public CountryAvailability() { + this.Available = true; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class MultilingualText { + + [XmlAttribute] + public string Language; + + [XmlText] + public string Value; + } + + /// + /// Implementation of traditional DVB SI information about a service + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SI + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SI { + + [XmlElement("Name")] + public MultilingualText[] Name; + + [XmlElement("Description")] + public MultilingualText[] Description; + + [XmlElement("ServiceDescriptionLocation")] + public DescriptionLocationBCG[] ServiceDescriptionLocation; + + [XmlElement("ContentGenre")] + public sbyte[] ContentGenre; + + [XmlElement("CountryAvailability")] + public CountryAvailability[] CountryAvailability; + + [XmlElement("ReplacementService")] + public ReplacementService[] ReplacementService; + + public MosaicDescription MosaicDescription; + + public AnnouncementSupport AnnouncementSupport; + + [XmlAttribute] + public string ServiceType; + + [XmlAttribute] + [DefaultValue(PrimaryServiceInformationSource.XML)] + public PrimaryServiceInformationSource PrimarySISource; + + public SI() { + this.PrimarySISource = PrimaryServiceInformationSource.XML; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class DvbTriplet { + + [XmlAttribute] + public ushort OrigNetId; + + [XmlAttribute] + public ushort TSId; + + [XmlAttribute] + public ushort ServiceId; + + [XmlAttribute] + public string TSIdWildcard; + + public DvbTriplet() { + this.TSIdWildcard = "*"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlInclude(typeof(PackageTextualIdentifier))] + public partial class TextualIdentifier { + + [XmlAttribute] + public string DomainName; + + [XmlAttribute] + public string ServiceName; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class RtspUrl { + + [XmlAttribute(DataType="anyURI")] + public string RTSPControlURL; + + [XmlText(DataType="anyURI")] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class MulticastRetransmission { + + [XmlAttribute] + public string SourceAddress; + + [XmlAttribute] + public string GroupAddress; + + [XmlAttribute] + public uint ssrc; + + /// + [XmlIgnore] + public bool ssrcSpecified; + + [XmlAttribute] + public uint RTPPayloadTypeNumber; + + /// + [XmlIgnore] + public bool RTPPayloadTypeNumberSpecified; + + [XmlAttribute("dvb-original-copy-ret")] + public bool dvboriginalcopyret; + + /// + [XmlIgnore] + public bool dvboriginalcopyretSpecified; + + [XmlAttribute("rtcp-mux")] + [DefaultValue(false)] + public bool rtcpmux; + + [XmlAttribute] + public uint DestinationPort; + + /// + [XmlIgnore] + public bool DestinationPortSpecified; + + [XmlAttribute("rtx-time")] + public uint rtxtime; + + public MulticastRetransmission() { + this.rtcpmux = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class UnicastRetransmission { + + [XmlAttribute("trr-int")] + public uint trrint; + + /// + [XmlIgnore] + public bool trrintSpecified; + + [XmlAttribute("DestinationPort-ForRTCPReporting")] + public uint DestinationPortForRTCPReporting; + + /// + [XmlIgnore] + public bool DestinationPortForRTCPReportingSpecified; + + [XmlAttribute] + public uint SourcePort; + + /// + [XmlIgnore] + public bool SourcePortSpecified; + + [XmlAttribute(DataType="anyURI")] + public string RTSPControlURL; + + [XmlAttribute] + public uint ssrc; + + /// + [XmlIgnore] + public bool ssrcSpecified; + + [XmlAttribute] + public uint RTPPayloadTypeNumber; + + /// + [XmlIgnore] + public bool RTPPayloadTypeNumberSpecified; + + [XmlAttribute("dvb-original-copy-ret")] + public bool dvboriginalcopyret; + + /// + [XmlIgnore] + public bool dvboriginalcopyretSpecified; + + [XmlAttribute("rtcp-mux")] + [DefaultValue(false)] + public bool rtcpmux; + + [XmlAttribute] + public uint DestinationPort; + + /// + [XmlIgnore] + public bool DestinationPortSpecified; + + [XmlAttribute("rtx-time")] + public uint rtxtime; + + public UnicastRetransmission() { + this.rtcpmux = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class RtcpRetransmissionReporting { + + [XmlAttribute] + public string DestinationAddress; + + [XmlAttribute] + public ushort DestinationPort; + + /// + [XmlIgnore] + public bool DestinationPortSpecified; + + [XmlAttribute("dvb-t-ret", DataType="positiveInteger")] + public string dvbtret; + + [XmlAttribute("rtcp-bandwidth", DataType="positiveInteger")] + public string rtcpbandwidth; + + [XmlAttribute("rtcp-rsize", DataType="positiveInteger")] + public string rtcprsize; + + [XmlAttribute("trr-int", DataType="positiveInteger")] + public string trrint; + + [XmlAttribute("dvb-disable-rtcp-rr")] + [DefaultValue(false)] + public bool dvbdisablertcprr; + + [XmlAttribute("dvb-enable-byte")] + [DefaultValue(false)] + public bool dvbenablebyte; + + [XmlAttribute("dvb-t-wait-min")] + [DefaultValue(typeof(uint), "0")] + public uint dvbtwaitmin; + + [XmlAttribute("dvb-t-wait-max")] + [DefaultValue(typeof(uint), "0")] + public uint dvbtwaitmax; + + [XmlAttribute("dvb-ssrc-bitmask")] + [DefaultValue("ffffffff")] + public string dvbssrcbitmask; + + [XmlAttribute("dvb-rsi-mc-ret")] + public bool dvbrsimcret; + + /// + [XmlIgnore] + public bool dvbrsimcretSpecified; + + [XmlAttribute("dvb-ssrc-upstream-client", DataType="positiveInteger")] + public string dvbssrcupstreamclient; + + public RtcpRetransmissionReporting() { + this.dvbdisablertcprr = false; + this.dvbenablebyte = false; + this.dvbtwaitmin = ((uint)(0)); + this.dvbtwaitmax = ((uint)(0)); + this.dvbssrcbitmask = "ffffffff"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class RetransmissionInfo { + + public RtcpRetransmissionReporting RTCPReporting; + + public UnicastRetransmission UnicastRET; + + public MulticastRetransmission MulticastRET; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class FecLayerAddress { + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public ushort Port; + + /// + [XmlIgnore] + public bool PortSpecified; + + [XmlAttribute(DataType="positiveInteger")] + public string MaxBitrate; + + [XmlAttribute(DataType="anyURI")] + public string RTSPControlURL; + + [XmlAttribute] + public uint PayloadTypeNumber; + + /// + [XmlIgnore] + public bool PayloadTypeNumberSpecified; + + [XmlAttribute] + public TransportProtocolType TransportProtocol; + + /// + [XmlIgnore] + public bool TransportProtocolSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class IpMulticastAddress { + + public FecLayerAddress FECBaseLayer; + + [XmlElement("FECEnhancementLayer")] + public FecLayerAddress[] FECEnhancementLayer; + + public string CNAME; + + public uint ssrc; + + /// + [XmlIgnore] + public bool ssrcSpecified; + + public RetransmissionInfo RTPRetransmission; + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public ushort Port; + + [XmlAttribute] + public StreamingType Streaming; + + /// + [XmlIgnore] + public bool StreamingSpecified; + } + + /// + /// [en] The location of a service. Currently this supports either a broadcast system identifier or a multicast address (ASM and SSM) or RTSP. + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:ServiceLocation + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ServiceLocation { + + [XmlElement("BroadcastSystem", typeof(string))] + [XmlElement("IPMulticastAddress", typeof(IpMulticastAddress))] + [XmlElement("RTSPURL", typeof(RtspUrl))] + public object[] Items; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class IPService { + + public ServiceLocation ServiceLocation; + + public TextualIdentifier TextualIdentifier; + + [XmlElement("DVBTriplet")] + public DvbTriplet[] DVBTriplet; + + [XmlElement(DataType="positiveInteger")] + public string MaxBitrate; + + public SI SI; + + [XmlElement("AudioAttributes")] + public AudioAttributesType[] AudioAttributes; + + [XmlElement("VideoAttributes")] + public VideoAttributesType[] VideoAttributes; + + [XmlElement("ServiceAvailability")] + public ServiceAvailability[] ServiceAvailability; + + [XmlElement("Usage")] + public Usage[] Usage; + + [XmlElement("LinkedService")] + public IPService[] LinkedService; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class DescriptionLocationBCG { + + [XmlAttribute] + public bool preferred; + + /// + [XmlIgnore] + public bool preferredSpecified; + + [XmlText] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class PackagePackageReference { + + [XmlAttribute] + public string Id; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ReferencedServiceProviderTypeService { + + [XmlAttribute] + public string Name; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class UserPreferencesType : DSType { + + public UserIdentifierType UserIdentifier; + + [XmlElement("FilteringAndSearchPreferences")] + public FilteringAndSearchPreferencesType[] FilteringAndSearchPreferences; + + [XmlElement("BrowsingPreferences")] + public BrowsingPreferencesType[] BrowsingPreferences; + + [XmlAttribute] + [DefaultValue(userChoiceType.@false)] + public userChoiceType allowAutomaticUpdate; + + public UserPreferencesType() { + this.allowAutomaticUpdate = userChoiceType.@false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class UsageHistoryType : DSType { + + public UserIdentifierType UserIdentifier; + + [XmlElement("UserActionHistory")] + public UserActionHistoryType[] UserActionHistory; + + [XmlAttribute] + [DefaultValue(userChoiceType.@false)] + public userChoiceType allowCollection; + + public UsageHistoryType() { + this.allowCollection = userChoiceType.@false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class ControlledTermUseType : InlineTermDefinitionType { + + [XmlAttribute] + public string href; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(PersonType))] + [XmlInclude(typeof(PersonGroupType))] + [XmlInclude(typeof(OrganizationType))] + public abstract partial class AgentType : DSType { + + [XmlElement("Icon")] + public MediaLocatorType[] Icon; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class CreatorType : MediaAgentType { + + [XmlElement("Character")] + public PersonNameType[] Character; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ElectronicAddressTypeTelephone { + + [XmlAttribute] + public ElectronicAddressTypeTelephoneType type; + + /// + [XmlIgnore] + public bool typeSpecified; + + [XmlText] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(OrganizationNameType))] + [XmlInclude(typeof(ServiceInformationNameType))] + [XmlInclude(typeof(ExplanationType))] + [XmlInclude(typeof(SynopsisType))] + [XmlInclude(typeof(KeywordType))] + [XmlInclude(typeof(TermNameType))] + public partial class TextualType : TextualBaseType { + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(ClassificationSchemeAliasType))] + [XmlInclude(typeof(CSAliasType))] + public abstract partial class HeaderType : Mpeg7BaseType { + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(PreferenceConditionType))] + [XmlInclude(typeof(MediaFormatType))] + public abstract partial class DType : Mpeg7BaseType { + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(UserPreferencesType))] + [XmlInclude(typeof(UserActionListType1))] + [XmlInclude(typeof(UserActionHistoryType1))] + [XmlInclude(typeof(UsageHistoryType1))] + [XmlInclude(typeof(SourcePreferencesType))] + [XmlInclude(typeof(FilteringAndSearchPreferencesType))] + [XmlInclude(typeof(CreationPreferencesType))] + [XmlInclude(typeof(ClassificationPreferencesType))] + [XmlInclude(typeof(SummaryPreferencesType))] + [XmlInclude(typeof(BrowsingPreferencesType))] + [XmlInclude(typeof(AgentType))] + [XmlInclude(typeof(PersonType))] + [XmlInclude(typeof(PersonGroupType))] + [XmlInclude(typeof(OrganizationType))] + [XmlInclude(typeof(PlaceType))] + [XmlInclude(typeof(TVAPlaceType))] + [XmlInclude(typeof(TermDefinitionBaseType))] + [XmlInclude(typeof(TermDefinitionType))] + [XmlInclude(typeof(ClassificationSchemeBaseType))] + [XmlInclude(typeof(ClassificationSchemeType))] + [XmlInclude(typeof(TVAClassificationSchemeType))] + [XmlInclude(typeof(TVATermDefinitionBaseType))] + [XmlInclude(typeof(TVATermDefinitionType))] + [XmlInclude(typeof(UserActionType))] + [XmlInclude(typeof(UserActionType1))] + [XmlInclude(typeof(UserActionListType))] + [XmlInclude(typeof(UserActionHistoryType))] + [XmlInclude(typeof(UsageHistoryType))] + public abstract partial class DSType : Mpeg7BaseType { + + [XmlAttribute(DataType="ID")] + public string id; + + [XmlAttribute(DataType="token")] + public string timeBase; + + [XmlAttribute] + public string timeUnit; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class CSAliasType : ClassificationSchemeAliasType { + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TVAClassificationSchemeType : ClassificationSchemeBaseType { + + [XmlElement("Term")] + public TVATermDefinitionType[] Term; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class PurchaseInformationType : PurchaseItemType { + + [XmlAttribute] + public string purchaseId; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class OrganizationNameType : TextualType { + + [XmlAttribute] + public string organizationNameId; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TVAPersonNameType : PersonNameType { + + [XmlElement("OtherIdentifier")] + public UniqueIDType[] OtherIdentifier; + + [XmlAttribute] + public string personNameId; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class BroadcastEventType : ScheduleEventType { + + [XmlAttribute] + public string[] serviceIDRef; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class OnDemandProgramType : ProgramLocationType { + + [XmlElement(DataType="duration")] + public string PublishedDuration; + + public System.DateTime StartOfAvailability; + + /// + [XmlIgnore] + public bool StartOfAvailabilitySpecified; + + public System.DateTime EndOfAvailability; + + /// + [XmlIgnore] + public bool EndOfAvailabilitySpecified; + + public FlagType FirstAvailability; + + public FlagType LastAvailability; + + public FlagType ImmediateViewing; + + public DeliveryModeType DeliveryMode; + + /// + [XmlIgnore] + public bool DeliveryModeSpecified; + + public byte ContentVersion; + + /// + [XmlIgnore] + public bool ContentVersionSpecified; + + public System.DateTime ExpiryTime; + + /// + [XmlIgnore] + public bool ExpiryTimeSpecified; + + public FlagType EarlyPlayout; + + public FlagType Free; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + + [XmlAttribute] + public string[] serviceIDRef; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class PushDownloadType : ProgramLocationType { + + [XmlElement(DataType="duration")] + public string PublishedDuration; + + public System.DateTime StartOfAvailability; + + /// + [XmlIgnore] + public bool StartOfAvailabilitySpecified; + + public System.DateTime EndOfAvailability; + + /// + [XmlIgnore] + public bool EndOfAvailabilitySpecified; + + public byte ContentVersion; + + /// + [XmlIgnore] + public bool ContentVersionSpecified; + + public System.DateTime ExpiryTime; + + /// + [XmlIgnore] + public bool ExpiryTimeSpecified; + + public System.DateTime ActivationTime; + + /// + [XmlIgnore] + public bool ActivationTimeSpecified; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + + [XmlAttribute] + public string[] serviceIDRef; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class SegmentGroupTypeType : BaseSegmentGroupTypeType { + + [XmlAttribute] + public SegmentGroupTypeTypeValue value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TVAMediaRelIncrTimePointType : MediaRelIncrTimePointType { + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(ShortTitleType))] + public partial class TitleType : TextualBaseType { + + [XmlAttribute] + [DefaultValue("main")] + public string type; + + public TitleType() { + this.type = "main"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class SynopsisType : TextualType { + + [XmlAttribute] + public SynopsisLengthType length; + + /// + [XmlIgnore] + public bool lengthSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class GenreType : ControlledTermType { + + [XmlAttribute] + [DefaultValue(GenreTypeType.main)] + public GenreTypeType type; + + [XmlAttribute] + public string metadataOriginIDRef; + + public GenreType() { + this.type = GenreTypeType.main; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class KeywordType : TextualType { + + [XmlAttribute] + [DefaultValue(KeywordTypeType.main)] + public KeywordTypeType type; + + [XmlAttribute] + public string metadataOriginIDRef; + + public KeywordType() { + this.type = KeywordTypeType.main; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ServiceInformationNameType : TextualType { + + [XmlAttribute] + public serviceInformationNameLengthType length; + + /// + [XmlIgnore] + public bool lengthSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(BroadcastEventType))] + public partial class ScheduleEventType : ProgramLocationType { + + public System.DateTime PublishedStartTime; + + /// + [XmlIgnore] + public bool PublishedStartTimeSpecified; + + public System.DateTime PublishedEndTime; + + /// + [XmlIgnore] + public bool PublishedEndTimeSpecified; + + [XmlElement(DataType="duration")] + public string PublishedDuration; + + public FlagType Live; + + public FlagType Repeat; + + public FlagType FirstShowing; + + public FlagType LastShowing; + + public FlagType Free; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(DerivedFromType))] + [XmlInclude(typeof(MemberOfType))] + [XmlInclude(typeof(EpisodeOfType))] + public abstract partial class BaseMemberOfType : CRIDRefType { + + [XmlAttribute] + public uint index; + + /// + [XmlIgnore] + public bool indexSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ReviewType : MediaReviewType { + + [XmlAttribute(DataType="anyURI")] + public string programId; + + [XmlAttribute] + public string fragmentId; + + [XmlAttribute] + public ulong fragmentVersion; + + /// + [XmlIgnore] + public bool fragmentVersionSpecified; + + [XmlAttribute] + public System.DateTime fragmentExpirationDate; + + /// + [XmlIgnore] + public bool fragmentExpirationDateSpecified; + + [XmlAttribute] + public string metadataOriginIDRef; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public enum userChoiceType { + + /// + @true, + + /// + @false, + + /// + user, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class RatingTypeRatingScheme : TermUseType { + + [XmlAttribute] + public float best; + + /// + [XmlIgnore] + public bool bestSpecified; + + [XmlAttribute] + public float worst; + + /// + [XmlIgnore] + public bool worstSpecified; + + [XmlAttribute] + public RatingTypeRatingSchemeStyle style; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ReviewerType : TVAAgentType { + + public TextualType Publication; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ProgramGroupTypeType : BaseProgramGroupTypeType { + + [XmlAttribute] + public ProgramGroupTypeTypeValue value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class DerivedFromType : BaseMemberOfType { + + [XmlElement("DerivationReason")] + public GenericDerivationReasonType[] DerivationReason; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class EpisodeOfType : BaseMemberOfType { + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public enum AggregationOfTypeType { + + /// + omnibus, + + /// + magazine, + + /// + split, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public partial class PurchaseTypeQuantityRange { + + [XmlAttribute] + public uint min; + + /// + [XmlIgnore] + public bool minSpecified; + + [XmlAttribute] + public uint max; + + /// + [XmlIgnore] + public bool maxSpecified; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011", IncludeInSchema=false)] + public enum ItemChoiceType2 { + + /// + LicenseExpression, + + /// + LicenseLocator, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class GenericDerivationReasonType : BaseDerivationReasonType { + + [XmlElement("Classifier")] + public ControlledTermType[] Classifier; + + [XmlElement("Description")] + public TextualType[] Description; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class DerivationReasonType : BaseDerivationReasonType { + + [XmlAttribute] + public DerivationReasonTypeValue value; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public enum EnhancementServiceType { + + /// + FCC, + + /// + RET, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TVAPlaceType : PlaceType { + + [XmlAttribute] + [DefaultValue(false)] + public bool fictional; + + public TVAPlaceType() { + this.fictional = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class CreditsItemType : TVAAgentType { + + [XmlElement("Character", typeof(PersonNameType))] + [XmlElement("PresentationRole", typeof(TextualType))] + public object[] Items1; + + [XmlElement("RelatedMaterial")] + public RelatedMaterialType[] RelatedMaterial; + + [XmlAttribute] + public string role; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string index; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011", IncludeInSchema=false)] + public enum ItemChoiceType1 { + + /// + Nominee, + + /// + Recipient, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011")] + public enum segmentTypeType { + + /// + segment, + + /// + segmentgroup, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum UniqueIDTypeEncoding { + + /// + text, + + /// + base16, + + /// + base64, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class NameComponentType : TextualBaseType { + + [XmlAttribute] + public string initial; + + [XmlAttribute] + public string abbrev; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:mpeg7:2008", IncludeInSchema=false)] + public enum ItemsChoiceType { + + /// + FamilyName, + + /// + GivenName, + + /// + LinkingName, + + /// + Numeration, + + /// + Salutation, + + /// + Title, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum PersonNameTypeType { + + /// + former, + + /// + variant, + + /// + main, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011", IncludeInSchema=false)] + public enum ItemsChoiceType1 { + + /// + OrganizationName, + + /// + OrganizationNameIDRef, + + /// + PersonName, + + /// + PersonNameIDRef, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class InlineTermDefinitionTypeName : TextualType { + + [XmlAttribute] + public bool preferred; + + /// + [XmlIgnore] + public bool preferredSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class TermUseType : InlineTermDefinitionType { + + [XmlAttribute] + public string href; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TVAParentalGuidanceType : ParentalGuidanceType { + + [XmlElement("ExplanatoryText")] + public ExplanationType[] ExplanatoryText; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:mpeg7:2008", IncludeInSchema=false)] + public enum ItemChoiceType { + + /// + MediaData16, + + /// + MediaData64, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class TemporalSegmentLocatorType : MediaLocatorType { + + [XmlElement("BytePosition", typeof(TemporalSegmentLocatorTypeBytePosition))] + [XmlElement("MediaTime", typeof(MediaTimeType))] + public object Item1; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class ImageLocatorType : MediaLocatorType { + + [XmlElement("BytePosition", typeof(ImageLocatorTypeBytePosition))] + [XmlElement("MediaTimePoint", typeof(string))] + public object Item1; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ShortTitleType : TitleType { + + [XmlAttribute] + public ushort length; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public enum RmsFusMulticastAddressKindProtocol { + + /// + [XmlEnum("1 SAP")] + Item1SAP, + + /// + [XmlEnum("2 DVBSTP")] + Item2DVBSTP, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class PayloadListPayloadId { + + [XmlElement("Segment")] + public PayloadListSegmentType[] Segment; + + [XmlAttribute] + public string Id; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class DvbStpTransportMode : PayloadList { + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public ushort Port; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class HttpTransportMode : PayloadList { + + [XmlAttribute(DataType="anyURI")] + public string Location; + + [XmlAttribute] + [DefaultValue("false")] + public string SOAP; + + public HttpTransportMode() { + this.SOAP = "false"; + } + } + + /// + /// SRM ID and SRM file version + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMIDVerUType + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SRMIDVerUType : SRMIDType { + + [XmlAttribute] + public string SRMFileVersion; + } + + /// + /// SRM ID and optional SRM file version + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMIDVerMType + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class SRMIDVerMType : SRMIDType { + + [XmlAttribute] + public string SRMFileVersion; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class PackageTextualIdentifier : TextualIdentifier { + + [XmlAttribute(DataType="positiveInteger")] + public string Priority; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011")] + public enum ColorTypeType { + + /// + color, + + /// + blackAndWhite, + + /// + blackAndWhiteAndColor, + + /// + colorized, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public enum AspectRatioTypeType { + + /// + original, + + /// + publication, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011")] + public enum ScanType { + + /// + interlaced, + + /// + progressive, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum ExtendedLanguageTypeType { + + /// + original, + + /// + dubbed, + + /// + background, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class AudioLanguageType : ExtendedLanguageType { + + [XmlAttribute] + public string purpose; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TermNameType : TextualType { + + [XmlAttribute] + public bool preferred; + + /// + [XmlIgnore] + public bool preferredSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class AnnouncementSupportAnnouncement { + + [XmlElement("DVBTriplet", typeof(DvbTriplet))] + [XmlElement("TextualIdentifier", typeof(TextualIdentifier))] + public object Item; + + [XmlAttribute] + public string Type; + + [XmlAttribute] + public string ReferenceType; + + [XmlAttribute] + public string ComponentTag; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class MosaicDescriptionLogicalCell { + + [XmlElement("ElementaryCell")] + public MosaicDescriptionLogicalCellElementaryCell[] ElementaryCell; + + [XmlElement("AudioLink")] + public MosaicDescriptionLogicalCellAudioLink[] AudioLink; + + [XmlElement("DVBTriplet", typeof(DvbTriplet))] + [XmlElement("PackageId", typeof(MosaicDescriptionLogicalCellPackageId))] + [XmlElement("TextualId", typeof(TextualIdentifier))] + public object Item; + + [XmlAttribute] + public ushort CellId; + + [XmlAttribute] + public string PresentationInfo; + + [XmlAttribute] + public string LinkageInfo; + + [XmlAttribute] + public string EventId; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public enum PrimaryServiceInformationSource { + + /// + Stream, + + /// + XML, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public enum TransportProtocolType { + + /// + [XmlEnum("RTP-AVP")] + RTPAVP, + + /// + [XmlEnum("UDP-FEC")] + UDPFEC, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public enum StreamingType { + + /// + rtp, + + /// + udp, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public enum Usage { + + /// + FCC, + + /// + PiP, + + /// + Main, + + /// + HD, + + /// + SD, + + /// + [XmlEnum("3D")] + Item3D, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class CdsDownloadSessionDescriptionLocationDVBSTP { + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public ushort Port; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class CdsDownloadSessionDescriptionLocationSAP { + + [XmlAttribute] + public string Source; + + [XmlAttribute] + public string Address; + + [XmlAttribute] + public ushort Port; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class ProviderOfferingPull : PayloadList { + + [XmlAttribute(DataType="anyURI")] + public string Location; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class FilteringAndSearchPreferencesType : DSType { + + [XmlElement("CreationPreferences")] + public CreationPreferencesType[] CreationPreferences; + + [XmlElement("ClassificationPreferences")] + public ClassificationPreferencesType[] ClassificationPreferences; + + [XmlElement("SourcePreferences")] + public SourcePreferencesType[] SourcePreferences; + + [XmlElement("PreferenceCondition")] + public PreferenceConditionType[] PreferenceCondition; + + [XmlElement("FilteringAndSearchPreferences")] + public FilteringAndSearchPreferencesType[] FilteringAndSearchPreferences; + + [XmlAttribute] + [DefaultValue(userChoiceType.@true)] + public userChoiceType @protected; + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public FilteringAndSearchPreferencesType() { + this.@protected = userChoiceType.@true; + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class BrowsingPreferencesType : DSType { + + [XmlElement("SummaryPreferences")] + public SummaryPreferencesType[] SummaryPreferences; + + [XmlElement("PreferenceCondition")] + public BrowsingPreferencesTypePreferenceCondition[] PreferenceCondition; + + [XmlAttribute] + [DefaultValue(userChoiceType.@true)] + public userChoiceType @protected; + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public BrowsingPreferencesType() { + this.@protected = userChoiceType.@true; + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class UserActionHistoryType : DSType { + + [XmlElement("ObservationPeriod")] + public TimeType[] ObservationPeriod; + + [XmlElement("UserActionList")] + public UserActionListType[] UserActionList; + + [XmlAttribute] + [DefaultValue(userChoiceType.@true)] + public userChoiceType @protected; + + public UserActionHistoryType() { + this.@protected = userChoiceType.@true; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class PersonType : AgentType { + + [XmlElement("Name", typeof(PersonNameType))] + [XmlElement("NameTerm", typeof(ControlledTermUseType))] + public object[] Items; + + [XmlElement("Affiliation")] + public PersonTypeAffiliation[] Affiliation; + + [XmlElement("Citizenship")] + public string[] Citizenship; + + [XmlElement("Address", typeof(PlaceType))] + [XmlElement("AddressRef", typeof(ReferenceType))] + public object Item; + + [XmlElement("ElectronicAddress")] + public ElectronicAddressType[] ElectronicAddress; + + public TextualType PersonDescription; + + public string Nationality; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class PersonGroupType : AgentType { + + [XmlElement("Name")] + public PersonGroupTypeName[] Name; + + [XmlElement("NameTerm")] + public PersonGroupTypeNameTerm[] NameTerm; + + public TermUseType Kind; + + [XmlElement("Member", typeof(PersonType))] + [XmlElement("MemberRef", typeof(ReferenceType))] + public object[] Items; + + [XmlElement("Jurisdiction", typeof(PlaceType))] + [XmlElement("JurisdictionRef", typeof(ReferenceType))] + public object Item; + + [XmlElement("Address", typeof(PlaceType))] + [XmlElement("AddressRef", typeof(ReferenceType))] + public object Item1; + + public ElectronicAddressType ElectronicAddress; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class OrganizationType : AgentType { + + [XmlElement("Name")] + public OrganizationTypeName[] Name; + + [XmlElement("NameTerm")] + public OrganizationTypeNameTerm[] NameTerm; + + public TermUseType Kind; + + [XmlElement("Contact", typeof(AgentType))] + [XmlElement("ContactRef", typeof(ReferenceType))] + public object[] Items; + + [XmlElement("Jurisdiction", typeof(PlaceType))] + [XmlElement("JurisdictionRef", typeof(ReferenceType))] + public object Item; + + [XmlElement("Address", typeof(PlaceType))] + [XmlElement("AddressRef", typeof(ReferenceType))] + public object Item1; + + public ElectronicAddressType ElectronicAddress; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum ElectronicAddressTypeTelephoneType { + + /// + central, + + /// + secondary, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class ExplanationType : TextualType { + + [XmlAttribute] + public ExplanationLengthType length; + + /// + [XmlIgnore] + public bool lengthSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(CSAliasType))] + public partial class ClassificationSchemeAliasType : HeaderType { + + [XmlAttribute(DataType="NMTOKEN")] + public string alias; + + [XmlAttribute(DataType="anyURI")] + public string href; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class PreferenceConditionType : DType { + + public PlaceType Place; + + [XmlElement("Time")] + public PreferenceConditionTypeTime[] Time; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class MediaFormatType : DType { + + public ControlledTermUseType Content; + + public ControlledTermUseType Medium; + + public ControlledTermUseType FileFormat; + + [XmlElement(DataType="nonNegativeInteger")] + public string FileSize; + + public ControlledTermUseType System; + + public MediaFormatTypeBitRate BitRate; + + public MediaFormatTypeVisualCoding VisualCoding; + + public MediaFormatTypeAudioCoding AudioCoding; + + public ControlledTermUseType SceneCodingFormat; + + public ControlledTermUseType GraphicsCodingFormat; + + public ControlledTermUseType OtherCodingFormat; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName="UserActionListType", Namespace="urn:tva:mpeg7:2008")] + public partial class UserActionListType1 : DSType { + + public TermUseType ActionType; + + [XmlElement("UserAction")] + public UserActionType[] UserAction; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string numOfInstances; + + [XmlAttribute] + public string totalDuration; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName="UserActionHistoryType", Namespace="urn:tva:mpeg7:2008")] + public partial class UserActionHistoryType1 : DSType { + + [XmlElement("ObservationPeriod")] + public TimeType[] ObservationPeriod; + + [XmlElement("UserActionList")] + public UserActionListType1[] UserActionList; + + [XmlAttribute] + [DefaultValue(userChoiceType.@true)] + public userChoiceType @protected; + + public UserActionHistoryType1() { + this.@protected = userChoiceType.@true; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName="UsageHistoryType", Namespace="urn:tva:mpeg7:2008")] + public partial class UsageHistoryType1 : DSType { + + public UserIdentifierType UserIdentifier; + + [XmlElement("UserActionHistory")] + public UserActionHistoryType1[] UserActionHistory; + + [XmlAttribute] + [DefaultValue(userChoiceType.@false)] + public userChoiceType allowCollection; + + public UsageHistoryType1() { + this.allowCollection = userChoiceType.@false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class SourcePreferencesType : DSType { + + [XmlElement("DisseminationFormat")] + public SourcePreferencesTypeDisseminationFormat[] DisseminationFormat; + + [XmlElement("DisseminationSource")] + public SourcePreferencesTypeDisseminationSource[] DisseminationSource; + + [XmlElement("DisseminationLocation")] + public SourcePreferencesTypeDisseminationLocation[] DisseminationLocation; + + [XmlElement("DisseminationDate")] + public SourcePreferencesTypeDisseminationDate[] DisseminationDate; + + [XmlElement("Disseminator")] + public SourcePreferencesTypeDisseminator[] Disseminator; + + [XmlElement("MediaFormat")] + public SourcePreferencesTypeMediaFormat[] MediaFormat; + + [XmlAttribute] + public bool noRepeat; + + /// + [XmlIgnore] + public bool noRepeatSpecified; + + [XmlAttribute] + public bool noEncryption; + + /// + [XmlIgnore] + public bool noEncryptionSpecified; + + [XmlAttribute] + public bool noPayPerUse; + + /// + [XmlIgnore] + public bool noPayPerUseSpecified; + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public SourcePreferencesType() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class CreationPreferencesType : DSType { + + [XmlElement("Title")] + public CreationPreferencesTypeTitle[] Title; + + [XmlElement("Creator")] + public CreationPreferencesTypeCreator[] Creator; + + [XmlElement("Keyword")] + public CreationPreferencesTypeKeyword[] Keyword; + + [XmlElement("Location")] + public CreationPreferencesTypeLocation[] Location; + + [XmlElement("DatePeriod")] + public CreationPreferencesTypeDatePeriod[] DatePeriod; + + [XmlElement("Tool")] + public CreationPreferencesTypeTool[] Tool; + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public CreationPreferencesType() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesType : DSType { + + [XmlElement("Country")] + public ClassificationPreferencesTypeCountry[] Country; + + [XmlElement("DatePeriod")] + public ClassificationPreferencesTypeDatePeriod[] DatePeriod; + + [XmlElement("LanguageFormat")] + public ClassificationPreferencesTypeLanguageFormat[] LanguageFormat; + + [XmlElement("Language")] + public ClassificationPreferencesTypeLanguage[] Language; + + [XmlElement("CaptionLanguage")] + public ClassificationPreferencesTypeCaptionLanguage[] CaptionLanguage; + + [XmlElement("Form")] + public ClassificationPreferencesTypeForm[] Form; + + [XmlElement("Genre")] + public ClassificationPreferencesTypeGenre[] Genre; + + [XmlElement("Subject")] + public ClassificationPreferencesTypeSubject[] Subject; + + [XmlElement("Review")] + public ClassificationPreferencesTypeReview[] Review; + + [XmlElement("ParentalGuidance")] + public ClassificationPreferencesTypeParentalGuidance[] ParentalGuidance; + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public ClassificationPreferencesType() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class SummaryPreferencesType : DSType { + + [XmlElement("SummaryType")] + public SummaryPreferencesTypeSummaryType[] SummaryType; + + [XmlElement("SummaryTheme")] + public SummaryPreferencesTypeSummaryTheme[] SummaryTheme; + + public string SummaryDuration; + + public string MinSummaryDuration; + + public string MaxSummaryDuration; + + [XmlElement(DataType="positiveInteger")] + public string NumOfKeyFrames; + + [XmlElement(DataType="positiveInteger")] + public string MinNumOfKeyFrames; + + [XmlElement(DataType="positiveInteger")] + public string MaxNumOfKeyFrames; + + [XmlElement(DataType="positiveInteger")] + public string NumOfChars; + + [XmlElement(DataType="positiveInteger")] + public string MinNumOfChars; + + [XmlElement(DataType="positiveInteger")] + public string MaxNumOfChars; + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public SummaryPreferencesType() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TVAPlaceType))] + public partial class PlaceType : DSType { + + [XmlElement("Name")] + public TextualType[] Name; + + [XmlElement("NameTerm")] + public ControlledTermUseType[] NameTerm; + + public TermUseType Role; + + public PlaceTypeGeographicPosition GeographicPosition; + + [XmlElement("Region")] + public string[] Region; + + [XmlElement("AdministrativeUnit")] + public PlaceTypeAdministrativeUnit[] AdministrativeUnit; + + public PlaceTypePostalAddress PostalAddress; + + public string InternalCoordinates; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(TermDefinitionType))] + public abstract partial class TermDefinitionBaseType : DSType { + + [XmlElement("Name")] + public TermDefinitionBaseTypeName[] Name; + + [XmlElement("Definition")] + public TextualType[] Definition; + + [XmlAttribute(DataType="NMTOKEN")] + public string termID; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(ClassificationSchemeType))] + [XmlInclude(typeof(TVAClassificationSchemeType))] + public abstract partial class ClassificationSchemeBaseType : DSType { + + [XmlElement("Import")] + public ReferenceType[] Import; + + [XmlAttribute(DataType="anyURI")] + public string uri; + + [XmlAttribute(DataType="token")] + public string[] domain; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + [XmlInclude(typeof(TVATermDefinitionType))] + public abstract partial class TVATermDefinitionBaseType : DSType { + + [XmlElement("Name")] + public TVATermDefinitionBaseTypeName[] Name; + + [XmlElement("Definition")] + public TextualType[] Definition; + + [XmlElement("EquivalentCSTerm", typeof(TVATermDefinitionBaseTypeEquivalentCSTerm))] + [XmlElement("mappingTerm", typeof(MappingTermType))] + public object[] Items; + + [XmlAttribute(DataType="NMTOKEN")] + public string termID; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + [XmlInclude(typeof(UserActionType1))] + public partial class UserActionType : DSType { + + public UserActionTypeActionTime ActionTime; + + public UniqueIDType ProgramIdentifier; + + [XmlElement("ActionDataItem")] + public ReferenceType[] ActionDataItem; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class UserActionListType : DSType { + + public TermUseType ActionType; + + [XmlElement("UserAction")] + public UserActionType1[] UserAction; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string numOfInstances; + + [XmlAttribute] + public string totalDuration; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class TVATermDefinitionType : TVATermDefinitionBaseType { + + [XmlElement("Term")] + public TVATermDefinitionTypeTerm[] Term; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011")] + public enum DeliveryModeType { + + /// + streaming, + + /// + download, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public enum SegmentGroupTypeTypeValue { + + /// + highlights, + + /// + [XmlEnum("highlights/objects")] + highlightsobjects, + + /// + [XmlEnum("highlights/events")] + highlightsevents, + + /// + bookmarks, + + /// + [XmlEnum("bookmarks/objects")] + bookmarksobjects, + + /// + [XmlEnum("bookmarks/events")] + bookmarksevents, + + /// + themeGroup, + + /// + preview, + + /// + [XmlEnum("preview/title")] + previewtitle, + + /// + [XmlEnum("preview/slideshow")] + previewslideshow, + + /// + tableOfContents, + + /// + synopsis, + + /// + shots, + + /// + insertionPoints, + + /// + alternativeGroups, + + /// + alternativeSegments, + + /// + other, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011")] + public enum SynopsisLengthType { + + /// + @short, + + /// + medium, + + /// + @long, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public enum GenreTypeType { + + /// + main, + + /// + secondary, + + /// + other, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public enum KeywordTypeType { + + /// + main, + + /// + secondary, + + /// + other, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011")] + public enum serviceInformationNameLengthType { + + /// + @short, + + /// + medium, + + /// + @long, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:metadata:2011")] + public partial class MemberOfType : BaseMemberOfType { + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum RatingTypeRatingSchemeStyle { + + /// + higherBetter, + + /// + lowerBetter, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public enum ProgramGroupTypeTypeValue { + + /// + series, + + /// + show, + + /// + programConcept, + + /// + programCompilation, + + /// + otherCollection, + + /// + otherChoice, + + /// + [XmlEnum("mini-series")] + miniseries, + + /// + brand, + + /// + automaticAcquisitionThemed, + + /// + automaticAcquisitionNonThemed, + + /// + clip, + + /// + application, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public enum DerivationReasonTypeValue { + + /// + violence, + + /// + language, + + /// + sex, + + /// + duration, + + /// + other, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class TemporalSegmentLocatorTypeBytePosition { + + [XmlAttribute(DataType="nonNegativeInteger")] + public string offset; + + [XmlAttribute(DataType="positiveInteger")] + public string length; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ImageLocatorTypeBytePosition { + + [XmlAttribute(DataType="nonNegativeInteger")] + public string offset; + + [XmlAttribute(DataType="positiveInteger")] + public string length; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class MosaicDescriptionLogicalCellElementaryCell { + + [XmlAttribute] + public ushort CellId; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class MosaicDescriptionLogicalCellAudioLink { + + [XmlAttribute] + public string Language; + + [XmlAttribute] + public string ComponentTag; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + public partial class MosaicDescriptionLogicalCellPackageId { + + [XmlAttribute] + public string Domain; + + [XmlText] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class BrowsingPreferencesTypePreferenceCondition : PreferenceConditionType { + + public TermUseType Genre; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class PersonTypeAffiliation { + + [XmlElement("Organization", typeof(OrganizationType))] + [XmlElement("OrganizationRef", typeof(ReferenceType))] + [XmlElement("PersonGroup", typeof(PersonGroupType))] + [XmlElement("PersonGroupRef", typeof(ReferenceType))] + [XmlChoiceIdentifier("ItemElementName")] + public object Item; + + [XmlIgnore] + public ItemChoiceType3 ItemElementName; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class PersonGroupTypeName : TextualType { + + [XmlAttribute] + public PersonGroupTypeNameType type; + + /// + [XmlIgnore] + public bool typeSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class PersonGroupTypeNameTerm : ControlledTermUseType { + + [XmlAttribute] + public PersonGroupTypeNameTermType type; + + /// + [XmlIgnore] + public bool typeSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class OrganizationTypeName : TextualType { + + [XmlAttribute] + public OrganizationTypeNameType type; + + /// + [XmlIgnore] + public bool typeSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class OrganizationTypeNameTerm : ControlledTermUseType { + + [XmlAttribute] + public OrganizationTypeNameTermType type; + + /// + [XmlIgnore] + public bool typeSpecified; + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:metadata:2011")] + public enum ExplanationLengthType { + + /// + @short, + + /// + medium, + + /// + @long, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class PreferenceConditionTypeTime : TimeType { + + [XmlAttribute] + [DefaultValue("none")] + public string recurrence; + + [XmlAttribute(DataType="positiveInteger")] + public string numOfRecurrences; + + public PreferenceConditionTypeTime() { + this.recurrence = "none"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class MediaFormatTypeBitRate { + + [XmlAttribute] + [DefaultValue(false)] + public bool variable; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string minimum; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string average; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string maximum; + + [XmlText(DataType="nonNegativeInteger")] + public string Value; + + public MediaFormatTypeBitRate() { + this.variable = false; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class MediaFormatTypeVisualCoding { + + public MediaFormatTypeVisualCodingFormat Format; + + public MediaFormatTypeVisualCodingPixel Pixel; + + public MediaFormatTypeVisualCodingFrame Frame; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class MediaFormatTypeAudioCoding { + + public ControlledTermUseType Format; + + public MediaFormatTypeAudioCodingAudioChannels AudioChannels; + + public MediaFormatTypeAudioCodingSample Sample; + + public string Emphasis; + + public ControlledTermUseType Presentation; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class SourcePreferencesTypeDisseminationFormat : TermUseType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public SourcePreferencesTypeDisseminationFormat() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class SourcePreferencesTypeDisseminationSource : TextualType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public SourcePreferencesTypeDisseminationSource() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class SourcePreferencesTypeDisseminationLocation : PlaceType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public SourcePreferencesTypeDisseminationLocation() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class SourcePreferencesTypeDisseminationDate : TimeType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public SourcePreferencesTypeDisseminationDate() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class SourcePreferencesTypeDisseminator : MediaAgentType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public SourcePreferencesTypeDisseminator() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class SourcePreferencesTypeMediaFormat : MediaFormatType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public SourcePreferencesTypeMediaFormat() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class CreationPreferencesTypeTitle : TitleType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public CreationPreferencesTypeTitle() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class CreationPreferencesTypeCreator : CreatorType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public CreationPreferencesTypeCreator() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class CreationPreferencesTypeKeyword : TextualType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public CreationPreferencesTypeKeyword() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class CreationPreferencesTypeLocation : PlaceType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public CreationPreferencesTypeLocation() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class CreationPreferencesTypeDatePeriod : TimeType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public CreationPreferencesTypeDatePeriod() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class CreationPreferencesTypeTool : TermUseType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public CreationPreferencesTypeTool() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeCountry { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + [XmlText] + public string Value; + + public ClassificationPreferencesTypeCountry() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeDatePeriod : TimeType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public ClassificationPreferencesTypeDatePeriod() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeLanguageFormat { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + [XmlText] + public string Value; + + public ClassificationPreferencesTypeLanguageFormat() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeLanguage : ExtendedLanguageType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public ClassificationPreferencesTypeLanguage() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeCaptionLanguage { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + [XmlText(DataType="language")] + public string Value; + + public ClassificationPreferencesTypeCaptionLanguage() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeForm : TermUseType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public ClassificationPreferencesTypeForm() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeGenre : TermUseType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public ClassificationPreferencesTypeGenre() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeSubject : TextualType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public ClassificationPreferencesTypeSubject() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeReview { + + public RatingType Rating; + + public AgentType Reviewer; + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public ClassificationPreferencesTypeReview() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationPreferencesTypeParentalGuidance : ParentalGuidanceType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public ClassificationPreferencesTypeParentalGuidance() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class SummaryPreferencesTypeSummaryType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + [XmlText] + public string Value; + + public SummaryPreferencesTypeSummaryType() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class SummaryPreferencesTypeSummaryTheme : TextualType { + + [XmlAttribute(DataType="integer")] + [DefaultValue("10")] + public string preferenceValue; + + public SummaryPreferencesTypeSummaryTheme() { + this.preferenceValue = "10"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class PlaceTypeGeographicPosition { + + public GeographicPointType Point; + + [XmlAttribute] + public string datum; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class PlaceTypeAdministrativeUnit { + + [XmlAttribute] + public string type; + + [XmlText] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class PlaceTypePostalAddress { + + [XmlElement("AddressLine")] + public TextualType[] AddressLine; + + public TextualType PostingIdentifier; + + [XmlAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, Namespace="http://www.w3.org/XML/1998/namespace")] + public string lang; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class TermDefinitionBaseTypeName : TextualType { + + [XmlAttribute] + public bool preferred; + + /// + [XmlIgnore] + public bool preferredSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class TermDefinitionType : TermDefinitionBaseType { + + [XmlElement("Term")] + public TermDefinitionTypeTerm[] Term; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(Namespace="urn:tva:mpeg7:2008")] + public partial class ClassificationSchemeType : ClassificationSchemeBaseType { + + [XmlElement("Term")] + public TermDefinitionType[] Term; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public partial class TVATermDefinitionBaseTypeName : TextualType { + + [XmlAttribute] + public bool preferred; + + /// + [XmlIgnore] + public bool preferredSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public partial class TVATermDefinitionBaseTypeEquivalentCSTerm { + + [XmlAttribute] + public string href; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class UserActionTypeActionTime { + + public MediaTimeType MediaTime; + + public TimeType GeneralTime; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName="UserActionType", Namespace="urn:tva:metadata:2011")] + public partial class UserActionType1 : UserActionType { + + [XmlElement(DataType="anyURI")] + public string ProgramLocation; + + public RatingType Rating; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + public partial class TVATermDefinitionTypeTerm : TVATermDefinitionType { + + [XmlAttribute] + [DefaultValue("NT")] + public string relation; + + public TVATermDefinitionTypeTerm() { + this.relation = "NT"; + } + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(Namespace="urn:tva:mpeg7:2008", IncludeInSchema=false)] + public enum ItemChoiceType3 { + + /// + Organization, + + /// + OrganizationRef, + + /// + PersonGroup, + + /// + PersonGroupRef, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum PersonGroupTypeNameType { + + /// + former, + + /// + variant, + + /// + main, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum PersonGroupTypeNameTermType { + + /// + former, + + /// + variant, + + /// + main, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum OrganizationTypeNameType { + + /// + former, + + /// + variant, + + /// + main, + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum OrganizationTypeNameTermType { + + /// + former, + + /// + variant, + + /// + main, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class MediaFormatTypeVisualCodingFormat : ControlledTermUseType { + + [XmlAttribute] + [DefaultValue("color")] + public string colorDomain; + + public MediaFormatTypeVisualCodingFormat() { + this.colorDomain = "color"; + } + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class MediaFormatTypeVisualCodingPixel { + + [XmlAttribute(DataType="nonNegativeInteger")] + public string resolution; + + [XmlAttribute] + public double aspectRatio; + + /// + [XmlIgnore] + public bool aspectRatioSpecified; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string bitsPer; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class MediaFormatTypeVisualCodingFrame { + + [XmlAttribute(DataType="nonNegativeInteger")] + public string height; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string width; + + [XmlAttribute] + public double aspectRatio; + + /// + [XmlIgnore] + public bool aspectRatioSpecified; + + [XmlAttribute] + public double rate; + + /// + [XmlIgnore] + public bool rateSpecified; + + [XmlAttribute] + public MediaFormatTypeVisualCodingFrameStructure structure; + + /// + [XmlIgnore] + public bool structureSpecified; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class MediaFormatTypeAudioCodingAudioChannels { + + [XmlAttribute(DataType="nonNegativeInteger")] + public string front; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string side; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string rear; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string lfe; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string track; + + [XmlText(DataType="nonNegativeInteger")] + public string Value; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class MediaFormatTypeAudioCodingSample { + + [XmlAttribute] + public double rate; + + /// + [XmlIgnore] + public bool rateSpecified; + + [XmlAttribute(DataType="nonNegativeInteger")] + public string bitsPer; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public partial class TermDefinitionTypeTerm : TermDefinitionType { + + [XmlAttribute] + [DefaultValue("NT")] + public string relation; + + public TermDefinitionTypeTerm() { + this.relation = "NT"; + } + } + + /// + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [XmlType(AnonymousType=true, Namespace="urn:tva:mpeg7:2008")] + public enum MediaFormatTypeVisualCodingFrameStructure { + + /// + progressive, + + /// + interlaced, + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlRoot(Namespace="urn:dvb:metadata:iptv:sdns:2012-1", IsNullable=false)] + public partial class CoDAnnounceDescribe { + + public BasicContentDescriptionType ContentDescription; + + public FecInfo FECInfo; + + public RETInfoType RETInfo; + + public ServerBasedEnhancementServiceInfoType ServerBasedEnhancementServiceInfo; + + [XmlAttribute(DataType="anyURI")] + public string RTSPControlURL; + + [XmlAttribute] + public StreamingType Streaming; + + /// + [XmlIgnore] + public bool StreamingSpecified; + } + + /// + /// [en] Provides a list of SRM Download Services + /// + /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:SRMDownloadRecord + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:dvb:metadata:iptv:sdns:2012-1")] + [XmlRoot(Namespace="urn:dvb:metadata:iptv:sdns:2012-1", IsNullable=false)] + public partial class SRMDownloadRecord : OfferingBase { + + [XmlElement("SRMDownloadService")] + public SRMDownloadServiceType[] SRMDownloadService; + } + + [GeneratedCode("myxsdtool", "0.0.0.0")] + [Serializable] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(AnonymousType=true, Namespace="urn:tva:metadata:2011")] + [XmlRoot(Namespace="urn:tva:metadata:2011", IsNullable=false)] + public partial class TVAContentLinks { + + [XmlElement("RelatedMaterial")] + public RelatedMaterialType[] RelatedMaterial; + } +} diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/tva_metadata_3-1_v171.xsd b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/tva_metadata_3-1_v171.xsd similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/tva_metadata_3-1_v171.xsd rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/tva_metadata_3-1_v171.xsd diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/tva_mpeg7_2008.xsd b/1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/tva_mpeg7_2008.xsd similarity index 100% rename from 1.5 'Kruger 60'/Etsi.Ts102034/v010501/Xsd.Unified/tva_mpeg7_2008.xsd rename to 1.5 'Kruger 60'/Assemblies/Etsi.Ts102034/v010501/Xsd.Unified/tva_mpeg7_2008.xsd diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/EpgInfoProvider.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/EpgInfoProvider.cs similarity index 91% rename from 1.5 'Kruger 60'/IpTv.MovistarPlus/EpgInfoProvider.cs rename to 1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/EpgInfoProvider.cs index aa8d742d..4f4c3076 100644 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/EpgInfoProvider.cs +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/EpgInfoProvider.cs @@ -1,167 +1,172 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; -using Newtonsoft.Json; -using Project.IpTv.Core.IpTvProvider.EPG; -using Project.IpTv.Services.EPG; -using Project.IpTv.UiServices.Discovery; - -namespace Project.IpTv.MovistarPlus -{ - internal class EpgInfoProvider: IEpgInfoProvider - { - #region IEpgInfoProvider Members - - // TODO: get from xml settings, updated from http://www-60.svc.imagenio.telefonica.net:2001/appserver/mvtv.do?action=getConfigurationParams - private const string EpgThumbnailScheme = "http"; - private const string EpgThumbnailHost = "www-60.svc.imagenio.telefonica.net"; - private const int EpgThumbnailPort = 2001; - private const string EpgThumbnailPortraitSubPath = "portrait/"; - private const string EpgThumbnailLandscapeSubPath = "landscape/"; - private const string EpgThumbnailBigSubPath = "big/"; - private const string EpgThumbnailUrlFormat = "appclient/incoming/covers/programmeImages/{0}{1}{2}/{3}.jpg"; - - public EpgInfoProviderCapabilities Capabilities - { - get - { - return EpgInfoProviderCapabilities.ExtendedInfo | - EpgInfoProviderCapabilities.IndependentProgramThumbnail; - } // get - } // Capabilities - - public ExtendedEpgEvent GetEpgInfo(UiBroadcastService service, EpgEvent epgEvent, bool portrait) - { - var request = GetExtendedInfoRequest(epgEvent); - if (request == null) return null; - - var movistarEpgInfoResponse = SendRequest(request); - if (movistarEpgInfoResponse.Code != 0) return null; - - var result = ToExtendedEpgEvent(movistarEpgInfoResponse.Data); - result.UrlThumbnail = GetEpgProgramThumbnailUrl(service, epgEvent, portrait); - - return result; - } // GetEpgInfo - - public string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgEvent epgEvent, bool portrait) - { - try - { - var crid = MovistarCrId.Get(epgEvent.CRID); - if (crid == null) return null; - - var builder = new UriBuilder(); - builder.Scheme = EpgThumbnailScheme; - builder.Host = EpgThumbnailHost; - builder.Port = EpgThumbnailPort; - builder.Path = string.Format(EpgThumbnailUrlFormat, - portrait? EpgThumbnailPortraitSubPath: EpgThumbnailLandscapeSubPath, - EpgThumbnailBigSubPath, - crid.ContentIdRoot, crid.ContentId); - - return builder.Uri.ToString(); - } - catch - { - // ignore - return null; - } // try-catch - } // GetEpgProgramThumbnailUrl - - #endregion - - public ExtendedEpgEvent ToExtendedEpgEvent(MovistarEpgInfo info) - { - var result = new ExtendedEpgEvent(); - - // Title - if ((info.LongTitle != null) && (info.LongTitle.Length > 0)) - { - result.Title = info.LongTitle[0]; - } - else if (info.Title != null) - { - result.Title = info.Title; - } // if-else if - - // Original title - if ((info.OriginalLongTitle != null) && (info.OriginalLongTitle.Length > 0)) - { - result.OriginalTitle = info.OriginalLongTitle[0]; - } - else if ((info.OriginalTitle != null) && (info.OriginalTitle.Length > 0)) - { - result.OriginalTitle = info.OriginalTitle[0]; - } // if-else if - - // Genre / Subgrenre - result.Genre = info.Genre; - result.SubGenre = info.SubGenre; - - // Synopsis - result.Synopsis = info.Description; - - // Directors - result.Directors = Split(info.Directors, ','); - - // Actors - result.Actors = Split(info.MainActors, ','); - - // Producers - result.Producers = Split(info.Producer, ','); - - // ScriptWriters - result.ScriptWriters = Split(info.ScriptWriter, ','); - - // Country - result.Country = Split(info.Countries, ','); - - // Production date - result.ProductionDate = Split(info.ProductionDate, ','); - - return result; - } // ToExtendedEpgEvent - - private string[] Split(string[] data, params char[] chars) - { - if ((data == null) || (data.Length == 0)) return null; - - var q = from element in data - let split = element.Split(chars) - from item in split - let text = item.Trim() - where text != "" - select text; - - return q.ToArray(); - } // Split - - private UriBuilder GetExtendedInfoRequest(EpgEvent epgEvent) - { - var crid = MovistarCrId.Get(epgEvent.CRID); - if (crid == null) return null; - - var builder = new UriBuilder(); - builder.Scheme = "http"; - builder.Host = "www-60.svc.imagenio.telefonica.net"; - builder.Port = 2001; - builder.Path = "appserver/mvtv.do"; - builder.Query = string.Format("action=getEpgInfo&extInfoID={0}&tvWholesaler={1}", crid.ContentId, 1); - - return builder; - } // GetExtendedInfoRequest - - public static T SendRequest(UriBuilder uri) - { - using (var client = new WebClient()) - { - var data = client.DownloadData(uri.Uri); - var jsonData = Encoding.UTF8.GetString(data); - return JsonConvert.DeserializeObject(jsonData); - } // using client - } // SendRequest - } // class EpgInfoProvider -} // namespace +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.IpTvServices.MovistarPlus +{ + /* + internal class EpgInfoProvider: IEpgInfoProvider + { + #region IEpgInfoProvider Members + + // TODO: get from xml settings, updated from http://www-60.svc.imagenio.telefonica.net:2001/appserver/mvtv.do?action=getConfigurationParams + private const string EpgThumbnailScheme = "http"; + private const string EpgThumbnailHost = "www-60.svc.imagenio.telefonica.net"; + private const int EpgThumbnailPort = 2001; + private const string EpgThumbnailPortraitSubPath = "portrait/"; + private const string EpgThumbnailLandscapeSubPath = "landscape/"; + private const string EpgThumbnailBigSubPath = "big/"; + private const string EpgThumbnailUrlFormat = "appclient/incoming/covers/programmeImages/{0}{1}{2}/{3}.jpg"; + + public EpgInfoProviderCapabilities Capabilities + { + get + { + return EpgInfoProviderCapabilities.ExtendedInfo | + EpgInfoProviderCapabilities.IndependentProgramThumbnail; + } // get + } // Capabilities + + public ExtendedEpgEvent GetEpgInfo(UiBroadcastService service, EpgEvent epgEvent, bool portrait) + { + var request = GetExtendedInfoRequest(epgEvent); + if (request == null) return null; + + var movistarEpgInfoResponse = SendRequest(request); + if (movistarEpgInfoResponse.Code != 0) return null; + + var result = ToExtendedEpgEvent(movistarEpgInfoResponse.Data); + result.UrlThumbnail = GetEpgProgramThumbnailUrl(service, epgEvent, portrait); + + return result; + } // GetEpgInfo + + public string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgEvent epgEvent, bool portrait) + { + try + { + var crid = MovistarCrId.Get(epgEvent.CRID); + if (crid == null) return null; + + var builder = new UriBuilder(); + builder.Scheme = EpgThumbnailScheme; + builder.Host = EpgThumbnailHost; + builder.Port = EpgThumbnailPort; + builder.Path = string.Format(EpgThumbnailUrlFormat, + portrait? EpgThumbnailPortraitSubPath: EpgThumbnailLandscapeSubPath, + EpgThumbnailBigSubPath, + crid.ContentIdRoot, crid.ContentId); + + return builder.Uri.ToString(); + } + catch + { + // ignore + return null; + } // try-catch + } // GetEpgProgramThumbnailUrl + + #endregion + + public ExtendedEpgEvent ToExtendedEpgEvent(MovistarEpgInfo info) + { + var result = new ExtendedEpgEvent(); + + // Title + if ((info.LongTitle != null) && (info.LongTitle.Length > 0)) + { + result.Title = info.LongTitle[0]; + } + else if (info.Title != null) + { + result.Title = info.Title; + } // if-else if + + // Original title + if ((info.OriginalLongTitle != null) && (info.OriginalLongTitle.Length > 0)) + { + result.OriginalTitle = info.OriginalLongTitle[0]; + } + else if ((info.OriginalTitle != null) && (info.OriginalTitle.Length > 0)) + { + result.OriginalTitle = info.OriginalTitle[0]; + } // if-else if + + // Genre / Subgrenre + result.Genre = info.Genre; + result.SubGenre = info.SubGenre; + + // Synopsis + result.Synopsis = info.Description; + + // Directors + result.Directors = Split(info.Directors, ','); + + // Actors + result.Actors = Split(info.MainActors, ','); + + // Producers + result.Producers = Split(info.Producer, ','); + + // ScriptWriters + result.ScriptWriters = Split(info.ScriptWriter, ','); + + // Country + result.Country = Split(info.Countries, ','); + + // Production date + result.ProductionDate = Split(info.ProductionDate, ','); + + return result; + } // ToExtendedEpgEvent + + private string[] Split(string[] data, params char[] chars) + { + if ((data == null) || (data.Length == 0)) return null; + + var q = from element in data + let split = element.Split(chars) + from item in split + let text = item.Trim() + where text != "" + select text; + + return q.ToArray(); + } // Split + + private UriBuilder GetExtendedInfoRequest(EpgEvent epgEvent) + { + var crid = MovistarCrId.Get(epgEvent.CRID); + if (crid == null) return null; + + var builder = new UriBuilder(); + builder.Scheme = "http"; + builder.Host = "www-60.svc.imagenio.telefonica.net"; + builder.Port = 2001; + builder.Path = "appserver/mvtv.do"; + builder.Query = string.Format("action=getEpgInfo&extInfoID={0}&tvWholesaler={1}", crid.ContentId, 1); + + return builder; + } // GetExtendedInfoRequest + + public static T SendRequest(UriBuilder uri) + { + using (var client = new WebClient()) + { + var data = client.DownloadData(uri.Uri); + var jsonData = Encoding.UTF8.GetString(data); + return JsonConvert.DeserializeObject(jsonData); + } // using client + } // SendRequest + } // class EpgInfoProvider + */ +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Implementation/MovistarProviderTexts.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Implementation/MovistarProviderTexts.cs new file mode 100644 index 00000000..a34dc01e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Implementation/MovistarProviderTexts.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.IpTvServices.MovistarPlus.Properties; + +namespace IpTviewr.IpTvServices.MovistarPlus.Implementation +{ + internal class MovistarProviderTexts : ITvServiceProviderTexts + { + public string MenuEntry => Texts.ProviderMenuEntry; + public string MenuSelect => Texts.ProviderMenuSelect; + public string MenuDetails => Texts.ProviderMenuDetails; + public string NoSelection => Texts.ProviderNoSelection; + public string ListRefreshError => Texts.ProviderListRefreshError; + public string ObtainingList => Texts.ProviderObtainingList; + public string ParsingList => Texts.ProviderParsingList; + public string PropertiesCaption => Texts.ProviderPropertiesCaption; + public string LogoLoadError => Texts.ProviderLogoLoadError; + public string LogoNotFound => Texts.ProviderLogoNotFound; + public string UnknownDisplayDescription => Texts.ProviderUnknownDisplayDescription; + public string FormatFriendlyName => Texts.ProviderFormatFriendlyName; + public string FormatUnknownName => Texts.ProviderFormatUnknownName; + public string SelectCaption => Texts.ProviderSelectCaption; + } // class MovistarProviderTexts +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Implementation/MovistarTexts.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Implementation/MovistarTexts.cs new file mode 100644 index 00000000..03fcd36d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Implementation/MovistarTexts.cs @@ -0,0 +1,22 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.IpTvServices.Implementation; + +namespace IpTviewr.IpTvServices.MovistarPlus.Implementation +{ + public sealed class MovistarTexts: ServiceTexts + { + protected override ITvServiceProviderTexts GetProviderTexts() => new MovistarProviderTexts(); + } // class MovistarTexts +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj new file mode 100644 index 00000000..f91f0926 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj @@ -0,0 +1,112 @@ + + + + + Debug + AnyCPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B} + Library + Properties + IpTviewr.IpTvServices.MovistarPlus + IpTViewr.MovistarPlus + v4.6.2 + 512 + SAK + SAK + SAK + SAK + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + ..\..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + + + + True + True + Texts.resx + + + + + + + + + + + + + + + + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} + IpTviewr.IpTvServices + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common + + + {A722DE9D-AE51-479C-825F-A19F4C69BD75} + UiServices.Config + + + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/IpTvServiceMovistarPlus.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/IpTvServiceMovistarPlus.cs new file mode 100644 index 00000000..6d5d4fa5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/IpTvServiceMovistarPlus.cs @@ -0,0 +1,41 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.IpTvServices.MovistarPlus.Implementation; +using System.ComponentModel.Composition; +using IpTviewr.Common.Configuration; + +namespace IpTviewr.IpTvServices.MovistarPlus +{ + [Export(typeof(ITvService))] + public class IpTvServiceMovistarPlus : IpTvService + { + + #region IpTvService implementation + + public override IEpgInfoProvider EpgInfo { get; } + + public override InitializationResult Initialize() + { + var result = base.Initialize(); + return result.IsError ? result : InitializationResult.Ok; + + //EpgInfo = new EpgInfoProvider(); + // return InitializationResult.Ok; + } // Initialize + + protected override ITvServiceTexts CreateServiceTexts() => new MovistarTexts(); + + #endregion + } // class IpTvServiceMovistarPlus +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/LICENSE.ES.MD new file mode 100644 index 00000000..8584ca02 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/LICENSE.ES.MD @@ -0,0 +1,189 @@ +# Biblioteca 'IpTViewr.MovistarPlus' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.MovistarPlus +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Common +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/LICENSE.MD new file mode 100644 index 00000000..2ff64166 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/LICENSE.MD @@ -0,0 +1,161 @@ +# Library 'IpTViewr.MovistarPlus' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.MovistarPlus +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Common +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/License.txt b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/License.txt new file mode 100644 index 00000000..6815e04a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/License.txt @@ -0,0 +1,172 @@ +############################################################################## +## +## Library 'IpTViewr.MovistarPlus' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + * Microsoft® Exception Message Box License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.MovistarPlus +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. UiServices.Common +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarCrId.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarCrId.cs new file mode 100644 index 00000000..4e64d514 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarCrId.cs @@ -0,0 +1,49 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.IpTvServices.MovistarPlus +{ + internal class MovistarCrId + { + public MovistarCrId(string contentIdRoot, string contentId, string seriesId) + { + ContentIdRoot = contentIdRoot; + ContentId = contentId; + SeriesId = seriesId; + } + + public static MovistarCrId Get(string crId) + { + var crid = new Uri(crId); + var components = crid.AbsolutePath.Split('/'); + if (components.Length != 4) return null; + if (components[2] != components[3]) return null; + if (components[3].Length < 5) return null; + + var result = new MovistarCrId( + seriesId: components[1], + contentIdRoot: components[3].Substring(0, 4), + contentId: components[3]); + + return result; + } // Get + + public string SeriesId { get; } + + public string ContentIdRoot { get; } + + public string ContentId { get; } + } // class MovistarCrId +} // namespace diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarEpgInfo.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarEpgInfo.cs similarity index 82% rename from 1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarEpgInfo.cs rename to 1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarEpgInfo.cs index 6de4ad74..c419b256 100644 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarEpgInfo.cs +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarEpgInfo.cs @@ -1,111 +1,116 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.MovistarPlus -{ - public class MovistarEpgInfo - { - public class LanguageInfo - { - [JsonProperty("audioType")] - public string AudioType; - - [JsonProperty("language")] - public string Language; - } // LanguageInfo - - [JsonProperty("languages")] - public LanguageInfo[] Languages; - - [JsonProperty("startOver")] - public long StartOver; - - [JsonProperty("endtime")] - public long EndTime; - - [JsonProperty("ageRatingID")] - public string AgeRatingId; - - [JsonProperty("description")] - public string Description; - - [JsonProperty("begintime")] - public long BeginTime; - - [JsonProperty("isHdtv")] - public int IsHdTv; - - [JsonProperty("title")] - public string Title; - - [JsonProperty("seriesID")] - public string SeriesId; - - [JsonProperty("duration")] - public long Duration; - - [JsonProperty("subgenre")] - public string SubGenre; - - [JsonProperty("catchUp")] - public int CatchUp; - - [JsonProperty("genre")] - public string Genre; - - [JsonProperty("hasDolby")] - public int HasDolby; - - [JsonProperty("directors")] - public string[] Directors; - - [JsonProperty("preTime")] - public long PreTime; - - [JsonProperty("originalLongTitle")] - public string[] OriginalLongTitle; - - [JsonProperty("countries")] - public string[] Countries; - - [JsonProperty("version")] - public string[] Version; - - [JsonProperty("exptime")] - public long ExpiryTime; - - [JsonProperty("postTime")] - public long PostTime; - - [JsonProperty("productionDate")] - public string[] ProductionDate; - - [JsonProperty("originalTitle")] - public string[] OriginalTitle; - - [JsonProperty("longTitle")] - public string[] LongTitle; - - [JsonProperty("scriptwriter")] - public string[] ScriptWriter; - - [JsonProperty("mainActors")] - public string[] MainActors; - - [JsonProperty("producer")] - public string[] Producer; - - [JsonProperty("audio")] - public string[] Audio; - - [JsonProperty("soundtrack")] - public string[] Soundtrack; - } // class MovistarEpgInfo -} // namespace +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Newtonsoft.Json; + +namespace IpTviewr.IpTvServices.MovistarPlus +{ + public class MovistarEpgInfo + { + public class LanguageInfo + { + [JsonProperty("audioType")] + public string AudioType; + + [JsonProperty("language")] + public string Language; + } // LanguageInfo + + [JsonProperty("languages")] + public LanguageInfo[] Languages; + + [JsonProperty("startOver")] + public long StartOver; + + [JsonProperty("endtime")] + public long EndTime; + + [JsonProperty("ageRatingID")] + public string AgeRatingId; + + [JsonProperty("description")] + public string Description; + + [JsonProperty("begintime")] + public long BeginTime; + + [JsonProperty("isHdtv")] + public int IsHdTv; + + [JsonProperty("title")] + public string Title; + + [JsonProperty("seriesID")] + public string SeriesId; + + [JsonProperty("duration")] + public long Duration; + + [JsonProperty("subgenre")] + public string SubGenre; + + [JsonProperty("catchUp")] + public int CatchUp; + + [JsonProperty("genre")] + public string Genre; + + [JsonProperty("hasDolby")] + public int HasDolby; + + [JsonProperty("directors")] + public string[] Directors; + + [JsonProperty("preTime")] + public long PreTime; + + [JsonProperty("originalLongTitle")] + public string[] OriginalLongTitle; + + [JsonProperty("countries")] + public string[] Countries; + + [JsonProperty("version")] + public string[] Version; + + [JsonProperty("exptime")] + public long ExpiryTime; + + [JsonProperty("postTime")] + public long PostTime; + + [JsonProperty("productionDate")] + public string[] ProductionDate; + + [JsonProperty("originalTitle")] + public string[] OriginalTitle; + + [JsonProperty("longTitle")] + public string[] LongTitle; + + [JsonProperty("scriptwriter")] + public string[] ScriptWriter; + + [JsonProperty("mainActors")] + public string[] MainActors; + + [JsonProperty("producer")] + public string[] Producer; + + [JsonProperty("audio")] + public string[] Audio; + + [JsonProperty("soundtrack")] + public string[] Soundtrack; + } // class MovistarEpgInfo +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarJsonEpgInfoResponse.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarJsonEpgInfoResponse.cs new file mode 100644 index 00000000..9f7e9ba4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarJsonEpgInfoResponse.cs @@ -0,0 +1,25 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Newtonsoft.Json; + +namespace IpTviewr.IpTvServices.MovistarPlus +{ + /* + internal class MovistarJsonEpgInfoResponse: MovistarJsonResponse + { + [JsonProperty("resultData")] + public MovistarEpgInfo Data; + } // class MovistarJsonEpgInfoResponse + */ +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarJsonResponse.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarJsonResponse.cs new file mode 100644 index 00000000..9aeb2ca0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/MovistarJsonResponse.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Newtonsoft.Json; + +namespace IpTviewr.IpTvServices.MovistarPlus +{ + internal abstract class MovistarJsonResponse + { + [JsonProperty("resultCode")] + public int Code { get; set; } + + [JsonProperty("resultText")] + public string Text { get; set; } + + [JsonProperty("hashCode")] + public string HashCode { get; set; } + } // abstract class MovistarJsonResponse +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8efa1a11 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IpTv.MovistarPlus")] +[assembly: AssemblyDescription("IpTviewr.IpTvProvider.MovistarPlus")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d01ab43e-4873-413f-9fb2-9bde7c593b00")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/Texts.Designer.cs new file mode 100644 index 00000000..43a0eb0e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/Texts.Designer.cs @@ -0,0 +1,192 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.IpTvServices.MovistarPlus.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.IpTvServices.MovistarPlus.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to {0}. + /// + internal static string ProviderFormatFriendlyName { + get { + return ResourceManager.GetString("ProviderFormatFriendlyName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to (Name not provided) {0}. + /// + internal static string ProviderFormatUnknownName { + get { + return ResourceManager.GetString("ProviderFormatUnknownName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to obtain the list of movistar+ regions.. + /// + internal static string ProviderListRefreshError { + get { + return ResourceManager.GetString("ProviderListRefreshError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load region logo file <{0}>.. + /// + internal static string ProviderLogoLoadError { + get { + return ResourceManager.GetString("ProviderLogoLoadError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Region logo file <{0}> not found.. + /// + internal static string ProviderLogoNotFound { + get { + return ResourceManager.GetString("ProviderLogoNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Show technical &details.... + /// + internal static string ProviderMenuDetails { + get { + return ResourceManager.GetString("ProviderMenuDetails", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to movistar+ &region. + /// + internal static string ProviderMenuEntry { + get { + return ResourceManager.GetString("ProviderMenuEntry", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to &Select region.... + /// + internal static string ProviderMenuSelect { + get { + return ResourceManager.GetString("ProviderMenuSelect", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No movistar+ region has been selected.. + /// + internal static string ProviderNoSelection { + get { + return ResourceManager.GetString("ProviderNoSelection", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Obtaining the list of movistar+ regions.... + /// + internal static string ProviderObtainingList { + get { + return ResourceManager.GetString("ProviderObtainingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Parsing and extracting the list of regions.... + /// + internal static string ProviderParsingList { + get { + return ResourceManager.GetString("ProviderParsingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Properties of movistar+ region. + /// + internal static string ProviderPropertiesCaption { + get { + return ResourceManager.GetString("ProviderPropertiesCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Select movistar+ region. + /// + internal static string ProviderSelectCaption { + get { + return ResourceManager.GetString("ProviderSelectCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No description is available for this region.. + /// + internal static string ProviderUnknownDisplayDescription { + get { + return ResourceManager.GetString("ProviderUnknownDisplayDescription", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/Texts.es.resx new file mode 100644 index 00000000..3244ee0f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/Texts.es.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} (*) + + + (Sin nombre) {0} + + + No ha sido posible obtener la lista de regiones de movistar+. + + + Error al cargar el archivo con el logo de la región <{0}>. + + + El archivo con el logo de la región <{0}> no existe. + + + Ver &detalles técnicos... + + + &Región de movistar+ + + + &Seleccionar región... + + + No se ha seleccionado un proveedor de servicios. + + + Obteniendo la lista de regiones de movistar+... + + + Analizando y extrayendo la lista de `regiones... + + + Propiedades de la región de movistar+ + + + Seleccionar región de movistar+ + + + No existe una descripción de esta región de movistar+. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/Texts.resx new file mode 100644 index 00000000..f91f9ba1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Properties/Texts.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} + + + (Name not provided) {0} + + + Unable to obtain the list of movistar+ regions. + + + Unable to load region logo file <{0}>. + + + Region logo file <{0}> not found. + + + Show technical &details... + + + movistar+ &region + + + &Select region... + + + No movistar+ region has been selected. + + + Obtaining the list of movistar+ regions... + + + Parsing and extracting the list of regions... + + + Properties of movistar+ region + + + Select movistar+ region + + + No description is available for this region. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Serialization/MovistarPlusConfig.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Serialization/MovistarPlusConfig.cs new file mode 100644 index 00000000..776d6372 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Serialization/MovistarPlusConfig.cs @@ -0,0 +1,26 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; + +namespace IpTviewr.IpTvServices.MovistarPlus.Serialization +{ + [Serializable] + public class MovistarPlusConfig + { + public Opch Opch { get; set; } + public IDictionary Environment; + public IDictionary> Variables; + } // class MovistarPlusConfig +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Serialization/Opch.cs b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Serialization/Opch.cs new file mode 100644 index 00000000..bb2094cc --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/Serialization/Opch.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; + +namespace IpTviewr.IpTvServices.MovistarPlus.Serialization +{ + public class Opch + { + public string MulticastAddress + { + get; + set; + } // MulticastAddress + + public int MulticastPort + { + get; + set; + } // MulticastPort + + public IDictionary Default + { + get; + set; + } // DefaultValues + } // Opch +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/licensing.xml b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/licensing.xml new file mode 100644 index 00000000..e8cbed86 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/licensing.xml @@ -0,0 +1,197 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/packages.config b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/packages.config new file mode 100644 index 00000000..284cc551 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/IpTv.MovistarPlus/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Common/ArgumentsManager.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/ArgumentsManager.cs similarity index 84% rename from 1.5 'Kruger 60'/Project.Common/ArgumentsManager.cs rename to 1.5 'Kruger 60'/Assemblies/Project.Common/ArgumentsManager.cs index 098b7823..727c0c7d 100644 --- a/1.5 'Kruger 60'/Project.Common/ArgumentsManager.cs +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/ArgumentsManager.cs @@ -1,9 +1,19 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; -using System.Linq; +using System.Diagnostics.CodeAnalysis; using System.Text; namespace IpTviewr.Common @@ -12,16 +22,14 @@ public static class ArgumentsManager { public static string[] ExpandArguments(string[] rawArguments, IDictionary parameters, string openBrace, string closeBrace, StringComparison braceComparisonType) { - string[] result; - if (rawArguments == null) return null; - result = new string[rawArguments.Length]; + var result = new string[rawArguments.Length]; if (rawArguments.Length == 0) return result; Validate(parameters, openBrace, closeBrace); - for (int index = 0; index < rawArguments.Length; index++) + for (var index = 0; index < rawArguments.Length; index++) { result[index] = InternalExpandArgument(rawArguments[index], parameters, openBrace, closeBrace, braceComparisonType); } // for @@ -76,13 +84,14 @@ public static string JoinArguments(string[] arguments) return result.ToString(); } // JoinArguments + [SuppressMessage("ReSharper", "ParameterOnlyUsedForPreconditionCheck.Local")] private static void Validate(IDictionary parameters, string openBrace, string closeBrace) { if ((string.IsNullOrEmpty(openBrace)) || (string.IsNullOrEmpty(closeBrace))) { throw new ArgumentException(); } // if - if ((parameters == null) || (parameters.Count == 0)) + if ((parameters?.Count ?? 0) == 0) { throw new ArgumentException(); } // if @@ -94,11 +103,9 @@ private static void Validate(IDictionary parameters, string open private static string InternalExpandArgument(string rawArgument, IDictionary parameters, string openBrace, string closeBrace, StringComparison braceComparisonType) { - int index, param; - if (string.IsNullOrEmpty(rawArgument)) return rawArgument; - index = rawArgument.IndexOf(openBrace, braceComparisonType); + var index = rawArgument.IndexOf(openBrace, braceComparisonType); if (index < 0) return rawArgument; var current = 0; @@ -110,7 +117,7 @@ private static string InternalExpandArgument(string rawArgument, IDictionary @$"{message ?? Properties.Texts.MyAppHandleExceptionDefaultMessage}\r\n\r\n{e.Message}", + false => @$"{message ?? Properties.Texts.MyAppHandleExceptionDefaultMessage}\r\n\r\n{ex.Message}\r\n{ex.GetType().FullName}\r\n\r\n{e.Message}" + }; + + MessageBox.Show(owner, + text, + caption ?? Properties.Texts.MyAppHandleExceptionDefaultCaption, + MessageBoxButtons.OK, icon); + } // try-catch + } // HandleException + + public static void HandleException(object sender, HandleExceptionEventArgs e) + { + HandleException(e.OwnerForm, e.Caption, e.Message, e.Exception); + } // HandleException + + private static ExceptionMessageBoxSymbol TranslateIconToSymbol(MessageBoxIcon icon) + { + switch (icon) + { + case MessageBoxIcon.Asterisk: return ExceptionMessageBoxSymbol.Asterisk; + case MessageBoxIcon.Error: return ExceptionMessageBoxSymbol.Error; + case MessageBoxIcon.Exclamation: return ExceptionMessageBoxSymbol.Exclamation; + //case MessageBoxIcon.Hand: return ExceptionMessageBoxSymbol.Hand; + //case MessageBoxIcon.Information: return ExceptionMessageBoxSymbol.Information; + case MessageBoxIcon.Question: return ExceptionMessageBoxSymbol.Question; + //case MessageBoxIcon.Stop: return ExceptionMessageBoxSymbol.Stop; + //case MessageBoxIcon.Warning: return ExceptionMessageBoxSymbol.Warning; + default: + return ExceptionMessageBoxSymbol.None; + } // switch + } // TranslateIconToSymbol + + private static void AddExceptionAdvancedInformation(Exception ex) + { + while (ex != null) + { + ex.Data["AdvancedInformation.Exception.Type"] = ex.GetType().FullName; + ex.Data["AdvancedInformation.Exception.Assembly"] = ex.GetType().Assembly.ToString(); + ex = ex.InnerException; + } // while + } // AddExceptionAdvancedInformation + } // class BaseProgram +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/CommandLineArguments.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/CommandLineArguments.cs new file mode 100644 index 00000000..92e4aaaa --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/CommandLineArguments.cs @@ -0,0 +1,137 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; + +namespace IpTviewr.Common +{ + public class CommandLineArguments + { + private IEqualityComparer _comparer; + + public CommandLineArguments() + { + _comparer = StringComparer.InvariantCultureIgnoreCase; + } // constructor + + public CommandLineArguments(IEqualityComparer comparer) + { + _comparer = comparer ?? StringComparer.InvariantCultureIgnoreCase; + } // constructor + + public bool SpecialHelpArgument + { + get; + set; + } // SpecialHelpArgument + + public bool IsHelpRequested => Switches?.ContainsKey("help") ?? false; + + public bool IsOk { get; private set; } + + public IList Arguments { get; private set; } + + public IDictionary Switches { get; private set; } + + public IDictionary> MultiValueSwitches { get; private set; } + + public void Parse(string[] args, int startIndex = 0) + { + Parse((IReadOnlyCollection)args, startIndex); + } // Parse + + public void Parse(IReadOnlyList args, int startIndex = 0) + { + Parse((IReadOnlyCollection)args, startIndex); + } // Parse + + public void Parse(IReadOnlyCollection args, int startIndex = 0) + { + IsOk = false; + + Arguments = new List(args.Count); + Switches = new Dictionary(args.Count, _comparer); + MultiValueSwitches = new Dictionary>(args.Count, _comparer); + + foreach (var arg in args.Skip(startIndex)) + { + if ((arg[0] == '/') || (arg[0] == '-')) + { + if (arg.Length < 2) // switch name expected + { + return; + } // if + + if (SpecialHelpArgument) + { + var partialArg = arg.Substring(1, 1).ToLower(); + if ((partialArg.StartsWith("h")) || (partialArg.StartsWith("?"))) + { + Switches.Add("help", null); + break; + } // if + } // if + + string argName; + string argValue; + + var pos = arg.IndexOf(':'); + if (pos < 0) + { + argName = arg.Substring(1); + argValue = null; + } + else + { + if (pos == 0) return; // switch name expected + + argName = arg.Substring(1, pos - 1); + argValue = arg.Substring(pos + 1); + } // if-else + AddToSwitches(argName, argValue); + } + else + { + Arguments.Add(arg); + } // if-else + } // foreach arg + + IsOk = true; + if (Switches.Count == 0) Switches = new EmptyDictionary(); + if (MultiValueSwitches.Count == 0) MultiValueSwitches = new EmptyDictionary>(); + } // Parse + + private void AddToSwitches(string argName, string argValue) + { + if (MultiValueSwitches.ContainsKey(argName)) + { + MultiValueSwitches[argName].Add(argValue); + } + else + { + MultiValueSwitches.Add(argName, new List + { + argValue + }); + + // keep first value; do not override with later values + if (!Switches.ContainsKey(argName)) + { + Switches[argName] = argValue; + } // if + } // if-else + } // AddToSwitches + } // class CommandLineArguments +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Configuration/InitializationResult.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Configuration/InitializationResult.cs new file mode 100644 index 00000000..a90221c3 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Configuration/InitializationResult.cs @@ -0,0 +1,51 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.Common.Configuration +{ + public sealed class InitializationResult + { + /// + /// Gets an with IsOk set to and all remaining fields set to + /// + public static InitializationResult Ok { get; } = new InitializationResult() { IsOk = true }; + + public bool IsOk { get; set; } + + public bool IsError => !IsOk; + + public string Caption { get; set; } + + public string Message { get; set; } + + public Exception InnerException { get; set; } + + public InitializationResult() + { + // no op + } // constructor + + public InitializationResult(string message) + { + Message = message; + } // InitializationResult + + public InitializationResult(Exception exception, string message) + { + Message = message ?? exception.Message; + InnerException = exception; + } // InitializationResult + } // InitializationResult +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/DateTimeExtensions.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/DateTimeExtensions.cs new file mode 100644 index 00000000..def00c8d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/DateTimeExtensions.cs @@ -0,0 +1,37 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.Common +{ + public static class DateTimeExtensions + { + /// + /// Truncates a given DateTime to minutes resolution, ignoring seconds and milliseconds + /// + /// The DateTime to truncate. The Kind is preserved after truncation + /// The truncated DateTime + public static DateTime TruncateToMinutes(this DateTime time) + { + return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0, time.Kind); // set seconds to 0 + } // TruncateToMinutes + + public static DateTime TruncateToSeconds(this DateTime time, int rounding = 1) + { + if (rounding < 1) throw new ArgumentOutOfRangeException(nameof(rounding)); + var seconds = (time.Second / rounding) * rounding; + return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, seconds, time.Kind); + } // TruncateToSeconds + } // static class DateTimeExtensions +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/EmptyDictionary.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/EmptyDictionary.cs new file mode 100644 index 00000000..95e1cf29 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/EmptyDictionary.cs @@ -0,0 +1,81 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections; +using System.Collections.Generic; + +namespace IpTviewr.Common +{ + public class EmptyDictionary : IDictionary + { + #region Implementation of IEnumerable + + public IEnumerator> GetEnumerator() + { + yield break; + } // GetEnumerator + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } // IEnumerable.GetEnumerator + + #endregion + + #region Implementation of ICollection> + + public void Add(KeyValuePair item) => throw new NotSupportedException(); + + public void Clear() => throw new NotSupportedException(); + + public bool Contains(KeyValuePair item) => false; + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + // no-op + } // CopyTo + + public bool Remove(KeyValuePair item) => throw new NotSupportedException(); + + public int Count => 0; + public bool IsReadOnly => true; + + #endregion + + #region Implementation of IDictionary + + public bool ContainsKey(TKey key) => false; + + public void Add(TKey key, TValue value) => throw new NotSupportedException(); + + public bool Remove(TKey key) => throw new NotSupportedException(); + + public bool TryGetValue(TKey key, out TValue value) + { + value = default; + return false; + } // TryGetValue + + public TValue this[TKey key] + { + get => throw new KeyNotFoundException(); + set => throw new NotSupportedException(); + } // this[TKey key] + + public ICollection Keys => Array.Empty(); + public ICollection Values => Array.Empty(); + + #endregion + } // EmptyDictionary +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/ExceptionEventData.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/ExceptionEventData.cs new file mode 100644 index 00000000..1580a4bd --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/ExceptionEventData.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.Common +{ + public class ExceptionEventData + { + public string Caption { get; set; } + public string Message { get; set; } + public Exception Exception { get; set; } + + public ExceptionEventData() + { + // no-op + } // default constructor + + public ExceptionEventData(Exception ex) + { + Exception = ex; + } // default constructor + + public ExceptionEventData(string message, Exception ex) + { + Message = message; + Exception = ex; + } // constructor + + public ExceptionEventData(string caption, string message, Exception ex) + { + Caption = caption; + Message = message; + Exception = ex; + } // constructor + } // class ExceptionEventData +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/FormatString.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/FormatString.cs similarity index 78% rename from 1.5 'Kruger 60'/Project.Common/FormatString.cs rename to 1.5 'Kruger 60'/Assemblies/Project.Common/FormatString.cs index 4181e9a3..45afaa11 100644 --- a/1.5 'Kruger 60'/Project.Common/FormatString.cs +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/FormatString.cs @@ -1,7 +1,17 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; namespace IpTviewr.Common { @@ -54,16 +64,17 @@ public static bool IsSameDay(DateTime time1, DateTime time2) public static string TimeSpanTotalMinutes(TimeSpan value, Format format) { string spanFormat; - int minutes; + var minutes = value.Minutes + ((value.Seconds > 0) ? 1 : 0); switch (format) { case Format.Compact: - if (value.TotalMinutes < 61) + if (value.TotalMinutes <= 60) { + if (value.TotalMinutes > 59) minutes = 60; spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesCompact; } - else if (value.TotalHours < 24) + else if (value.TotalHours <= 24) { spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesCompactHours; } @@ -72,12 +83,15 @@ public static string TimeSpanTotalMinutes(TimeSpan value, Format format) spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesCompactDays; } // if-else break; + case Format.Extended: + if (value.TotalMinutes <= 60) { + if (value.TotalMinutes > 59) minutes = 60; spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesExtended; } - else if (value.TotalHours < 24) + else if (value.TotalHours <= 24) { spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesExtendedHours; } @@ -86,11 +100,11 @@ public static string TimeSpanTotalMinutes(TimeSpan value, Format format) spanFormat = Properties.FormatStringTexts.TimeSpanTotalMinutesExtendedDays; } // if-else break; + default: return string.Format(Properties.FormatStringTexts.TimeSpanTotalMinutesBasic, value.TotalMinutes); } // switch - minutes = value.Minutes + ((value.Seconds > 0) ? 1 : 0); return string.Format(spanFormat, minutes, value.Hours, value.Days); } // TimeSpanTotalMinutes diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/HandleExceptionEventArgs.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/HandleExceptionEventArgs.cs new file mode 100644 index 00000000..ef139898 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/HandleExceptionEventArgs.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; + +namespace IpTviewr.Common +{ + public class HandleExceptionEventArgs: EventArgs + { + public Form OwnerForm { get; set; } + public string Caption { get; set; } + public string Message { get; set; } + public Exception Exception { get; set; } + + public HandleExceptionEventArgs() + { + // no-op + } // default constructor + + public HandleExceptionEventArgs(Form ownerForm, string caption, string message, Exception ex) + { + OwnerForm = ownerForm; + Caption = caption; + Message = message; + Exception = ex; + } // constructor + } // class HandleExceptionEventArgs +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/IpTviewr.Common.csproj b/1.5 'Kruger 60'/Assemblies/Project.Common/IpTviewr.Common.csproj new file mode 100644 index 00000000..c276d8fe --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/IpTviewr.Common.csproj @@ -0,0 +1,148 @@ + + + + + Debug + AnyCPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C} + Library + Properties + IpTviewr.Common + IpTviewr.Common + v4.6.2 + 512 + SAK + SAK + SAK + SAK + + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + 8.0 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + 8.0 + + + + + + true + + + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + True + True + FormatStringTexts.resx + + + True + True + Texts.resx + + + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + ResXFileCodeGenerator + FormatStringTexts.Designer.cs + + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/Project.Common/LICENSE.ES.MD new file mode 100644 index 00000000..362b4b2f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/LICENSE.ES.MD @@ -0,0 +1,108 @@ +# Biblioteca 'IpTviewr.Common' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/Project.Common/LICENSE.MD new file mode 100644 index 00000000..7a9b81cc --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/LICENSE.MD @@ -0,0 +1,80 @@ +# Library 'IpTviewr.Common' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Project.Common/Launcher.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Launcher.cs similarity index 80% rename from 1.5 'Kruger 60'/Project.Common/Launcher.cs rename to 1.5 'Kruger 60'/Assemblies/Project.Common/Launcher.cs index 9a097863..79942c64 100644 --- a/1.5 'Kruger 60'/Project.Common/Launcher.cs +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Launcher.cs @@ -1,11 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.Common diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/License.txt b/1.5 'Kruger 60'/Assemblies/Project.Common/License.txt new file mode 100644 index 00000000..441721cd --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/License.txt @@ -0,0 +1,98 @@ +############################################################################## +## +## Library 'IpTviewr.Common' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..67f41dba --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Project.Common")] +[assembly: AssemblyDescription("IpTviewr.Common")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("554861bf-241d-400b-a46d-38cd9365e2ea")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/FormatStringTexts.Designer.cs similarity index 91% rename from 1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/Project.Common/Properties/FormatStringTexts.Designer.cs index 7bc60ff1..79db8182 100644 --- a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/FormatStringTexts.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Common.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.Common.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class FormatStringTexts { diff --git a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.es.resx b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/FormatStringTexts.es.resx similarity index 97% rename from 1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.es.resx rename to 1.5 'Kruger 60'/Assemblies/Project.Common/Properties/FormatStringTexts.es.resx index 51923c1a..d9d1599c 100644 --- a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.es.resx +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/FormatStringTexts.es.resx @@ -1,153 +1,153 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - {0:d} {0:t} a {1:d} {1:t} - - - {0:d} {0:t} a {1:t} - - - {0:t} a {1:d} {1:t} - - - {0:t} a {1:t} - - - {0:N0} minutos - - - {0:N0}m - - - {2:N0}d {1:N0}h {0:N0}m - - - {1:N0}h {0:N0}m - - - {0:N0} minutos - - - {2:N0} días, {1:N0} horas y {0:N0} minutos - - - {1:N0} horas y {0:N0} minutos - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0:d} {0:t} a {1:d} {1:t} + + + {0:d} {0:t} a {1:t} + + + {0:t} a {1:d} {1:t} + + + {0:t} a {1:t} + + + {0:N0} minutos + + + {0:N0}m + + + {2:N0}d {1:N0}h {0:N0}m + + + {1:N0}h {0:N0}m + + + {0:N0} minutos + + + {2:N0} días, {1:N0} horas y {0:N0} minutos + + + {1:N0} horas y {0:N0} minutos + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.resx b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/FormatStringTexts.resx similarity index 97% rename from 1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.resx rename to 1.5 'Kruger 60'/Assemblies/Project.Common/Properties/FormatStringTexts.resx index 70bf2882..508387da 100644 --- a/1.5 'Kruger 60'/Project.Common/Properties/FormatStringTexts.resx +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/FormatStringTexts.resx @@ -1,153 +1,153 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - {0:N0} minutes - - - {0:N0}m - - - {2:N0}d {1:N0}h {0:N0}m - - - {1:N0}h {0:N0}m - - - {2:N0} days, {1:N0} hours, {0:N0} minutes - - - {0:N0} minutes - - - {1:N0} hours, {0:N0} minutes - - - {0:d} {0:t} to {1:d} {1:t} - - - {0:d} {0:t} to {1:t} - - - {0:t} to {1:d} {1:t} - - - {0:t} to {1:t} - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0:N0} minutes + + + {0:N0}m + + + {2:N0}d {1:N0}h {0:N0}m + + + {1:N0}h {0:N0}m + + + {2:N0} days, {1:N0} hours, {0:N0} minutes + + + {0:N0} minutes + + + {1:N0} hours, {0:N0} minutes + + + {0:d} {0:t} to {1:d} {1:t} + + + {0:d} {0:t} to {1:t} + + + {0:t} to {1:d} {1:t} + + + {0:t} to {1:t} + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Resources.Designer.cs new file mode 100644 index 00000000..95b3d580 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Resources.Designer.cs @@ -0,0 +1,66 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Common.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.resx b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Resources.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.resx rename to 1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Resources.resx diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Texts.Designer.cs new file mode 100644 index 00000000..9fa22cac --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Texts.Designer.cs @@ -0,0 +1,93 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Common.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Unable to open an Internet browser to display this web page: '{0}'.. + /// + internal static string LauncherOpenUrlError { + get { + return ResourceManager.GetString("LauncherOpenUrlError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An error has occurred while processing your request. + /// + internal static string MyAppHandleExceptionDefaultCaption { + get { + return ResourceManager.GetString("MyAppHandleExceptionDefaultCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No information has been supplied as to where or why the error occurred. Find error details below:. + /// + internal static string MyAppHandleExceptionDefaultMessage { + get { + return ResourceManager.GetString("MyAppHandleExceptionDefaultMessage", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Texts.es.resx new file mode 100644 index 00000000..e8f308b1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Texts.es.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + No ha sido posible abrir un navegador de Internet para mostrar la página web '{0}'. + + + Se ha producido un error al procesar su solicitud + + + Ninguna información ha sido proporcionada en cuanto a dónde ni por qué ocurrio el error. Los detalles del error se muestran a continuación: + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Texts.resx new file mode 100644 index 00000000..7ba10113 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Properties/Texts.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Unable to open an Internet browser to display this web page: '{0}'. + + + An error has occurred while processing your request + + + No information has been supplied as to where or why the error occurred. Find error details below: + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Serialization/XmlCDataText.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Serialization/XmlCDataText.cs new file mode 100644 index 00000000..279bb833 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Serialization/XmlCDataText.cs @@ -0,0 +1,180 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using System.Xml.Schema; +using System.Xml.Serialization; + +namespace IpTviewr.Common.Serialization +{ + [Serializable] + public class XmlCDataText : IXmlSerializable, IEquatable, IEquatable, IComparable, IComparable, IComparable + { + public XmlCDataText() + { + // no-op + } // constructor + + public XmlCDataText(string text) + { + Text = text; + } // constructor + + [XmlIgnore] + public string Text { get; set; } + + public override string ToString() => Text; + + XmlSchema IXmlSerializable.GetSchema() + { + return null; + } // IXmlSerializable.GetSchema + + void IXmlSerializable.ReadXml(XmlReader reader) + { + Text = reader.ReadElementContentAsString(); + } // IXmlSerializable.ReadXml + + void IXmlSerializable.WriteXml(XmlWriter writer) + { + if (Text == null) return; + if (Text.Contains('\r') || Text.Contains('\n')) + { + writer.WriteCData(Text); + } + else + { + writer.WriteString(Text); + } // if-else + } // IXmlSerializable.WriteXml + + public static implicit operator XmlCDataText(string text) => new XmlCDataText(text); + public static implicit operator string(XmlCDataText xmlCData) => xmlCData.Text; + + #region Equality members + + public bool Equals(XmlCDataText other) + { + if (other is null) return false; + if (ReferenceEquals(this, other)) return true; + return string.Equals(Text, other.Text, StringComparison.CurrentCulture); + } // Equals + + public bool Equals(string other) + { + if (other is null) return false; + return string.Equals(Text, other, StringComparison.CurrentCulture); + } // Equals + + public override bool Equals(object obj) + { + return ReferenceEquals(this, obj) || (obj is XmlCDataText other && Equals(other)) || (obj is string text && Equals(text)); + } // Equals + + public override int GetHashCode() + { + return (Text != null ? StringComparer.CurrentCulture.GetHashCode(Text) : 0); + } // GetHashCode + + public static bool operator ==(XmlCDataText left, XmlCDataText right) + { + if (ReferenceEquals(left, right)) return true; + return !(left is null) && left.Equals(right); + } // operator == + + public static bool operator !=(XmlCDataText left, XmlCDataText right) + { + return !(left == right); + } // operator != + + public static bool operator ==(XmlCDataText left, string right) + { + return !(left is null) && left.Equals(right); + } // operator == + + public static bool operator !=(XmlCDataText left, string right) + { + return !(left == right); + } // operator != + + public static bool operator ==(string left, XmlCDataText right) + { + return !(right is null) && right.Equals(left); + } // operator == + + public static bool operator !=(string left, XmlCDataText right) + { + return !(left == right); + } // operator != + + #endregion + + #region Relational members: XmlCDataText + + public int CompareTo(XmlCDataText other) + { + if (ReferenceEquals(this, other)) return 0; + if (other is null) return 1; + return string.Compare(Text, other.Text, StringComparison.CurrentCulture); + } + + public int CompareTo(object obj) + { + if (obj is null) return 1; + if (ReferenceEquals(this, obj)) return 0; + switch (obj) + { + case XmlCDataText other: + return CompareTo(other); + case string text: + return CompareTo(text); + default: + throw new ArgumentException($"CompareTo: Object must be of type {nameof(XmlCDataText)} -or- {nameof(String)}"); + } // switch + } // CompareTo + + public static bool operator <(XmlCDataText left, XmlCDataText right) + { + return Comparer.Default.Compare(left, right) < 0; + } // operator < + + public static bool operator >(XmlCDataText left, XmlCDataText right) + { + return Comparer.Default.Compare(left, right) > 0; + } // operator > + + public static bool operator <=(XmlCDataText left, XmlCDataText right) + { + return Comparer.Default.Compare(left, right) <= 0; + } // operator <= + + public static bool operator >=(XmlCDataText left, XmlCDataText right) + { + return Comparer.Default.Compare(left, right) >= 0; + } // operator >= + + #endregion + + #region Relational members: string + + public int CompareTo(string other) + { + return (other is null) ? 1 : string.Compare(Text, other, StringComparison.CurrentCulture); + } // CompareTo + + #endregion + } // class XmlCDataText +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Serialization/XmlSerialization.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Serialization/XmlSerialization.cs new file mode 100644 index 00000000..636f9469 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Serialization/XmlSerialization.cs @@ -0,0 +1,165 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.IO; +using System.Text; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Common.Serialization +{ + public static class XmlSerialization + { + public static Lazy Utf8NoBomEncoding = new Lazy(CreateDefaultEncoding); + + #region Serialize + + public static object CloneObject(object data) + { + using var buffer = new MemoryStream(); + + SerializeObject(buffer, data); + buffer.Seek(0, SeekOrigin.Begin); + return Deserialize(buffer, data.GetType()); + } // Clone + + public static T Clone(T data) where T : class + { + using var buffer = new MemoryStream(); + SerializeObject(buffer, data); + buffer.Seek(0, SeekOrigin.Begin); + + return Deserialize(buffer); + } // CloneSettings + + public static void SerializeObject(Stream output, object o) + { + var serializer = new XmlSerializer(o.GetType()); + serializer.Serialize(output, o); + } // SerializeObject + + public static void Serialize(string filename, T o) + { + using var output = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite); + Serialize(output, Utf8NoBomEncoding.Value, o); + } // Serialize + + public static void Serialize(string filename, Encoding encoding, T o) + { + using var output = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite); + Serialize(output, encoding, o); + } // Serialize + + public static void Serialize(Stream output, T o) + { + Serialize(output, Utf8NoBomEncoding.Value, o); + } // Serialize + + public static void Serialize(Stream output, Encoding encoding, T o, bool leaveStreamOpen = false) + { + var serializer = new XmlSerializer(typeof(T)); + using var outputWriter = new StreamWriter(output, encoding ?? Utf8NoBomEncoding.Value, 4096, leaveStreamOpen); + serializer.Serialize(outputWriter, o); + } // Serialize + + public static void Serialize(XmlWriter output, T o) + { + var serializer = new XmlSerializer(typeof(T)); + serializer.Serialize(output, o); + } // Serialize + + #endregion + + #region Deserialize + + public static object Deserialize(Stream input, Type type, bool trimExtraWhitespace = false, Func namespaceReplacer = null) + { + using var reader = CreateXmlReader(input, trimExtraWhitespace, namespaceReplacer); + return Deserialize(reader, type); + } // Deserialize + + public static object Deserialize(XmlReader reader, Type type) + { + var serializer = new XmlSerializer(type); + + return serializer.Deserialize(reader); + } // Deserialize + + public static T DeserializeXmlText(string xmlText, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class + { + using var input = new StringReader(xmlText); + using var reader = CreateXmlReader(input, trimExtraWhitespace, namespaceReplacer); + + return Deserialize(reader); + } // Deserialize + + public static T Deserialize(XmlReader reader) where T : class + { + var serializer = new XmlSerializer(typeof(T)); + return serializer.Deserialize(reader) as T; + } // Deserialize + + public static T Deserialize(string filename, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class + { + using var input = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); + + return Deserialize(input, trimExtraWhitespace, namespaceReplacer); + } // XmlDeserialize + + public static T Deserialize(Stream input, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class + { + return Deserialize(input, typeof(T), trimExtraWhitespace, namespaceReplacer) as T; + } // Deserialize + + public static T Deserialize(byte[] data, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class + { + using var input = new MemoryStream(data); + + return Deserialize(input, trimExtraWhitespace, namespaceReplacer); + } // Deserialize + + public static XmlReader CreateXmlReader(Stream input, bool trimExtraWhitespace, Func namespaceReplacer) + { + if (!trimExtraWhitespace) return XmlReader.Create(input); + + var readerSettings = new XmlReaderSettings() + { + IgnoreComments = true, + IgnoreWhitespace = true, + }; + + return new XmlTextReaderTrimExtraWhitespace(input, readerSettings, namespaceReplacer); + } // CreateXmlReader + + public static XmlReader CreateXmlReader(TextReader input, bool trimExtraWhitespace, Func namespaceReplacer) + { + if (!trimExtraWhitespace) return XmlReader.Create(input); + + var readerSettings = new XmlReaderSettings + { + IgnoreComments = true, + IgnoreWhitespace = true, + }; + + return new XmlTextReaderTrimExtraWhitespace(input, readerSettings, namespaceReplacer); + } // CreateXmlReader + + #endregion + + private static Encoding CreateDefaultEncoding() + { + return new UTF8Encoding(false); + } // CreateDefaultEncoding + } // class XmlSerialization +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs new file mode 100644 index 00000000..d73cdf8d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs @@ -0,0 +1,114 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.IO; +using System.Text; +using System.Xml; + +namespace IpTviewr.Common.Serialization +{ + public class XmlTextReaderTrimExtraWhitespace : XmlTextReader + { + private readonly XmlReaderSettings _mySettings; + private readonly Func _namespaceReplacer; + + public XmlTextReaderTrimExtraWhitespace(Stream input, Func namespaceReplacer) + : base(input) + { + _namespaceReplacer = namespaceReplacer; + } // constructor + + public XmlTextReaderTrimExtraWhitespace(Stream input, XmlReaderSettings settings, Func namespaceReplacer) + : base(input) + { + _mySettings = settings; + _namespaceReplacer = namespaceReplacer; + } // constructor + + public XmlTextReaderTrimExtraWhitespace(TextReader input, Func namespaceReplacer) + : base(input) + { + _namespaceReplacer = namespaceReplacer; + } // constructor + + public XmlTextReaderTrimExtraWhitespace(TextReader input, XmlReaderSettings settings, Func namespaceReplacer) + : base(input) + { + _mySettings = settings; + _namespaceReplacer = namespaceReplacer; + } // constructor + + public override XmlReaderSettings Settings => _mySettings ?? base.Settings; + + public override string NamespaceURI + { + get + { + var ns = base.NamespaceURI; + + if (_namespaceReplacer == null) return ns; + if (string.IsNullOrEmpty(ns)) return ns; + + return _namespaceReplacer(ns); + } // get + } // NamespaceURI + + public override string ReadString() + { + return TrimExtraWhitespace(base.ReadString()); + } // ReadString + + public static string TrimExtraWhitespace(string input) + { + if (string.IsNullOrEmpty(input)) return input; + + var startIndex = 0; + for (var i = 0; i < input.Length; i++) + { + if (!char.IsWhiteSpace(input[i])) + { + startIndex = i; + break; + } // if + } // for + + var endIndex = input.Length; + for (var i = input.Length - 1; i >= startIndex; i--) + { + if (!char.IsWhiteSpace(input[i])) + { + endIndex = i + 1; + break; + } // if + } // for + + var buffer = new StringBuilder((endIndex - startIndex) + 1); + for (var i = startIndex; i < endIndex; i++) + { + var c = input[i]; + var isWhitespace = char.IsWhiteSpace(c); + if (isWhitespace) + { + c = ' '; + } // if + if ((i == startIndex) || !isWhitespace || (isWhitespace && !char.IsWhiteSpace(input[i - 1]))) + { + buffer.Append(c); + } // if + } // for + + return buffer.ToString(); + } // TrimExtraWhitespace + } // XmlTextReaderTrimExtraWhitespace +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/AppTelemetry.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/AppTelemetry.cs new file mode 100644 index 00000000..eb870a90 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/AppTelemetry.cs @@ -0,0 +1,225 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Windows.Forms; + +namespace IpTviewr.Common.Telemetry +{ + public static class AppTelemetry + { + public const string LoadEvent = "Load"; + public const string UnloadEvent = "Unload"; + + private static readonly object Sync = new object(); + private static List _providers; + private static bool _enabled; + + public static bool Enabled + { + get => _enabled; + private set + { + _enabled = value; + ForEach(provider => provider.Enabled = value); + } // set + } // Enabled + + public static bool Usage + { + get; + private set; + } // Usage + + public static bool Exceptions + { + get; + private set; + } // Exceptions + + public static IReadOnlyList Providers => _providers; + + public static void Start([NotNull] ITelemetryFactory factory, [NotNull] TelemetryConfiguration configuration, [NotNull] IReadOnlyDictionary> providersProperties) + { + if (factory == null) throw new ArgumentNullException(nameof(factory)); + if (providersProperties == null) throw new ArgumentNullException(nameof(providersProperties)); + if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + + lock (Sync) + { + if (_providers != null) return; + } // lock + + _enabled = configuration.Enabled; + Usage = configuration.Usage; + Exceptions = configuration.Exceptions; + + if (!Enabled) return; + + _providers = factory.GetProviders(); + if (_providers == null) throw new NullReferenceException(); + + foreach (var provider in _providers) + { + provider.Enabled = configuration.Enabled; + // ReSharper disable once AssignNullToNotNullAttribute + provider.Start(providersProperties.TryGetValue(provider.GetType().FullName, out var properties) ? properties : null); + } // foreach + } // Start + + /* + public static void Enable(bool? enable, bool? usage, bool? exceptions) + { + lock (Sync) + { + if (usage != null) Usage = usage.Value; + if (exceptions != null) Exceptions = exceptions.Value; + if (enable != null) Enabled = enable.Value; + } // lock + } // Enable + */ + + public static void End() + { + lock (Sync) + { + if (_providers == null) return; + ForEach(provider => provider.End()); + _providers = null; + _enabled = false; + Usage = false; + Exceptions = false; + } // lock + } // End + + #region Screen/Form event + + public static void ScreenEvent(string eventName, string screenName, string data = null) + { + if (!_enabled || !Usage) return; + + ForEach(provider => provider.ScreenEvent(eventName, screenName, data)); + } // ScreenEvent + + public static void ScreenEvent(string eventName, string screenName, string data, IEnumerable> properties) + { + if (!_enabled || !Usage) return; + + ForEach(provider => provider.ScreenEvent(eventName, screenName, data, properties)); + } // ScreenEvent + + public static void FormEvent(string eventName, Form form, string data = null) + { + ScreenEvent(eventName, form?.GetType().FullName, data); + } // ScreenEvent + + [PublicAPI] + public static void FormEvent(string eventName, Form form, string data, IEnumerable> properties) + { + ScreenEvent(eventName, form?.GetType().FullName, data, properties); + } // ScreenEvent + + #endregion + + #region Screen/Form exception + + public static void ScreenException(Exception ex, string screenName, string message = null) + { + if (!_enabled || !Exceptions) return; + + ForEach(provider => provider.Exception(ex, screenName, message)); + } // FormException + + public static void FormException(Exception ex, Form form, string message = null) + { + ScreenException(ex, form?.GetType().FullName, message); + } // FormException + + public static void ScreenException(Exception ex, string screenName, string message, IEnumerable> properties) + { + if (!_enabled || !Exceptions) return; + + ForEach(provider => provider.Exception(ex, screenName, message, properties)); + } // FormException + + [PublicAPI] + public static void FormException(Exception ex, Form form, string message, IEnumerable> properties) + { + ScreenException(ex, form?.GetType().FullName, message, properties); + } // FormException + + #endregion + + #region Screen/Form custom event + + public static void CustomEvent(string screenName, string category, string action, string data = null) + { + if (!_enabled || !Usage) return; + + ForEach(provider => provider.CustomEvent(category, action, screenName, data)); + } // CustomEvent + + [PublicAPI] + public static void FormCustomEvent(Form form, string category, string action, string data = null) + { + CustomEvent(form?.GetType().FullName, category, action, data); + } // CustomEvent + + public static void CustomEvent(string screenName, string category, string action, string data, IEnumerable> properties) + { + if (!_enabled || !Usage) return; + + ForEach(provider => provider.CustomEvent(category, action, screenName, data, properties)); + } // CustomEvent + + [PublicAPI] + public static void FormCustomEvent(Form form, string category, string action, string data, IEnumerable> properties) + { + CustomEvent(form?.GetType().FullName, category, action, data, properties); + } // CustomEvent + + #endregion + + #region Auxiliary methods + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ForEach(Action action) + { + SafeForEach(_providers, action); + } // ForEach + + private static void SafeForEach(IEnumerable list, Action action) + { + if (list == null) return; + + foreach (var provider in list) + { + try + { + action.Invoke(provider); + } + catch + { + // ignore all exceptions + } // try-catch + } // foreach + } // SafeForEach + + #endregion + } // class AppTelemetry +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/ITelemetryFactory.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/ITelemetryFactory.cs new file mode 100644 index 00000000..bc4d2cad --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/ITelemetryFactory.cs @@ -0,0 +1,22 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; + +namespace IpTviewr.Common.Telemetry +{ + public interface ITelemetryFactory + { + List GetProviders(); + } // interface ITelemetryFactory +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/ITelemetryProvider.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/ITelemetryProvider.cs new file mode 100644 index 00000000..c42be5a6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/ITelemetryProvider.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace IpTviewr.Common.Telemetry +{ + public interface ITelemetryProvider + { + bool Enabled { get; set; } + void Start([CanBeNull] IReadOnlyDictionary properties); + void End(); + void ScreenEvent(string eventName, string screenName, string data = null, IEnumerable> properties = null); + void Exception(Exception ex, string screenName, string message = null, IEnumerable> properties = null); + void CustomEvent(string eventName, string action, string screenName, string data = null, IEnumerable> properties = null); + } // interface ITelemetryProvider +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/TelemetryConfiguration.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/TelemetryConfiguration.cs new file mode 100644 index 00000000..b0827850 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/Telemetry/TelemetryConfiguration.cs @@ -0,0 +1,51 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.Common.Telemetry +{ + [Serializable] + public class TelemetryConfiguration + { + public TelemetryConfiguration() + { + } // constructor + + public TelemetryConfiguration(bool enabled, bool usage, bool exceptions) + { + Enabled = enabled; + Usage = usage; + Exceptions = exceptions; + } // AnalyticsConfig + + public bool Enabled + { + get; + set; + } // Enabled + + public bool Usage + { + get; + set; + } // Usage + + public bool Exceptions + { + get; + set; + } // Exceptions + } // class TelemetryConfiguration +} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/TextUtils.cs b/1.5 'Kruger 60'/Assemblies/Project.Common/TextUtils.cs similarity index 78% rename from 1.5 'Kruger 60'/Project.Common/TextUtils.cs rename to 1.5 'Kruger 60'/Assemblies/Project.Common/TextUtils.cs index e7ca9f63..1395ee0b 100644 --- a/1.5 'Kruger 60'/Project.Common/TextUtils.cs +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/TextUtils.cs @@ -1,12 +1,20 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text; -using System.Threading.Tasks; +using JetBrains.Annotations; namespace IpTviewr.Common { @@ -14,18 +22,16 @@ public class TextUtils { #region RemoveInvalidChars + [PublicAPI] public static string RemoveInvalidChars(string text, char[] invalidChars) { - bool modified; - - return RemoveInvalidChars(text, invalidChars, null, out modified); + return RemoveInvalidChars(text, invalidChars, null, out _); } // RemoveInvalidChars + [PublicAPI] public static string RemoveInvalidChars(string text, char[] invalidChars, string replacementText) { - bool modified; - - return RemoveInvalidChars(text, invalidChars, replacementText, out modified); + return RemoveInvalidChars(text, invalidChars, replacementText, out _); } // RemoveInvalidChars public static string RemoveInvalidChars(string text, char[] invalidChars, string replacementText, out bool modified) @@ -40,20 +46,17 @@ public static string RemoveInvalidChars(string text, char[] invalidChars, string private static string InternalRemoveInvalidChars(string text, char[] invalidChars, string replacementString, out bool modified) { - StringBuilder buffer; - int startIndex, index; - modified = false; // do nothing is null or empty if (string.IsNullOrEmpty(text)) return text; // quick test: any offending char? - index = text.IndexOfAny(invalidChars); + var index = text.IndexOfAny(invalidChars); if (index < 0) return text; - buffer = new StringBuilder(text.Length * 2); - startIndex = 0; + var buffer = new StringBuilder(text.Length * 2); + var startIndex = 0; while (index >= 0) { if (index != startIndex) @@ -88,20 +91,19 @@ public static char[] GetFilenameInvalidChars() return Path.GetInvalidFileNameChars(); } // GetInvalidChars + [PublicAPI] public static string SanitizeFilename(string text) { - bool modified; - - return InternalRemoveInvalidChars(text, GetFilenameInvalidChars(), null, out modified); + return InternalRemoveInvalidChars(text, GetFilenameInvalidChars(), null, out _); } // SanitizeFilename + [PublicAPI] public static string SanitizeFilename(string text, string replacementText) { - bool modified; - - return InternalRemoveInvalidChars(text, GetFilenameInvalidChars(), replacementText, out modified); + return InternalRemoveInvalidChars(text, GetFilenameInvalidChars(), replacementText, out _); } // SanitizeFilename + [PublicAPI] public static string SanitizeFilename(string text, string replacementText, out bool modified) { return InternalRemoveInvalidChars(text, GetFilenameInvalidChars(), replacementText, out modified); diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/app.config b/1.5 'Kruger 60'/Assemblies/Project.Common/app.config new file mode 100644 index 00000000..aba5e0c4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/app.config @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/licensing.xml b/1.5 'Kruger 60'/Assemblies/Project.Common/licensing.xml new file mode 100644 index 00000000..bdd51320 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/licensing.xml @@ -0,0 +1,124 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/Project.Common/packages.config b/1.5 'Kruger 60'/Assemblies/Project.Common/packages.config new file mode 100644 index 00000000..3d5fd2ef --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Common/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/IpTviewr.Native.csproj b/1.5 'Kruger 60'/Assemblies/Project.Native/IpTviewr.Native.csproj new file mode 100644 index 00000000..cdfa69d9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/IpTviewr.Native.csproj @@ -0,0 +1,96 @@ + + + + + Debug + AnyCPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB} + Library + Properties + IpTviewr.Native + IpTViewr.Native + v4.6.2 + 512 + SAK + SAK + SAK + SAK + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + True + True + Texts.resx + + + + + + Component + + + + + + + + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/Project.Native/LICENSE.ES.MD new file mode 100644 index 00000000..27112823 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/LICENSE.ES.MD @@ -0,0 +1,108 @@ +# Biblioteca 'IpTViewr.Native' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/Project.Native/LICENSE.MD new file mode 100644 index 00000000..366ef0ed --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/LICENSE.MD @@ -0,0 +1,80 @@ +# Library 'IpTViewr.Native' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/License.txt b/1.5 'Kruger 60'/Assemblies/Project.Native/License.txt new file mode 100644 index 00000000..a6352712 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/License.txt @@ -0,0 +1,98 @@ +############################################################################## +## +## Library 'IpTViewr.Native' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/NativeUtils.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/NativeUtils.cs new file mode 100644 index 00000000..929e25b0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/NativeUtils.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Runtime.InteropServices; + +namespace IpTviewr.Native +{ + public static class NativeUtils + { + public static byte[] StructToBytes(T structure) where T : struct + { + var gcHandle = new GCHandle(); + + var bytes = new byte[Marshal.SizeOf(typeof(T))]; + try + { + gcHandle = GCHandle.Alloc(structure, GCHandleType.Pinned); + Marshal.Copy(gcHandle.AddrOfPinnedObject(), bytes, 0, bytes.Length); + + return bytes; + } + finally + { + if (gcHandle.IsAllocated) gcHandle.Free(); + } // finally + } // StructToBytes + } // static class NativeUtils +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..2d698955 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Project.Native")] +[assembly: AssemblyDescription("IpTviewr.Native")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b9724e24-10fb-45e0-8eee-e35975a9bb3f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/Texts.Designer.cs new file mode 100644 index 00000000..de5a6f53 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/Texts.Designer.cs @@ -0,0 +1,93 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Native.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Native.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Non-square icons are not supported. + /// + internal static string WindowsIcon_NonSquare { + get { + return ResourceManager.GetString("WindowsIcon_NonSquare", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Icons bigger than 256x256 are not supported in Windows. + /// + internal static string WindowsIcon_TooBig { + get { + return ResourceManager.GetString("WindowsIcon_TooBig", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Icons smaller than 16x16 are not supported in Windows. + /// + internal static string WindowsIcon_TooSmall { + get { + return ResourceManager.GetString("WindowsIcon_TooSmall", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/Texts.es.resx new file mode 100644 index 00000000..20fc5b5b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/Texts.es.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Los iconos no cuadrados no se admiten + + + Los iconos más grandes que 256x256 no se admiten en Windows + + + Los iconos más pequeños que 16x16 no se admiten en Windows + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/Texts.resx new file mode 100644 index 00000000..efa41d5f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/Properties/Texts.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Non-square icons are not supported + + + Icons bigger than 256x256 are not supported in Windows + + + Icons smaller than 16x16 are not supported in Windows + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Native/ShellLink.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/ShellLink.cs similarity index 86% rename from 1.5 'Kruger 60'/Project.Native/ShellLink.cs rename to 1.5 'Kruger 60'/Assemblies/Project.Native/ShellLink.cs index 73e22cf6..92c0d85d 100644 --- a/1.5 'Kruger 60'/Project.Native/ShellLink.cs +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/ShellLink.cs @@ -1,9 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; using System.Security.Permissions; using System.Text; @@ -14,8 +22,8 @@ public class ShellLink { public class UnsafeNativeMethods { - public static readonly Guid CLSID_FolderShortcut = new Guid(0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D); - public static readonly Guid CLSID_ShellLink = new Guid("00021401-0000-0000-C000-000000000046"); + public static readonly Guid ClsidFolderShortcut = new Guid(0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D); + public static readonly Guid ClsidShellLink = new Guid("00021401-0000-0000-C000-000000000046"); [ComImport, Guid("0000010c-0000-0000-c000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IPersist @@ -45,7 +53,7 @@ public interface IPersistFile public interface IShellLinkW { /// Retrieves the path and file name of a Shell link object - void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out UnsafeNativeMethods.WIN32_FIND_DATAW pfd, UnsafeNativeMethods.SLGP_FLAGS fFlags); + void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out Win32FindDataw pfd, SlgpFlags fFlags); /// Retrieves the list of item identifiers for a Shell link object void GetIDList(out IntPtr ppidl); /// Sets the pointer to an item identifier list (PIDL) for a Shell link object. @@ -77,18 +85,18 @@ public interface IShellLinkW /// Sets the relative path to the Shell link object void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved); /// Attempts to find the target of a Shell link, even if it has been moved or renamed - void Resolve(IntPtr hwnd, UnsafeNativeMethods.SLR_FLAGS fFlags); + void Resolve(IntPtr hwnd, SlrFlags fFlags); /// Sets the path and file name of a Shell link object void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); } // interface IShellLink [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public struct WIN32_FIND_DATAW + public struct Win32FindDataw { public uint dwFileAttributes; - public Int64 ftCreationTime; - public Int64 ftLastAccessTime; - public Int64 ftLastWriteTime; + public long ftCreationTime; + public long ftLastAccessTime; + public long ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; public uint dwReserved0; @@ -101,19 +109,19 @@ public struct WIN32_FIND_DATAW /// IShellLink.GetPath fFlags: Flags that specify the type of path information to retrieve [Flags()] - public enum SLGP_FLAGS + public enum SlgpFlags { /// Retrieves the standard short (8.3 format) file name - SLGP_SHORTPATH = 0x1, + SlgpShortpath = 0x1, /// Retrieves the Universal Naming Convention (UNC) path name of the file - SLGP_UNCPRIORITY = 0x2, + SlgpUncpriority = 0x2, /// Retrieves the raw path name. A raw path is something that might not exist and may include environment variables that need to be expanded - SLGP_RAWPATH = 0x4 + SlgpRawpath = 0x4 } // enum SLGP_FLAGS /// IShellLink.Resolve fFlags [Flags()] - public enum SLR_FLAGS + public enum SlrFlags { /// /// Do not display a dialog box if the link cannot be resolved. When SLR_NO_UI is set, @@ -124,26 +132,26 @@ public enum SLR_FLAGS /// (3 seconds). To specify a value, set the high word of fFlags to the desired time-out /// duration, in milliseconds. /// - SLR_NO_UI = 0x1, + SlrNoUi = 0x1, /// Obsolete and no longer used - SLR_ANY_MATCH = 0x2, + SlrAnyMatch = 0x2, /// If the link object has changed, update its path and list of identifiers. /// If SLR_UPDATE is set, you do not need to call IPersistFile::IsDirty to determine /// whether or not the link object has changed. - SLR_UPDATE = 0x4, + SlrUpdate = 0x4, /// Do not update the link information - SLR_NOUPDATE = 0x8, + SlrNoupdate = 0x8, /// Do not execute the search heuristics - SLR_NOSEARCH = 0x10, + SlrNosearch = 0x10, /// Do not use distributed link tracking - SLR_NOTRACK = 0x20, + SlrNotrack = 0x20, /// Disable distributed link tracking. By default, distributed link tracking tracks /// removable media across multiple devices based on the volume name. It also uses the /// Universal Naming Convention (UNC) path to track remote file systems whose drive letter /// has changed. Setting SLR_NOLINKINFO disables both types of tracking. - SLR_NOLINKINFO = 0x40, + SlrNolinkinfo = 0x40, /// Call the Microsoft Windows Installer - SLR_INVOKE_MSI = 0x80 + SlrInvokeMsi = 0x80 } // enum SLR_FLAGS } // class @@ -236,8 +244,8 @@ public string CreateShortcut(string shortcutPath) } finally { - if (shortcutFile != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(shortcutFile); - if (shortcut != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(shortcut); + if (shortcutFile != null) Marshal.ReleaseComObject(shortcutFile); + if (shortcut != null) Marshal.ReleaseComObject(shortcut); } // try-finally } // Create } // ShellLink diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/WinForms/SelectFolderDialog.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/WinForms/SelectFolderDialog.cs new file mode 100644 index 00000000..958afc75 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/WinForms/SelectFolderDialog.cs @@ -0,0 +1,127 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace IpTviewr.Native.WinForms +{ + /// Displays a dialog box from which the user can select a folder. + /// Requires Windows Vista or better. + + public class SelectFolderDialog : CommonDialog + { + public SelectFolderDialog() + { + SetDefaultValues(); + } // constructor + + #region Basic properties + + /// Gets or sets the initial directory displayed by the folder dialog box. + /// The initial directory displayed by the folder dialog box. The default is an empty string (""). + [DefaultValue("")] + public string InitialDirectory { get; set; } + + /// Gets or sets a string containing the folder name selected in the dialog box. + /// The folder name selected in the dialog box. The default value is an empty string (""). + [DefaultValue("")] + public string SelectedPath { get; set; } + + /// Gets or sets a value indicating whether the dialog box displays a warning if the user specifies a path that does not exist. + /// + /// if the dialog box displays a warning when the user specifies a path that does not exist; otherwise, . The default value is . + [DefaultValue(true)] + public bool CheckPathExists { get; set; } + + #endregion + + #region Overrides of CommonDialog + + public override void Reset() + { + SetDefaultValues(); + } // Reset + + protected override bool RunDialog(IntPtr hwndOwner) + { + Win32Shell.IFileOpenDialog dialog = null; + + try + { + dialog = CreateDialog(); + + var result = dialog.Show(hwndOwner); + if (result != 0) return false; + + dialog.GetResult(out var item); + item.GetDisplayName(Win32Shell.GetDisplayName.FILESYSPATH, out var path); + Marshal.ReleaseComObject(item); + SelectedPath = path; + + return true; + } + catch + { + return false; + } + finally + { + if (dialog != null) Marshal.ReleaseComObject(dialog); + } // finally + } // RunDialog + + #endregion + + private void SetDefaultValues() + { + InitialDirectory = string.Empty; + SelectedPath = string.Empty; + CheckPathExists = true; + } // SetDefaultValues + + private Win32Shell.IFileOpenDialog CreateDialog() + { + // ReSharper disable once SuspiciousTypeConversion.Global + // COM type cast + var dialog = (Win32Shell.IFileOpenDialog)new Win32Shell.FileOpenDialog(); + + var options = Win32Shell.FileOpenDialogOptions.PICKFOLDERS | + Win32Shell.FileOpenDialogOptions.FORCEFILESYSTEM | + Win32Shell.FileOpenDialogOptions.DONTADDTORECENT; + if (CheckPathExists) options |= Win32Shell.FileOpenDialogOptions.PATHMUSTEXIST; + dialog.SetOptions(options); + + SetPath(SelectedPath, dialog.SetFolder); + SetPath(InitialDirectory, dialog.SetDefaultFolder); + + return dialog; + + void SetPath(string path, Action action) + { + if (string.IsNullOrEmpty(path)) return; + + uint attributes = 0; + if ((Win32Shell.SHILCreateFromPath(SelectedPath, out var idl, ref attributes) == 0) && + (Win32Shell.SHCreateShellItem(IntPtr.Zero, IntPtr.Zero, idl, out var item) == 0)) + { + action(item); + } // if + + if (idl != IntPtr.Zero) Marshal.FreeCoTaskMem(idl); + } // local SetPath + } // CreateDialog + } // class SelectFolderDialog +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/WinForms/Win32Shell.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/WinForms/Win32Shell.cs new file mode 100644 index 00000000..4b46d55e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/WinForms/Win32Shell.cs @@ -0,0 +1,223 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace IpTviewr.Native.WinForms +{ + public class Win32Shell + { + #region Shell item + + /// + /// Win32 PROPERTYKEY struct + /// + [StructLayout(LayoutKind.Sequential, Pack = 4)] + public struct PropertyKey + { + public Guid fmtid; + public uint pid; + } // struct PropertyKey + + /// + /// Win32 SIGDN enum + /// + public enum GetDisplayName : uint + { + NORMALDISPLAY = 0, + PARENTRELATIVEPARSING = 0x80018001, + DESKTOPABSOLUTEPARSING = 0x80028000, + PARENTRELATIVEEDITING = 0x80031001, + DESKTOPABSOLUTEEDITING = 0x8004C000, + FILESYSPATH = 0x80058000, + URL = 0x80068000, + PARENTRELATIVEFORADDRESSBAR = 0x8007C001, + PARENTRELATIVE = 0x80080001 + } // enum ShellGetDisplayName + + // SIGDN + /// + /// Win32 SIATTRIBFLAGS enum + /// + public enum ItemAttributeFlags + { + AND = 1, + OR = 2, + APPCOMPAT = 3, + } // enum ItemAttributeFlags + + [Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [ComImport] + public interface IShellItem + { + void BindToHandler([MarshalAs(UnmanagedType.Interface), In] IntPtr pbc, [In] ref Guid bhid, [In] ref Guid riid, out IntPtr ppv); + + void GetParent([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + void GetDisplayName([In] GetDisplayName sigdnName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszName); + + void GetAttributes([In] uint sfgaoMask, out uint psfgaoAttribs); + + void Compare([MarshalAs(UnmanagedType.Interface), In] IShellItem psi, [In] uint hint, out int piOrder); + } // interface IShellItem + + [Guid("B63EA76D-1F85-456F-A19C-48159EFA858B")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [ComImport] + public interface IShellItemArray + { + void BindToHandler([MarshalAs(UnmanagedType.Interface), In] IntPtr pbc, [In] ref Guid rbhid, [In] ref Guid riid, out IntPtr ppvOut); + + void GetPropertyStore([In] int Flags, [In] ref Guid riid, out IntPtr ppv); + + void GetPropertyDescriptionList([In] ref PropertyKey keyType, [In] ref Guid riid, out IntPtr ppv); + + void GetAttributes([In] ItemAttributeFlags dwAttribFlags, [In] uint sfgaoMask, out uint psfgaoAttribs); + + void GetCount(out uint pdwNumItems); + + void GetItemAt([In] uint dwIndex, [MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + void EnumItems([MarshalAs(UnmanagedType.Interface)] out IntPtr ppenumShellItems); + } // interface IShellItemArray + + [DllImport("shell32.dll")] + public static extern int SHCreateShellItem(IntPtr pidlParent, IntPtr psfParent, IntPtr pidl, out IShellItem ppsi); + + [DllImport("shell32.dll")] + public static extern int SHILCreateFromPath([MarshalAs(UnmanagedType.LPWStr)] string pszPath, out IntPtr ppIdl, ref uint rgflnOut); + + #endregion + + #region OpenFileDialog + + /// + /// Win32 COMDLG_FILTERSPEC struct + /// + [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Auto)] + public struct CommonDialogFilter + { + [MarshalAs(UnmanagedType.LPWStr)] + internal string pszName; + [MarshalAs(UnmanagedType.LPWStr)] + internal string pszSpec; + } // struct CommonDialogFilter + + /// + /// Win32 FOS (FILEOPENDIALOGOPTIONS) enum + /// + [Flags] + public enum FileOpenDialogOptions : uint + { + OVERWRITEPROMPT = 2, + STRICTFILETYPES = 4, + NOCHANGEDIR = 8, + PICKFOLDERS = 0x00000020, + FORCEFILESYSTEM = 0x00000040, + ALLNONSTORAGEITEMS = 0x00000080, + NOVALIDATE = 0x00000100, + ALLOWMULTISELECT = 0x00000200, + PATHMUSTEXIST = 0x00000800, + FILEMUSTEXIST = 0x00001000, + CREATEPROMPT = 0x00002000, + SHAREAWARE = 0x00004000, + NOREADONLYRETURN = 0x00008000, + NOTESTFILECREATE = 0x00010000, + HIDEMRUPLACES = 0x00020000, + HIDEPINNEDPLACES = 0x00040000, + NODEREFERENCELINKS = 0x00100000, + DONTADDTORECENT = 0x02000000, + FORCESHOWHIDDEN = 0x10000000, + DEFAULTNOMINIMODE = 0x20000000, + } // enum FileOpenDialogOptions + + [Guid("d57c7288-d4ad-4768-be02-9d969532d960")] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [ComImport] + public interface IFileOpenDialog + { + // from IModalDialog + + [MethodImpl(MethodImplOptions.PreserveSig)] + int Show([In] IntPtr parent); + + // from IFileDialog + + void SetFileTypes([In] uint cFileTypes, [In] ref CommonDialogFilter rgFilterSpec); + + void SetFileTypeIndex([In] uint iFileType); + + void GetFileTypeIndex(out uint piFileType); + + void Advise([MarshalAs(UnmanagedType.Interface), In] IntPtr pfde, out uint pdwCookie); + + void Unadvise([In] uint dwCookie); + + void SetOptions([In] FileOpenDialogOptions fos); + + void GetOptions(out FileOpenDialogOptions pfos); + + void SetDefaultFolder([MarshalAs(UnmanagedType.Interface), In] IShellItem psi); + + void SetFolder([MarshalAs(UnmanagedType.Interface), In] IShellItem psi); + + void GetFolder([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + void GetCurrentSelection([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + void SetFileName([MarshalAs(UnmanagedType.LPWStr), In] string pszName); + + void GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName); + + void SetTitle([MarshalAs(UnmanagedType.LPWStr), In] string pszTitle); + + void SetOkButtonLabel([MarshalAs(UnmanagedType.LPWStr), In] string pszText); + + void SetFileNameLabel([MarshalAs(UnmanagedType.LPWStr), In] string pszLabel); + + void GetResult([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi); + + void AddPlace([MarshalAs(UnmanagedType.Interface), In] IShellItem psi, FileDialogCustomPlace fdcp); + + void SetDefaultExtension([MarshalAs(UnmanagedType.LPWStr), In] string pszDefaultExtension); + + void Close([MarshalAs(UnmanagedType.Error)] int hr); + + void SetClientGuid([In] ref Guid guid); + + void ClearClientData(); + + void SetFilter([MarshalAs(UnmanagedType.Interface)] IntPtr pFilter); + + // from IFileOpenDialog + + void GetResults([MarshalAs(UnmanagedType.Interface)] out IShellItemArray ppenum); + + void GetSelectedItems([MarshalAs(UnmanagedType.Interface)] out IShellItemArray ppsai); + } // + + [ClassInterface(ClassInterfaceType.None)] + [TypeLibType(TypeLibTypeFlags.FCanCreate)] + [Guid("DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7")] + [ComImport] + public class FileOpenDialog + { + } // class FileOpenDialog + + #endregion + } // class Win32Shell +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/WindowsBitness.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsBitness.cs similarity index 79% rename from 1.5 'Kruger 60'/UiServices.Config/WindowsBitness.cs rename to 1.5 'Kruger 60'/Assemblies/Project.Native/WindowsBitness.cs index 7c54e4a7..c98c4da9 100644 --- a/1.5 'Kruger 60'/UiServices.Config/WindowsBitness.cs +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsBitness.cs @@ -1,17 +1,20 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -// This file contains code (c) Microsoft Corporation, licensed under Microsoft Public License -// See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL. -// Original source code: http://1code.codeplex.com/SourceControl/changeset/view/39074#842775 +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; -using System.Text; -namespace IpTviewr.UiServices.Configuration +namespace IpTviewr.Native { public static class WindowsBitness { @@ -56,7 +59,7 @@ public static bool Is64BitWindows() } // Is64BitWindows /// - /// The function determins whether a method exists in the export + /// The function determines whether a method exists in the export /// table of a certain module. /// /// The name of the module @@ -67,7 +70,7 @@ public static bool Is64BitWindows() /// private static bool DoesWin32MethodExist(string moduleName, string methodName) { - IntPtr moduleHandle = GetModuleHandle(moduleName); + var moduleHandle = GetModuleHandle(moduleName); if (moduleHandle == IntPtr.Zero) { return false; @@ -77,10 +80,8 @@ private static bool DoesWin32MethodExist(string moduleName, string methodName) private static bool SafeIsWow64Process() { - bool flag; - if (!DoesWin32MethodExist("kernel32.dll", "IsWow64Process")) return false; - IsWow64Process(GetCurrentProcess(), out flag); + IsWow64Process(GetCurrentProcess(), out var flag); return flag; } // SafeIsWow64Process diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsDesktop.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsDesktop.cs new file mode 100644 index 00000000..64acd6e3 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsDesktop.cs @@ -0,0 +1,68 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Diagnostics.CodeAnalysis; +using System.Drawing; +using System.Runtime.InteropServices; + +namespace IpTviewr.Native +{ + public static class WindowsDesktop + { + [SuppressMessage("ReSharper", "InconsistentNaming")] + [SuppressMessage("ReSharper", "IdentifierTypo")] + internal enum DeviceCap + { + /// + /// Logical pixels inch in X + /// + LOGPIXELSX = 88, + /// + /// Logical pixels inch in Y + /// + LOGPIXELSY = 90 + } // enum DeviceCap + + [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)] + [SuppressMessage("ReSharper", "InconsistentNaming")] + internal static extern int GetDeviceCaps(IntPtr hDC, DeviceCap cap); + + public static void GetDpi(out int x, out int y) + { + var g = (Graphics) null; + var desktopHdc = IntPtr.Zero; + + try + { + g = Graphics.FromHwnd(IntPtr.Zero); + desktopHdc = g.GetHdc(); + x = GetDeviceCaps(desktopHdc, DeviceCap.LOGPIXELSX); + y = GetDeviceCaps(desktopHdc, DeviceCap.LOGPIXELSY); + } + catch + { + x = 96; + y = 96; + } + finally + { + if (desktopHdc != IntPtr.Zero) + { + g?.ReleaseHdc(desktopHdc); + } + g?.Dispose(); + } // try-catch-finally + } // GetDpi + } // WindowsDesktop +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsIcon.Structs.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsIcon.Structs.cs new file mode 100644 index 00000000..4229bb80 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsIcon.Structs.cs @@ -0,0 +1,191 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Runtime.InteropServices; + +namespace IpTviewr.Native +{ + partial class WindowsIcon + { + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct IconDirHeader + { + /// + /// Reserved (must be 0) + /// + public ushort Reserved; + + /// + /// Resource Type (1 for icons) + /// + public ushort Type; + + /// + /// Number of images ("icons") + /// + public ushort Count; + + public IconDirHeader(int count) + { + Reserved = 0; + Type = 1; + Count = checked((ushort)count); + } // constructor + } // struct IconDirHeader + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct IconDirEntry + { + /// + /// Width, in pixels, of the image + /// + /// 0 = 256 + public byte Width; + + /// + /// Height, in pixels, of the image + /// + /// 0 = 256 + public byte Height; + + /// + /// Number of colors in image + /// + /// 0 if >=8bpp + public byte ColorCount; + + /// + /// Reserved (must be 0) + /// + public byte Reserved; + + /// + /// Color Planes + /// + public ushort Planes; + + /// + /// Bits per pixel + /// + public ushort BitCount; + + /// + /// Size of the bitmap (in bytes) + /// + public uint BytesInRes; + + /// + /// Where in the file is this image? + /// + public uint ImageOffset; + } // struct IconDirEntry + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct BitmapInfoHeader + { + /// + /// The number of bytes required by the structure + /// + public uint Size; + + /// + /// The width of the bitmap, in pixels + /// + public int Width; + + /// + /// The height of the bitmap, in pixels. + /// + /// + /// If biHeight is positive, the bitmap is a bottom-up DIB and its origin is the lower-left corner. If biHeight is negative, the bitmap is a top-down DIB and its origin is the upper-left corner + /// + public int Height; + + /// + /// The number of planes for the target device. This value must be set to 1 + /// + public ushort Planes; + + /// + /// The number of bits-per-pixel + /// + /// + /// This member must be one of the following values: 0, 1, 4, 8, 16, 24 or 32 + /// + public ushort BitCount; + + /// + /// The type of compression for a compressed bottom-up bitmap + /// + /// + /// Top-down DIBs cannot be compressed + /// + public uint Compression; + + /// + /// The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps + /// + /// + /// This may be set to zero for RGB bitmaps + /// For JPEG or PNG compression, indicates the size of the JPEG or PNG image buffer, respectively + /// + public uint SizeImage; + + /// + /// The horizontal resolution, in pixels-per-meter, of the target device for the bitmap + /// + public int XPelsPerMeter; + + /// + /// The vertical resolution, in pixels-per-meter, of the target device for the bitmap + /// + public int YPelsPerMeter; + + /// + /// The number of color indexes in the color table that are actually used by the bitmap + /// + /// + /// If this value is zero, the bitmap uses the maximum number of colors + /// + public uint ClrUsed; + + /// + /// The number of color indexes that are required for displaying the bitmap + /// + /// + /// If this value is zero, all colors are required + /// + public uint ClrImportant; + } // struct BitmapInfoHeader + + private struct IconKind + { + public readonly short Size; + public readonly byte BitsPerPixel; + public readonly SaveAs SaveAs; + + public IconKind(int size, byte bitsPerPixel, SaveAs saveAs) + { + Size = (short)size; + BitsPerPixel = bitsPerPixel; + SaveAs = saveAs; + } // constructor + + public override int GetHashCode() + { + var hash = ((ushort)Size << 8) | BitsPerPixel; + return hash; + } // GetHashCode + } // IconKind + } // partial class WindowsIcon +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsIcon.cs b/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsIcon.cs new file mode 100644 index 00000000..ae686f21 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/WindowsIcon.cs @@ -0,0 +1,394 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Native.Properties; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; + +namespace IpTviewr.Native +{ + /// + /// This class allows to create icons in Windows .ico file-format + /// + /// + /// Only 32bpp ARGB images are supported + /// + public partial class WindowsIcon: IDisposable + { + private Dictionary _images; + + public enum SaveAs + { + Auto = 0, + Bmp = 1, + Png = 2 + } // SaveAs + + public WindowsIcon() + { + _images = new Dictionary(); + } // constructor + + public WindowsIcon(int imageCount) + { + _images = new Dictionary(imageCount); + } // constructor + + public bool AllowNonSquareImages + { + get; + set; + } // AllowNowSquareImages + + /// + /// Adds an image to the Icon + /// + /// The image to add + /// How the image will be stored within the icon file + /// + /// Only 32bpp ARGB images are supported. Therefore, the supplied image wil be converted to PixelFormat.Format32bppArgb + /// This will cause ArgumentException to be thrown if two images of different bit depth are supplied for the same size + /// + public void AddImage(Bitmap image, SaveAs saveAs = SaveAs.Auto) + { + if (image == null) throw new ArgumentNullException(nameof(image)); + if (!AllowNonSquareImages) + { + if ((image.Width != image.Height)) throw new ArgumentOutOfRangeException(nameof(image), Texts.WindowsIcon_NonSquare); + } // if + if (image.Width > 256) throw new ArgumentOutOfRangeException(nameof(image), Texts.WindowsIcon_TooBig); + if (image.Width < 16) throw new ArgumentOutOfRangeException(nameof(image), Texts.WindowsIcon_TooSmall); + + // we only support 32bpp ARGB images; therefore, we need to convert the image to this format + if (image.PixelFormat != PixelFormat.Format32bppArgb) + { + var newImage = To32BppArgbBitmap(image); + image.Dispose(); + image = newImage; + } // if + + // this code is retained for future enhancement + var bitsPerPixel = GetBitsPerPixel(image.PixelFormat); + if (bitsPerPixel > 32) + { + var newImage = To32BppArgbBitmap(image); + image.Dispose(); + image = newImage; + } // if + + // adding a duplicated image will throw ArgumentException + _images.Add(new IconKind(image.Width, bitsPerPixel, saveAs), image); + } // AddImage + + /// + /// Clears all added images and disposes of them + /// + public void Clear() + { + foreach (var entry in _images) entry.Value.Dispose(); + _images.Clear(); + } // Clear + + /// + /// Disposes the instance + /// + public void Dispose() + { + Clear(); + _images = null; + } // Dispose + + /// + /// Creates an .ico file format file from the supplied images + /// + /// The path of the file + public void Save(string path) + { + using (var output = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, 4096)) + { + Save(output); + } // using output + } // Save + + /// + /// Saves the supplied images in .ico file format + /// + /// + public void Save(Stream stream) + { + // although not strictly necessary, it's customary to + // write the images sorted by size and bpp + var icons = from entry in _images + orderby entry.Key.Size ascending, entry.Key.BitsPerPixel ascending + select new + { + Image = entry.Value, + entry.Key.SaveAs + }; + + // create icon directory header + var iconDirHeader = new IconDirHeader(_images.Count); + + // create icon directory entries + var entries = new IconDirEntry[_images.Count]; + var imageData = new byte[_images.Count][]; + + var index = 0; + foreach (var icon in icons) + { + imageData[index] = GetIconImageData(icon.Image, icon.SaveAs); + var entry = new IconDirEntry() + { + Width = (icon.Image.Width < 256) ? (byte)icon.Image.Width : (byte)0, + Height = (icon.Image.Height < 256) ? (byte)icon.Image.Height : (byte)0, + ColorCount = 0, // more than 256 colors + Reserved = 0, // must be zero + Planes = 1, + BitCount = GetBitsPerPixel(icon.Image.PixelFormat), + BytesInRes = (uint)imageData[index].Length, + ImageOffset = 0 // to be set later + }; + entries[index++] = entry; + } // foreach + + // set offsets + var sizeOfIconDirEntry = Marshal.SizeOf(); + var offset = Marshal.SizeOf() + (sizeOfIconDirEntry * _images.Count); + for (index=0;index(); + var paddedWidth = RoundTo(image.Width, 4); + var pixelCount = paddedWidth * image.Height; + var maskWidth = paddedWidth / 8; // bitmask is 1-bit per pixel (1 byte per 8 pixels) + + // create the BitmapInfoHeader of the given image + var bitmapInfoHeader = new BitmapInfoHeader() + { + Size = (uint)sizeOfHeader, + Width = image.Width, + Height = image.Height * 2, // bitmap data and bitmask + Planes = 1, + BitCount = 32, + Compression = 0, // no compression + SizeImage = (uint)((pixelCount * 4) + (maskWidth * image.Height)), + XPelsPerMeter = 0, // not specified + YPelsPerMeter = 0, // not specified + ClrUsed = 0, // all colors + ClrImportant = 0 // all colors + }; + WriteStruct(output, bitmapInfoHeader); + + // get the bytes of the image + var imageRectangle = new Rectangle(0, 0, image.Width, image.Height); + data = image.LockBits(imageRectangle, ImageLockMode.ReadOnly, image.PixelFormat); + var scanData = new byte[data.Stride]; + + // write bitmap data + // remember: bitmaps in icons are bottom-up DIBs + for (var scanIndex = image.Height - 1; scanIndex >= 0; scanIndex--) + { + var scan = data.Scan0 + (data.Stride * scanIndex); + Marshal.Copy(scan, scanData, 0, scanData.Length); + output.Write(scanData, 0, scanData.Length); + } // for scanIndex + + // create bottom-up bitmask + for (var scanIndex = image.Height - 1; scanIndex >= 0; scanIndex--) + { + byte bits = 0; + var bitIndex = 0; + var scan = data.Scan0 + (data.Stride * scanIndex); + Marshal.Copy(scan, scanData, 0, scanData.Length); + + // get alpha values for current scan line + for (var alphaIndex = 0; alphaIndex < scanData.Length; alphaIndex += 4) + { + var alpha = scanData[alphaIndex]; + if (alpha < 128) bits |= (byte)(1 << (7 - bitIndex)); + + bitIndex++; + if (bitIndex < 8) continue; + + output.WriteByte(bits); + bits = 0; + bitIndex = 0; + } // for alphaIndex + + // add padding to 4 bytes if necessary + var width = image.Width; + for (var padding = 0; padding < ((width / 8) % 4); padding++) + { + output.WriteByte(0); + } // for + } // for scanIndex + } + finally + { + if (data != null) image.UnlockBits(data); + } // finally + } // GetIconImageBitmapData + + private int GetEstimatedIconImageSize(Bitmap image) + { + // this code assumes the image is in 32-bit ARGB format + + var sizeOfHeader = Marshal.SizeOf(); + var paddedWidth = RoundTo(image.Width, 4); + var pixelCount = paddedWidth * image.Height; + var maskWidth = paddedWidth / 8; // bitmask is 1-bit per pixel (1 byte per 8 pixels) + + var estimatedCapacity = sizeOfHeader + (pixelCount * 4) + (maskWidth * image.Height); // pixels are in 32-bit ARGB format (4 bytes per pixel) + + return estimatedCapacity; + } // GetEstimatedIconImageSize + + private int RoundTo(int value, int round) + { + var mod = value % round; + if (mod == 0) return value; + + return value + (round - mod); + } // RoundTo + + private byte GetBitsPerPixel(PixelFormat format) + { + switch(format) + { + case PixelFormat.Format1bppIndexed: + return 1; + + case PixelFormat.Format4bppIndexed: + return 4; + + case PixelFormat.Format8bppIndexed: + return 8; + + case PixelFormat.Format16bppArgb1555: + case PixelFormat.Format16bppGrayScale: + case PixelFormat.Format16bppRgb555: + case PixelFormat.Format16bppRgb565: + return 16; + + case PixelFormat.Format24bppRgb: + return 24; + + case PixelFormat.Canonical: + case PixelFormat.Format32bppArgb: + case PixelFormat.Format32bppPArgb: + case PixelFormat.Format32bppRgb: + return 32; + + case PixelFormat.Format48bppRgb: + return 48; + + case PixelFormat.Format64bppArgb: + case PixelFormat.Format64bppPArgb: + return 64; + + default: + throw new ArgumentOutOfRangeException(nameof(format), format, "Unknow or unsupported PixelFormat"); + } // switch format + } // GetBitsPerPixel + + private static Bitmap To32BppArgbBitmap(Bitmap image) + { + Bitmap result = null; + Graphics g = null; + var ok = false; + + try + { + result = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb); + result.SetResolution(image.HorizontalResolution, image.VerticalResolution); + + g = Graphics.FromImage(result); + g.Clear(Color.Transparent); + g.DrawImageUnscaled(image, 0, 0); + ok = true; + + return result; + } + finally + { + g?.Dispose(); + if (!ok) result?.Dispose(); + } // try-catch-finally + } // To32BitBitmap + + private static int WriteStruct(Stream stream, T structure) where T : struct + { + var bytes = NativeUtils.StructToBytes(structure); + stream.Write(bytes, 0, bytes.Length); + + return bytes.Length; + } // WriteStruct + } // WindowsIcon +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/licensing.xml b/1.5 'Kruger 60'/Assemblies/Project.Native/licensing.xml new file mode 100644 index 00000000..355d0a8e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/licensing.xml @@ -0,0 +1,117 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/Project.Native/packages.config b/1.5 'Kruger 60'/Assemblies/Project.Native/packages.config new file mode 100644 index 00000000..52cb031c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Project.Native/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Common.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Common.cs new file mode 100644 index 00000000..203d0af0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Common.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Services.EpgDiscovery +{ + internal class Common + { + public const string XmlNamespace = "urn:AlphaCentaury:IpTViewr:2019:EPG"; + } // class Common +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgCodedValue.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgCodedValue.cs new file mode 100644 index 00000000..e9069737 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgCodedValue.cs @@ -0,0 +1,66 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EpgDiscovery +{ + [Serializable()] + [DebuggerStepThrough()] + [DesignerCategory("code")] + [XmlType(AnonymousType = true, Namespace = Common.XmlNamespace)] + public class EpgCodedValue + { + public string Code + { + get; + set; + } // Code + + public string Description + { + get; + set; + } // Description + + public static EpgCodedValue ToCodedValue(TvAnytime.TvaName name) + { + if (name == null) return null; + + return new EpgCodedValue() + { + Code = name.HRef, + Description = name.Name + }; + } // ToCodedValue + + public static EpgCodedValue ToCodedValue(TvAnytime.Mpeg7Name name) + { + if (name == null) return null; + + return new EpgCodedValue() + { + Code = name.HRef, + Description = name.Name + }; + } // ToCodedValue + + public override string ToString() + { + return Description; + } // ToString + } // class EpgCode +} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDatastore.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgDatastore.cs similarity index 83% rename from 1.5 'Kruger 60'/Services.EpgDiscovery/EpgDatastore.cs rename to 1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgDatastore.cs index c4854994..a2890d43 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDatastore.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgDatastore.cs @@ -1,12 +1,23 @@ -using System; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace IpTviewr.Services.EpgDiscovery { - public abstract class EpgDatastore + public abstract class EpgDataStore { public bool IsProgramDataUnsorted { @@ -84,5 +95,5 @@ private void Fill(EpgService epgService) current = current.Next; } // while } // Fill - } // abstract class EpgDatastore + } // abstract class EpgDataStore } // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgDownloader.SegmentsProcessor.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgDownloader.SegmentsProcessor.cs new file mode 100644 index 00000000..e01c7d8a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgDownloader.SegmentsProcessor.cs @@ -0,0 +1,123 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Serialization; +using IpTviewr.Services.EpgDiscovery.TvAnytime; +using System; +using System.Collections.Concurrent; +using System.Threading; + +namespace IpTviewr.Services.EpgDiscovery +{ + partial class EpgDownloader + { + private class SegmentsProcessor + { + private ConcurrentQueue _segmentsQueue; + private AutoResetEvent _enqueuedSegments; + private AutoResetEvent _processSegmentsEnded; + private bool _noMoreSegments; + private EpgDataStore _datastore; + + public event EventHandler ScheduleReceived; + public event EventHandler ParseError; + + public void Start(EpgDataStore datastore) + { + if (_segmentsQueue != null) throw new InvalidOperationException(); + + _segmentsQueue = new ConcurrentQueue(); + _enqueuedSegments = new AutoResetEvent(false); + _processSegmentsEnded = new AutoResetEvent(false); + _noMoreSegments = false; + _datastore = datastore; + + var worker = new Thread(ProcessSegments); + worker.Start(); + } // Start + + public void AddSegment(byte[] segmentPayload) + { + if (_segmentsQueue == null) throw new ObjectDisposedException(nameof(SegmentsProcessor)); + + _segmentsQueue.Enqueue(segmentPayload); + _enqueuedSegments.Set(); + } // AddSegment + + public void WaitCompletion() + { + _noMoreSegments = true; + _enqueuedSegments.Set(); + _processSegmentsEnded.WaitOne(); + } // WaitCompletion + + public void Dispose() + { + if (_segmentsQueue == null) return; + + _segmentsQueue = null; + _enqueuedSegments.Dispose(); + _processSegmentsEnded.Dispose(); + _datastore = null; + } // Dispose + + private void ProcessSegments() + { + byte[] payload; + + while ((payload = GetNextSegment()) != null) + { + try + { + var item = XmlSerialization.Deserialize(payload, trimExtraWhitespace: true, namespaceReplacer: NamespaceUnification.Replacer); + var schedule = item?.ProgramDescription?.LocationTable?.Schedule; + if (schedule == null) + { + // TODO: log + continue; + } // if + var epgService = EpgService.FromSchedule(schedule); + ScheduleReceived?.Invoke(this, EventArgs.Empty); + _datastore.Add(epgService); + } + catch (Exception ex) + { + ParseError?.Invoke(this, EventArgs.Empty); +#if DEBUG + // TODO: log + Console.WriteLine("Unable to parse: {0}", ex.Message); +#endif + return; + } // try-catch + } // while + + _processSegmentsEnded.Set(); + } // ProcessSegments + + private byte[] GetNextSegment() + { + while (true) + { + if (_segmentsQueue.TryDequeue(out var payload)) + { + return payload; + } // if + + if (_noMoreSegments) return null; + + _enqueuedSegments.WaitOne(); + } // while + } // GetNextPayload + } // SegmentsProcessor + } // partial class EpgDownloader +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgDownloader.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgDownloader.cs new file mode 100644 index 00000000..46512075 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgDownloader.cs @@ -0,0 +1,157 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.DvbStp.Client; +using System; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using System.Threading.Tasks; + +// Please note: this code is designed to work ONLY with the p_f broadcast content guide of movistar+ +// It is not multitasking (meaning: reading from several sources at the same time) +// It also asumes the EPG data is in text-plain XML format +// movistar+ employs a custom compression method (DVBBINSTP) for all it EPG sources, save 'p_f' (present and following) + +namespace IpTviewr.Services.EpgDiscovery +{ + public sealed partial class EpgDownloader + { + private IPEndPoint _endpoint; + private DvbStpStreamClient _streamClient; + private SegmentsProcessor _processor; + + public IPAddress MulticastIpAddress { get; set; } + public int MulticastPort { get; set; } + private EpgDataStore DataStore { get; set; } + private CancellationToken Token { get; set; } + + public event EventHandler ProgramReceived; + public event EventHandler ParseError; + public event EventHandler FatalError; + + public EpgDownloader(string multicastIpEndPoint) + { + var parts = multicastIpEndPoint.Split(':'); + if (parts.Length != 2) throw new ArgumentOutOfRangeException(); + + Init(parts[0], parts[1]); + } // constructor + + public EpgDownloader(string multicastIpAddress, string port) + { + Init(multicastIpAddress, port); + } // constructor + + public EpgDownloader(IPAddress multicastIpAddress, int port) + { + MulticastIpAddress = multicastIpAddress; + MulticastPort = port; + } // constructor + + private void Init(string ipAddress, string port) + { + MulticastIpAddress = IPAddress.Parse(ipAddress); + MulticastPort = int.Parse(port); + } // Init + + public EpgDownloader(IPEndPoint endpoint) + { + _endpoint = endpoint; + } // constructor + + public Task StartAsync(EpgDataStore datastore, CancellationToken token) + { + Token = token; + DataStore = datastore; + + return Task.Run(Download, token); + } // StartAsync + + private void Download() + { + var retryIncrement = new TimeSpan(0, 0, 5); + var retryTime = new TimeSpan(0, 0, 0); + var maxRetryTime = new TimeSpan(0, 1, 0); + + try + { + while (retryTime <= maxRetryTime) + { + // initialize DVB-STP client + _streamClient = new DvbStpStreamClient(MulticastIpAddress, MulticastPort, Token) + { + NoDataTimeout = -1, // not implemented by DvbStpStreamClient + ReceiveDatagramTimeout = 60 * 1000, // 60 seconds + OperationTimeout = -1 // forever + }; + _streamClient.SegmentPayloadReceived += SegmentPayloadReceived; + + var retry = false; + try + { + _processor?.Dispose(); + _processor = new SegmentsProcessor(); + _processor.ScheduleReceived += (sender, args) => + ProgramReceived?.BeginInvoke(this, EventArgs.Empty, null, null); + _processor.ParseError += (sender, args) => ParseError?.BeginInvoke(this, EventArgs.Empty, null, null); + + _processor.Start(DataStore); + _streamClient.DownloadStream(); + break; + } + catch (SocketException) // reception error + { + retry = true; + } + catch (TimeoutException) // reception timeout + { + // took too much time to process the stream + } // try-catch + + // Safety check. If we asked to stop the download, but an exception is thrown in between, + // we can ignore it and end the reception; + if ((_streamClient.CancelRequested) || Token.IsCancellationRequested || (!retry)) break; + + // wait and then retry, increasing wait time + retryTime += retryIncrement; + Thread.Sleep(retryTime); + } // while + } + catch + { + FatalError?.BeginInvoke(this, EventArgs.Empty, null, null); + } + finally + { + _streamClient?.Close(); + _streamClient = null; + _processor?.WaitCompletion(); + _processor?.Dispose(); + _processor = null; + DataStore = null; + } // try-finally + } // Download + + private void SegmentPayloadReceived(object sender, PayloadStorage.SegmentPayloadReceivedEventArgs e) + { + //Console.WriteLine($@"{e.SegmentIdentity}:{e.Payload.Length} ({_streamClient.DatagramCount} received)"); + _processor.AddSegment(e.Payload); + + // TODO: stop when EPG is complete + // Notify the caller. + // Give the caller the option to download in a continuous loop + // or the restart the download after a given time + } // SegmentPayloadReceived + } // class EpgDownloader +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgEmptyLinkedList.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgEmptyLinkedList.cs new file mode 100644 index 00000000..db9773de --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgEmptyLinkedList.cs @@ -0,0 +1,51 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections; +using System.Collections.Generic; + +namespace IpTviewr.Services.EpgDiscovery +{ + public class EpgEmptyLinkedList : IEpgLinkedList + { + public EpgEmptyLinkedList(string serviceIdRef) + { + ServiceIdRef = serviceIdRef; + } // constructor + + public int Count=>0; + + public IEpgLinkedListNode First=>null; + + public IEpgLinkedListNode Last=>null; + + public IEpgLinkedListNode Requested=>null; + + public string ServiceIdRef { get; } + + public IEpgLinkedListNode GetMore(bool forward, int nodesCount, bool keepExistingData) + { + return null; + } // IEpgLinkedListNode + + public IEnumerator GetEnumerator() + { + yield break; + } // GetEnumerator + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } // GetEnumerator + } // class EpgEmptyLinkedList +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgLinkedListNodeWrapper.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgLinkedListNodeWrapper.cs new file mode 100644 index 00000000..a711a216 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgLinkedListNodeWrapper.cs @@ -0,0 +1,95 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; + +namespace IpTviewr.Services.EpgDiscovery +{ + public sealed class EpgLinkedListNodeWrapper : IEpgLinkedListNode + { + private readonly LinkedListNode _node; + private readonly EpgLinkedListWrapper _linkedList; + + public EpgLinkedListNodeWrapper(EpgLinkedListWrapper list, LinkedListNode node) + { + _linkedList = list; + _node = node; + } // constructor + + public IEpgLinkedList List => _linkedList; + + public IEpgLinkedListNode Next + { + get + { + var next = _node.Next; + if (next != null) return new EpgLinkedListNodeWrapper(_linkedList, next); + + if ((_linkedList.PhantomNode != null) && (_linkedList.PhantomNode.IsLast)) + { + return _linkedList.PhantomNode; + } // if + + return null; + } // get + } // Next + + public IEpgLinkedListNode Previous + { + get + { + var previous = _node.Previous; + if (previous != null) return new EpgLinkedListNodeWrapper(_linkedList, previous); + + if ((_linkedList.PhantomNode != null) && (_linkedList.PhantomNode.IsFirst)) + { + return _linkedList.PhantomNode; + } // if + + return null; + } // get + } // Previous + + public EpgProgram Program=>_node.Value; + + public override int GetHashCode() + { + return _node.GetHashCode(); + } // GetHashCode + + public override bool Equals(object obj) + { + var wrappedNode = obj as EpgLinkedListNodeWrapper; + if (ReferenceEquals(wrappedNode, null)) return false; + + return (_node == wrappedNode._node); + } // Equals + + public override string ToString() + { + return _node.Value.ToString(); + } // ToString + + public static bool operator ==(EpgLinkedListNodeWrapper a, EpgLinkedListNodeWrapper b) + { + if (ReferenceEquals(a, b)) return true; + if ((a == null) || (b == null)) return false; + return (a._node == b._node); + } // operator == + + public static bool operator !=(EpgLinkedListNodeWrapper a, EpgLinkedListNodeWrapper b) + { + return !(a == b); + } // operator != + } // class EpgLinkedListNodeWrapper +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgLinkedListPhantomNode.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgLinkedListPhantomNode.cs new file mode 100644 index 00000000..afcd7d7b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgLinkedListPhantomNode.cs @@ -0,0 +1,49 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Services.EpgDiscovery +{ + public sealed class EpgLinkedListPhantomNode : IEpgLinkedListNode + { + private readonly EpgLinkedListWrapper _linkedList; + + public EpgLinkedListPhantomNode(EpgLinkedListWrapper list, EpgProgram program, bool first) + { + _linkedList = list; + Program = program; + IsFirst = first; + if (first) + { + Previous = null; + Next = new EpgLinkedListNodeWrapper(list, list.List.First); + } + else + { + Previous = new EpgLinkedListNodeWrapper(list, list.List.Last); + Next = null; + } // if-else + } // constructor + + public IEpgLinkedList List => _linkedList; + + public IEpgLinkedListNode Next { get; } + + public IEpgLinkedListNode Previous { get; } + + public EpgProgram Program { get; } + + public bool IsFirst { get; } + + public bool IsLast => !IsFirst; + } // sealed class EpgLinkedListPhantomNode +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgLinkedListWrapper.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgLinkedListWrapper.cs new file mode 100644 index 00000000..60682036 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgLinkedListWrapper.cs @@ -0,0 +1,107 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections; +using System.Collections.Generic; + +namespace IpTviewr.Services.EpgDiscovery +{ + public sealed class EpgLinkedListWrapper : IEpgLinkedList + { + private readonly LinkedListNode _requestedNode; + + public EpgLinkedListWrapper(string serviceIdRef, LinkedList linkedList, LinkedListNode requested = null) + { + ServiceIdRef = serviceIdRef; + List = linkedList; + _requestedNode = requested; + } // constructor + + public EpgLinkedListWrapper(string serviceIdRef, LinkedList linkedList, EpgProgram phantomEmptyProgram, bool first = true) + { + ServiceIdRef = serviceIdRef; + List = linkedList; + PhantomNode = new EpgLinkedListPhantomNode(this, phantomEmptyProgram, first); + } // constructor + + public int Count => (PhantomNode == null) ? List.Count : List.Count + 1; + + public IEpgLinkedListNode First + { + get + { + if ((PhantomNode != null) && (PhantomNode.IsFirst)) return PhantomNode; + + return new EpgLinkedListNodeWrapper(this, List.First); + } // get + } // First + + public IEpgLinkedListNode Last + { + get + { + if ((PhantomNode != null) && (!PhantomNode.IsFirst)) return PhantomNode; + + return new EpgLinkedListNodeWrapper(this, List.Last); + } // get + } // Last + + public IEpgLinkedListNode Requested + { + get + { + if (PhantomNode != null) return PhantomNode; + + return new EpgLinkedListNodeWrapper(this, _requestedNode ?? List.First); + } // get + } // Requested + + public string ServiceIdRef + { + get; + private set; + } // ServiceIdRef + + internal EpgLinkedListPhantomNode PhantomNode + { + get; + set; + } // PhantomNode + + public IEpgLinkedListNode GetMore(bool forward, int nodesCount, bool keepExistingData) + { + return null; + } // GetMore + + public IEnumerator GetEnumerator() + { + var current = First; + while (current != null) + { + yield return current.Program; + current = current.Next; + } // while + } // GetEnumerator + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } // IEnumerable.GetEnumerator + + internal LinkedList List + { + get; + set; + } // List + } // class EpgLinkedListWrapper +} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgMemoryDatastore.cs similarity index 75% rename from 1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs rename to 1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgMemoryDatastore.cs index 9b316cf7..86956e65 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgMemoryDatastore.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgMemoryDatastore.cs @@ -1,10 +1,20 @@ -using IpTviewr.Common; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; using System; using System.Collections.Concurrent; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace IpTviewr.Services.EpgDiscovery { @@ -14,13 +24,13 @@ public enum EpgMemoryStorageMethod Merge } // EpgMemoryStorageMethod - public sealed class EpgMemoryDatastore: EpgDatastore + public sealed class EpgMemoryDataStore: EpgDataStore { - private ConcurrentDictionary Data; + private readonly ConcurrentDictionary _data; - public EpgMemoryDatastore() + public EpgMemoryDataStore() { - Data = new ConcurrentDictionary(); + _data = new ConcurrentDictionary(); } // constructor public EpgMemoryStorageMethod StorageMethod @@ -31,22 +41,20 @@ public EpgMemoryStorageMethod StorageMethod public override ICollection GetServicesRefs() { - return Data.Keys; + return _data.Keys; } // GetServicesRefs public override IEpgLinkedList GetPrograms(string serviceIdRef, DateTime? localTime, int nodesBefore, int nodesAfter) { - EpgService epgService; - - if (!Data.TryGetValue(serviceIdRef, out epgService)) return null; + if (!_data.TryGetValue(serviceIdRef, out var epgService)) return null; return GetLinkedList(epgService, localTime); } // GetPrograms public override IDictionary GetAllPrograms(DateTime? localTime, int nodesBefore, int nodesAfter) { - var result = new Dictionary(Data.Count); - foreach(var entry in Data) + var result = new Dictionary(_data.Count); + foreach(var entry in _data) { if (entry.Value.Programs.Count == 0) continue; @@ -58,17 +66,17 @@ public override IDictionary GetAllPrograms(DateTime? loc protected override void AddEpgService(EpgService epgService) { - Console.WriteLine("Store.Add: {0} with {1} programs", epgService.ServiceIdReference, epgService.Programs?.Count); + // Console.WriteLine("Store.Add: {0} with {1} programs", epgService.ServiceIdReference, epgService.Programs?.Count ?? 0); if (epgService.Programs == null) return; switch (StorageMethod) { case EpgMemoryStorageMethod.Replace: - Data[epgService.ServiceIdReference] = epgService; + _data[epgService.ServiceIdReference] = epgService; break; case EpgMemoryStorageMethod.Merge: - Data.AddOrUpdate(epgService.ServiceIdReference, epgService, (k,v) => Merge(v, epgService)); + _data.AddOrUpdate(epgService.ServiceIdReference, epgService, (k,v) => Merge(v, epgService)); break; } // switch } // AddEpgService @@ -132,5 +140,5 @@ private IEpgLinkedList GetLinkedList(EpgService service, DateTime? localTime) return new EpgLinkedListWrapper(service.ServiceIdReference, service.Programs, node); } // GetLinkedList - } // class EpgMemoryDatastore + } // class EpgMemoryDataStore } // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgNullDatastore.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgNullDatastore.cs new file mode 100644 index 00000000..0ff7353c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgNullDatastore.cs @@ -0,0 +1,41 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; + +namespace IpTviewr.Services.EpgDiscovery +{ + public sealed class EpgNullDataStore: EpgDataStore + { + protected override void AddEpgService(EpgService epgService) + { + // do nothing + } // Add + + public override ICollection GetServicesRefs() + { + return new string[0]; + } // GetServicesRefs + + public override IEpgLinkedList GetPrograms(string serviceIdRef, DateTime? localTime, int nodesBefore, int nodesAfter) + { + return new EpgEmptyLinkedList(serviceIdRef); + } // GetPrograms + + public override IDictionary GetAllPrograms(DateTime? localTime, int nodesBefore, int nodesAfter) + { + return new Dictionary(0); + } // GetAllPrograms + } // class EpgNullDataStore +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgProgram.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgProgram.cs new file mode 100644 index 00000000..57dd940f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgProgram.cs @@ -0,0 +1,178 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Runtime.Remoting.Metadata.W3cXsd2001; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EpgDiscovery +{ + [Serializable()] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName = "Program", Namespace = Common.XmlNamespace)] + public class EpgProgram + { + [XmlAttribute("id")] + public string Id + { + get; + set; + } // Id + + [XmlElement("Title")] + public string Title + { + get; + set; + } // Tile + + [XmlElement("Genre")] + public EpgCodedValue Genre + { + get; + set; + } // Genre + + [XmlElement("ParentalRating")] + public EpgCodedValue ParentalRating + { + get; + set; + } // ParentalRating + + [XmlElement("StartTime")] + public DateTime UtcStartTime + { + get; + set; + } // UtcStartTime + + [XmlIgnore] + public DateTime LocalStartTime => UtcStartTime.ToLocalTime(); + + [XmlIgnore] + public DateTime UtcEndTime => UtcStartTime + Duration; + + [XmlIgnore] + public DateTime LocalEndTime => UtcEndTime.ToLocalTime(); + + [XmlIgnore] + public TimeSpan Duration + { + get; + set; + } // Duration + + [XmlElement("Duration")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlDuration + { + get => SoapDuration.ToString(Duration); + set => Duration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); + } // XmlDuration + + [XmlAttribute("isBlank")] + public bool IsBlank + { + get; + set; + } // IsBlank + + public EpgProgramEpisode Episode + { + get; + set; + } // Episode + + public bool IsCurrent(DateTime referenceTime) + { + if (referenceTime.Kind != DateTimeKind.Utc) + { + referenceTime = referenceTime.ToUniversalTime(); + } // if + + return (referenceTime >= UtcStartTime) && (referenceTime < UtcEndTime); + } // IsCurrent + + public bool IsOld(DateTime referenceTime) + { + if (referenceTime.Kind != DateTimeKind.Utc) + { + referenceTime = referenceTime.ToUniversalTime(); + } // if + + return (referenceTime >= UtcEndTime); + } // IsOld + + public bool IsAfter(DateTime referenceTime) + { + if (referenceTime.Kind != DateTimeKind.Utc) + { + referenceTime = referenceTime.ToUniversalTime(); + } // if + + return (referenceTime < UtcStartTime); + } // IsAfter + + public static EpgProgram FromScheduleEvent(TvAnytime.TvaScheduleEvent item) + { + if (item == null) return null; + + var utcStartTime = item.StartTime ?? item.PublishedStartTime; + if (utcStartTime == null) return null; + + var result = new EpgProgram() + { + Id = item.Program.Crid, + Duration = (item.Duration.TotalSeconds > 0) ? item.Duration : item.PublishedDuration, + UtcStartTime = utcStartTime.Value + }; + + if (item.Description == null) + { + result.Title = Properties.Texts.EpgBlankTitle; + result.IsBlank = true; + return result; + } + + result.Title = item.Description.Title; + result.Genre = EpgCodedValue.ToCodedValue(item.Description.Genre); + result.ParentalRating = (item.Description.ParentalGuidance != null) ? EpgCodedValue.ToCodedValue(item.Description.ParentalGuidance.ParentalRating) : null; + + var releaseDate = item.Description.ReleaseInfo?.ReleaseDate; + if (releaseDate != null) + { + result.Episode = new EpgProgramEpisode() + { + Number = releaseDate.Episode?.Nullable, + Season = releaseDate.Season?.Nullable, + Year = releaseDate.Year?.Nullable, + }; + } // if + + if (item.EpisodeOf == null) return result; + + var episode = result.Episode ?? new EpgProgramEpisode(); + episode.SeriesId = item.EpisodeOf.Crid; + episode.SeriesName = item.EpisodeOf.Title; + result.Episode = episode; + + return result; + } // FromScheduleEvent + + public override string ToString() => $"{Title} @ {LocalStartTime}"; + } // EPGEvent +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgProgramEpisode.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgProgramEpisode.cs new file mode 100644 index 00000000..d75a2f8c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgProgramEpisode.cs @@ -0,0 +1,58 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Xml.Serialization; + +namespace IpTviewr.Services.EpgDiscovery +{ + [Serializable()] + [DebuggerStepThrough] + [DesignerCategory("code")] + [XmlType(TypeName = "Episode", Namespace = Common.XmlNamespace)] + public class EpgProgramEpisode + { + [XmlAttribute("seriesId")] + public string SeriesId + { + get; + set; + } // SeriesCRID + + public string SeriesName + { + get; + set; + } // SeriesName + + public int? Number + { + get; + set; + } // Number + + public int? Season + { + get; + set; + } // Season + + public int? Year + { + get; + set; + } // Year + } // EpgProgramEpisode +} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgramExtended.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgProgramExtended.cs similarity index 78% rename from 1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgramExtended.cs rename to 1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgProgramExtended.cs index 8ea73f15..db48a44a 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgramExtended.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgProgramExtended.cs @@ -1,10 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; namespace IpTviewr.Services.EpgDiscovery { @@ -62,7 +69,7 @@ public string[] Actors { get; set; - } // Actores + } // Actors public string[] Producers { diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgService.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgService.cs similarity index 80% rename from 1.5 'Kruger 60'/Services.EpgDiscovery/EpgService.cs rename to 1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgService.cs index fbeb5bbd..ecc3df83 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgService.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgService.cs @@ -1,12 +1,21 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; -using System.Text; using System.Xml.Serialization; namespace IpTviewr.Services.EpgDiscovery @@ -17,7 +26,7 @@ namespace IpTviewr.Services.EpgDiscovery [XmlType(TypeName = "Service", Namespace = Common.XmlNamespace)] public class EpgService { - private string fieldServiceIdReference; + private string _fieldServiceIdReference; [XmlAttribute("version")] public int Version @@ -29,13 +38,10 @@ public int Version [XmlAttribute("serviceIdRef")] public string ServiceIdReference { - get - { - return fieldServiceIdReference; - } // get + get => _fieldServiceIdReference; set { - fieldServiceIdReference = value; + _fieldServiceIdReference = value; var parts = value.Split('.'); if (parts.Length < 3) throw new ArgumentOutOfRangeException(); @@ -75,17 +81,14 @@ public EpgProgram[] XmlPrograms var programs = new EpgProgram[Programs.Count]; var index = 0; - foreach (var program in programs) + foreach (var program in Programs) { programs[index++] = program; } // foreach return programs; } // get - set - { - Programs = new LinkedList(value); - } // set + set => Programs = new LinkedList(value); } // XmlEvents public LinkedListNode GetCurrentProgram() @@ -106,7 +109,8 @@ public LinkedListNode GetUtcProgram(DateTime utcTime) if (node.Value.IsCurrent(utcTime)) return node; node = node.Next; } // while - return node; + + return null; } // GetUtcProgram public static EpgService FromSchedule(TvAnytime.TvaSchedule schedule) @@ -134,9 +138,7 @@ public static EpgService FromSchedule(TvAnytime.TvaSchedule schedule) public static int TryParseInt(string s, int errValue) { - int result; - - if (int.TryParse(s, out result)) return result; + if (int.TryParse(s, out var result)) return result; return errValue; } // TryParseInt diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgSingleServiceDatastore.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgSingleServiceDatastore.cs new file mode 100644 index 00000000..4d22bac0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/EpgSingleServiceDatastore.cs @@ -0,0 +1,53 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; + +namespace IpTviewr.Services.EpgDiscovery +{ + public sealed class EpgSingleServiceDataStore: EpgDataStore + { + private readonly string _fullServiceName; + private readonly IEpgLinkedList _servicePrograms; + + public EpgSingleServiceDataStore(string fullServiceName, IEpgLinkedList servicePrograms) + { + _fullServiceName = fullServiceName; + _servicePrograms = servicePrograms; + } // constructor + + protected override void AddEpgService(EpgService epgService) + { + throw new InvalidOperationException(); + } // Add + + public override ICollection GetServicesRefs() + { + return new[] { _fullServiceName }; + } // GetServicesRefs + + public override IEpgLinkedList GetPrograms(string serviceIdRef, DateTime? localTime, int nodesBefore, int nodesAfter) + { + return _servicePrograms; + } // GetPrograms + + public override IDictionary GetAllPrograms(DateTime? localTime, int nodesBefore, int nodesAfter) + { + var result = new Dictionary(1); + result.Add(_fullServiceName, _servicePrograms); + + return result; + } // GetAllPrograms + } // class EpgSingleServiceDataStore +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/IEpgLinkedList.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/IEpgLinkedList.cs new file mode 100644 index 00000000..bcbf3fb6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/IEpgLinkedList.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; + +namespace IpTviewr.Services.EpgDiscovery +{ + public interface IEpgLinkedList: IEnumerable + { + string ServiceIdRef { get; } + + IEpgLinkedListNode First { get; } + + IEpgLinkedListNode Requested { get; } + + IEpgLinkedListNode Last { get; } + + int Count { get; } + + IEpgLinkedListNode GetMore(bool forward, int nodesCount, bool keepExistingData); + } // public IEpgLinkedList +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/IEpgLinkedListNode.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/IEpgLinkedListNode.cs new file mode 100644 index 00000000..e931865d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/IEpgLinkedListNode.cs @@ -0,0 +1,26 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Services.EpgDiscovery +{ + public interface IEpgLinkedListNode + { + EpgProgram Program { get; } + + IEpgLinkedListNode Previous { get; } + + IEpgLinkedListNode Next { get; } + + IEpgLinkedList List { get; } + } // interface IEpgLinkedListNode +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/LICENSE.ES.MD new file mode 100644 index 00000000..8b9bed00 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/LICENSE.ES.MD @@ -0,0 +1,120 @@ +# Biblioteca 'Services.EpgDiscovery' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Services.EpgDiscovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/LICENSE.MD new file mode 100644 index 00000000..05f6c910 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/LICENSE.MD @@ -0,0 +1,92 @@ +# Library 'Services.EpgDiscovery' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Services.EpgDiscovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/License.txt b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/License.txt new file mode 100644 index 00000000..71a9b1d8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/License.txt @@ -0,0 +1,108 @@ +############################################################################## +## +## Library 'Services.EpgDiscovery' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. Services.EpgDiscovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..9011b552 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Services.EPG.Serialization")] +[assembly: AssemblyDescription("IpTviewr services: EPG serialization")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5a171dbb-855c-452b-93c6-229c7aa6c7a6")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/Texts.Designer.cs new file mode 100644 index 00000000..ce80164a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/Texts.Designer.cs @@ -0,0 +1,75 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Services.EpgDiscovery.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.EpgDiscovery.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Insufficient information about the program. + /// + internal static string EpgBlankTitle { + get { + return ResourceManager.GetString("EpgBlankTitle", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/Texts.es.resx similarity index 100% rename from 1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.es.resx rename to 1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/Texts.es.resx diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/Texts.resx similarity index 100% rename from 1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.resx rename to 1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Properties/Texts.resx diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Services.EpgDiscovery.csproj similarity index 79% rename from 1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj rename to 1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Services.EpgDiscovery.csproj index 13204891..8df58659 100644 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/Services.EpgDiscovery.csproj +++ b/1.5 'Kruger 60'/Assemblies/Services.EpgDiscovery/Services.EpgDiscovery.csproj @@ -9,8 +9,9 @@ Properties IpTviewr.Services.EpgDiscovery Services.EpgDiscovery - v4.5.2 + v4.6.2 512 + true @@ -31,32 +32,29 @@ - - - - - - + + Properties\AssemblySolutionInfo.cs + - + - - - + + + + - True @@ -64,9 +62,9 @@ Texts.resx - + @@ -75,20 +73,24 @@ + + + + - {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3} DvbStpClient - - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C} - Project.Common + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common @@ -101,6 +103,10 @@ Texts.Designer.cs + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Library + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/LICENSE.ES.MD new file mode 100644 index 00000000..57c036d2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/LICENSE.ES.MD @@ -0,0 +1,232 @@ +# Biblioteca 'Services.Record.Serialization' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Services.Record.Serialization +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Services.SqlServerCE +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/LICENSE.MD new file mode 100644 index 00000000..f0f2d242 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/LICENSE.MD @@ -0,0 +1,204 @@ +# Library 'Services.Record.Serialization' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Services.Record.Serialization +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Services.SqlServerCE +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..93644573 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Services.Record.Serialization")] +[assembly: AssemblyDescription("IpTviewr.Services.Record.Serialization")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("938aa8d5-9245-4e17-8ad0-b610d75aa0f9")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/License.txt b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/License.txt new file mode 100644 index 00000000..f25130ef --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/License.txt @@ -0,0 +1,43 @@ +Copyright (C) 2014-2019, Codeplex/GitHub user AlphaCentaury and its contributors + +This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". +All other rights are reserved by the author(s) of the software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +***************************************************************************** +** Microsoft Reciprocal License (Ms-RL) ** +***************************************************************************** + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. Definitions + +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. +A "contribution" is the original software, or any additions or changes to the software. +A "contributor" is any person that distributes its contribution under this license. +"Licensed patents" are a contributor's patent claims that read directly on its contribution. + +2. Grant of Rights + +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations + +(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. +(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. +(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. +(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. +(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +***************************************************************************** +** EXCEPTIONS ** +***************************************************************************** + +There are no exceptions diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/Texts.Designer.cs new file mode 100644 index 00000000..6aeea91b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/Texts.Designer.cs @@ -0,0 +1,324 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Services.Record.Serialization.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.Record.Serialization.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to >> Channel details << + ///TV Channel: {0} {1} + ///URL: {2} + ///IPTV service: {3}. + /// + internal static string BuildDescriptionChannel { + get { + return ResourceManager.GetString("BuildDescriptionChannel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Scheduled recording duration is {0}, with a safety margin of {1} minutes. + ///Total recording time, including safety margins, is {2}.. + /// + internal static string BuildDescriptionDuration { + get { + return ResourceManager.GetString("BuildDescriptionDuration", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording will end the next day at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsNextDay { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsNextDay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording will end the same day at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsSameDay { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsSameDay", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording ends today at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsToday { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsToday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording ends tomorrow at {0:T}.. + /// + internal static string BuildDescriptionDurationEndsTomorrow { + get { + return ResourceManager.GetString("BuildDescriptionDurationEndsTomorrow", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to >> Recording duration <<. + /// + internal static string BuildDescriptionDurationHeader { + get { + return ResourceManager.GetString("BuildDescriptionDurationHeader", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording duration is {0}, with a safety margin of {1} minutes. + ///Total recording time, including safety margins, will be {2}.. + /// + internal static string BuildDescriptionDurationPast { + get { + return ResourceManager.GetString("BuildDescriptionDurationPast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to >> Recording schedule <<. + /// + internal static string BuildDescriptionScheduleHeader { + get { + return ResourceManager.GetString("BuildDescriptionScheduleHeader", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task name: {0} + ///Task description: {1}. + /// + internal static string BuildDescriptionTaskDescription { + get { + return ResourceManager.GetString("BuildDescriptionTaskDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task name: {0}. + /// + internal static string BuildDescriptionTaskName { + get { + return ResourceManager.GetString("BuildDescriptionTaskName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} [{1:yyyy\-MM\-dd} {2:HH\-mm\-ss}]. + /// + internal static string RecordTaskNameSuggestedNameFormat { + get { + return ResourceManager.GetString("RecordTaskNameSuggestedNameFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Daily recording, every {0} days at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordDaily { + get { + return ResourceManager.GetString("VerbalizeRecordDaily", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Daily recording, everyday at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordDailyEveryday { + get { + return ResourceManager.GetString("VerbalizeRecordDailyEveryday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to One time recording at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordOneTime { + get { + return ResourceManager.GetString("VerbalizeRecordOneTime", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to One time recording, on {0:D} at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordOneTimePast { + get { + return ResourceManager.GetString("VerbalizeRecordOneTimePast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording right now.. + /// + internal static string VerbalizeRecordRightNow { + get { + return ResourceManager.GetString("VerbalizeRecordRightNow", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Recording as soon as possible.. + /// + internal static string VerbalizeRecordRightNowPast { + get { + return ResourceManager.GetString("VerbalizeRecordRightNowPast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, {3} of every week at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeekly { + get { + return ResourceManager.GetString("VerbalizeRecordWeekly", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to every . + /// + internal static string VerbalizeRecordWeeklyDays { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDays", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to every . + /// + internal static string VerbalizeRecordWeeklyDaysPast { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDaysPast", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to , . + /// + internal static string VerbalizeRecordWeeklyDaysSeparator { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparator", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to and . + /// + internal static string VerbalizeRecordWeeklyDaysSeparatorFinal { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparatorFinal", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, everyday of every week at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeeklyEveryday { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyEveryday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, {3} every {0} weeks at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeeklyEveryWeeks { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Weekly recording, everyday every {0} weeks at {1:T}, with a safety margin of {2} minutes.. + /// + internal static string VerbalizeRecordWeeklyEveryWeeksEveryday { + get { + return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeksEveryday", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Starting on {0:D} with no expiry date.. + /// + internal static string VerbalizeStartDate { + get { + return ResourceManager.GetString("VerbalizeStartDate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Starting on {0:D} and ending on {1:D}.. + /// + internal static string VerbalizeStartExpiryDate { + get { + return ResourceManager.GetString("VerbalizeStartExpiryDate", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/Texts.es.resx new file mode 100644 index 00000000..b6e91c96 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/Texts.es.resx @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + >>> Detalles del canal <<< +Canal de TV: {0} {1} +URL: {2} +Servicio IPTV: {3} + + + La duración programada de la grabación era de {0}, con un margen de seguridad de {1} minutos. +El tiempo total de grabación, incluyendo los márgenes de seguridad, es de {2}. + + + La grabación finalizará al día siguiente a las {0:T}. + + + La grabación finalizará el mismo día a las {0:T}. + + + La grabación finalizará hoy a las {0:T}. + + + La grabación finalizará manaña a las {0:T}. + + + >>> Duración de la grabación <<< + + + La duración de la grabación es de {0}, con un margen de seguridad de {1} minutos. +El tiempo total de grabación, incluyendo márgenes de seguridad, será de {2}. + + + >>> Horario de grabación <<< + + + Nombre de la tarea: {0} +Descripción de la tarea: {1} + + + Nombre de la tarea: {0} + + + Grabación diaria, cada {0} días a las {1:T}, con un margen de seguridad de {2} minutos. + + + Grabación diaria, todos los días a las {1:T}, con un margen de seguridad de {2} minutos. + + + Grabación única a las {1:T}, con un margen de seguridad de {2} minutos. + + + Grabación única, el {0:D} a las {1:T}, con un margen de seguridad de {2} minutos. + + + Grabando ahora mismo. + + + Se grabará lo antes posible. + + + Grabación semanal, {3} de todas las semanas a las {1:T}, con un margen de seguridad de {2} minutos. + + + el + Keep trailing space! + + + y el + Keep start & end space! + + + el + Keep trailing space! + + + , el + Keep trailing space! + + + Grabación semanal, todos los días de todas las semanas a las {1:T}, con un margen de seguridad de {2} minutos. + + + Grabación semanal, {3} cada {0} semanas a las {1:T}, con un margen de seguridad de {2} minutos. + + + Grabación semanal, todos los días cada {0} semanas a las {1:T}, con un margen de seguridad de {2} minutos. + + + Comenzando a grabar el {0:D} sin fecha de finalización. + + + Comenzando a grabar el {0:D} y finalizando el {1:D}. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/Texts.resx similarity index 100% rename from 1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.resx rename to 1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Properties/Texts.resx diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordAction.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordAction.cs new file mode 100644 index 00000000..d0d17685 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordAction.cs @@ -0,0 +1,64 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordAction + { + public string Filename + { + get; + set; + } // Filename + + public string FileExtension + { + get; + set; + } // FileExtension + + public string SaveLocationName + { + get; + set; + } // SaveLocationName + + public string SaveLocationPath + { + get; + set; + } // SaveLocationPath + + public RecordRecorder Recorder + { + get; + set; + } // Recorder + + public static RecordAction CreateWithDefaultValues() + { + RecordAction action; + + action = new RecordAction() + { + }; + + return action; + } // CreateWithDefaultValues + } // class RecordAction +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAdvancedSettings.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordAdvancedSettings.cs similarity index 79% rename from 1.5 'Kruger 60'/Services.Record.Serialization/RecordAdvancedSettings.cs rename to 1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordAdvancedSettings.cs index 2374b176..151bff4a 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAdvancedSettings.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordAdvancedSettings.cs @@ -1,12 +1,19 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.ComponentModel; -using System.Linq; using System.Runtime.Remoting.Metadata.W3cXsd2001; -using System.Text; using System.Xml.Serialization; namespace IpTviewr.Services.Record.Serialization @@ -36,8 +43,8 @@ public TimeSpan RestartInterval [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public string XmlRestartInterval { - get { return SoapDuration.ToString(RestartInterval); } - set { RestartInterval = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } + get => SoapDuration.ToString(RestartInterval); + set => RestartInterval = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } // XmlRestartInterval [XmlAttribute("retries")] @@ -49,9 +56,7 @@ public int MaxRetries public static Retry CreateWithDefaultValues() { - Retry retry; - - retry = new Retry() + var retry = new Retry() { Enabled = true, MaxRetries = 5, @@ -84,8 +89,8 @@ public TimeSpan Time [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public string XmlTimeSpan { - get { return SoapDuration.ToString(Time); } - set { Time = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } + get => SoapDuration.ToString(Time); + set => Time = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } // XmlTimeSpan } // TimeLimit @@ -133,9 +138,7 @@ public RecordMultipleInstances MultipleInstances public static RecordAdvancedSettings CreateWithDefaultValues() { - RecordAdvancedSettings settings; - - settings = new RecordAdvancedSettings() + var settings = new RecordAdvancedSettings() { TaskSchedulerFolder = null, AsSoonAsPossible = true, diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordChannel.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordChannel.cs new file mode 100644 index 00000000..155f60a0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordChannel.cs @@ -0,0 +1,59 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordChannel + { + public string LogicalNumber + { + get; + set; + } // LogicalNumber + + public string Name + { + get; + set; + } // Name + + public string Description + { + get; + set; + } // Description + + public string ServiceName + { + get; + set; + } // ServiceName + + public string ServiceKey + { + get; + set; + } // ServiceKey + + public string ChannelUrl + { + get; + set; + } // ChannelUrl + } // class RecordChannel +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordDaily.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordDaily.cs new file mode 100644 index 00000000..8dad7814 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordDaily.cs @@ -0,0 +1,50 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public sealed class RecordDaily : RecordSchedule + { + public RecordDaily() + { + RecurEveryDays = 1; + } // constructor + + public override RecordScheduleKind Kind => RecordScheduleKind.Daily; + + public short RecurEveryDays + { + get; + set; + } // RecurEveryDays + + public override void SetDefaultValues() + { + base.SetDefaultValues(); + RecurEveryDays = 1; + } // SetDefaultValues + + public override void Verbalize(bool pastTime, StringBuilder builder) + { + var format = RecurEveryDays > 1 ? Properties.Texts.VerbalizeRecordDaily : Properties.Texts.VerbalizeRecordDailyEveryday; + builder.AppendFormat(format, RecurEveryDays, StartDate, SafetyMarginTimeSpan.TotalMinutes); + VerbalizeStartExpiryDate(pastTime, builder); + } // Verbalize + } // class RecordDaily +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordDescription.cs similarity index 81% rename from 1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs rename to 1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordDescription.cs index 2c0f4853..048a8df2 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDescription.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordDescription.cs @@ -1,10 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Xml.Serialization; namespace IpTviewr.Services.Record.Serialization diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordDuration.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordDuration.cs new file mode 100644 index 00000000..66027b0e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordDuration.cs @@ -0,0 +1,123 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Runtime.Remoting.Metadata.W3cXsd2001; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordDuration + { + /// + /// Default safety margin, in minutes + /// + public static int DefaultSafetyMargin => 10; + + /// + /// The duration of the recording, as a TimeSpan + /// + [XmlIgnore] + public TimeSpan Length + { + get; + set; + } // Length + + [XmlElement("Length")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlLength + { + get => SoapDuration.ToString(Length); + set => Length = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); + } // XmlTimeSpan + + [XmlIgnore] + public DateTime? EndDateTime + { + get; + set; + } // EndDateTime + + [XmlElement("EndDateTime")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlEndDateTime + { + get => (EndDateTime == null) ? null : XmlConvert.ToString(EndDateTime.Value, XmlDateTimeSerializationMode.RoundtripKind); + set + { + if (string.IsNullOrEmpty(value)) + { + EndDateTime = null; + } + else + { + EndDateTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); + } // if-else + } // set + } // EndDateTime + + /// + /// Safety margin, in minutes, or null if there is no margin + /// + [XmlIgnore] + public int? SafetyMargin + { + get; + set; + } // SafetyMargin + + [XmlElement("SafetyMargin")] + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + public string XmlSafetyMargin + { + get => SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; + set => SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); + } // XmlSafetyMargin + + /// + /// Gets the safety margin as a TimeSpan + /// + [XmlIgnore] + public TimeSpan SafetyMarginTimeSpan => (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : TimeSpan.Zero; + + public TimeSpan GetDuration(DateTime startDateTime) + { + if (EndDateTime == null) return Length; + + return (EndDateTime.Value - startDateTime); + } // GetDuration + + public TimeSpan GetDuration(RecordSchedule schedule) + { + return GetDuration(schedule.GetStartDateTime()); + } // GetDuration + + /// + /// Creates a RecordDuration instance with default values + /// + /// An instance of a RecordDuration with default values + public static RecordDuration CreateWithDefaultValues() + { + return new RecordDuration() + { + SafetyMargin = DefaultSafetyMargin, + Length = new TimeSpan(1, 0, 0), + }; + } // CreateWithDefaultValues + } // RecordDuration +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordMonthly.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordMonthly.cs new file mode 100644 index 00000000..a08c69c1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordMonthly.cs @@ -0,0 +1,43 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordMonthly : RecordSchedule + { + public override RecordScheduleKind Kind => RecordScheduleKind.Monthly; + + public RecordYearMonths Months + { + get; + set; + } // Months + + public override void SetDefaultValues() + { + base.SetDefaultValues(); + throw new NotImplementedException(); + } // SetDefaultValues + + public override void Verbalize(bool pastTime, StringBuilder builder) + { + throw new NotImplementedException(); + } // Verbalize + } // class RecordMonthly +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordMultipleInstances.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordMultipleInstances.cs new file mode 100644 index 00000000..dfb582a9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordMultipleInstances.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public enum RecordMultipleInstances + { + [XmlEnum("Record-both")] + RecordBoth = 0, + + [XmlEnum("Do-not-record")] + DoNotRecord, + + [XmlEnum("Queue-and-wait")] + Queue, + + [XmlEnum("Stop-previous")] + StopPrevious + } // RecordMultipleInstances +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordOneTime.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordOneTime.cs new file mode 100644 index 00000000..c73d5f9e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordOneTime.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public sealed class RecordOneTime : RecordSchedule + { + public override RecordScheduleKind Kind => RecordScheduleKind.OneTime; + + public override void Verbalize(bool pastTime, StringBuilder builder) + { + builder.AppendFormat(pastTime ? Properties.Texts.VerbalizeRecordOneTimePast : Properties.Texts.VerbalizeRecordOneTime, + StartDate, StartDate, SafetyMarginTimeSpan.TotalMinutes); + } // Verbalize + } // class RecordOneTime +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordProgram.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordProgram.cs new file mode 100644 index 00000000..32c93457 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordProgram.cs @@ -0,0 +1,51 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + + public class RecordProgram + { + public string Title + { + get; + set; + } // Title + + public DateTime UtcStartTime + { + get; + set; + } // UtcStartTime + + public DateTime UtcEndTime + { + get; + set; + } // UtcEndTime + + [XmlIgnore] + public DateTime LocalStartTime => UtcStartTime.ToLocalTime(); + + [XmlIgnore] + public DateTime LocalEndTime => UtcEndTime.ToLocalTime(); + + [XmlIgnore] + public TimeSpan Duration => UtcEndTime - UtcStartTime; + } // class RecordProgram +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordRecorder.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordRecorder.cs new file mode 100644 index 00000000..8df2d3b1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordRecorder.cs @@ -0,0 +1,44 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public class RecordRecorder + { + [XmlAttribute("name")] + public string Name + { + get; + set; + } // Name + + public string Path + { + get; + set; + } // Path + + [XmlArray("Arguments", Namespace = RecordTask.XmlNamespace)] + [XmlArrayItem("Arg")] + public string[] Arguments + { + get; + set; + } // Parameters + } // RecordRecorder +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordRightNow.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordRightNow.cs new file mode 100644 index 00000000..5d507df4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordRightNow.cs @@ -0,0 +1,42 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using System; +using System.Text; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public sealed class RecordRightNow: RecordSchedule + { + public override RecordScheduleKind Kind=>RecordScheduleKind.RightNow; + + public override void SetDefaultValues() + { + // nothing to initialize + } // SetDefaultValues + + public override void Verbalize(bool pastTime, StringBuilder builder) + { + builder.AppendFormat(pastTime? Properties.Texts.VerbalizeRecordRightNowPast : Properties.Texts.VerbalizeRecordRightNow); + } // Verbalize + + public override DateTime GetStartDateTime() + { + return DateTime.Now.TruncateToSeconds(); + } // GetStartDateTime + } // class RecordRightNow +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordSchedule.cs similarity index 80% rename from 1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs rename to 1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordSchedule.cs index 348cdce7..034b6481 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordSchedule.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordSchedule.cs @@ -1,10 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.ComponentModel; -using System.Linq; using System.Text; using System.Xml; using System.Xml.Serialization; @@ -44,9 +52,9 @@ public static RecordSchedule CreateWithDefaultValues(RecordScheduleKind kind) /// Default safety margin, in minutes /// public static int DefaultSafetyMargin - { - get { return 5; } - } // DefaultSafetyMargin + // DefaultSafetyMargin + => + 5; #region Properties @@ -73,10 +81,8 @@ public DateTime? ExpiryDate [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public string XmlExpiryDate { - get - { - return (ExpiryDate == null) ? null : XmlConvert.ToString(ExpiryDate.Value, XmlDateTimeSerializationMode.RoundtripKind); - } // get + get => (ExpiryDate == null) ? null : XmlConvert.ToString(ExpiryDate.Value, XmlDateTimeSerializationMode.RoundtripKind); +// get set { if (string.IsNullOrEmpty(value)) @@ -104,14 +110,10 @@ public int? SafetyMargin [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public string XmlSafetyMargin { - get - { - return SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; - } // get - set - { - SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); - } // set + get => SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; +// get + set => SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); +// set } // XmlSafetyMargin /// @@ -119,12 +121,9 @@ public string XmlSafetyMargin /// [XmlIgnore] public TimeSpan SafetyMarginTimeSpan - { - get - { - return (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : new TimeSpan(); - } // get - } // SafetyMarginTimeSpan + // SafetyMarginTimeSpan + => + (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : new TimeSpan(); #endregion diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordScheduleKind.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordScheduleKind.cs new file mode 100644 index 00000000..1eec3c68 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordScheduleKind.cs @@ -0,0 +1,25 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Services.Record.Serialization +{ + public enum RecordScheduleKind + { + OneTime = 0, + Daily = 10, + Weekly = 20, + Monthly = 30, + MontlyDoW = 35, + RightNow = 90, + } // enum RecordScheduleKind +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordTask.cs similarity index 91% rename from 1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs rename to 1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordTask.cs index 187556fc..c013f890 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTask.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordTask.cs @@ -1,18 +1,24 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; using System.Text; -using System.Xml; using System.Xml.Serialization; namespace IpTviewr.Services.Record.Serialization { [Serializable] - [XmlRoot(ElementName = "RecordTask", Namespace = RecordTask.XmlNamespace)] + [XmlRoot(ElementName = "RecordTask", Namespace = XmlNamespace)] public class RecordTask { public const string XmlNamespace = "urn:AlphaCentaury:IpTViewr:2014:RecordTask"; @@ -82,7 +88,7 @@ public static RecordTask CreateWithDefaultValues(RecordChannel channel) task = new RecordTask() { - Channel = (channel != null) ? channel : new RecordChannel(), + Channel = channel ?? new RecordChannel(), Schedule = RecordSchedule.CreateWithDefaultValues(RecordScheduleKind.OneTime), Duration = RecordDuration.CreateWithDefaultValues(), Description = RecordDescription.CreateWithDefaultValues(), diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTaskSerialization.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordTaskSerialization.cs similarity index 84% rename from 1.5 'Kruger 60'/Services.Record.Serialization/RecordTaskSerialization.cs rename to 1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordTaskSerialization.cs index df0b5b15..3761e47e 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordTaskSerialization.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordTaskSerialization.cs @@ -1,17 +1,24 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.Common.Serialization; using IpTviewr.Services.SqlServerCE; using System; -using System.Collections.Generic; using System.Data; using System.Data.SqlServerCe; using System.IO; -using System.Linq; using System.Text; using System.Xml; -using System.Xml.Serialization; namespace IpTviewr.Services.Record.Serialization { @@ -114,9 +121,11 @@ public static bool TryDeleteFromDatabase(Guid taskId, string dbFile) private static SqlCeCommand GetDbLoadCommand() { - var cmd = new SqlCeCommand(); - cmd.CommandType = CommandType.Text; - cmd.CommandText = "SELECT [XmlData] FROM [Tasks] WHERE [TaskId] = ?"; + var cmd = new SqlCeCommand + { + CommandType = CommandType.Text, + CommandText = "SELECT [XmlData] FROM [Tasks] WHERE [TaskId] = ?" + }; cmd.Parameters.Add("@TaskId", SqlDbType.UniqueIdentifier); return cmd; @@ -132,9 +141,11 @@ private static SqlCeCommand GetDbLoadCommand(Guid taskId) private static SqlCeCommand GetDbSaveCommand() { - var cmd = new SqlCeCommand(); - cmd.CommandType = CommandType.Text; - cmd.CommandText = "INSERT INTO [Tasks] (TaskId, TaskName, SchedulerName, SchedulerFolder, XmlData) VALUES (?, ?, ?, ?, ?)"; + var cmd = new SqlCeCommand + { + CommandType = CommandType.Text, + CommandText = "INSERT INTO [Tasks] (TaskId, TaskName, SchedulerName, SchedulerFolder, XmlData) VALUES (?, ?, ?, ?, ?)" + }; cmd.Parameters.Add("@TaskId", SqlDbType.UniqueIdentifier); cmd.Parameters.Add("@TaskName", SqlDbType.NVarChar, MaxTaskNameLength); cmd.Parameters.Add("@SchedulerName", SqlDbType.NVarChar, 150); diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordWeekDays.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordWeekDays.cs new file mode 100644 index 00000000..3527b587 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordWeekDays.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Serializable] + [Flags] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public enum RecordWeekDays + { + Sunday = 0x01, + Monday = 0x02, + Tuesday = 0x04, + Wednesday = 0x08, + Thursday = 0x10, + Friday = 0x20, + Saturday = 0x40, + } // enum RecordWeekDays +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordWeekly.cs similarity index 77% rename from 1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs rename to 1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordWeekly.cs index 9b92a5ee..8a2f0a36 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekly.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordWeekly.cs @@ -1,9 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; -using System.Linq; using System.Text; using System.Xml.Serialization; @@ -15,10 +24,7 @@ public sealed class RecordWeekly : RecordSchedule { public const RecordWeekDays AllWeekDays = RecordWeekDays.Sunday | RecordWeekDays.Monday | RecordWeekDays.Tuesday | RecordWeekDays.Wednesday | RecordWeekDays.Thursday | RecordWeekDays.Friday | RecordWeekDays.Saturday; - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.Weekly; } - } // ScheduleKind + public override RecordScheduleKind Kind => RecordScheduleKind.Weekly; public short RecurEveryWeeks { @@ -34,25 +40,24 @@ public RecordWeekDays WeekDays public static RecordWeekDays ToRecordWeekDays(DayOfWeek day) { - switch (day) + return day switch { - case DayOfWeek.Sunday: return RecordWeekDays.Sunday; - case DayOfWeek.Monday: return RecordWeekDays.Monday; - case DayOfWeek.Tuesday: return RecordWeekDays.Tuesday; - case DayOfWeek.Wednesday: return RecordWeekDays.Wednesday; - case DayOfWeek.Thursday: return RecordWeekDays.Thursday; - case DayOfWeek.Friday: return RecordWeekDays.Friday; - case DayOfWeek.Saturday: return RecordWeekDays.Saturday; - } // switch - - return default(RecordWeekDays); + DayOfWeek.Sunday => RecordWeekDays.Sunday, + DayOfWeek.Monday => RecordWeekDays.Monday, + DayOfWeek.Tuesday => RecordWeekDays.Tuesday, + DayOfWeek.Wednesday => RecordWeekDays.Wednesday, + DayOfWeek.Thursday => RecordWeekDays.Thursday, + DayOfWeek.Friday => RecordWeekDays.Friday, + DayOfWeek.Saturday => RecordWeekDays.Saturday, + _ => default, + }; } // ToRecordWeekDays public override void SetDefaultValues() { base.SetDefaultValues(); RecurEveryWeeks = 1; - WeekDays = RecordWeekly.ToRecordWeekDays(DateTime.Now.DayOfWeek); + WeekDays = ToRecordWeekDays(DateTime.Now.DayOfWeek); } // SetDefaultValues public override void Verbalize(bool pastTime, StringBuilder builder) @@ -107,7 +112,7 @@ private string VerbalizaRecordingDays(bool pastTime) } // for buffer.Append(pastTime ? Properties.Texts.VerbalizeRecordWeeklyDaysPast : Properties.Texts.VerbalizeRecordWeeklyDays); - for (int index = 0; index < days.Count; index++) + for (var index = 0; index < days.Count; index++) { if (index != 0) { diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordYearMonths.cs b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordYearMonths.cs new file mode 100644 index 00000000..85dc1a40 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/RecordYearMonths.cs @@ -0,0 +1,37 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.Services.Record.Serialization +{ + [Flags] + [Serializable] + [XmlType(Namespace = RecordTask.XmlNamespace)] + public enum RecordYearMonths + { + January = 0x001, + February = 0x002, + March = 0x004, + April = 0x008, + May = 0x010, + June = 0x020, + July = 0x040, + August = 0x080, + September = 0x100, + October = 0x200, + November = 0x400, + December = 0x800, + } // enum RecordYearMonths +} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Services.Record.Serialization.csproj similarity index 90% rename from 1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj rename to 1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Services.Record.Serialization.csproj index 32bbe764..ed329233 100644 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Services.Record.Serialization.csproj +++ b/1.5 'Kruger 60'/Assemblies/Services.Record.Serialization/Services.Record.Serialization.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.Services.Record.Serialization Services.Record.Serialization - v4.5.2 + v4.6.2 512 SAK SAK @@ -26,6 +26,7 @@ prompt 4 false + 8 pdbonly @@ -35,20 +36,19 @@ prompt 4 false + 8 - False ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - + Properties\AssemblySolutionInfo.cs @@ -85,18 +85,24 @@ + + - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common {3a053f34-4edf-4071-b966-923255a0ae14} Services.SqlServerCE + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.SqlServerCE + Library + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/Services.Record/LICENSE.ES.MD new file mode 100644 index 00000000..b22b74a6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/LICENSE.ES.MD @@ -0,0 +1,246 @@ +# Biblioteca 'Services.Record' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Services.Record +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Services.Record.Serialization +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. Services.SqlServerCE +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. TaskScheduler +_Paquete 'nuget' por David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/Services.Record/LICENSE.MD new file mode 100644 index 00000000..1f2b15de --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/LICENSE.MD @@ -0,0 +1,218 @@ +# Library 'Services.Record' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Services.Record +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Services.Record.Serialization +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. Services.SqlServerCE +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. TaskScheduler +_'nuget' package by David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record/License.txt b/1.5 'Kruger 60'/Assemblies/Services.Record/License.txt new file mode 100644 index 00000000..006add77 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/License.txt @@ -0,0 +1,235 @@ +############################################################################## +## +## Library 'Services.Record' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Services.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. Services.Record.Serialization +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. Services.SqlServerCE +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. TaskScheduler +------------------------------ +'nuget' package by David Hall +Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..18f14e13 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Services.Record")] +[assembly: AssemblyDescription("IpTviewr.Services.Record")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3e4a840e-2302-44d0-9e8a-ea4ff39633d9")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Resources.Designer.cs new file mode 100644 index 00000000..fc167471 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Resources.Designer.cs @@ -0,0 +1,104 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Services.Record.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.Record.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to D57F4237-4AD5-4094-85CD-49E56D98DED5: IPTViewr Record Task + ///TaskId: {0} + ///Database: {1}. + /// + internal static string DefinitionRegistrationInfo_Documentation { + get { + return ResourceManager.GetString("DefinitionRegistrationInfo_Documentation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to D57F4237-4AD5-4094-85CD-49E56D98DED5: IPTViewr Record Task. + /// + internal static string DefinitionRegistrationInfo_Documentation_Begins { + get { + return ResourceManager.GetString("DefinitionRegistrationInfo_Documentation_Begins", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Application. + /// + internal static string DefinitionRegistrationInfo_Source { + get { + return ResourceManager.GetString("DefinitionRegistrationInfo_Source", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to RecordTasks.sdf. + /// + internal static string RecordTasksDatabaseFile { + get { + return ResourceManager.GetString("RecordTasksDatabaseFile", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Resources.resx similarity index 100% rename from 1.5 'Kruger 60'/Services.Record/Properties/Resources.resx rename to 1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Resources.resx diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Texts.Designer.cs new file mode 100644 index 00000000..426b439a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Texts.Designer.cs @@ -0,0 +1,94 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Services.Record.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.Record.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to The folder does not exists.. + /// + internal static string FolderNotFoundException { + get { + return ResourceManager.GetString("FolderNotFoundException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unexpected error while contacting with the Windows Task Manager to create the recording task. + ///The recording task has not been created.. + /// + internal static string TaskCreationException { + get { + return ResourceManager.GetString("TaskCreationException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to run the 'Right now' recording task and no recording action will take place.. + /// + internal static string TaskRunException { + get { + return ResourceManager.GetString("TaskRunException", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Texts.es.resx new file mode 100644 index 00000000..744082d7 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Texts.es.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + La carpeta especificada no existe. + + + Se ha producido un error al ponerse en contacto con el Programador de Tareas de Windows para crear la tarea de grabación. +La tarea de grabación no ha sido creada. + + + No se ha podido ejecutar la tarea de grabación 'Inmediata' y no se realizará grabación alguna. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Texts.resx new file mode 100644 index 00000000..96a37d7d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/Properties/Texts.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + The folder does not exists. + + + Unexpected error while contacting with the Windows Task Manager to create the recording task. +The recording task has not been created. + + + Unable to run the 'Right now' recording task and no recording action will take place. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record/Scheduler.cs b/1.5 'Kruger 60'/Assemblies/Services.Record/Scheduler.cs similarity index 78% rename from 1.5 'Kruger 60'/Services.Record/Scheduler.cs rename to 1.5 'Kruger 60'/Assemblies/Services.Record/Scheduler.cs index ea26be15..8ef1e105 100644 --- a/1.5 'Kruger 60'/Services.Record/Scheduler.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/Scheduler.cs @@ -1,8 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Win32.TaskScheduler; @@ -11,25 +20,23 @@ using System.Reflection; using System.IO; using IpTviewr.Services.Record.Properties; -using System.Text.RegularExpressions; using IpTviewr.Common; namespace IpTviewr.Services.Record { public class Scheduler { - private Action ExceptionHandler; - private string RecordTasksFolder; - private string RecorderLauncherPath; - private string DbFile; - private string LogFolder; - - private TimeSpan StartSafetyMargin; - private TimeSpan EndSafetyMargin; - private TimeSpan RecordDuration; - private TimeSpan TotalRecordTime; - private TaskFolder TaskFolder; - private string TaskName; + private readonly Action _exceptionHandler; + private readonly string _recorderLauncherPath; + private readonly string _dbFile; + private readonly string _logFolder; + + private TimeSpan _startSafetyMargin; + private TimeSpan _endSafetyMargin; + private TimeSpan _recordDuration; + private TimeSpan _totalRecordTime; + private TaskFolder _taskFolder; + private string _taskName; public Scheduler(Action exceptionHandler, string recordTasksFolder, string recorderLauncherPath) { @@ -38,11 +45,10 @@ public Scheduler(Action exceptionHandler, string recordTasks throw new ArgumentNullException(); } // if - ExceptionHandler = exceptionHandler; - RecordTasksFolder = recordTasksFolder; - RecorderLauncherPath = recorderLauncherPath; - DbFile = Path.Combine(recordTasksFolder, Resources.RecordTasksDatabaseFile); - LogFolder = recordTasksFolder; + _exceptionHandler = exceptionHandler; + _recorderLauncherPath = recorderLauncherPath; + _dbFile = Path.Combine(recordTasksFolder, Resources.RecordTasksDatabaseFile); + _logFolder = recordTasksFolder; } // constructor public static bool IsRecordSchedulerTask(Task schedulerTask, out RecordTask recordTask) @@ -76,8 +82,8 @@ public bool CreateTask(RecordTask record) Task task; bool isOk; - TaskFolder = null; - TaskName = null; + _taskFolder = null; + _taskName = null; taskScheduler = null; definition = null; @@ -90,7 +96,7 @@ public bool CreateTask(RecordTask record) definition = taskScheduler.NewTask(); // Get folder for new task - TaskFolder = GetTaskSchedulerFolder(record.AdvancedSettings, taskScheduler); + _taskFolder = GetTaskSchedulerFolder(record.AdvancedSettings, taskScheduler); // "Duration" // Duration 'per-se' is handled by the recording process. @@ -113,41 +119,39 @@ public bool CreateTask(RecordTask record) SaveXmlData(record); // Aditional task data - SetAdditionalData(definition, record, DbFile); + SetAdditionalData(definition, record, _dbFile); // Action - SetAction(definition, record, DbFile, LogFolder); + SetAction(definition, record, _dbFile, _logFolder); // Register task - task = TaskFolder.RegisterTaskDefinition(TaskName, definition); + task = _taskFolder.RegisterTaskDefinition(_taskName, definition); isOk = true; // Run task right now? - if (record.Schedule.Kind == RecordScheduleKind.RightNow) - { - try - { - task.Run(null); - } - catch (Exception ex) - { - ExceptionHandler(new ExceptionEventData(Texts.TaskRunException, ex)); - return false; - } // try-catch - } // if + if (record.Schedule.Kind != RecordScheduleKind.RightNow) return true; - return true; + try + { + task.Run(); + return true; + } + catch (Exception ex) + { + _exceptionHandler(new ExceptionEventData(Texts.TaskRunException, ex)); + return false; + } // try-catch } catch (Exception ex) { - ExceptionHandler(new ExceptionEventData(Texts.TaskCreationException, ex)); + _exceptionHandler(new ExceptionEventData(Texts.TaskCreationException, ex)); return false; } finally { if (!isOk) { - RecordTaskSerialization.TryDeleteFromDatabase(record.TaskId, DbFile); + RecordTaskSerialization.TryDeleteFromDatabase(record.TaskId, _dbFile); } // if if (task != null) { @@ -159,17 +163,17 @@ public bool CreateTask(RecordTask record) definition.Dispose(); definition = null; } // if - if (TaskFolder != null) + if (_taskFolder != null) { - TaskFolder.Dispose(); - TaskFolder = null; + _taskFolder.Dispose(); + _taskFolder = null; } // if if (taskScheduler != null) { taskScheduler.Dispose(); taskScheduler = null; } // if - TaskName = null; + _taskName = null; } // try-finally } // CreateTask @@ -181,21 +185,23 @@ private static TaskFolder GetTaskSchedulerFolder(RecordAdvancedSettings settings return taskScheduler.RootFolder; } // if + TaskFolder folder = null; try { - return taskScheduler.GetFolder(settings.TaskSchedulerFolder); + folder = taskScheduler.GetFolder(settings.TaskSchedulerFolder); } catch (DirectoryNotFoundException) { - // folder does not exist: create it - return taskScheduler.RootFolder.CreateFolder(settings.TaskSchedulerFolder); + // folder does not exists } catch (FileNotFoundException) { - // folder does not exist: create it - return taskScheduler.RootFolder.CreateFolder(settings.TaskSchedulerFolder); - + // folder does not exists } // try-catch + + folder ??= taskScheduler.RootFolder.CreateFolder(settings.TaskSchedulerFolder); + + return folder ?? throw new IOException(); } // GetTaskSchedulerFolder private void GetDuration(RecordTask task) @@ -207,14 +213,14 @@ private void GetDuration(RecordTask task) } // if-else // extract start details - StartSafetyMargin = task.Schedule.SafetyMarginTimeSpan; + _startSafetyMargin = task.Schedule.SafetyMarginTimeSpan; // extract duration details - EndSafetyMargin = task.Duration.SafetyMarginTimeSpan; - RecordDuration = task.Duration.Length; + _endSafetyMargin = task.Duration.SafetyMarginTimeSpan; + _recordDuration = task.Duration.Length; // do some math - TotalRecordTime = StartSafetyMargin + RecordDuration + EndSafetyMargin; + _totalRecordTime = _startSafetyMargin + _recordDuration + _endSafetyMargin; } // GetDuration private void SetSchedule(TaskDefinition definition, RecordSchedule recordSchedule) @@ -223,8 +229,10 @@ private void SetSchedule(TaskDefinition definition, RecordSchedule recordSchedul { case RecordScheduleKind.RightNow: { - var rightNow = new TimeTrigger(); - rightNow.EndBoundary = DateTime.Now.TruncateToSeconds() + TotalRecordTime + new TimeSpan(0,1,0); + var rightNow = new TimeTrigger + { + EndBoundary = DateTime.Now.TruncateToSeconds() + _totalRecordTime + new TimeSpan(0, 1, 0) + }; definition.Triggers.Add(rightNow); break; @@ -234,8 +242,8 @@ private void SetSchedule(TaskDefinition definition, RecordSchedule recordSchedul { var oneTime = new TimeTrigger(); var schedule = (RecordOneTime)recordSchedule; - oneTime.StartBoundary = schedule.StartDate - StartSafetyMargin; - oneTime.EndBoundary = schedule.StartDate + TotalRecordTime; + oneTime.StartBoundary = schedule.StartDate - _startSafetyMargin; + oneTime.EndBoundary = schedule.StartDate + _totalRecordTime; definition.Triggers.Add(oneTime); break; @@ -245,7 +253,7 @@ private void SetSchedule(TaskDefinition definition, RecordSchedule recordSchedul { var daily = new DailyTrigger(); var schedule = (RecordDaily)recordSchedule; - daily.StartBoundary = schedule.StartDate - StartSafetyMargin; + daily.StartBoundary = schedule.StartDate - _startSafetyMargin; if (schedule.ExpiryDate.HasValue) { daily.EndBoundary = schedule.ExpiryDate.Value; @@ -260,7 +268,7 @@ private void SetSchedule(TaskDefinition definition, RecordSchedule recordSchedul { var weekly = new WeeklyTrigger(); var schedule = (RecordWeekly)recordSchedule; - weekly.StartBoundary = schedule.StartDate - StartSafetyMargin; + weekly.StartBoundary = schedule.StartDate - _startSafetyMargin; if (schedule.ExpiryDate.HasValue) { weekly.EndBoundary = schedule.ExpiryDate.Value; @@ -276,7 +284,7 @@ private void SetSchedule(TaskDefinition definition, RecordSchedule recordSchedul { var monthly = new MonthlyTrigger(); var schedule = (RecordMonthly)recordSchedule; - monthly.StartBoundary = schedule.StartDate - StartSafetyMargin; + monthly.StartBoundary = schedule.StartDate - _startSafetyMargin; if (schedule.ExpiryDate.HasValue) { monthly.EndBoundary = schedule.ExpiryDate.Value; @@ -294,8 +302,8 @@ private void SetDescription(TaskDefinition definition, RecordTask task) { string userDescription; - TaskName = GetUniqueTaskName(task, "IPTViewr"); - task.Description.TaskSchedulerName = TaskName; + _taskName = GetUniqueTaskName(task, "IPTViewr"); + task.Description.TaskSchedulerName = _taskName; userDescription = task.Description.Description; if (!task.Description.AddDetails) @@ -371,18 +379,18 @@ private void SetAdvancedSettings(TaskSettings settings, RecordAdvancedSettings a // The RecordTask execution limit is not an absolute value. It has to be added to the total record time (including safety margins) if ((advanced.ExecutionTimeLimit != null) && (advanced.ExecutionTimeLimit.Enabled)) { - settings.ExecutionTimeLimit = TotalRecordTime + advanced.ExecutionTimeLimit.Time; + settings.ExecutionTimeLimit = _totalRecordTime + advanced.ExecutionTimeLimit.Time; } // if } // SetAdvancedSettings private void SaveXmlData(RecordTask record) { - record.SaveToDatabase(DbFile); + record.SaveToDatabase(_dbFile); } // SaveXmlData private static void SetAdditionalData(TaskDefinition definition, RecordTask record, string dbFile) { - definition.RegistrationInfo.Author = string.Format("{0} {1}", Assembly.GetEntryAssembly().GetName().Name, SolutionVersion.ProductVersion); + definition.RegistrationInfo.Author = $"{Assembly.GetEntryAssembly().GetName().Name} {SolutionVersion.ProductVersion}"; definition.RegistrationInfo.Source = Resources.DefinitionRegistrationInfo_Source; definition.RegistrationInfo.Documentation = string.Format(Resources.DefinitionRegistrationInfo_Documentation, record.TaskId, dbFile); definition.RegistrationInfo.Date = DateTime.Now; @@ -391,17 +399,17 @@ private static void SetAdditionalData(TaskDefinition definition, RecordTask reco private void SetAction(TaskDefinition definition, RecordTask record, string dbFile, string logFolder) { - var arguments = new string[] + var arguments = new[] { "/Action:Record", - string.Format("/TaskId:{0}", record.TaskId), - string.Format("/Database:{0}", dbFile), - string.Format("/LogFolder:{0}", logFolder) + $"/TaskId:{record.TaskId}", + $"/Database:{dbFile}", + $"/LogFolder:{logFolder}" }; var action = new ExecAction() { - Path = RecorderLauncherPath, + Path = _recorderLauncherPath, Arguments = ArgumentsManager.JoinArguments(arguments), WorkingDirectory = record.Action.SaveLocationPath, }; @@ -444,11 +452,8 @@ private static string GetUniqueTaskName(RecordTask task, string prefix) private static string EnsureTaskNameIsUnique(string taskName, TaskFolder folder) { - string originalName; - int count; - - originalName = taskName; - count = 2; + var originalName = taskName; + var count = 2; while (true) { @@ -457,7 +462,7 @@ private static string EnsureTaskNameIsUnique(string taskName, TaskFolder folder) select true; if (query.FirstOrDefault()) { - taskName = string.Format("{0} #{1}", originalName, count.ToString(CultureInfo.InvariantCulture)); + taskName = $"{originalName} #{count.ToString(CultureInfo.InvariantCulture)}"; count++; } else diff --git a/1.5 'Kruger 60'/Services.Record/Services.Record.csproj b/1.5 'Kruger 60'/Assemblies/Services.Record/Services.Record.csproj similarity index 84% rename from 1.5 'Kruger 60'/Services.Record/Services.Record.csproj rename to 1.5 'Kruger 60'/Assemblies/Services.Record/Services.Record.csproj index 584d11db..846900f3 100644 --- a/1.5 'Kruger 60'/Services.Record/Services.Record.csproj +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/Services.Record.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.Services.Record Services.Record - v4.5.2 + v4.6.2 512 SAK SAK @@ -26,6 +26,7 @@ prompt 4 false + 8 pdbonly @@ -35,20 +36,16 @@ prompt 4 false + 8 - - ..\Third-party\TaskScheduler\2.2.2\v2.0\Microsoft.Win32.TaskScheduler.dll + + ..\..\packages\TaskScheduler.2.8.17\lib\net452\Microsoft.Win32.TaskScheduler.dll - - - - - - + Properties\AssemblySolutionInfo.cs @@ -70,9 +67,9 @@ - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} @@ -92,6 +89,12 @@ + + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record.Serialization + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.SqlServerCE + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + David Hall + Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.Record/packages.config b/1.5 'Kruger 60'/Assemblies/Services.Record/packages.config new file mode 100644 index 00000000..50934859 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.Record/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.SqlServerCE/DbServices.cs b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/DbServices.cs similarity index 94% rename from 1.5 'Kruger 60'/Services.SqlServerCE/DbServices.cs rename to 1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/DbServices.cs index 0786593e..f2580a2e 100644 --- a/1.5 'Kruger 60'/Services.SqlServerCE/DbServices.cs +++ b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/DbServices.cs @@ -1,14 +1,21 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.Common.Serialization; using System; -using System.Collections.Generic; using System.Data; using System.Data.SqlServerCe; using System.IO; -using System.Linq; -using System.Text; namespace IpTviewr.Services.SqlServerCE { @@ -36,7 +43,7 @@ public static T Load(SqlCeConnection cn, SqlCeCommand loadCommand, string xml if (cn != null) loadCommand.Connection = cn; using (var reader = cmd.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.SingleRow)) { - int index = reader.GetOrdinal(xmlDataColumnName); + var index = reader.GetOrdinal(xmlDataColumnName); reader.Read(); var value = reader.GetValue(index); data = (byte[])value; @@ -266,9 +273,11 @@ public static SqlCeConnection GetConnection(string dbFile) { SqlCeConnectionStringBuilder builder; - builder = new SqlCeConnectionStringBuilder(); - builder.DataSource = dbFile; - builder.Password = "movistartv.codeplex.com"; + builder = new SqlCeConnectionStringBuilder + { + DataSource = dbFile, + Password = "movistartv.codeplex.com" + }; var cn = new SqlCeConnection(builder.ConnectionString); cn.Open(); diff --git a/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/LICENSE.ES.MD new file mode 100644 index 00000000..5c6a4d98 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/LICENSE.ES.MD @@ -0,0 +1,226 @@ +# Biblioteca 'Services.SqlServerCE' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Services.SqlServerCE +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/LICENSE.MD new file mode 100644 index 00000000..7a643138 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/LICENSE.MD @@ -0,0 +1,198 @@ +# Library 'Services.SqlServerCE' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Services.SqlServerCE +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..3f337294 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Services.SqlServerCE")] +[assembly: AssemblyDescription("IpTviewr.Services.SqlServerCE")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ffa1f30f-60ab-4ea3-93e3-e5e43a64c3a1")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/Properties/License.txt b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/Properties/License.txt new file mode 100644 index 00000000..f25130ef --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/Properties/License.txt @@ -0,0 +1,43 @@ +Copyright (C) 2014-2019, Codeplex/GitHub user AlphaCentaury and its contributors + +This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". +All other rights are reserved by the author(s) of the software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +***************************************************************************** +** Microsoft Reciprocal License (Ms-RL) ** +***************************************************************************** + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. Definitions + +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. +A "contribution" is the original software, or any additions or changes to the software. +A "contributor" is any person that distributes its contribution under this license. +"Licensed patents" are a contributor's patent claims that read directly on its contribution. + +2. Grant of Rights + +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations + +(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. +(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. +(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. +(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. +(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +***************************************************************************** +** EXCEPTIONS ** +***************************************************************************** + +There are no exceptions diff --git a/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/Services.SqlServerCE.csproj similarity index 88% rename from 1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj rename to 1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/Services.SqlServerCE.csproj index 2c174022..8c63e48d 100644 --- a/1.5 'Kruger 60'/Services.SqlServerCE/Services.SqlServerCE.csproj +++ b/1.5 'Kruger 60'/Assemblies/Services.SqlServerCE/Services.SqlServerCE.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.Services.SqlServerCE Services.SqlServerCE - v4.5.2 + v4.6.2 512 SAK SAK @@ -38,32 +38,35 @@ - False ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - + Properties\AssemblySolutionInfo.cs + + - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Design.dll b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Design.dll new file mode 100644 index 00000000..54be0f58 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Design.dll differ diff --git a/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Docking.dll b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Docking.dll new file mode 100644 index 00000000..54f1ad4b Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Docking.dll differ diff --git a/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Navigator.dll b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Navigator.dll new file mode 100644 index 00000000..e116d819 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Navigator.dll differ diff --git a/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Ribbon.dll b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Ribbon.dll new file mode 100644 index 00000000..ea45ec3e Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Ribbon.dll differ diff --git a/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Toolkit.dll b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Toolkit.dll new file mode 100644 index 00000000..1ee0f29a Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Toolkit.dll differ diff --git a/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Workspace.dll b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Workspace.dll new file mode 100644 index 00000000..671d74b1 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/ComponentFactory.Krypton.Workspace.dll differ diff --git a/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/KryptonHelp.chm b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/KryptonHelp.chm new file mode 100644 index 00000000..fd006c2f Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Third-party/ComponentFactory/Krypton/v4.6.0.0/KryptonHelp.chm differ diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/CommonBaseUserControl.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/CommonBaseUserControl.cs similarity index 85% rename from 1.5 'Kruger 60'/UiServices.Common/Controls/CommonBaseUserControl.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/CommonBaseUserControl.cs index 14602a30..a98ef3a4 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/CommonBaseUserControl.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/CommonBaseUserControl.cs @@ -1,12 +1,21 @@ -using IpTviewr.Common; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; using IpTviewr.Common.Telemetry; using IpTviewr.UiServices.Common.Forms; using Microsoft.SqlServer.MessageBox; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace IpTviewr.UiServices.Common.Controls @@ -42,10 +51,7 @@ private void HandleOwnedFormException(ExceptionEventData ex) if (!HandleMyOwnExceptions) { var parent = ParentForm as CommonBaseForm; - if (parent != null) - { - parent.GetExceptionHandler().Invoke(ex); - } // if + parent?.GetExceptionHandler()(ex); } // if ExceptionHandler(ex); @@ -61,7 +67,7 @@ private void HandleOwnedFormException(ExceptionEventData ex) /// protected virtual void ExceptionHandler(ExceptionEventData ex) { - BasicGoogleTelemetry.SendExtendedExceptionHit(ex.Exception, true, ex.Message, this.GetType().Name); + AppTelemetry.ScreenException(ex.Exception, GetType().FullName, ex.Message); var box = new ExceptionMessageBox() { @@ -90,8 +96,7 @@ protected virtual void ExceptionHandler(ExceptionEventData ex) protected void SafeDispose(IDisposable disposable) { - if (disposable == null) return; - disposable.Dispose(); + disposable?.Dispose(); } // SafeDispose protected bool SafeCall(Action implementation) diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/FilenameTextBox.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/FilenameTextBox.cs new file mode 100644 index 00000000..76b62217 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/FilenameTextBox.cs @@ -0,0 +1,110 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using System; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + [ToolboxBitmap(typeof(TextBox))] + public class FilenameTextBox : TextBox + { + private readonly char[] _invalidCharacters; + private string _invalidCharacterText; + private bool _manualUpdateOfValue; + + public FilenameTextBox() + { + _invalidCharacters = TextUtils.GetFilenameInvalidChars(); + } // constructor + + /// + /// Sets the text and removes invalid characters if needed + /// + /// Text to set + /// + public void SetText(string text, bool raiseTextChangedEvent) + { + _manualUpdateOfValue = true; + Text = text; + RemoveInvalidChars(false); + _manualUpdateOfValue = false; + + if (raiseTextChangedEvent) + { + base.OnTextChanged(EventArgs.Empty); + } // if + } // SetText + + protected override void OnTextChanged(EventArgs e) + { + if (_manualUpdateOfValue) return; + if (RemoveInvalidChars(true)) return; + + base.OnTextChanged(e); + } // OnTextChanged + + private void DisplayInvalidCharacterWarning() + { + if (_invalidCharacterText == null) + { + StringBuilder buffer; + + buffer = new StringBuilder(); + buffer.Append(Properties.Filename.InputInvalidChar); + buffer.AppendLine(); + buffer.AppendLine(); + + var invalid = from c in _invalidCharacters + where c >= 31 + orderby c + select c; + + foreach (var ch in invalid) + { + buffer.Append(' '); + buffer.Append(ch); + } // foreach + _invalidCharacterText = buffer.ToString(); + } // if + + MessageBox.Show(this, _invalidCharacterText, Properties.Filename.InputInvalidCharCaption, + MessageBoxButtons.OK, MessageBoxIcon.Warning); + } // DisplayInvalidCharacterWarning + + private bool RemoveInvalidChars(bool displayWarning) + { + int caretPos; + + var newText = TextUtils.RemoveInvalidChars(Text, _invalidCharacters, null, out var modified); + if (!modified) return false; + + if (displayWarning) + { + DisplayInvalidCharacterWarning(); + } // if + + _manualUpdateOfValue = true; + caretPos = SelectionStart; + Text = newText; + SelectionStart = (caretPos <= 0)? 0 : caretPos - 1; + _manualUpdateOfValue = false; + + return true; + } // RemoveInvalidChars + } // class FilenameTextBox +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.Designer.cs new file mode 100644 index 00000000..f5f4f587 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.Designer.cs @@ -0,0 +1,152 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Controls +{ + partial class ListEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ListEditor)); + this.groupBoxData = new System.Windows.Forms.GroupBox(); + this.buttonAdd = new System.Windows.Forms.Button(); + this.buttonMoveDown = new System.Windows.Forms.Button(); + this.buttonMoveUp = new System.Windows.Forms.Button(); + this.buttonRemove = new System.Windows.Forms.Button(); + this.listItems = new System.Windows.Forms.ListBox(); + this.buttonEdit = new System.Windows.Forms.Button(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.groupBoxData.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxData + // + resources.ApplyResources(this.groupBoxData, "groupBoxData"); + this.groupBoxData.Controls.Add(this.buttonAdd); + this.groupBoxData.Controls.Add(this.buttonMoveDown); + this.groupBoxData.Controls.Add(this.buttonMoveUp); + this.groupBoxData.Controls.Add(this.buttonRemove); + this.groupBoxData.Controls.Add(this.listItems); + this.groupBoxData.Controls.Add(this.buttonEdit); + this.groupBoxData.Name = "groupBoxData"; + this.groupBoxData.TabStop = false; + this.toolTip.SetToolTip(this.groupBoxData, resources.GetString("groupBoxData.ToolTip")); + // + // buttonAdd + // + resources.ApplyResources(this.buttonAdd, "buttonAdd"); + this.buttonAdd.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonAdd.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Property_Add_16x16; + this.buttonAdd.Name = "buttonAdd"; + this.toolTip.SetToolTip(this.buttonAdd, resources.GetString("buttonAdd.ToolTip")); + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.ButtonAdd_Click); + // + // buttonMoveDown + // + resources.ApplyResources(this.buttonMoveDown, "buttonMoveDown"); + this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonMoveDown.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_GoNextDown_16x16; + this.buttonMoveDown.Name = "buttonMoveDown"; + this.toolTip.SetToolTip(this.buttonMoveDown, resources.GetString("buttonMoveDown.ToolTip")); + this.buttonMoveDown.UseVisualStyleBackColor = true; + this.buttonMoveDown.Click += new System.EventHandler(this.ButtonMoveDown_Click); + // + // buttonMoveUp + // + resources.ApplyResources(this.buttonMoveUp, "buttonMoveUp"); + this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonMoveUp.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_GoPreviousUp_16x16; + this.buttonMoveUp.Name = "buttonMoveUp"; + this.toolTip.SetToolTip(this.buttonMoveUp, resources.GetString("buttonMoveUp.ToolTip")); + this.buttonMoveUp.UseVisualStyleBackColor = true; + this.buttonMoveUp.Click += new System.EventHandler(this.ButtonMoveUp_Click); + // + // buttonRemove + // + resources.ApplyResources(this.buttonRemove, "buttonRemove"); + this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonRemove.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Delete_16x16; + this.buttonRemove.Name = "buttonRemove"; + this.toolTip.SetToolTip(this.buttonRemove, resources.GetString("buttonRemove.ToolTip")); + this.buttonRemove.UseVisualStyleBackColor = true; + this.buttonRemove.Click += new System.EventHandler(this.ButtonRemove_Click); + // + // listItems + // + resources.ApplyResources(this.listItems, "listItems"); + this.listItems.FormattingEnabled = true; + this.listItems.Name = "listItems"; + this.toolTip.SetToolTip(this.listItems, resources.GetString("listItems.ToolTip")); + this.listItems.SelectedIndexChanged += new System.EventHandler(this.ListItems_SelectedIndexChanged); + this.listItems.DoubleClick += new System.EventHandler(this.ListItems_DoubleClick); + // + // buttonEdit + // + resources.ApplyResources(this.buttonEdit, "buttonEdit"); + this.buttonEdit.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonEdit.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Property_Edit_16x16; + this.buttonEdit.Name = "buttonEdit"; + this.toolTip.SetToolTip(this.buttonEdit, resources.GetString("buttonEdit.ToolTip")); + this.buttonEdit.UseVisualStyleBackColor = true; + this.buttonEdit.Click += new System.EventHandler(this.ButtonEdit_Click); + // + // ListEditor + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBoxData); + this.Name = "ListEditor"; + this.toolTip.SetToolTip(this, resources.GetString("$this.ToolTip")); + this.Load += new System.EventHandler(this.ListEditor_Load); + this.groupBoxData.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + protected System.Windows.Forms.GroupBox groupBoxData; + protected System.Windows.Forms.Button buttonAdd; + protected System.Windows.Forms.Button buttonMoveDown; + protected System.Windows.Forms.Button buttonMoveUp; + protected System.Windows.Forms.Button buttonRemove; + protected System.Windows.Forms.ListBox listItems; + protected System.Windows.Forms.Button buttonEdit; + protected System.Windows.Forms.ToolTip toolTip; + } // class ListEditor +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.cs new file mode 100644 index 00000000..cf44b46e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.cs @@ -0,0 +1,111 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.Common.Controls +{ + public partial class ListEditor : CommonBaseUserControl + { + private bool _isDataChanged; + + public event EventHandler DataChanged; + + public ListEditor() + { + InitializeComponent(); + } // constructor + + public string ListName + { + get => groupBoxData.Text; + set => groupBoxData.Text = value; + } // ListName + + public bool IsDataChanged + { + get => _isDataChanged; + protected set + { + _isDataChanged = value; + OnDataChanged(this, EventArgs.Empty); + } // set + } // IsDataChanged + + public virtual int ItemsCount => listItems.Items.Count; + + public virtual bool IsReadOnly { get; set; } + + public virtual bool CanEdit => !IsReadOnly; + + public virtual bool CanRemove => !IsReadOnly; + + public virtual bool CanAdd => !IsReadOnly; + + public virtual bool CanMove => !IsReadOnly; + + private void ListEditor_Load(object sender, EventArgs e) + { + listItems.DisplayMember = null; + listItems.ValueMember = null; + buttonEdit.Enabled = false; + buttonRemove.Enabled = false; + buttonAdd.Enabled = CanAdd; + buttonMoveUp.Enabled = false; + buttonMoveDown.Enabled = false; + } // ListEditor_Load + + protected virtual void OnDataChanged(object sender, EventArgs e) + { + DataChanged?.Invoke(sender, e); + } // OnDataChanged + + protected virtual void ListItems_SelectedIndexChanged(object sender, EventArgs e) + { + var enable = listItems.SelectedIndex >= 0; + + buttonEdit.Enabled = enable && CanEdit; + buttonRemove.Enabled = enable && CanRemove; + } // ListItems_SelectedIndexChanged + + protected virtual void ListItems_DoubleClick(object sender, EventArgs e) + { + buttonEdit.PerformClick(); + } // ListItems_DoubleClick + + protected virtual void ButtonEdit_Click(object sender, EventArgs e) + { + // no-op + } // buttonEdit_Click + + protected virtual void ButtonRemove_Click(object sender, EventArgs e) + { + // no-op + } // ButtonRemove_Click + + protected virtual void ButtonAdd_Click(object sender, EventArgs e) + { + // no-op + } // buttonAdd_Click + + protected virtual void ButtonMoveUp_Click(object sender, EventArgs e) + { + // no-op + } // buttonMoveUp_Click + + protected virtual void ButtonMoveDown_Click(object sender, EventArgs e) + { + // no-op + } // buttonMoveDown_Click + } // class ListEditor +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.es.resx new file mode 100644 index 00000000..e31d7aa1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.es.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Añadir... + + + Bajar + + + Subir + + + Eliminar + + + Editar... + + + (Nombre de la lista) + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.resx new file mode 100644 index 00000000..0833f13e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListEditor.resx @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Move up + + + + 2 + + + 0 + + + + 25, 25 + + + listItems + + + + Bottom, Right + + + + + + Flat + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ListEditor + + + 2 + + + Top, Bottom, Left, Right + + + 25, 25 + + + 1 + + + 25, 25 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 200, 170 + + + 157, 145 + + + 6, 13 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Flat + + + Flat + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + Edit... + + + groupBoxData + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Top, Right + + + 169, 19 + + + $this + + + buttonMoveUp + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Flat + + + toolTip + + + Top, Right + + + (List name) + + + groupBoxData + + + groupBoxData + + + 4 + + + False + + + System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 169, 47 + + + + + + 25, 25 + + + NoControl + + + NoControl + + + 0 + + + Top, Right + + + Bottom, Right + + + groupBoxData + + + Delete + + + 169, 111 + + + System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + 169, 78 + + + NoControl + + + Move down + + + groupBoxData + + + 25, 25 + + + buttonRemove + + + buttonEdit + + + 0 + + + 200, 173 + + + Add new... + + + + + + 1 + + + buttonMoveDown + + + 3, 0, 3, 3 + + + NoControl + + + 0, 0 + + + 3 + + + 5 + + + groupBoxData + + + 5 + + + NoControl + + + buttonAdd + + + groupBoxData + + + 6, 19 + + + 0 + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Flat + + + 169, 139 + + + 3, 3, 3, 0 + + + Top, Bottom, Left, Right + + + True + + + 17, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListItemsManager.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListItemsManager.cs new file mode 100644 index 00000000..461f696e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListItemsManager.cs @@ -0,0 +1,162 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + public class ListItemsManager + { + private readonly ListBox _listBox; + private readonly Control _removeControl; + private readonly Control _upControl; + private readonly Control _downControl; + + public ListItemsManager(ListBox listBox, Control removeControl, Control upControl, Control downControl) + { + if ((listBox == null) || (removeControl == null) || (upControl == null) || (downControl == null)) + { + throw new ArgumentNullException(); + } // if + + if ((listBox.SelectionMode == SelectionMode.MultiSimple) || (listBox.SelectionMode == SelectionMode.MultiExtended)) + { + throw new ArgumentException(nameof(listBox)); + } // if + + _listBox = listBox; + _removeControl = removeControl; + _upControl = upControl; + _downControl = downControl; + + _removeControl.Enabled = false; + _upControl.Enabled = false; + _downControl.Enabled = false; + + _listBox.DisplayMember = "Value"; + _listBox.ValueMember = "Key"; + _listBox.SelectedIndexChanged += ListBox_SelectedIndexChanged; + } // constructor + + public bool IsReadOnly { get; set; } + + [PublicAPI] + public int Add(string item) + { + var index = _listBox.Items.Add(item); + _listBox.SelectedIndex = index; + + return index; + } // Add + + [PublicAPI] + public void Add(IEnumerable items) + { + Add(items.ToArray()); + } // Add + + [PublicAPI] + public void Add(IList items) + { + var add = new object[items.Count]; + for (var index = 0; index < items.Count; index++) + { + add[index] = items[index]; + } // for + AddItems(add); + } // Add + + [PublicAPI] + public void Add(string[] items) + { + var add = new object[items.Length]; + Array.Copy(items, add, items.Length); + AddItems(add); + } // Add + + [PublicAPI] + public List GetListItems() + { + return (from item in _listBox.Items.Cast() + select item).ToList(); + } // GetListItems + + [PublicAPI] + public void RemoveSelection() + { + if (IsReadOnly) return; + + var index = _listBox.SelectedIndex; + if (index < 0) throw new InvalidOperationException(); + + _listBox.Items.RemoveAt(index); + + if (index >= _listBox.Items.Count) index -= 1; + _listBox.SelectedIndex = index; + } // RemoveSelection + + [PublicAPI] + public void MoveSelectionUp() + { + if (IsReadOnly) return; + + var index = _listBox.SelectedIndex; + if (index < 0) throw new InvalidOperationException(); + + var upItem = _listBox.Items[index - 1]; + var current = _listBox.Items[index]; + + _listBox.Items[index - 1] = current; + _listBox.Items[index] = upItem; + + _listBox.SelectedIndex = index - 1; + } // MoveUp + + [PublicAPI] + public void MoveSelectionDown() + { + if (IsReadOnly) return; + + var index = _listBox.SelectedIndex; + if ((index + 1) >= _listBox.Items.Count) throw new InvalidOperationException(); + + var current = _listBox.Items[index]; + var downItem = _listBox.Items[index + 1]; + + _listBox.Items[index + 1] = current; + _listBox.Items[index] = downItem; + + _listBox.SelectedIndex = index + 1; + } // MoveDown + + [PublicAPI] + private void ListBox_SelectedIndexChanged(object sender, EventArgs e) + { + var index = _listBox.SelectedIndex; + _removeControl.Enabled = (index >= 0) && (_listBox.Items.Count > 0) && (!IsReadOnly); + _upControl.Enabled = (index > 0) && (_listBox.Items.Count > 1) && (!IsReadOnly); + _downControl.Enabled = ((index + 1) < _listBox.Items.Count) && (!IsReadOnly); + } // ListBox_SelectedIndexChanged + + private void AddItems(object[] items) + { + var index = _listBox.SelectedIndex; + _listBox.Items.AddRange(items); + _listBox.SelectedIndex = index; + } // AddItems + } // class ListItemsManager +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListItemsManagerTValue.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListItemsManagerTValue.cs new file mode 100644 index 00000000..015bb71b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListItemsManagerTValue.cs @@ -0,0 +1,210 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + public class ListItemsManager + { + private readonly ListBox _listBox; + private readonly Control _removeControl; + private readonly Control _upControl; + private readonly Control _downControl; + private IDictionary _dictionary; + + public ListItemsManager(ListBox listBox, Control removeControl, Control upControl, Control downControl) + { + if ((listBox == null) || (removeControl == null) || (upControl == null) || (downControl == null)) + { + throw new ArgumentNullException(); + } // if + + if ((listBox.SelectionMode == SelectionMode.MultiSimple) || (listBox.SelectionMode == SelectionMode.MultiExtended)) + { + throw new ArgumentException(nameof(listBox)); + } // if + + _listBox = listBox; + _removeControl = removeControl; + _upControl = upControl; + _downControl = downControl; + + _removeControl.Enabled = false; + _upControl.Enabled = false; + _downControl.Enabled = false; + + _listBox.DisplayMember = "Value"; + _listBox.ValueMember = "Key"; + _listBox.SelectedIndexChanged += ListBox_SelectedIndexChanged; + } // constructor + + public bool IsReadOnly { get; set; } + + public void SetValueDictionary(IList> items, IEqualityComparer comparer) + { + if (items == null) throw new ArgumentNullException(nameof(items)); + + _dictionary = new Dictionary(items.Count, comparer); + foreach (var item in items) + { + _dictionary.Add(item); + } // if + } // SetValueDictionary + + [PublicAPI] + public void SetItemsDictionary(IDictionary dictionary) + { + _dictionary = dictionary ?? throw new ArgumentNullException(nameof(dictionary)); + } // SetItemsDictionary + + public int Add(TValue key, string text) + { + return Add(new KeyValuePair(key, text)); + } // Add + + public int Add(KeyValuePair item) + { + var index = _listBox.Items.Add(item); + _listBox.SelectedIndex = index; + + return index; + } // Add + + public void Add(IEnumerable> items) + { + Add(items.ToArray()); + } // Add + + public void Add(IList> items) + { + var add = new object[items.Count]; + for (var index = 0; index < items.Count; index++) + { + add[index] = items[index]; + } // for + AddItems(add); + } // Add + + public void Add(KeyValuePair[] items) + { + var add = new object[items.Length]; + Array.Copy(items, add, items.Length); + AddItems(add); + } // Add + + public int Add(TValue key) + { + if (_dictionary == null) throw new InvalidOperationException(); + + return Add(key, _dictionary[key]); + } // Add + + public void Add(IList values) + { + if (_dictionary == null) throw new InvalidOperationException(); + + var add = new object[values.Count]; + for (var index = 0; index < values.Count; index++) + { + var value = values[index]; + add[index] = new KeyValuePair(value, _dictionary[value]); + } // for + AddItems(add); + } // Add + + public List GetListValues() + { + return (from item in _listBox.Items.Cast>() + select item.Key).ToList(); + } // GetListValues + + [PublicAPI] + public List GetListKeys() + { + return (from item in _listBox.Items.Cast>() + select item.Value).ToList(); + } // GetListValues + + [PublicAPI] + public IList> GetListItems() + { + return (from item in _listBox.Items.Cast>() + select item).ToList(); + } // GetListItems + + public void RemoveSelection() + { + if (IsReadOnly) return; + + var index = _listBox.SelectedIndex; + if (index < 0) throw new InvalidOperationException(); + + _listBox.Items.RemoveAt(index); + + if (index >= _listBox.Items.Count) index -= 1; + _listBox.SelectedIndex = index; + } // RemoveSelection + + public void MoveSelectionUp() + { + if (IsReadOnly) return; + + var index = _listBox.SelectedIndex; + if (index < 0) throw new InvalidOperationException(); + + var upItem = _listBox.Items[index - 1]; + var current = _listBox.Items[index]; + + _listBox.Items[index - 1] = current; + _listBox.Items[index] = upItem; + + _listBox.SelectedIndex = index - 1; + } // MoveUp + + public void MoveSelectionDown() + { + if (IsReadOnly) return; + + var index = _listBox.SelectedIndex; + if ((index + 1) >= _listBox.Items.Count) throw new InvalidOperationException(); + + var current = _listBox.Items[index]; + var downItem = _listBox.Items[index + 1]; + + _listBox.Items[index + 1] = current; + _listBox.Items[index] = downItem; + + _listBox.SelectedIndex = index + 1; + } // MoveDown + + private void ListBox_SelectedIndexChanged(object sender, EventArgs e) + { + var index = _listBox.SelectedIndex; + _removeControl.Enabled = (index >= 0) && (_listBox.Items.Count > 0) && (!IsReadOnly); + _upControl.Enabled = (index > 0) && (_listBox.Items.Count > 1) && (!IsReadOnly); + _downControl.Enabled = ((index + 1) < _listBox.Items.Count) && (!IsReadOnly); + } // ListBox_SelectedIndexChanged + + private void AddItems(object[] items) + { + var index = _listBox.SelectedIndex; + _listBox.Items.AddRange(items); + _listBox.SelectedIndex = index; + } // AddItems + } // class ListItemsManager +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListViewColumnItemComparer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListViewColumnItemComparer.cs new file mode 100644 index 00000000..b3bdb1c7 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListViewColumnItemComparer.cs @@ -0,0 +1,52 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + public class ListViewColumnItemComparer : IComparer + { + private readonly int _columnIndex; + private readonly int _resultSign; + + public ListViewColumnItemComparer(int columnIndex, bool descending) + { + _columnIndex = columnIndex; + _resultSign = descending ? -1 : 1; + } // ListViewColumnItemSorter + + public int Compare(object x, object y) + { + var item1 = x as ListViewItem; + var item2 = y as ListViewItem; + + if (Equals(item1, item2)) return 0; + + var compare = _resultSign * string.Compare(GetSafeText(item1, _columnIndex), GetSafeText(item2, _columnIndex)); + if ((compare == 0) && (_columnIndex > 0)) + { + compare = string.Compare(item1.SubItems[0].Text, item2.SubItems[0].Text); + } // if + + return compare; + } // Compare + + private static string GetSafeText(ListViewItem item, int subItemIndex) + { + if (subItemIndex >= item.SubItems.Count) return null; + return item.SubItems[subItemIndex].Text; + } // GetSafeText + } // class ListViewColumnItemComparer +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListViewSortable.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListViewSortable.cs new file mode 100644 index 00000000..3966ac25 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/ListViewSortable.cs @@ -0,0 +1,277 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; + +namespace IpTviewr.UiServices.Common.Controls +{ + [ToolboxBitmap(typeof(ListView))] + public class ListViewSortable : ListView + { + public enum EllipsisStyle + { + Default, + None, + Path, + End + } // enum EllipsisStyle + + public ListViewSortable() + { + SelfSorting = true; + IsDoubleBuffered = true; + CurrentSortColumn = -1; + HeaderCustomTextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + } // constructor + + public event EventHandler AfterSorting; + + public bool IsDoubleBuffered + { + get => base.DoubleBuffered; + set => base.DoubleBuffered = value; + } // IsDoubleBuffered + + + [DefaultValue(false)] + public bool HeaderUsesCustomFont + { + get; + set; + } // HeaderUsesCustomFont + + public Font HeaderCustomFont + { + get; + set; + } // HeaderCustomFont + + [DefaultValue(false)] + public bool HeaderUsesCustomForeColor + { + get; + set; + } // HeaderUsesCustomForeColor + + public Color HeaderCustomForeColor + { + get; + set; + } // HeaderCustomForeColor + + [DefaultValue(false)] + public bool HeaderUsesCustomTextAlignment + { + get; + set; + } // HeaderUsesCustomTextAlignment + + [DefaultValue(System.Drawing.ContentAlignment.MiddleLeft)] + public System.Drawing.ContentAlignment HeaderCustomTextAlignment + { + get; + set; + } // HeaderCustomTextAlignment + + [DefaultValue(false)] + public bool HeaderCustomWordBreak + { + get; + set; + } // HeaderCustomWordBreak + + [DefaultValue(EllipsisStyle.Default)] + public EllipsisStyle HeaderCustomEllipsis + { + get; + set; + } // HeaderCustomEllipsis + + [DefaultValue(true)] + public bool SelfSorting + { + get; + set; + } // SelfSorting + + public int CurrentSortColumn + { + get; + private set; + } // CurrentSortColumn + + public bool CurrentSortIsDescending + { + get; + private set; + } // CurrentSortIsDescending + + /// + /// Sorts the list + /// + /// Column to sort + /// null = toggle current column sort order (ascending->descending; descending->ascending); true = sort ascending; false = sort descending + public void Sort(int sortColumnIndex, bool? sortAscending) + { + bool ascending; + + if (sortColumnIndex >= Columns.Count) throw new ArgumentOutOfRangeException("columnIndex"); + + if (sortColumnIndex < 0) + { + CurrentSortColumn = -1; + CurrentSortIsDescending = false; + ListViewItemSorter = null; + } + else + { + if (!sortAscending.HasValue) + { + ascending = true; + if (sortColumnIndex == CurrentSortColumn) + { + ascending = CurrentSortIsDescending; + } // if + } + else + { + ascending = sortAscending.Value; + } // if-else + + CurrentSortColumn = sortColumnIndex; + CurrentSortIsDescending = !ascending; + + if (SelfSorting) + { + ListViewItemSorter = new ListViewColumnItemComparer(CurrentSortColumn, CurrentSortIsDescending); + } // if + } // if-else + + // force redraw to update the "arrow" on the header + RedrawHeader(); + + AfterSorting?.Invoke(this, EventArgs.Empty); + } // Sort + + protected override void OnColumnClick(ColumnClickEventArgs e) + { + bool ascending; + + base.OnColumnClick(e); + if (!SelfSorting) return; + + ascending = (CurrentSortColumn == e.Column)? CurrentSortIsDescending: true; + Sort(e.Column, ascending); + } // OnColumnClick + + protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e) + { + TextFormatFlags format; + + var style = e.State switch + { + // render background + ListViewItemStates.Hot => VisualStyleElement.Header.Item.Hot, + ListViewItemStates.Selected => VisualStyleElement.Header.Item.Pressed, + _ => VisualStyleElement.Header.Item.Normal + }; + + var renderer = new VisualStyleRenderer(style); + renderer.DrawBackground(e.Graphics, e.Bounds); + + // build text style + if (HeaderUsesCustomTextAlignment) + { + format = HeaderCustomTextAlignment switch + { + System.Drawing.ContentAlignment.TopLeft => TextFormatFlags.Left | TextFormatFlags.Top, + System.Drawing.ContentAlignment.TopCenter => TextFormatFlags.HorizontalCenter | TextFormatFlags.Top, + System.Drawing.ContentAlignment.TopRight => TextFormatFlags.Right | TextFormatFlags.Top, + System.Drawing.ContentAlignment.MiddleLeft => TextFormatFlags.Left | TextFormatFlags.VerticalCenter, + System.Drawing.ContentAlignment.MiddleCenter => TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter, + System.Drawing.ContentAlignment.MiddleRight => TextFormatFlags.Right | TextFormatFlags.VerticalCenter, + System.Drawing.ContentAlignment.BottomLeft => TextFormatFlags.Left | TextFormatFlags.Bottom, + System.Drawing.ContentAlignment.BottomCenter => TextFormatFlags.HorizontalCenter | TextFormatFlags.Bottom, + System.Drawing.ContentAlignment.BottomRight => TextFormatFlags.Right | TextFormatFlags.Bottom, + _ => TextFormatFlags.Default, + }; + switch (HeaderCustomEllipsis) + { + case EllipsisStyle.None: break; + case EllipsisStyle.End: format |= TextFormatFlags.EndEllipsis; break; + case EllipsisStyle.Path: format |= TextFormatFlags.PathEllipsis; break; + default: + format |= TextFormatFlags.WordEllipsis; break; + } // switch + + format |= HeaderCustomWordBreak ? TextFormatFlags.WordBreak : TextFormatFlags.SingleLine; + } + else + { + var textAlign = e.Header.TextAlign; + format = (textAlign == HorizontalAlignment.Left) ? TextFormatFlags.Left : ((textAlign == HorizontalAlignment.Center) ? TextFormatFlags.HorizontalCenter : TextFormatFlags.Right); + format |= TextFormatFlags.WordEllipsis; + format |= TextFormatFlags.VerticalCenter; + format |= TextFormatFlags.SingleLine; + } // if-else + + // select text drawing attributes + var font = HeaderUsesCustomFont ? HeaderCustomFont : e.Font; + var foreColor = HeaderUsesCustomForeColor ? HeaderCustomForeColor : e.ForeColor; + + // measure sort arrow size + style = (CurrentSortIsDescending) ? VisualStyleElement.Header.SortArrow.SortedUp : VisualStyleElement.Header.SortArrow.SortedDown; + renderer = new VisualStyleRenderer(style); + var arrowSize = renderer.GetPartSize(e.Graphics, ThemeSizeType.True); + var bounds = new Rectangle(e.Bounds.Left, e.Bounds.Top, e.Bounds.Width - arrowSize.Width - 3, e.Bounds.Height); + + // render text + TextRenderer.DrawText(e.Graphics, e.Header.Text, font, bounds, foreColor, format); + + // render sort arrow + if (e.ColumnIndex == CurrentSortColumn) + { + renderer.DrawBackground(e.Graphics, + new Rectangle(e.Bounds.Left + bounds.Width, + e.Bounds.Top, + arrowSize.Width, + e.Bounds.Height)); + } // if + } // OnDrawColumnHeader + + protected override void OnDrawItem(DrawListViewItemEventArgs e) + { + e.DrawDefault = true; + base.OnDrawItem(e); + } // OnDrawItem + + protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) + { + e.DrawDefault = true; + base.OnDrawSubItem(e); + } // OnDrawSubItem + + protected void RedrawHeader() + { + BeginUpdate(); + var old = HeaderStyle; + HeaderStyle = ColumnHeaderStyle.None; + HeaderStyle = old; + EndUpdate(); + } // RedrawHeader + } // ListViewSortable +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PictureBoxEx.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PictureBoxEx.cs new file mode 100644 index 00000000..693532a0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PictureBoxEx.cs @@ -0,0 +1,68 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + [ToolboxBitmap(typeof(PictureBox))] + public class PictureBoxEx : PictureBox + { + public static Bitmap ToGreyscale(Image original) + { + // create the gray scale ColorMatrix + var colorMatrix = new ColorMatrix(new[] + { + new[] {.3f, .3f, .3f, 0, 0}, + new[] {.59f, .59f, .59f, 0, 0}, + new[] {.11f, .11f, .11f, 0, 0}, + new float[] {0, 0, 0, 1, 0}, + new float[] {0, 0, 0, 0, 1} + }); + + // set the color matrix to an image attributes object + var attributes = new ImageAttributes(); + attributes.SetColorMatrix(colorMatrix); + + // create a new bitmap with the same size as the original; then, + // create a Graphics from it + var greyscaleBitmap = new Bitmap(original.Width, original.Height); + using (var g = Graphics.FromImage(greyscaleBitmap)) + { + // copy the original image to the new image (by means of the Graphics) using the color matrix + g.DrawImage(original, + new Rectangle(0, 0, original.Width, original.Height), + 0, 0, original.Width, original.Height, + GraphicsUnit.Pixel, attributes); + } // using + + return greyscaleBitmap; + } // ToGreyscale + + public void SetImage(Image image) + { + Image?.Dispose(); + Image = image; + } // SetImage + + protected override void OnPaint(PaintEventArgs pe) + { + pe.Graphics.CompositingQuality = CompositingQuality.HighQuality; + pe.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + base.OnPaint(pe); + } // OnPaint + } // class PictureBoxEx +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.Designer.cs new file mode 100644 index 00000000..22e741ad --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.Designer.cs @@ -0,0 +1,154 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class PropertiesViewer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PropertiesViewer)); + this.ColumnProperty = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.ColumnValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuList = new System.Windows.Forms.ContextMenuStrip(this.components); + this.contextMenuListCopyValue = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuListCopyName = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuListCopyRow = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.contextMenuListCopyAll = new System.Windows.Forms.ToolStripMenuItem(); + this.listViewProperties = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); + this.contextMenuList.SuspendLayout(); + this.SuspendLayout(); + // + // ColumnProperty + // + resources.ApplyResources(this.ColumnProperty, "ColumnProperty"); + // + // ColumnValue + // + resources.ApplyResources(this.ColumnValue, "ColumnValue"); + // + // contextMenuList + // + this.contextMenuList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contextMenuListCopyValue, + this.contextMenuListCopyName, + this.contextMenuListCopyRow, + this.toolStripSeparator1, + this.contextMenuListCopyAll}); + this.contextMenuList.Name = "contextMenu"; + resources.ApplyResources(this.contextMenuList, "contextMenuList"); + this.contextMenuList.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuList_Opening); + // + // contextMenuListCopyValue + // + this.contextMenuListCopyValue.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Copy_Clip_16x16; + this.contextMenuListCopyValue.Name = "contextMenuListCopyValue"; + resources.ApplyResources(this.contextMenuListCopyValue, "contextMenuListCopyValue"); + this.contextMenuListCopyValue.Click += new System.EventHandler(this.contextMenuListCopyValue_Click); + // + // contextMenuListCopyName + // + this.contextMenuListCopyName.Name = "contextMenuListCopyName"; + resources.ApplyResources(this.contextMenuListCopyName, "contextMenuListCopyName"); + this.contextMenuListCopyName.Click += new System.EventHandler(this.contextMenuListCopyName_Click); + // + // contextMenuListCopyRow + // + this.contextMenuListCopyRow.Name = "contextMenuListCopyRow"; + resources.ApplyResources(this.contextMenuListCopyRow, "contextMenuListCopyRow"); + this.contextMenuListCopyRow.Click += new System.EventHandler(this.contextMenuListCopyRow_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + // + // contextMenuListCopyAll + // + this.contextMenuListCopyAll.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Copy_Table; + this.contextMenuListCopyAll.Name = "contextMenuListCopyAll"; + resources.ApplyResources(this.contextMenuListCopyAll, "contextMenuListCopyAll"); + this.contextMenuListCopyAll.Click += new System.EventHandler(this.contextMenuListCopyAll_Click); + // + // listViewProperties + // + this.listViewProperties.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.ColumnProperty, + this.ColumnValue}); + this.listViewProperties.ContextMenuStrip = this.contextMenuList; + resources.ApplyResources(this.listViewProperties, "listViewProperties"); + this.listViewProperties.FullRowSelect = true; + this.listViewProperties.GridLines = true; + this.listViewProperties.HeaderCustomFont = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listViewProperties.HeaderCustomForeColor = System.Drawing.Color.Empty; + this.listViewProperties.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewProperties.HeaderUsesCustomFont = true; + this.listViewProperties.HideSelection = false; + this.listViewProperties.IsDoubleBuffered = true; + this.listViewProperties.MultiSelect = false; + this.listViewProperties.Name = "listViewProperties"; + this.listViewProperties.OwnerDraw = true; + this.listViewProperties.UseCompatibleStateImageBehavior = false; + this.listViewProperties.View = System.Windows.Forms.View.Details; + this.listViewProperties.SelectedIndexChanged += new System.EventHandler(this.listViewProperties_SelectedIndexChanged); + // + // PropertiesViewer + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.listViewProperties); + this.Name = "PropertiesViewer"; + this.contextMenuList.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private IpTviewr.UiServices.Common.Controls.ListViewSortable listViewProperties; + private System.Windows.Forms.ContextMenuStrip contextMenuList; + private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyValue; + private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyName; + private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyRow; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyAll; + private System.Windows.Forms.ColumnHeader ColumnProperty; + private System.Windows.Forms.ColumnHeader ColumnValue; + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.cs new file mode 100644 index 00000000..25c01424 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.cs @@ -0,0 +1,165 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using IpTviewr.UiServices.Common.Controls; +using Property = System.Collections.Generic.KeyValuePair; + +namespace IpTviewr.UiServices.Common.Forms +{ + [DefaultEvent(nameof(PropertySelected))] + + public partial class PropertiesViewer : CommonBaseUserControl + { + private ICollection _properties; + private int _propertyColumnDefaultWidth; + private int _valueColumnDefaultWidth; + + public PropertiesViewer() + { + InitializeComponent(); + _propertyColumnDefaultWidth = ColumnProperty.Width; + _valueColumnDefaultWidth = ColumnValue.Width; + } // constructor + + public event EventHandler PropertySelected; + + [DefaultValue(null)] + public ICollection Properties + { + get => _properties; + set + { + if (ReferenceEquals(_properties, value)) return; + + _properties = value; + listViewProperties.BeginUpdate(); + listViewProperties.Items.Clear(); + if (value != null) + { + listViewProperties.Items.AddRange(GetItems()); + if (AutoResizeColumns) + { + ColumnProperty.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); + if (ColumnProperty.Width < _propertyColumnDefaultWidth) ColumnProperty.Width = _propertyColumnDefaultWidth; + + ColumnValue.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); + if (ColumnValue.Width < _valueColumnDefaultWidth) ColumnValue.Width = _valueColumnDefaultWidth; + } // if + } + else + { + ColumnProperty.Width = _propertyColumnDefaultWidth; + ColumnValue.Width = _valueColumnDefaultWidth; + } // if-else + listViewProperties.EndUpdate(); + } // set + } // Properties + + [DefaultValue(false)] public bool AutoResizeColumns { get; set; } + + private void listViewProperties_SelectedIndexChanged(object sender, EventArgs e) + { + var item = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; + if (item == null) return; + + PropertySelected?.Invoke(this, new PropertySelectedEventArgs + { + Name = item.Text, + Value = item.UseItemStyleForSubItems? item.SubItems[1].Text : null, + Index = item.Index + }); + } // listViewProperties_SelectedIndexChanged + + private ListViewItem[] GetItems() + { + var items = new ListViewItem[_properties.Count]; + + var index = 0; + foreach (var property in _properties) + { + var item = new ListViewItem(property.Key ?? Common.Properties.PropertiesDialog.NameNull); + if (property.Value != null) + { + item.SubItems.Add(property.Value); + } + else + { + item.SubItems.Add(Common.Properties.PropertiesDialog.ValueNull); + item.SubItems[1].ForeColor = SystemColors.InfoText; + item.SubItems[1].BackColor = SystemColors.Info; + item.UseItemStyleForSubItems = false; + } // if-else + + items[index++] = item; + } // foreach; + + return items; + } // GetItem + + #region List context menu + + private void contextMenuList_Opening(object sender, CancelEventArgs e) + { + var selection = (listViewProperties.SelectedItems.Count > 0); + contextMenuListCopyValue.Enabled = selection; + contextMenuListCopyName.Enabled = selection; + contextMenuListCopyRow.Enabled = selection; + } // contextMenuList_Opening + + private void contextMenuListCopyValue_Click(object sender, EventArgs e) + { + var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; + if (selectedRow == null) return; + + Clipboard.SetText(selectedRow.SubItems[1].Text, TextDataFormat.UnicodeText); + } // contextMenuListCopyValue_Click + + private void contextMenuListCopyName_Click(object sender, EventArgs e) + { + var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; + if (selectedRow == null) return; + + Clipboard.SetText(selectedRow.SubItems[0].Text, TextDataFormat.UnicodeText); + } // contextMenuListCopyName_Click + + private void contextMenuListCopyRow_Click(object sender, EventArgs e) + { + var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; + if (selectedRow == null) return; + + Clipboard.SetText($"{selectedRow.SubItems[0].Text}\t{selectedRow.SubItems[1].Text}", TextDataFormat.UnicodeText); + } // contextMenuListCopyRow_Click + + private void contextMenuListCopyAll_Click(object sender, EventArgs e) + { + var buffer = new StringBuilder(); + foreach (ListViewItem item in listViewProperties.Items) + { + buffer.AppendFormat("{0}\t{1}", item.SubItems[0].Text, item.SubItems[1].Text); + buffer.AppendLine(); + } // foreach item + + Clipboard.SetText(buffer.ToString(), TextDataFormat.UnicodeText); + } // contextMenuListCopyAll_Click + + #endregion + } // class PropertiesDlg +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.es.resx new file mode 100644 index 00000000..33665bce --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.es.resx @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Propiedad + + + Valor + + + + 154, 22 + + + Copiar &valor + + + 154, 22 + + + Copiar &nombre + + + 154, 22 + + + Copiar &fila + + + 154, 22 + + + Copiar &todo + + + 155, 98 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.resx new file mode 100644 index 00000000..949345c8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertiesViewer.resx @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Property + + + + 100 + + + Value + + + 175 + + + 17, 17 + + + + 183, 22 + + + Copy &value + + + 183, 22 + + + Copy &property name + + + 183, 22 + + + Copy &row + + + 180, 6 + + + 183, 22 + + + Copy &all + + + 184, 98 + + + contextMenuList + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Fill + + + 0, 0 + + + 300, 200 + + + 0 + + + listViewProperties + + + IpTviewr.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 1 + + + True + + + 6, 13 + + + 300, 200 + + + ColumnProperty + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ColumnValue + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + contextMenuListCopyValue + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + contextMenuListCopyName + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + contextMenuListCopyRow + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + contextMenuListCopyAll + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + PropertiesViewer + + + IpTviewr.UiServices.Common.Controls.CommonBaseUserControl, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertySelectedEventArgs.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertySelectedEventArgs.cs new file mode 100644 index 00000000..44e825ed --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/PropertySelectedEventArgs.cs @@ -0,0 +1,26 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.Common.Controls +{ + public class PropertySelectedEventArgs: EventArgs + { + public string Name { get; set; } + + public string Value { get; set; } + + public int Index { get; set; } + } // PropertySelectedEventArgs +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.Designer.cs new file mode 100644 index 00000000..5d224cc4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.Designer.cs @@ -0,0 +1,92 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Drawing; + +namespace IpTviewr.UiServices.Common.Controls +{ + partial class StringListEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StringListEditor)); + this.groupBoxData.SuspendLayout(); + this.SuspendLayout(); + // + // buttonAdd + // + this.buttonAdd.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonAdd.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Add_16xM; + this.toolTip.SetToolTip(this.buttonAdd, resources.GetString("buttonAdd.ToolTip")); + // + // buttonMoveDown + // + this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonMoveDown, resources.GetString("buttonMoveDown.ToolTip")); + // + // buttonMoveUp + // + this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonMoveUp, resources.GetString("buttonMoveUp.ToolTip")); + // + // buttonRemove + // + this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonRemove, resources.GetString("buttonRemove.ToolTip")); + // + // listItems + // + resources.ApplyResources(this.listItems, "listItems"); + // + // buttonEdit + // + this.buttonEdit.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonEdit.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Edit_16x16; + this.toolTip.SetToolTip(this.buttonEdit, resources.GetString("buttonEdit.ToolTip")); + // + // StringListEditor + // + resources.ApplyResources(this, "$this"); + this.Name = "StringListEditor"; + this.groupBoxData.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + } // class ArgumentsEditor +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.cs new file mode 100644 index 00000000..3d8d6391 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.cs @@ -0,0 +1,113 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Common.Properties; +using System; +//using System.Collections.Specialized; + +namespace IpTviewr.UiServices.Common.Controls +{ + public partial class StringListEditor : ListEditor + { + private readonly ListItemsManager _manager; + + // TODO: implement + // public event NotifyCollectionChangedEventHandler ItemsChanged; + + public StringListEditor() + { + InitializeComponent(); + _manager = new ListItemsManager(listItems, buttonRemove, buttonMoveUp, buttonMoveDown); + } // constructor + + public string[] Items + { + get + { + var arguments = new string[listItems.Items.Count]; + for (var index = 0; index < arguments.Length; index++) + { + arguments[index] = listItems.Items[index].ToString(); + } // for + + return arguments; + } + set + { + if (value != null) + { + listItems.Items.AddRange(value); + } + else + { + listItems.Items.Clear(); + } // if-else + } // set + } // Arguments + + protected override void ButtonEdit_Click(object sender, EventArgs e) + { + SafeCall(() => + { + if (!EditItem(listItems.SelectedItem.ToString(), out string newItem)) return; + var index = listItems.SelectedIndex; + listItems.Items[index] = newItem; + IsDataChanged = true; + }); + } // ButtonEdit_Click + + protected override void ButtonRemove_Click(object sender, EventArgs e) + { + _manager.RemoveSelection(); + IsDataChanged = true; + } // ButtonRemove_Click + + protected override void ButtonAdd_Click(object sender, EventArgs e) + { + SafeCall(() => + { + if (!GetNewItem(out var newItem)) return; + listItems.SelectedIndex = listItems.Items.Add(newItem); + IsDataChanged = true; + }); + } // ButtonAdd_Click + + protected override void ButtonMoveUp_Click(object sender, EventArgs e) + { + _manager.MoveSelectionUp(); + IsDataChanged = true; + } // ButtonMoveUp_Click + + protected override void ButtonMoveDown_Click(object sender, EventArgs e) + { + _manager.MoveSelectionDown(); + IsDataChanged = true; + } // ButtonMoveDown_Click + + protected virtual bool GetNewItem(out string newItem) + { + newItem = null; + return InputBox.ShowDialog(ParentForm, CommonForm.StringListEditorNewItem, null, ref newItem); + } // GetNewItem + + protected virtual bool EditItem(string item, out string newItem) + { + newItem = null; + if (!InputBox.ShowDialog(ParentForm, CommonForm.StringListEditorEditItem, null, ref item)) return false; + + newItem = item; + return true; + } // EditItem + } // class ArgumentsEditor +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.es.resx new file mode 100644 index 00000000..7f912f2f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.es.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Añadir un nuevo argumento al final de la lista + + + Bajar una posición el elemento seleccionado + + + Subir una posición el elemento seleccionado + + + Eliminar el elemento seleccionado + + + Editar el elemento seleccionado + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.resx new file mode 100644 index 00000000..8734f110 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/StringListEditor.resx @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 17, 17 + + + Add new item at end of list + + + buttonAdd + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 0 + + + Move selected item down + + + buttonMoveDown + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 1 + + + Move selected item up + + + buttonMoveUp + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 2 + + + Delete selected item + + + buttonRemove + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 3 + + + + Lucida Console, 9pt + + + + 12 + + + listItems + + + System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 4 + + + Edit selected item + + + buttonEdit + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 5 + + + True + + + 6, 13 + + + toolTip + + + System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + StringListEditor + + + IpTviewr.UiServices.Common.Controls.ListEditor, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TabControlEx.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TabControlEx.cs new file mode 100644 index 00000000..408bef7f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TabControlEx.cs @@ -0,0 +1,54 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Controls +{ + [ToolboxBitmap(typeof(TabControl))] + public sealed class TabControlEx: TabControl + { + private bool _fieldShowTabs; + private const int TcmAdjustrect = 0x1328; + + [DefaultValue(false)] + public bool ShowTabs + { + get => _fieldShowTabs; + set + { + _fieldShowTabs = value; + RecreateHandle(); + } // set + } // ShowTabs + + protected override void WndProc(ref Message m) + { + // Hide tabs by trapping the TCM_ADJUSTRECT message + if (m.Msg == TcmAdjustrect && !DesignMode) + { + if (!ShowTabs) + { + m.Result = (IntPtr)1; + } // if + } + else + { + base.WndProc(ref m); + } // if-else + } // WndProc + } // class +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs new file mode 100644 index 00000000..ba7c0dc8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs @@ -0,0 +1,187 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Controls +{ + partial class TimeSpanUpDown + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.labelTimeSpanS = new System.Windows.Forms.Label(); + this.numericTimeSpanSeconds = new System.Windows.Forms.NumericUpDown(); + this.labelTimeSpanM = new System.Windows.Forms.Label(); + this.numericTimeSpanMinutes = new System.Windows.Forms.NumericUpDown(); + this.labelTimeSpanH = new System.Windows.Forms.Label(); + this.numericTimeSpanHours = new System.Windows.Forms.NumericUpDown(); + this.labelTimeSpanD = new System.Windows.Forms.Label(); + this.numericTimeSpanDays = new System.Windows.Forms.NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanSeconds)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanMinutes)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanHours)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanDays)).BeginInit(); + this.SuspendLayout(); + // + // labelTimeSpanS + // + this.labelTimeSpanS.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelTimeSpanS.Location = new System.Drawing.Point(228, 3); + this.labelTimeSpanS.Name = "labelTimeSpanS"; + this.labelTimeSpanS.Size = new System.Drawing.Size(23, 13); + this.labelTimeSpanS.TabIndex = 7; + this.labelTimeSpanS.Text = "mm"; + // + // numericTimeSpanSeconds + // + this.numericTimeSpanSeconds.CausesValidation = false; + this.numericTimeSpanSeconds.Location = new System.Drawing.Point(192, 0); + this.numericTimeSpanSeconds.Maximum = new decimal(new int[] { + 1000000, + 0, + 0, + 0}); + this.numericTimeSpanSeconds.Name = "numericTimeSpanSeconds"; + this.numericTimeSpanSeconds.Size = new System.Drawing.Size(35, 20); + this.numericTimeSpanSeconds.TabIndex = 6; + this.numericTimeSpanSeconds.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericTimeSpanSeconds.ValueChanged += new System.EventHandler(this.numericTimeSpanSeconds_ValueChanged); + // + // labelTimeSpanM + // + this.labelTimeSpanM.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelTimeSpanM.Location = new System.Drawing.Point(168, 3); + this.labelTimeSpanM.Name = "labelTimeSpanM"; + this.labelTimeSpanM.Size = new System.Drawing.Size(23, 13); + this.labelTimeSpanM.TabIndex = 5; + this.labelTimeSpanM.Text = "mm"; + // + // numericTimeSpanMinutes + // + this.numericTimeSpanMinutes.CausesValidation = false; + this.numericTimeSpanMinutes.Location = new System.Drawing.Point(132, 0); + this.numericTimeSpanMinutes.Maximum = new decimal(new int[] { + 1000000, + 0, + 0, + 0}); + this.numericTimeSpanMinutes.Name = "numericTimeSpanMinutes"; + this.numericTimeSpanMinutes.Size = new System.Drawing.Size(35, 20); + this.numericTimeSpanMinutes.TabIndex = 4; + this.numericTimeSpanMinutes.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericTimeSpanMinutes.ValueChanged += new System.EventHandler(this.numericTimeSpanMinutes_ValueChanged); + // + // labelTimeSpanH + // + this.labelTimeSpanH.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelTimeSpanH.Location = new System.Drawing.Point(107, 3); + this.labelTimeSpanH.Name = "labelTimeSpanH"; + this.labelTimeSpanH.Size = new System.Drawing.Size(23, 13); + this.labelTimeSpanH.TabIndex = 3; + this.labelTimeSpanH.Text = "mm"; + // + // numericTimeSpanHours + // + this.numericTimeSpanHours.CausesValidation = false; + this.numericTimeSpanHours.Location = new System.Drawing.Point(66, 0); + this.numericTimeSpanHours.Maximum = new decimal(new int[] { + 1000000, + 0, + 0, + 0}); + this.numericTimeSpanHours.Name = "numericTimeSpanHours"; + this.numericTimeSpanHours.Size = new System.Drawing.Size(40, 20); + this.numericTimeSpanHours.TabIndex = 2; + this.numericTimeSpanHours.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericTimeSpanHours.ValueChanged += new System.EventHandler(this.numericTimeSpanHours_ValueChanged); + // + // labelTimeSpanD + // + this.labelTimeSpanD.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.labelTimeSpanD.Location = new System.Drawing.Point(41, 2); + this.labelTimeSpanD.Name = "labelTimeSpanD"; + this.labelTimeSpanD.Size = new System.Drawing.Size(23, 13); + this.labelTimeSpanD.TabIndex = 1; + this.labelTimeSpanD.Text = "mm"; + // + // numericTimeSpanDays + // + this.numericTimeSpanDays.CausesValidation = false; + this.numericTimeSpanDays.Location = new System.Drawing.Point(0, 0); + this.numericTimeSpanDays.Maximum = new decimal(new int[] { + 999, + 0, + 0, + 0}); + this.numericTimeSpanDays.Name = "numericTimeSpanDays"; + this.numericTimeSpanDays.Size = new System.Drawing.Size(40, 20); + this.numericTimeSpanDays.TabIndex = 0; + this.numericTimeSpanDays.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericTimeSpanDays.ValueChanged += new System.EventHandler(this.numericTimeSpanDays_ValueChanged); + // + // TimeSpanUpDown + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.labelTimeSpanD); + this.Controls.Add(this.numericTimeSpanDays); + this.Controls.Add(this.labelTimeSpanS); + this.Controls.Add(this.numericTimeSpanSeconds); + this.Controls.Add(this.labelTimeSpanM); + this.Controls.Add(this.numericTimeSpanMinutes); + this.Controls.Add(this.labelTimeSpanH); + this.Controls.Add(this.numericTimeSpanHours); + this.Name = "TimeSpanUpDown"; + this.Size = new System.Drawing.Size(253, 20); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanSeconds)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanMinutes)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanHours)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanDays)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label labelTimeSpanS; + private System.Windows.Forms.NumericUpDown numericTimeSpanSeconds; + private System.Windows.Forms.Label labelTimeSpanM; + private System.Windows.Forms.NumericUpDown numericTimeSpanMinutes; + private System.Windows.Forms.Label labelTimeSpanH; + private System.Windows.Forms.NumericUpDown numericTimeSpanHours; + private System.Windows.Forms.Label labelTimeSpanD; + private System.Windows.Forms.NumericUpDown numericTimeSpanDays; + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TimeSpanUpDown.cs similarity index 76% rename from 1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TimeSpanUpDown.cs index aa2040db..43007509 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TimeSpanUpDown.cs @@ -1,13 +1,19 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.ComponentModel; using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.UiServices.Common.Controls @@ -15,17 +21,15 @@ namespace IpTviewr.UiServices.Common.Controls [ToolboxBitmap(typeof(NumericUpDown))] public partial class TimeSpanUpDown : UserControl { - private int SupressValueChangedEvent; - private TimeSpan fieldValue; + private int _supressValueChangedEvent; + private TimeSpan _fieldValue; public event EventHandler ValueChanged; public int MaxDays { - get - { - return (int)numericTimeSpanDays.Maximum; - } // get + get => (int)numericTimeSpanDays.Maximum; + set { if (value < 0) throw new ArgumentOutOfRangeException(); @@ -48,31 +52,29 @@ public int MaxDays [DefaultValue(1)] public int DaysIncrement { - get { return (int)numericTimeSpanDays.Increment; } - set { numericTimeSpanDays.Increment = value; } + get => (int)numericTimeSpanDays.Increment; + set => numericTimeSpanDays.Increment = value; } // DaysIncrement [DefaultValue(1)] public int HoursIncrement { - get { return (int)numericTimeSpanHours.Increment; } - set { numericTimeSpanHours.Increment = value; } + get => (int)numericTimeSpanHours.Increment; + set => numericTimeSpanHours.Increment = value; } // HoursIncrement [DefaultValue(1)] public int MinutesIncrement { - get { return (int)numericTimeSpanMinutes.Increment; } - set { numericTimeSpanMinutes.Increment = value; } + get => (int)numericTimeSpanMinutes.Increment; + set => numericTimeSpanMinutes.Increment = value; } // MinutesIncrement [DefaultValue(false)] public bool SecondsAllowed { - get - { - return numericTimeSpanSeconds.Visible; - } // get + get => numericTimeSpanSeconds.Visible; +// get set { var current = numericTimeSpanSeconds.Visible; @@ -87,27 +89,25 @@ public bool SecondsAllowed [DefaultValue(1)] public int SecondsIncrement { - get { return (int)numericTimeSpanSeconds.Increment; } - set { numericTimeSpanSeconds.Increment = value; } + get => (int)numericTimeSpanSeconds.Increment; + set => numericTimeSpanSeconds.Increment = value; } // SecondsIncrement public TimeSpan Value { - get - { - return fieldValue; - } // get + get => _fieldValue; +// get set { if (value.TotalSeconds < 0) throw new ArgumentOutOfRangeException(); - SupressValueChangedEvent++; + _supressValueChangedEvent++; numericTimeSpanDays.Value = Math.Min(numericTimeSpanDays.Maximum, value.Days); numericTimeSpanHours.Value = Math.Min(numericTimeSpanHours.Maximum, value.Hours); numericTimeSpanMinutes.Value = value.Minutes; numericTimeSpanSeconds.Value = value.Seconds; - SupressValueChangedEvent--; - fieldValue = value; + _supressValueChangedEvent--; + _fieldValue = value; FireValueChanged(); } // set } // Value @@ -135,11 +135,11 @@ private void numericTimeSpanHours_ValueChanged(object sender, EventArgs e) var value = (int)numericTimeSpanHours.Value; if (value > 24) { - SupressValueChangedEvent++; + _supressValueChangedEvent++; numericTimeSpanHours.Value = value % 60; var days = numericTimeSpanDays.Value + value / 60; numericTimeSpanDays.Value = Math.Min(numericTimeSpanDays.Maximum, days); - SupressValueChangedEvent--; + _supressValueChangedEvent--; } // if UpdateValue(); @@ -151,10 +151,10 @@ private void numericTimeSpanMinutes_ValueChanged(object sender, EventArgs e) var value = (int)numericTimeSpanMinutes.Value; if (value > 59) { - SupressValueChangedEvent++; + _supressValueChangedEvent++; numericTimeSpanMinutes.Value = value % 60; numericTimeSpanHours.Value += value / 60; - SupressValueChangedEvent--; + _supressValueChangedEvent--; } // if UpdateValue(); @@ -166,10 +166,10 @@ private void numericTimeSpanSeconds_ValueChanged(object sender, EventArgs e) var value = (int)numericTimeSpanSeconds.Value; if (value > 59) { - SupressValueChangedEvent++; + _supressValueChangedEvent++; numericTimeSpanSeconds.Value = value % 60; numericTimeSpanMinutes.Value += value / 60; - SupressValueChangedEvent--; + _supressValueChangedEvent--; } // if UpdateValue(); @@ -204,13 +204,13 @@ private void RefreshLayout() private void FireValueChanged() { - if ((SupressValueChangedEvent > 0) || (ValueChanged == null)) return; + if ((_supressValueChangedEvent > 0) || (ValueChanged == null)) return; ValueChanged(this, EventArgs.Empty); } // FireValueChanged private void UpdateValue() { - fieldValue = new TimeSpan(numericTimeSpanDays.Visible ? (int)numericTimeSpanDays.Value : 0, + _fieldValue = new TimeSpan(numericTimeSpanDays.Visible ? (int)numericTimeSpanDays.Value : 0, (int)numericTimeSpanHours.Value, (int)numericTimeSpanMinutes.Value, SecondsAllowed ? (int)numericTimeSpanSeconds.Value : 0); diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TimeSpanUpDown.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Controls/TimeSpanUpDown.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.Designer.cs new file mode 100644 index 00000000..73d60305 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.Designer.cs @@ -0,0 +1,193 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class AboutBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); + this.okButton = new System.Windows.Forms.Button(); + this.logoPictureBox = new System.Windows.Forms.PictureBox(); + this.labelProductName = new System.Windows.Forms.TextBox(); + this.labelVersion = new System.Windows.Forms.TextBox(); + this.labelCopyright = new System.Windows.Forms.TextBox(); + this.labelCompanyName = new System.Windows.Forms.TextBox(); + this.textBoxDescription = new System.Windows.Forms.RichTextBox(); + this.linkLabelWebsite = new System.Windows.Forms.LinkLabel(); + this.labelEULA = new System.Windows.Forms.Label(); + this.labelAppName = new System.Windows.Forms.Label(); + this.labelAppVersion = new System.Windows.Forms.Label(); + this.linkLabelSourceCode = new System.Windows.Forms.LinkLabel(); + this.buttonZoom = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // okButton + // + resources.ApplyResources(this.okButton, "okButton"); + this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.okButton.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; + this.okButton.Name = "okButton"; + // + // logoPictureBox + // + this.logoPictureBox.Image = global::IpTviewr.UiServices.Common.Properties.Resources.DefaultAbout; + resources.ApplyResources(this.logoPictureBox, "logoPictureBox"); + this.logoPictureBox.Name = "logoPictureBox"; + this.logoPictureBox.TabStop = false; + // + // labelProductName + // + resources.ApplyResources(this.labelProductName, "labelProductName"); + this.labelProductName.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelProductName.Name = "labelProductName"; + this.labelProductName.ReadOnly = true; + // + // labelVersion + // + resources.ApplyResources(this.labelVersion, "labelVersion"); + this.labelVersion.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelVersion.Name = "labelVersion"; + this.labelVersion.ReadOnly = true; + // + // labelCopyright + // + resources.ApplyResources(this.labelCopyright, "labelCopyright"); + this.labelCopyright.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelCopyright.Name = "labelCopyright"; + this.labelCopyright.ReadOnly = true; + // + // labelCompanyName + // + resources.ApplyResources(this.labelCompanyName, "labelCompanyName"); + this.labelCompanyName.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.labelCompanyName.Name = "labelCompanyName"; + this.labelCompanyName.ReadOnly = true; + // + // textBoxDescription + // + resources.ApplyResources(this.textBoxDescription, "textBoxDescription"); + this.textBoxDescription.BackColor = System.Drawing.SystemColors.Window; + this.textBoxDescription.DetectUrls = false; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.ReadOnly = true; + // + // linkLabelWebsite + // + resources.ApplyResources(this.linkLabelWebsite, "linkLabelWebsite"); + this.linkLabelWebsite.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.linkLabelWebsite.Name = "linkLabelWebsite"; + this.linkLabelWebsite.TabStop = true; + this.linkLabelWebsite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelWebsite_LinkClicked); + // + // labelEULA + // + resources.ApplyResources(this.labelEULA, "labelEULA"); + this.labelEULA.Name = "labelEULA"; + // + // labelAppName + // + resources.ApplyResources(this.labelAppName, "labelAppName"); + this.labelAppName.Name = "labelAppName"; + // + // labelAppVersion + // + resources.ApplyResources(this.labelAppVersion, "labelAppVersion"); + this.labelAppVersion.Name = "labelAppVersion"; + // + // linkLabelSourceCode + // + resources.ApplyResources(this.linkLabelSourceCode, "linkLabelSourceCode"); + this.linkLabelSourceCode.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.linkLabelSourceCode.Name = "linkLabelSourceCode"; + this.linkLabelSourceCode.TabStop = true; + this.linkLabelSourceCode.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkLabelSourceCode_LinkClicked); + // + // buttonZoom + // + resources.ApplyResources(this.buttonZoom, "buttonZoom"); + this.buttonZoom.Name = "buttonZoom"; + this.buttonZoom.UseVisualStyleBackColor = true; + this.buttonZoom.Click += new System.EventHandler(this.buttonZoom_Click); + // + // AboutBox + // + this.AcceptButton = this.okButton; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.buttonZoom); + this.Controls.Add(this.linkLabelSourceCode); + this.Controls.Add(this.labelAppVersion); + this.Controls.Add(this.labelAppName); + this.Controls.Add(this.labelEULA); + this.Controls.Add(this.linkLabelWebsite); + this.Controls.Add(this.okButton); + this.Controls.Add(this.labelProductName); + this.Controls.Add(this.labelVersion); + this.Controls.Add(this.labelCopyright); + this.Controls.Add(this.labelCompanyName); + this.Controls.Add(this.textBoxDescription); + this.Controls.Add(this.logoPictureBox); + this.MinimizeBox = false; + this.Name = "AboutBox"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.PictureBox logoPictureBox; + private System.Windows.Forms.TextBox labelProductName; + private System.Windows.Forms.TextBox labelVersion; + private System.Windows.Forms.TextBox labelCopyright; + private System.Windows.Forms.TextBox labelCompanyName; + private System.Windows.Forms.RichTextBox textBoxDescription; + private System.Windows.Forms.LinkLabel linkLabelWebsite; + private System.Windows.Forms.Label labelEULA; + private System.Windows.Forms.Label labelAppName; + private System.Windows.Forms.Label labelAppVersion; + private System.Windows.Forms.LinkLabel linkLabelSourceCode; + private System.Windows.Forms.Button buttonZoom; + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.cs new file mode 100644 index 00000000..9268ecce --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.cs @@ -0,0 +1,181 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using IpTviewr.Common.Telemetry; +using System; +using System.Reflection; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class AboutBox : CommonBaseForm + { + public AboutBox() + { + InitializeComponent(); + } // constructor + + public AboutBoxApplicationData ApplicationData + { + get; + set; + } // ApplicationData + + protected override bool SendLoadEvent => false; + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + AppTelemetry.FormEvent(AppTelemetry.LoadEvent, this, Application.ProductName); + Text = string.Format(Text, Application.ProductName); + if (ApplicationData != null) + { + if (ApplicationData.LargeIcon != null) + { + logoPictureBox.Image?.Dispose(); + logoPictureBox.Image = ApplicationData.LargeIcon; + } // if + labelAppName.Text = $"{ApplicationData.Name}"; + labelAppVersion.Text = $"{ApplicationData.Version} - {ApplicationData.Status}"; + if (ApplicationData.LicenseTextRtf != null) + { + textBoxDescription.Rtf = ApplicationData.LicenseTextRtf; + } + else + { + textBoxDescription.Text = ApplicationData.LicenseText; + } // if-else + } + else + { + labelAppName.Text = AssemblyTitle; + labelAppVersion.Text = AssemblyVersion; + labelEULA.Visible = false; + textBoxDescription.Visible = false; + buttonZoom.Visible = false; + } // if-else + + labelProductName.Text = AssemblyProduct; + labelVersion.Text = string.Format(labelVersion.Text, AssemblyVersion); + labelCopyright.Text = AssemblyCopyright; + labelCompanyName.Text = AssemblyCompany; + } // AboutBox_Load + + private void buttonZoom_Click(object sender, EventArgs e) + { + if (ApplicationData.LicenseTextRtf != null) + { + HelpDialog.ShowRtfHelp(this, ApplicationData.LicenseTextRtf, labelEULA.Text, true); + } + else + { + HelpDialog.ShowPlainTextHelp(this, ApplicationData.LicenseText, labelEULA.Text, true); + } // if-else + } // buttonZoom_Click + + private void linkLabelWebsite_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenUrl(this, sender as LinkLabel); + } // linkLabelWebsite_LinkClicked + + private void LinkLabelSourceCode_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + OpenUrl(this, sender as LinkLabel); + } // LinkLabelSourceCode_LinkClicked + + private void OpenUrl(Form parent, LinkLabel link) + { + if (link == null) return; + + var uri = new UriBuilder(new Uri(link.Text)); + if (uri.Scheme == "http") uri.Scheme = "https"; + Launcher.OpenUrl(parent, uri.ToString(), HandleException, null); + } // OpenUrl + + #region Assembly Attribute Accessors + + public string AssemblyTitle + { + get + { + var attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); + if (attributes.Length > 0) + { + var titleAttribute = (AssemblyTitleAttribute)attributes[0]; + if (titleAttribute.Title != "") + { + return titleAttribute.Title; + } + } + return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase); + } + } + + public string AssemblyVersion => Assembly.GetCallingAssembly().GetName().Version.ToString(); + + public string AssemblyDescription + { + get + { + var attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyDescriptionAttribute)attributes[0]).Description; + } + } + + public string AssemblyProduct + { + get + { + var attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + + public string AssemblyCopyright + { + get + { + var attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + } + } + + public string AssemblyCompany + { + get + { + var attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyCompanyAttribute)attributes[0]).Company; + } + } + #endregion + } // class AboutBox +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.es.resx index bd6b6c50..496183ba 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.es.resx @@ -1,132 +1,132 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Aceptar - - - Versión {0} - - - Acuerdo de licencia de usuario final (ALUF): - - - Acerca de la aplicación {0} - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Aceptar + + + Versión {0} + + + Acuerdo de licencia de usuario final (ALUF): + + + Acerca de la aplicación {0} + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.resx similarity index 78% rename from 1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.resx index f14a4f7f..fa4fb6c9 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBox.resx @@ -112,23 +112,23 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Bottom, Right - + 342, 275 100, 25 - + 0 @@ -145,13 +145,13 @@ okButton - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 4 + 6 12, 12 @@ -169,13 +169,13 @@ logoPictureBox - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 10 + 12 Top, Left, Right @@ -199,13 +199,13 @@ labelProductName - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 5 + 7 Top, Left, Right @@ -232,13 +232,13 @@ labelVersion - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 6 + 8 Top, Left, Right @@ -262,13 +262,13 @@ labelCopyright - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 7 + 9 Top, Left, Right @@ -292,13 +292,13 @@ labelCompanyName - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 8 + 10 Top, Bottom, Left, Right @@ -325,46 +325,46 @@ textBoxDescription - System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 9 + 11 - + Bottom, Left - + True - + Segoe UI, 9pt, style=Bold - - 12, 280 + + 12, 272 - - 185, 15 + + 247, 15 - + 9 - - http://movistartv.codeplex.com + + https://www.alphacentaury.org/movistartv - - linkLabelCodeplex + + linkLabelWebsite - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - 3 + + 5 True @@ -388,13 +388,13 @@ labelEULA - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 2 + 4 Top, Left, Right @@ -424,13 +424,13 @@ labelAppName - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - 1 + 3 Top, Left, Right @@ -460,15 +460,85 @@ labelAppVersion - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this + 2 + + + Bottom, Left + + + True + + + Segoe UI, 9pt, style=Bold + + + NoControl + + + 12, 288 + + + 267, 15 + + + 15 + + + https://github.com/AlphaCentaury/MovistarTV + + + linkLabelSourceCode + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 + JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAABhElE + QVQ4T6WSu0oDQRSGpwwKXrBVO0GsFDttBB/AVrAQxSJPEBAMNiIIgkSJGgyKIFgEiTG+QRDBaCGKoFXA + LpvLJnvN7uz+zsziJjHBiFn4Ocxh/u+cOWfJ3v4RupEAvLznOiq4HmmJPuDh8elf8gHtPxeO68BxHFBq + w7Jt1Go1mKYJQ9ehaVpnAHUpAlsEgW2Cnh2C3l2C1fRiZ4DLxKtTh8JmlddSy9j8DOLY2EB/hAizqijN + AB5/6uIygfhdHJOpEUSNEEIfSxg4IFAUFdVqVdxpAjROPXp+g8xblplHcWqHMZMYx3CsD4OHRJgrFbkV + QG0qhsRbVFiLc8kphHMrmD4Zw9lzTLQ9FCPMXEG5XK4DXNcVB/5ewzSgal6Ls4kJLCTnkcneQ1G9nMwq + y8xcKpXqAD4wHvmaNDZhDki/psSlYrGIq+tbv21e+TtfB1AqDr+pIrO2ZdkzFwqQJEnkBYC/3bIs/0fR + dcNblaq0rVwoSMjnGwDdiLAFdKW2yb8L5AsadzBnUc46EgAAAABJRU5ErkJggg== + + + + 417, 118 + + + 25, 25 + + + 16 + + + buttonZoom + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 0 - + True diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBoxApplicationData.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBoxApplicationData.cs new file mode 100644 index 00000000..db5c32e8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/AboutBoxApplicationData.cs @@ -0,0 +1,56 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Drawing; + +namespace IpTviewr.UiServices.Common.Forms +{ + public class AboutBoxApplicationData + { + public Image LargeIcon + { + get; + set; + } // LargeIcon + + public string Name + { + get; + set; + } // Name + + public string Version + { + get; + set; + } // Version + + public string Status + { + get; + set; + } // Status + + public string LicenseText + { + get; + set; + } // LicenseText + + public string LicenseTextRtf + { + get; + set; + } // LicenseTextRtf + } // class AboutBoxApplicationData +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs new file mode 100644 index 00000000..686d9dff --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs @@ -0,0 +1,137 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class BackgroundWorkerDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (_worker != null) _worker.Dispose(); + + if (disposing && (components != null)) + { + components.Dispose(); + } // if + base.Dispose(disposing); + } // Dispose + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BackgroundWorkerDialog)); + this.pictureWaitIcon = new System.Windows.Forms.PictureBox(); + this.labelTaskDescription = new System.Windows.Forms.Label(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.labelProgressText = new System.Windows.Forms.Label(); + this.buttonClose = new System.Windows.Forms.Button(); + this.buttonRequestCancel = new System.Windows.Forms.Button(); + this.timerShow = new System.Windows.Forms.Timer(this.components); + ((System.ComponentModel.ISupportInitialize)(this.pictureWaitIcon)).BeginInit(); + this.SuspendLayout(); + // + // pictureWaitIcon + // + this.pictureWaitIcon.Image = global::IpTviewr.UiServices.Common.Properties.Resources.WaitClock_64x64; + resources.ApplyResources(this.pictureWaitIcon, "pictureWaitIcon"); + this.pictureWaitIcon.Name = "pictureWaitIcon"; + this.pictureWaitIcon.TabStop = false; + // + // labelTaskDescription + // + resources.ApplyResources(this.labelTaskDescription, "labelTaskDescription"); + this.labelTaskDescription.Name = "labelTaskDescription"; + // + // progressBar + // + resources.ApplyResources(this.progressBar, "progressBar"); + this.progressBar.Name = "progressBar"; + // + // labelProgressText + // + resources.ApplyResources(this.labelProgressText, "labelProgressText"); + this.labelProgressText.Name = "labelProgressText"; + // + // buttonClose + // + this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.OK; + resources.ApplyResources(this.buttonClose, "buttonClose"); + this.buttonClose.Name = "buttonClose"; + this.buttonClose.UseVisualStyleBackColor = true; + this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); + // + // buttonRequestCancel + // + this.buttonRequestCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + resources.ApplyResources(this.buttonRequestCancel, "buttonRequestCancel"); + this.buttonRequestCancel.Name = "buttonRequestCancel"; + this.buttonRequestCancel.UseVisualStyleBackColor = true; + this.buttonRequestCancel.Click += new System.EventHandler(this.buttonRequestCancel_Click); + // + // timerShow + // + this.timerShow.Tick += new System.EventHandler(this.timerShow_Tick); + // + // BackgroundWorkerDialog + // + this.AcceptButton = this.buttonClose; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonRequestCancel; + this.Controls.Add(this.buttonClose); + this.Controls.Add(this.buttonRequestCancel); + this.Controls.Add(this.labelProgressText); + this.Controls.Add(this.progressBar); + this.Controls.Add(this.labelTaskDescription); + this.Controls.Add(this.pictureWaitIcon); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "BackgroundWorkerDialog"; + this.Opacity = 0D; + this.ShowInTaskbar = false; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BackgroundWorkerDialog_FormClosing); + this.Load += new System.EventHandler(this.BackgroundWorkerDialog_Load); + this.Shown += new System.EventHandler(this.BackgroundWorkerDialog_Shown); + ((System.ComponentModel.ISupportInitialize)(this.pictureWaitIcon)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureWaitIcon; + private System.Windows.Forms.Label labelTaskDescription; + private System.Windows.Forms.ProgressBar progressBar; + private System.Windows.Forms.Label labelProgressText; + private System.Windows.Forms.Button buttonClose; + private System.Windows.Forms.Button buttonRequestCancel; + private System.Windows.Forms.Timer timerShow; + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.cs new file mode 100644 index 00000000..5dafb91b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.cs @@ -0,0 +1,302 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Windows.Forms; +using IpTviewr.UiServices.Common.Properties; +using System.Threading; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class BackgroundWorkerDialog : CommonBaseForm, IBackgroundWorkerDialog + { + private bool _formCanClose; + private BackgroundWorker _worker; + private DialogResult _dialogResult; + + public static DialogResult RunWorkerAsync(IWin32Window owner, BackgroundWorkerOptions options) + { + using (var dialog = new BackgroundWorkerDialog()) + { + dialog.Options = options; + return dialog.ShowDialog(owner); + } // using + } // RunWorkerAsync + + public BackgroundWorkerDialog() + { + InitializeComponent(); + Icon = Resources.WaitClock_Icon; + } // constructor + + public BackgroundWorkerOptions Options + { + get; + set; + } // Options + + private void BackgroundWorkerDialog_Load(object sender, EventArgs e) + { + if (Options == null) + { + _dialogResult = DialogResult.Abort; + _formCanClose = true; + Close(); + + return; + } // if + SafeCall(BackgroundWorkerDialog_Load_Implementation, sender, e); + } // BackgroundWorkerDialog_Load + + private void BackgroundWorkerDialog_FormClosing(object sender, FormClosingEventArgs e) + { + if (!_formCanClose) + { + e.Cancel = true; + RequestCancelBackgroundTask(); + } + else + { + DialogResult = _dialogResult; + } // if-else + } // BackgroundWorkerDialog_FormClosing + + private void buttonRequestCancel_Click(object sender, EventArgs e) + { + RequestCancelBackgroundTask(); + DialogResult = DialogResult.None; + } // buttonRequestCancel_Click + + private void buttonClose_Click(object sender, EventArgs e) + { + DialogResult = _dialogResult; + Close(); + } // buttonClose_Click + + private void BackgroundWorkerDialog_Load_Implementation(object sender, EventArgs e) + { + if (Options.Caption != null) Text = Options.Caption; + labelTaskDescription.Text = Options.TaskDescription; + labelProgressText.Text = null; + progressBar.Style = ProgressBarStyle.Marquee; + progressBar.Enabled = Options.AllowProgressBar; + buttonRequestCancel.Enabled = Options.AllowCancelButton; + + // maintain the dialog 'hidden' for short-lived background tasks? + // fact: Windows doesn't allow to hide a modal dialog. Our trick: set the opacity to 0% + // and then back to 100% when the dialog must be shown + var milliseconds = (int)Options.ShowAfter.TotalMilliseconds; + if (milliseconds > 0) + { + timerShow.Interval = milliseconds; + timerShow.Start(); + } // if + + Options.BeforeTask?.Invoke(Options, this); + + _worker = new BackgroundWorker + { + WorkerReportsProgress = false, + WorkerSupportsCancellation = true + }; + + _worker.DoWork += Worker_DoWork; + _worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + + _worker.RunWorkerAsync(Thread.CurrentThread); + } // BackgroundWorkerDialog_Load_Implementation + + private void timerShow_Tick(object sender, EventArgs e) + { + timerShow.Stop(); + Opacity = 1; + } // timerShow_Tick + + private void Worker_DoWork(object sender, DoWorkEventArgs e) + { + // set worker thread name (for debugging pourposes) + var currentThread = Thread.CurrentThread; + currentThread.Name = "BackgroundWorkerDialog: " + Options.TaskDescription; + + // inherit parent thead culture settings + var parentThread = e.Argument as Thread; + if (parentThread != null) + { + currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case + currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread + } // if + + Options.BackgroundBeforeTask?.Invoke(Options, this); + Options.BackgroundTask?.Invoke(Options, this); + Options.BackgroundAfterTask?.Invoke(Options, this); + } // Worker_DoWork + + private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + _formCanClose = true; + + if (e.Cancelled) + { + labelProgressText.Text = Options.TaskCancelledText ?? Properties.BackgroundWorkerDialog.TaskCancelled; + _dialogResult = DialogResult.Cancel; + } // if + + if (e.Error != null) + { + Options.OutputException = e.Error; + _dialogResult = DialogResult.Abort; + } + else + { + _dialogResult = DialogResult.OK; + if (Options.AfterTask != null) + { + SafeCall(Options.AfterTask, Options, this); + } // if + } // if-else + + if ((Options.AllowAutoClose) || (e.Error != null)) + { + Close(); + } + else + { + labelProgressText.Text = Options.TaskCompletedText ?? Properties.BackgroundWorkerDialog.TaskCompleted; + buttonClose.Size = buttonRequestCancel.Size; + buttonClose.Location = buttonRequestCancel.Location; + buttonClose.Visible = true; + buttonRequestCancel.Visible = false; + if (progressBar.Style != ProgressBarStyle.Continuous) + { + progressBar.Style = ProgressBarStyle.Continuous; + progressBar.Value = progressBar.Maximum; + } // if + buttonClose.Focus(); + } // if-else + } // Worker_RunWorkerCompleted + + private void RequestCancelBackgroundTask() + { + if (_worker == null) return; + + labelProgressText.Text = Options.TaskCancellingText ?? Properties.BackgroundWorkerDialog.TaskCancelling; + buttonRequestCancel.Enabled = false; + + _worker.CancelAsync(); + } // RequestCancelBackgroundTask + + #region IBackgroundWorkerDialog members + + IWin32Window IBackgroundWorkerDialog.ThisWindow => this; + + Form IBackgroundWorkerDialog.OwnerForm => ParentForm; + + void IBackgroundWorkerDialog.SetProgressText(string text) + { + if (InvokeRequired) + { + BeginInvoke(new Action(SetProgressText), text); + } + else + { + SetProgressText(text); + } // if-else + } // IBackgroundWorkerDialog.SetProgressText + + void IBackgroundWorkerDialog.SetProgressMinMax(int min, int max) + { + if (InvokeRequired) + { + BeginInvoke(new Action(SetProgressMinMax), min, max); + } + else + { + SetProgressMinMax(min, max); + } // if-else + } // IBackgroundWorkerDialog.SetProgressMinMax + + void IBackgroundWorkerDialog.SetProgress(int value) + { + if (InvokeRequired) + { + BeginInvoke(new Action(SetProgress), value); + } + else + { + SetProgress(value); + } // if-else + } // IBackgroundWorkerDialog.SetProgress + + void IBackgroundWorkerDialog.SetProgressUndefined() + { + if (InvokeRequired) + { + BeginInvoke(new Action(SetProgressUndefined)); + } + else + { + SetProgressUndefined(); + } // if-else + } // IBackgroundWorkerDialog.SetProgressUndefined + + bool IBackgroundWorkerDialog.QueryCancel() + { + if (_worker == null) return false; + return _worker.CancellationPending; + } // IBackgroundWorkerDialog.QueryCancel + + #endregion + + #region IBackgroundWorkerDialog implementation + + private void SetProgressText(string text) + { + labelProgressText.Text = text; + labelProgressText.Refresh(); + } // SetProgressText + + private void SetProgressMinMax(int min, int max) + { + var value = progressBar.Value; + + progressBar.Value = progressBar.Maximum; + progressBar.Minimum = min; + + progressBar.Value = min; + progressBar.Maximum = max; + + progressBar.Style = ProgressBarStyle.Continuous; + progressBar.Value = Math.Max(value, min); + } // SetProgressMinMax + + private void SetProgress(int value) + { + value = Math.Max(value, progressBar.Minimum); + value = Math.Min(value, progressBar.Maximum); + progressBar.Value = value; + } // SetProgress + + private void SetProgressUndefined() + { + progressBar.Style = ProgressBarStyle.Marquee; + } // SetProgressUndefined + + #endregion + + private void BackgroundWorkerDialog_Shown(object sender, EventArgs e) + { + if (!timerShow.Enabled) Opacity = 1; + } // BackgroundWorkerDialog_Shown + } // class BackgroundWorkerDialog +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.es.resx new file mode 100644 index 00000000..2fcc2f57 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.es.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAACOSURBVDhPpZLBCcAgDEUdwZncwm3cycF685r6DlLbJEXb + Dx8kJu9HMIjIL5vFHZvFHV8HR6212H10y+SyAyi1VkkpSc6ZYWBxCUAjAwwCAASQu1WAmc6dAtDcPd44 + ms10ZAHUul46UgBEwjzkpSMPcNvCS0cmAJE0tvDS0Rvg+XFUOlKArzaLOzaL65ZwAtqVazMG1dGuAAAA + AElFTkSuQmCC + + + + &Cerrar + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADr4AAA6+AepCscAAAAEbSURBVDhPY/j//z9FGKsgKRjB + AIJv374ZAPF9IP4PxPPBgkgAKOaALI/NgPV70sP+L1Tj/X9761qQogCouMK7xw/XH2ss/n+wJAVuODYD + 5sMMWGYs8//Vjasg2xru79/xfo2DFopmEMBmgMD7Z0/Ob/S1BBsCokG2gtjomkEAwwAQQDcEl2YQwGWA + AdkGABUVPD1z/D2yF0CaQexrK+aDDCkAK4QCFANANjw7fwoceDDNIJeAxGGGgOSBfHDMgACKAa/v3ETR + /OHFs/dAxQYghSBDQC4AySOLoxpw6/p7kGaQIpBhQEUJIEUwADMEZDiQDYpeARQDQBo+vnwOkgThfqg+ + FAAUnw+VB+HzKAaQi7EKkoKxChKP/zMAAEaHdcnCgwx7AAAAAElFTkSuQmCC + + + + &Cancelar + + + Espere, por favor... + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerDialog.resx diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerOptions.cs similarity index 83% rename from 1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerOptions.cs index 831c8f69..b6ed8627 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerOptions.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/BackgroundWorkerOptions.cs @@ -1,10 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace IpTviewr.UiServices.Common.Forms { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/CommonBaseForm.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/CommonBaseForm.cs new file mode 100644 index 00000000..226b45c4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/CommonBaseForm.cs @@ -0,0 +1,278 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using IpTviewr.Common.Telemetry; +using Microsoft.SqlServer.MessageBox; +using System; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public class CommonBaseForm : Form + { + #region Telemetry + + #region Overrides of Form + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + if (SendLoadEvent) AppTelemetry.FormEvent(AppTelemetry.LoadEvent, this); + } // OnLoad + + protected virtual bool SendLoadEvent => true; + +#if DEBUG + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + Text = @$"[DEBUG] {Text}"; + } // OnShown +#endif + + #endregion + + #endregion + + #region Exceptions + + protected bool HandleOwnedFormsExceptions + { + get; + set; + } // HandleOwnedFormsExceptions + + public Action GetExceptionHandler() + { + return HandleException; + } // GetExceptionHandler + + /// + /// Provides an unified way of handling exceptions. + /// + /// The data about the exception, including additional information for the user, such a caption or a text + /// If a parent CommonForm exists, the exception will be passed along. + /// If no parent is found, the virtual method ExceptionHandler will be called + protected void HandleException(ExceptionEventData ex) + { + HandleOwnedFormException(this, ex); + } // HandleException + + private void HandleOwnedFormException(CommonBaseForm form, ExceptionEventData ex) + { + if (!HandleOwnedFormsExceptions) + { + var parent = form.ParentForm as CommonBaseForm; + parent?.HandleOwnedFormException(this, ex); + } // if + + ExceptionHandler(form, ex); + } // HandleOwnedFormException + + /// + /// Exception handler. + /// By default displays an ExceptionMessageBox. Descendants are encouraged to provide their own implementation. + /// + /// The form that 'throws' the exception + /// The data about the exception, including additional information for the user, such a caption or a text + /// Descendants who override this method MUST NOT call base.ExceptionHandler. + /// This method MUST NOT be called directly. To handle and exception, HandleException MUST be used instead. + /// + protected virtual void ExceptionHandler(CommonBaseForm form, ExceptionEventData ex) + { + AppTelemetry.FormException(ex.Exception, this); + + var box = new ExceptionMessageBox() + { + Caption = Properties.CommonForm.UncaughtExceptionCaption, + Buttons = ExceptionMessageBoxButtons.OK, + Symbol = ExceptionMessageBoxSymbol.Stop, + }; + + if (ex.Message == null) + { + box.Text = ex.Exception.Message; + box.Message = ex.Exception; + } + else + { + box.Text = ex.Message; + box.InnerException = ex.Exception; + } // if-else + + box.Show(form); + } // ExceptionHandler + + #endregion + + #region 'Safe' functions + + protected bool SafeCall(Action callAction) + { + try + { + callAction(); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Action callAction, object sender, TEventArgs e) where TEventArgs : EventArgs + { + try + { + callAction(sender, e); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Action callAction, T arg) + { + try + { + callAction(arg); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Action callAction, T1 arg1, T2 arg2) + { + try + { + callAction(arg1, arg2); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Func function, out TResult result) + { + try + { + result = function(); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + result = default; + + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Func function, T arg, out TResult result) + { + try + { + result = function(arg); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + result = default; + + return false; + } // try-catch + } // SafeCall + + protected bool SafeCall(Func function, T1 arg1, T2 arg2, out TResult result) + { + try + { + result = function(arg1, arg2); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(ex)); + result = default; + + return false; + } // try-catch + } // SafeCall + + #endregion + + #region Helper methods + + protected void BeginInvoke(Action action) + { + BeginInvoke((Delegate)action); + } // BeginInvoke + + protected void BeginInvoke(Action action, T param) + { + BeginInvoke((Delegate)action, param); + } // BeginInvoke + + protected void BeginInvoke(Action action, T1 param1, T2 param2) + { + BeginInvoke((Delegate)action, param1, param2); + } // BeginInvoke + + protected void BeginInvoke(Action action, T1 param1, T2 param2, T3 param3) + { + BeginInvoke((Delegate)action, param1, param2, param3); + } // BeginInvoke + + public static void BeginInvoke(Form form, Action action) + { + form.BeginInvoke(action); + } // BeginInvoke + + public static void BeginInvoke(Form form, Action action, T param) + { + form.BeginInvoke(action, param); + } // BeginInvoke + + public static void BeginInvoke(Form form, Action action, T1 param1, T2 param2) + { + form.BeginInvoke(action, param1, param2); + } // BeginInvoke + + public static void BeginInvoke(Form form, Action action, T1 param1, T2 param2, T3 param3) + { + form.BeginInvoke(action, param1, param2, param3); + } // BeginInvoke + + #endregion + } // class CommonBaseForm +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.Designer.cs similarity index 86% rename from 1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.Designer.cs index 616381b9..70fc4dcb 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Common.Forms { @@ -49,9 +59,9 @@ private void InitializeComponent() // // buttonClose // + resources.ApplyResources(this.buttonClose, "buttonClose"); this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.buttonClose.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; - resources.ApplyResources(this.buttonClose, "buttonClose"); this.buttonClose.Name = "buttonClose"; this.buttonClose.UseVisualStyleBackColor = true; // @@ -76,4 +86,4 @@ private void InitializeComponent() private System.Windows.Forms.RichTextBox richTextHelp; private System.Windows.Forms.Button buttonClose; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.cs new file mode 100644 index 00000000..3a511743 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.cs @@ -0,0 +1,54 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using IpTviewr.Common.Telemetry; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class HelpDialog : Form + { + public static DialogResult ShowRtfHelp(IWin32Window owner, string rtfHelpText, string caption = null, bool maximize = false) + { + using var dialog = new HelpDialog(); + AppTelemetry.FormEvent(AppTelemetry.LoadEvent, dialog, caption); + dialog.richTextHelp.Rtf = rtfHelpText; + if (caption != null) dialog.Text = caption; + if (maximize) dialog.WindowState = FormWindowState.Maximized; + + return dialog.ShowDialog(owner); + } // ShowRtfHelp + + public static DialogResult ShowPlainTextHelp(IWin32Window owner, string helpText, string caption = null, bool maximize = false) + { + using var dialog = new HelpDialog(); + AppTelemetry.FormEvent(AppTelemetry.LoadEvent, dialog, caption); + dialog.richTextHelp.Text = helpText; + if (caption != null) dialog.Text = caption; + if (maximize) dialog.WindowState = FormWindowState.Maximized; + + return dialog.ShowDialog(owner); + } // ShowRtfHelp + + public HelpDialog() + { + InitializeComponent(); + } // constructor + + private void richTextHelp_LinkClicked(object sender, LinkClickedEventArgs e) + { + Launcher.OpenUrl(this, e.LinkText); + } // richTextHelp_LinkClicked + } // class HelpDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.es.resx similarity index 98% rename from 1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.es.resx index cc168cbc..962ccef1 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.es.resx @@ -1,5860 +1,5860 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Aceptar - - - - - AAABABgAAAAQAAEABADUXwAAhgEAAICAEAABAAQAaCgAAFxhAABgYBAAAQAEAOgWAADEiQAAQEAQAAEA - BABoCgAArKAAADAwEAABAAQAaAYAABSrAAAgIBAAAQAEAOgCAAB8sQAAGBgQAAEABADoAQAAZLQAABAQ - EAABAAQAKAEAAEy2AAAAAAAAAQAIAJSIAAB0twAAgIAAAAEACAAoTAAACEABAGBgAAABAAgAqCwAADCM - AQBAQAAAAQAIACgWAADYuAEAMDAAAAEACACoDgAAAM8BACAgAAABAAgAqAgAAKjdAQAYGAAAAQAIAMgG - AABQ5gEAEBAAAAEACABoBQAAGO0BAAAAAAABACAA/SgBAIDyAQCAgAAAAQAgACgIAQCAGwMAYGAAAAEA - IAColAAAqCMEAEBAAAABACAAKEIAAFC4BAAwMAAAAQAgAKglAAB4+gQAICAAAAEAIACoEAAAICAFABgY - AAABACAAiAkAAMgwBQAQEAAAAQAgAGgEAABQOgUAiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABc - cqhmAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUw - AADqYAAAOpgAABdwnLpRPAAAX1JJREFUeF7tfQuS2zrPbJb+Le3u7L+WTFCNRjdIzSMnyWiqUjO2JIoi - 0Q+AtPPr1/PzjMAzAs8IPCPwjMAzAs8IPCPwF4/A//t//+///ve//33q39HG8e8vHoan688I/HsjEOAO - gP7O3wepILk8BPHvxdfzRH/ICNwB+v+9fo7zv/on2gySifs40gnX8RDDHxJETzf+nhEIdVXg2gE4g7Vz - Bt29+Dq8tyKZFTnEvf6emXh6+ozAbxiBFeBZze8A/HemBdFPJIeur+ESfsMQP7d4RuDPGQG29CtV/2rA - O8Lh9/E15vxBKqvjykGwi8BzHofw58To05MvHgEEfWelvxrsv9MB3L0XOgZ17UEIXzwNT3PPCPy+EbgD - +rvg+dPPV+6g63PnDGIcf9/MPXd6RuATI4CB7uy9OuezoMbKPN/XFe3ceS6PX1X/V8/AqYRLR9x9Hlfw - icB8Lv2+EXD5rrO5KsB3wcXFNk4bnJp291RpCbarCnx37rMiBnd8lSZ834w+LT8jsDECHfDVsR0grMC4 - atft/Ps1dgTG7/O8X8cuwV/nb/V+vMeFy+iD22/ADmL13KrIyPfsyGBjqp5TnhH4uhFgC39H6VdgUMdZ - vRPIf/16Fcv+79zue/w+rsfX8b77/bqknj/eO9sa7cb1eD72Q42JSz1WY6BSA3xPuZknPfi6+H5aMiPQ - AV/l4KtA31H7UGoF6gBjgB5/n3+/bhB9CLDG6ziG6nstxb2vS6TyaotfO8Lhe6l0YlX4w353KQIfe4jg - ge+Xj0CnbiuQo11GIKjrAjin9T5s+QulB1BRaRHUDOYAPbuBaGP+BqeQHAMqf5wz9v0H2Gcf4Ti6g84p - OAK9SwbsEJ704MtD/mnwGAEEryq+cUDv2HcmBAQUKyy2F8A/GIEV37YB4G1TAVb3w/YrMgBCOkgK+8Hu - 4SQxaCfdfxy7M75K6ZVLUOnSE83PCNwaAaf4rOA7lXUG/GWtc86uAlyprcrBUx7PYB71gUQacY44Fx1B - IiSqMSjnwM5D3hMI7HQkw+koMlitAsRY7hDvkxrcgsDPPHkX+DsBVwA9Ku0zb4b8nK08nnMARCk+F+86 - V8CksVMkjPZK2hDKjm6AQQ3nFBIbhJQcARAR2nteZVDjrlxA58weIviZ2G6fWgF/d52bXQC+PoP/AP4I - cBXAKi9H0HR5+wlSsuLKes/2lK2HGkNXK5DqLoB+nocrB6tVhkEIk/Tg2o+QAdcHlAO7XNgDhh8/Amw9 - 2ea7AHL2n8HLoMdiGlbRnaUuBTbKra1ShyorAIJit7UBVGtSaew7khTWDrDtqAes3nMrCy5FcK5glwh+ - PAB+6gCogFLg7/J8PB+VrwU9AIkLbVHowxRAkUQiC7LUeIxzeAQhEwsW7KZCCtAH2AuQuTg5lBzJQdUU - ZB/DFQjycq5AEQGey4TATu2n4uBHPveO6nfWHoMNA7jk/UOtGVxod2V+L8CEgI0cnq19UnMCD5NGFODY - AUxHwdY8+mRqAOh8HKgLGWBKQmmDcgpcu3AkzvPT1Q7w2I8Ew0966FABLC6x6q+AH8cd8JXiJUAwuFUx - zYA3lBkJpagqV/bJcSBQT7ATCItLaIikIxwmlg8RBJAOkh6PsZpXVvgYO0UGjxv4ASwQQMelpQ7s7tgv - UPWsHrQ+H8CDIpsDjLLG7Aw6K83nstqn41Rk295GzOkAEAM/F5LIbF8RDbiMQkxjD0EsEyrS4/eQCHC+ - lTPj93i+fwAkfsYjrnL9mHgMAPX3UvEB6ApUqji2BCqrOboFBJSw6wzC8164ls8AVkofIER7zgVEkaeX - 5xek49IB5Rycq1KpRhBJR/TsBoI42A2+239+/toR+Cz4p+Uea/FJ8QU4U0C645z3glNYqTGnEipP7s7h - FYhJErAZB8EmCQpqAMlZEAEWwjFqX1IDdhpMbt0OQyDI2D8RRMAKH3OJ4Mf5jfMfEvhL4c+WH5WeVd+9 - DoBwUckpHObUHTgZpApIaTMQbKllu6+scZfXx+cL3DIeK3DcD4nhbJ/2AOCYFBLpQGucjEwjyImkvnJ/ - gJA4HUAyQAJwZPAeg+fnrxgBp/ouCFQKoOx+CWpWeKH4SAgO5EUB2WK712TPQ3GjvZVbUPa5y9cdaamC - 3HKnIav8YuegIpTpMBrHwCSMboAdwcoJhBv8K0DwUzvJ4O9cgCIEBXyXp7cqrir7ZIF5rV8qHpOKAr3I - /8MBYB8Z8K5O0Z13HjNgZSdSnIkAKo9tuYZVvXMAMQ5YkxDXf9QNIGH8VHz90c+twM75n7P6M9d/BUzK - 8xlcGFxO8UcbvKMNAV5UfwMc0vqHOxBEwYTCpKAIR4Eflbbs0oPxWBJMs87PKcVBMjP14JqDIoHGUbjV - E44XTvPwtfr7jwbDT+ucA3+8z7+RGFq7H4ElAIa5cVe8wzQg7pVydLL4cX4CFBIPKF3KgUWqIG2+IC5U - 3gl4aE8pdbo39U9Z9rSO79zQeF8+lyAQPk+9Tu+RI9ghAUwNOG34aTj74553BXzO+dgBhBI71WebL20/ - FLgQ4FNhscIeoDIuQak0g1g5gY/YbQv0ATSsKeDORWn14bkk6QCZFEVm9VZkh30C8jicwiRfU2jEukba - UwBtdmlBxMZDBH8Y/DnfV2CP99gBtKo/gpUtMiuzJAOhmjPgd5SXVZzAgK7D2nXuA9w3+sJEtVTcRrGV - xZbK3KwaWOXeKRa6ImC8b1YHmDiYBFRK8JDAH0ICO8rvzglg8wQX9RaWugBwAFQBM9yF+3SbrBEIe6+I - x/YVgt3lvqGaytar4uF5PqRCRXGZHBaKPp0HADSp9Cg0rvZEJPUXBLVKD47r5ziOv7uUQDkBjKH3eD4/ - 3z4Cd5R/ZflVwEs1dAU/ylkTqIgcJiEoMNG5EpyvezGoZV9v2PEdIuG+OOKwKo6kNtIhdk9Iliv3YB1H - ABp+F2KGlMERBMfX4wS+HdL7N3Cq3tn/IIFQ3JhQ9+ESZdnbvBbBy7n9hiK7tsOp8O49DOqyWahRwg64 - Kp1YgtJZb3QMqqh3XPciggTAzSIn9onTGRwvVHZZfMT7iaXCsPoYV6z2x2uXEuxH9HPm9gjcAT+eqyy/ - XIMX+XuAhm24tdek0ul6AGcED+7KYxCma0VhTgEU+zXvIWoATkUtKMG1SOV09Q3hWnizEd+T2599FZb9 - HD+1LIjEY66LuJjfvixqFBFH+HsnFXjSgW1Y7514B/zI2gGSqfrCljMZFNtIwGVFYXJge5uUisE4lHAG - IwXz2TaBHyvy+LdKP1yKoCw4pkPOHrdOyNjrqcaiKBfPt7L96Ti4LDlubjWAr8OxdsXGcQ0Wk9kJoAtg - otiL7uesdgQ+A/4DIJwCsEqW16AEE4CscGAhFchQndl6M1AdSFW/sHDoiouOgA4icQq/VH41Ji7dQHut - rH1c58hupAhlO3HXFtQ9ynWUhpRx4OcQjuIYH5UOBPiZBJAkHnh/YgQ+Cv5jkvMk6O/SVyBygJXvU7Cj - 2nW5J6cGCuzKiRRCGvl2Z6uV2rOSh/p3KUvYbWXZlYLzPayzagB/tiGseXofin4O/OGikJi57XIf4STQ - CYSwuJQAj38CAj/30o+AHwM4cuCwiUpRUpAKlWfwrOx+AhCAM/qCll0q/yAUFcglHXA1CyjCKWCi1S/3 - MQUxJjNbiRcpDt6jA/PZJhcHOf3qCAFcQMx5gJzTphITXZ0AHEsoPacE6ACcG/i5SP7Ak38U/Dz4zu6j - EizVuClkpUAjq9nl5F0aMPvGhIS1ALKtkkxGv8sae1wrCneo0sUdNWmPJYQBLOVCOhKZfUY7Ts9/qrrI - 3W+7ABhLbO9s37gPzPVR6RX44/h7DJ6f5QiEpUpJ1+JFqCPaMQwEBXIOFBmkrCrwmlMC5TRQ+ZksItj4 - vmzHC1mBNY1rUdUTGQAA3fOFSuJ1eE91f0sqSC4vNS+rHAJQk3ToWHoOTLVEGydYTS6PzgkdgXtu1w6e - 75zAkw4s4b0+4Q7wucCHFp0B53J4BK5TZpW/JqA26YPLr5WlD7DZ4GdLLGyvIj4JkAEqVv1JKsr5GBcS - z8JORD4PWWpZKwFAqzYleUctQaQxMgUwhKGIIY0f9E05AeUCghjeY/382BG4a/1DYfMA039jDYGMpKAU - kUkjnTMKi8s8XuSt3I4EKdvZAHf8puMMjORyiJDScwnbnIA6jqPyK6ttn2nhUNCtMDHdtfSTrNABkFtw - 6UQav8ZB2POO53y5nI4EkAyeouCC+D4C/iOA2PZjOiDVBYDVKS26idVqQXERTBakpl0fJwgwkE2eKgmL - glmqv3ASBYxOhblqv6vWJp+ez4uFOENSRx9xrOfzv4CIc9m6Buj/bE+4knkM+yXcRYA8AI5AVwIV8fr4 - ABiBDvzqGKqdA6rKpVORJ4JMFNtkujCChEHnrPxujQH7lFSc7H1S6UEorsKOjggVKt7nIFXnXIGqv/+v - qLUirBXo2Ybza+GKJLiR9MgNnOePf0z48xiMtRMNRRboLiJ1xbFHB8Bj/+7L8/MLBwZZ1NUCnO2XRCDs - qAQZ220AWCIDkTcXKwxAYLJgdY9niWKZU64gM1Rptpd3aycfOT+IIshIFswcaG+AmccBXQKCzjo4Rzyg - 9KtinyNw6RpeDuR4H8VKEQG7hYcEXgR4NxADVAgep9gMdgarA1yoOtrN1FZXDIOcXeX6hTDQWRiX8Vmw - dw7r7vjz+RHociwb0PMYu7lQ78d7rSoLW4+Kn9p1DiKIRKQ5eO/59+s8/MGx6VzZj/UBHJjMoBxsCB5W - fJc7F4tNKp7aUcfIHjIRsMqjOspzVXvsLIBg7gJ0B+zqHEwDOJ+90wck5gI4AaiixJGjw7lO6VvSWBX2 - VF8M0FUh0ZHQ8b5KB5RzDVL4kQRw1/oHsK5Bq9X+BDiR2yf1HTafgygpE53Dx6TzULkwpBiFkEh9dgDM - qVJ3zUePKaXfSdE4+G1OHfODbory922bzmTBQKYxXhLHBnmcaZsqCr7SASSBGDN0cRj7P5IEOuVXQRbA - Y7vJLgDVJ5FBAHlMTlT1WVmYIFDN8e9UTBy5n12bPoKJ6wKUizIZ3lFcde6OwrNVVarPrsBdsyKtmD9H - Bs6aW6vv7L0oIrYksmpn0yU4p8NjGiSAZIAE8WOcAAaM+zuCTdl+DqQAOwJNrdcHYajcnNU8rP08V6UH - AP5W2RsH0IF9d5w+ovIr0HbE4q5dtclEgLlzmS9WcU4NBIke7Vm7DmrN97WpChNKUytQ9+X5C6IPofqR - ToBVZfWardMMFLLaEVyckycnQBbTKj6nD6JQx3sDplo1qQfezwF/BaKPEIZSbpdGrOYDLf5d14DX/nq5 - sZU6o8VmIk7ubWHxEzGIlYCuLWf1FeCZgCJ2OS1S6UCQwT/tApSidTYzBvQanPG9eCN4QtEVkNMa+QqU - pO6yPSQcaA+Vn1MGJIk47y7A+fyVY/oOYunSBUckKpXjvoXyOqvP7zNQ0zyZvL2AW+TtKzCnNpBAxD3f - 547PQYx7MQFEPKtU4C1Y/+jPjrrEOUr5J8AAgAzWE2iR64/z+BxMGWRQGbAnlwG2nl2Heo12j4GwA+pd - m3+3LdXuzjyxE9h1FOrZZW0A5iCIYgXU6RhWRTzhAqxLYNu/IBpsJ8jg+H3HBfyTJKCCygUaAjbypZJj - Q4Uez5dghKW3cm4cIxeQUgfIBVfvOxfQKblS7ZVTWB3fsf3OzndpRmf7u/Y6pxfEqlKC6QJu5PyJKFjx - N1IAp/j8H4ucr4/2SfFPEhhEEaSkSCBiG8Xhcrv/kAtQqtSpTKj/AfoAnFRxmNyp6gKsqWof7mFMELbP - lpJfc5HRKT8WtOIZHGA/q9jd9SuS2HEVbp6ci7kz19zGBBOpLIKoW5OfZNGBfjcFOASGVgGcwwjAK+LA - 93hsIs7jN471+7p/5AcfjNmOFYXVP9lDtOaqsg6W3yp9U5E/Cz4mv0/Kf0wOpyHwmhXNqXGntCvwfuTa - O4BfuYCVE3DEtCIUJIEEqEUFHsFZrhOEgCp9ni+sfih8TlFopaG0PT6YFLWA0XakpRwLgQdFAu+Y+8t/ - HODjfSYHHAis/CY1JvCxO0hKTdbeEgM5ggR4WgVwroQVIM7rLP7KAewC6S4hrAimc2gK/Dspxwr80QaD - 0REBvq/UN7UD1p/by9fSl6dSyuBcALoPed9IF0Y9AOMfYx7f/+sJgINXgT6CKQEOrD+CjYF+HhMAD0Zn - oJ7vk8KXPQHOPoL7SAGD9x/t85o258YrdV2B86sJZUVCq/46QugAvyIDq/6Q4hXVVsW97r1h87lmgK+L - O4D7x7HpFER6wdcH2DEmjrFgEogxfY/DX/rTqQiTQTBrvK/suKwW84Q4QmCLDoXBrsCorL7rhyScowHx - wyBXoF+p/w4w75KPU/LO8vM847nq/uq51HhMtWX1hty8VXPK4Rmw8zXVHCzosT2XkixJKG8VZsVHgriw - 8BcSQHQeFd45AFR2dAKd4h/H8F8LYlEYlG1vWv3iPJj5gWwU43cgU+BxQFfA2wG8I58OyLuuRJF+B/jV - M8ilP6HCq01FBdQG9Gjl09/Dwrf3OeJAnOeIzLmAf4IEVpOOZID2xxXiAuxuRxgSh7X1YOOLskdQNVa/ - fG01AL8joB0H0AF/xy246x3AdgG9k250IFZkd4dolIVurf9KzVfHsfovVgKKi4DcPu8avIqBbyKhQuPr - NbsqlQr8lS4AJ5gtDrsAp/681TaIobxPanu2R+/hNSdRAHDjdQfgZDMpxZDEQ45gpcoKjF/9XteHFVkr - +7/rSpQj4L6o+2P7B3hQjXddgSQPkU60+wZcTYjrB8r6B/ClY/mHU4HOBjI5THAO0KLSBzgTyGJCjvMh - MAL4Rf03yIBJJQH+mGgCfZt3Rm0BfjNYVrZ3lSIote9UdeUO7qQdu4q+egZHOu45TtImtU05/AE2UYRb - 7h7cyNllUbDUA2j1gGoEqa9wzxDEmIPOBbzj7g//4YntHECA/bI5F9g4R1cKjaCXJAHMO68XjB7XbrcH - pMLXKtVZOYAO0J1a7rTbWfivUPEVud1xF93zMCmXnB7n+gYRqJx9mXawoqOrWNQK3ulLJgt87sACpsVI - Dn84/H/9UvZfWUhr/VHhgUUTIYz3HeglKFmZ4T5c1ZdpQlxPeb+8driG6LMDyR3g3wFyB7qPKPhdolBA - dq5nhyBinKbCk7oWhRaq7tKByzWAg6A6wRu01xfQoBtB15HOm3HCuf9oZziWgwycaCIJoJD+sSTgrL9y - AaG2rPQJvADa4gCGLVdOAUGpiIMtfdxT1Q66ekI4mGgPVQr/3lFqDIKVZedzd4hkpw875NClLx3wP9I2 - P+d7TMXHiI2N78CZC3YB7mrjp3UPZUfrL1zH7COnAJi+EKEE0FUawE7g3f4f+qPUn987HrKoP7wXgAuC - KAU8tl9sx9FBQLDgPSdwqS0E7dkPsmqFhCaLj88svF4rMtkJfgfQDnDqmCOSjmAUcTvV/4jlVw5wp5/q - HHQBU9WF5U9zqUC7SBPSB38ORydSRyQHdBjoKqIfTEa5ntEXBFlA/0gSuKP+odDHNVsOAAb/BNhQ/5QC - AJgLCMktJMUm8lFLiJOEiLk5BSlrxKNPO+q74wBW7ey0sXPODmEpF3KXxDoCY1scbXP+zNZ8az8AKTev - ApTXR/wNMTmBHG7AtJPIJ5FHXyjkZw71Vw7hj/MASv3R0sTfaJsTUFdqOwabLT2/ZjueUgoAe/RDtucc - SUw4tXMEhV1qHJG7o8CdlV+p/QrYq+M7Kn1H/dWzqHvceS/OLWvqAMqpymNOELCo2MVJsLMUNh2vmUQ0 - XOA7jtYfKnJOIEgHSRSVP0gA3/tjSOCO+iPgioKisqsJACWf1opTAFGsky5DWLpEFhwQ4vUxmTsuwAGH - QeJUb/f6jkDuqnPnAhy4PwJm1a8uJTnHmwFPFj0IWZFBu4cgwAypIwPWubxUiBQOgckHCQS/V4CFlF1A - EMAflQYo9UemQvUPpWSbhOBTqp7OR6IwebxSfr7n+ZpIh++t0onSv6YucZy7UlcHfPX+R2zzDjEwENV9 - PkIiKlVYPe+KCENppwisagBQJFTXIMgDqEWpkRywpjCUf16nLH/TP0VWzgUgpuLv/9wFOPWPoEuWJRRz - qHYAMAFKqDyqrAIxt9MBtAAaHEPsNrT34DoDWn8gE3YnCgSd8nXOQClz916MP87HHbC7cx0Z7LqAFQl0 - Y3CMr9sUJGsAzs4PpUZSqApfPx6cQFucYd61ONvuXAGkD8dzKUE9n3ng549yAXfUPwFTFO0UESjAqpUC - Bp2s2AtyiYHl3YAzEAZZueISpw3TokLQ7QBuBYiVLT6Ox7O8x+LKSfF1/I0B5VKMr3ABTH6r51y5pTj+ - BqFYEgRyUHNWCnhIDia1ON1AABjV//VeKD86gPmeuGbOhelnOA+MGQZ+EtX/0gIcHdu1KwjuCToAVwK1 - sfU7BKLU2231RZIoroGBHxMP7yuw4/3j75UF3wGFUkQMphSkGJgDJBFYoV54fgT3rl1fWfTV8zp179Ib - JqmUQx8gJpXH500x4dzAeH9e1y39mXpQW1+gFYMpWIV03mTjcKXI4D/jgDvqP0EoFBUtPtrwc5BAtQtg - GYxC4dU1vHtvnhMgFxPMSi+JBvt6BNDoX2ejnbK71EorCCkU201+rqRi1840JIJOuZX93yGxHYCrdtR1 - sw5Az5oUmUBXdgwmMsifJUAimOo+x5F2DSoQBykNpyLnDeeBnQiJawCfCeDd7n/0w3bNEUIMYNjUAvJP - KD6DGUkD7zddR9xLkIUEORFWAr5JKbhPytY6FVTnRvDMIAqFR5WiALLr40YBGRxhM1dqvfMcK0fQEYNL - Q9IyHBT5ynMzOBcOII11Z9OZZB3ZiALkjKHhzqpDubcx6B23v/nn6HRn/2PSEXis9PHa5vRC4RUAw4qX - PB4ne4A19UEofrTlyKAjHEcOnWJ2DkAB31pbdi0xdqAyHGjFYQkVWtn9O8r/EbJQacnRzlT6AKLou1+y - q2pvNwMhgMe9svuDLwHFsaZzj3mTG4yGU6ibi97FQIyPP8oFrOx/dD4Ga6ox2eSizFGVh99st2WBL85/ - DagkFmHro93ZnrHwJZCM8gegGGgrFWUQoV1MS15AWCmgDkDI4Ly2Xc9nFaRXFAiCNYi+s+a7wP6oE4rr - sA+ZHIEQRt8LUYYlH3FQlN45IxrzMo7qOlU/mO3AqgK4iLO/Yg5ZZB0J/Fb9Z2aK1/g7Ji0mojiBGBAE - HdltVYkvaj8mgBVbvoZ7IjE5pWBFV8+AfTz/JlunrLSzvKz4THz4eiqgcDnyWAr89972khMzSQ7QfAX4 - lZLzeztuAgHxfgb9Lb4IVLeCM0kiAIsAJGCXc5FoEnBFLYGBHmTEpABtxv3uCe1vogGeKAX8qfihzGDB - GXzObvN5OAmOCBCkAYRUSBRBXoAFRFSKiILdFVGcwTkmVCkfT2wO5nFtBAi0hc8tCUIpEljmlMIodYP3 - sH1FWitnw6mPI74dB6HIgrfjooryc6qawZaaC5Au9yCwmjdElVcOgszybxxH5wDez/Kbfm6xEgQUBi+D - km07snZcF+cU8EPF3bVbiEGkIrtEMe/fpDNIasoxYY0k1uwnYZFaJyJUAGfQAnFIkthIw5SLcIBmAH/W - 6vN9HIFO0iTXpYjAuQAlGLg1NzklVWwc5Kz3F5iPF4djSM6B0jUgDZcGsPP+LfA/Bow7pFIABmt6Dfn6 - GWgjh8XJCJCpAGZAuCBnZeYCXkc6xRUgyTQFN5dOKBK47CsUklSQqfcOEBu13loBQCJB6+mC/Jik18+O - infWfkftu3NSCvACUCKqACM4Jj6eVJ+t+SCSOa48RmLMUowpRwX3KI6jHMvpw/t8vTMwHDZi77e4gJX6 - o7IloAJolIIHEdg1+g6AQSidcsb9Uf3GhElCCdsM53dkJAMhAoLumRVKTPoItESCEHzcjytNqUSilFyR - 2yTfeG5BBExiO2BmwriTSqzaD4BIle6IFIgjSDjGCUkV56nML6l47sNC+YlIyi5DIobj3jsu4I8ggAiS - UsAbIGjtuwIpu4XG7jOJsBozcNAB+CUj+CooCCp7L3xOUW+YhcKpFkL9TfDi2MX9j+CZytKAN+ea45mY - mFx/o68jEFHhO0fQpQYrN7FyAe+5G+SJTiDAw+5IuALrlHiej5g72mPFRiDjPIx7FaJWfeIxx3vP+2nX - fbT/W9MAnnhn/SNQne2f6/U8IKDkLgXA3BrbuVTwCu4JkmNCMNgFUNJk8XFwA8oF8L0nIMlhpP6k4KFl - LDEuU6FWIFVOCdpDhVPuoCjg6GconALuLiHcPW+VbiRQqvEMgmDFla8hnRBAn2PljgVJnG3TB4JSP9Dx - +R2FaYVmtBdjr+x/YPFbXUBYEQd8tP+4KcdafgD8BJELfgDlLjlIsArGZVLZuu7ozzGxSq1HgBXFVucy - 2XD/4ji1iYTA92Eys+6GgNA6pjEvK0uvQL6y8jvH1Tlpj4RTbUO03bxZsCPIhyNgspdVfUlOWMPBDzWJ - TUpj7DkNUETwrQSAk79S/xiYAv4AuMit2ZLHAzpAInBbBR/BkRQYUgu134DVWj0P2nCuXTgQ2naMcnfV - axvEIuCS2sPxPoDrRqLOAeySg1L23XQhQMAgxTya1fPtXq50IV6/n12r9dEGOgy1MnC2k9rQxVyX42OM - pPnhNGD0hfF3XMM4/FYCUAykiCABaqikcgFKIVnd2bpj2/LvhYI6AK5UX7kERzrhZtLxGSzwtdBITOB8 - tpwDnH8GqlG6CXBMgYQTKX1lRR39/yjIV85gt91EANOOA7jn/F/7MK7xud4LwDHQ2VUgebz/9t8gHG0x - qeA13EZqn0gnEdkAO6YBLhX4FhI4GuWbK/Af5yWQHYHH76V8aXyjrrDCTuELc8akUBupH03unEgGQWns - PYJq/s0gJEAygaT6RdM3qQx0PoN3RQYY/Nt/j3vuAnV13mecxHHt+xlJgYXSY+HujMN5TeyGvDbdKHCq - PfoZtMYFkOOoDsLUCfiZ6DWK8DEGgUH++8v3BOzY/2ti3hPEAAygscpzwIaCssIXZVSqBmSQqrymkJfu - DeewpS99WoDQFjrHPQrwFNmo52OiHERTxibGn4gIybgDvyOVFbC/+3gAIG2eIlAjKRfFFiShVdn8RyCv - e5WxISdSFZ/cSJw/+pLJDB1iTlsOEvnP6gA7BJBUbgQvq7gihfQeE4cI8JJOxDUHOGiCpBoKkpDniTrF - eV6AEPqKBGEtPJAGBl1q0xALAnf+jQThiMCkGbI943iQSNEFsorfAf+dc1V94K3+v0pufyl2rbZXu092 - XgGSXMNFmgBqJgUmpKLqNY0440Hdi9ICHDdUfXbj/4kDiMEJ0Lf5vLLaEPwK5KzK5Ryj/tyPrm1pzUlF - W1LBc+nvGB8mvFLoG0RWSIJThRVgkaDEM8jnWPQ/Aq0jAmfvFejvEkG0febZQnmTmofau9yagFrze04P - qIYQwB/gnSkJADnUPan8GON3X+v+/3ifCSFIm12AIoL3/b7oZ1f9HTAkIYCVnerp6gAYlEKVreKCUnNB - RQFd9T+9F+oPgaPSmXRNl6YogrgJarxX/I3qzv2fCmbISa06YBsIfFad7jVf50iiez8Cn1WY82u1YWee - E6RAiltrA9cnJq/xrPWCCdJJzjm3n4XBRMB1RSKIC0FfCe76ohCX++P7XwT/F0e9Or+a+ON4UjgBZgZY - ShnQHptrrXISQVwBkv8bsnZJDVOWUM4OvAqoXV2An2n0WeXuqn5gQS36IUG/4x6gLZ6r4/4fAfwK6Cwu - 2wQwSLgAF9R16RCGM1CK+37+vLoQII1jTESyndLPvvjXLmcOt8AO4BjDoy84P+8+ftHPrgNAgAW4lbpb - 6/46ucvved1b5d2JJCjnngoJYHQAZBVvX6vUIzF+XfrjZymktSC1RLak5su2LWmYijiQ1R0ScOd+JH2I - oD9+RwFwD3D9er6v8tNKA9l1SQalxmOKf0EKmAqgMwE3kZzBOIfxyOAPQvgi+B/h9P7pJv/oxBmUHbgW - AMcCnrL1mEpwsa+oO4By9k3VHYQSJ2cSzyUUdD4rn4POgY/Fa9ducz9W9rTKAdcVt0AE4chGBRsG+kfA - 7xT9I7l/tOXz5mtpL8gBlRzX6dOzDkAqQtlaRQgnQWqPDmSKzzFPcb/5m4uCmYjZ5ThB/hYXcDS6Av/F - OGS5EVzHIB3kcDw0EQEq8zI3D9YEkLE6c7FQKX9yCg6kytJ3hEDH0qSLfuMyZ3oGZ8UhzWLCw+vxvqr2 - UYlE74NHEH0E/HccwE4qMNPMBkCF/AY4kQhUPSDi8rqe1/fpW5SgD9F2IhsiXSQtJNXrfSYv7VzifMbk - t7mAHfsfE8OgmmBG5QWH0Fl4dhN4bih6nCMBL/J3VD7lMDB4+H550q5URQEP7xN9xT5KYmicgQrq2e4R - aCXYrn0YmViuoObnidcuOD9DAHfqAKsawMvW2qW/CUDI7VVBEJ1AIstQ50QaGZi6PbM6wAoP6u8KfEi6 - eU7yagG6cgQ///3pNOBocMcBRGdVDu8C2DmBRCTKtge4h5tgIiiqJ8iAAcBARXWWfyPojvbR7Yi/JynA - dRmcsPHEpBAO6F3Or4Fdd9Kdc0QWNoDCRSYMss8Qg0oDXGqg7P9cdpsWXHxbcIBZPNtF1FT7IJse52GB - rltpqASTawE8j64OUVKIM3be/1RazvPyjq9P/qwcwDUxvuKOBUFV4cbc/hwccAkK3JNkBvAUkDpwJYIJ - 5W3y9tRWkwJcAdUU/UQBDgky/pb9B5egrD2COIIw2d0IICSvUrjKivdZgOP1XT2gI4MI9jdwoDo/3E8l - rro9F4kwqa+aD1bu8pq/H6DZH0AFPUey63pBvudvKwTuqP9UTwBugFSCjQtqK1BBzYCBweTh3MBkcWOX - Uz6OzkKBxal44wLk/ZnoFuRQCIbAG2OjiOANHApcIIT3tbwp5Z3qoLK4vz9KFB0pTJl7/fGe5/fuPwbw - JIY0V6u99n7LLRb+klobh+QIyIH6ci7uk4h1n0DMTzzrTiEw5upTHmDlAFQBcBLCKPytKvRdQcvl4iWH - V0CNoiOlDHytVFvhQtJ5jWNIQbMgkAnKULMVQbkCIQJ4tIFEkAtfXNDKm16i/x8FdXfdCvDsBIIEGADp - 2Yi8ktqj60HCm6rOG3fwI711JyD3A0k3wCmJ+BA5IhBsi9txtQacRxRnJGYc/3e7H/zZYZmjE6FMK6s/ - iUEo3wS6ytdB6ZyzUKkFAvb8G/rq8npJBuxYpG3c+JJOeLbSN+GKugq+Vr36ff9XPkogB7Uvgfs6xiDm - APsuJ6AIYKp/cSiUW6d58Z/ykwAt45EdQsR4ImzhCOI8BDCSFZJTdRrkCJC8xLO5NIDn5oPwfxmVVwe2 - UoDJpro67op9QRgSdEqBh41N5zvFPBh3gN45EAXCc7KozfY1kEo6D8lGtIl9iqDAIOMxOc+xLiFX97sC - Ve8E3u2wgsRrJoGPOoRdF5DV/1X9J0AgsN7jxda5fpffHEOIWTnncFwThiAI2eYqFaG0C5xCEgDRdowP - p2lf5gB2CAAdwArIys4HSOW1kPsrxY5rMA2ZLmRVZzDEgZPtUpMSMJ167yh7EIQiHgiIE7xQ8U7EwcU8 - CqQ4N/+uKslgD9Aj+Hf+vksOihTivVT4MyC/6hf0Of9BDEEQaX7TGNVCHhJOqjt0IHX9E/fCVQWeV74f - u4XjOBIAkgDPz4cdwE7+n4pwEYSuuAXHlSrP3FxZdQYS5eBq6c8qKl5r/o5rg6AQbKwI6fUAcZBEIjbn - VhRZGbAn1ZuqIBwAEUXJP0lRwqVh8CgQr47vAL9zABFzKvcvIEzg5i/4WKt/cUo0nntzl9OQK+b8br4a - l9m5uH4FiQUx7eDzfc0Hf3ZuMEEbKhaqLQCLA4rq3SlqyvkFMUzwbZBOmtDRP/Xe4VS6wmUcm+Qg2kpK - Q2PBgeUIJIE97L8ALj/DGSDoHAZQgsTwN6YEyvoH4Bn4+Nr9vUMGcQ6SQgF/ITr/jUBqmQ2Bw7m5JtS6 - Nbcj3mh/3ofc2M4SXwI3uYUM/FxzU4VAno8Pwv/XL1dk4ImdOf4C9CnvbVSeAdK6hQ7ITfHuvIey3EM5 - t0GqCoLOyqt7gtLLiZ5KXu0/B43LgdFexnMjEBj4DuxfAXS8FzsBVP9Z+INlPwVuBOZ8Thx/YckLYMW8 - XEt12klk0q2xNOeCHGGZo0LUmdySOCARvv5eEWzM14cJYKsACMp/dlYocSr2uePRjqmUnxMtLPR0IADE - 1A+6Lk9c/dbbCRBxr+OYIwZ+duxvIhoimOu8DHDH+l7hWBX9XvLoz/FbqT7XAXbOcaSxClImhFD/K6fP - 6Q3vZUCA4DUXwW9U1huSSPMznJQmamfja2HS9Q1Jp5xDpBaxuHIAURv4EAnspABXR/NHeVug7BTNjA1X - gHerDIk9g4mZgIB4osiGz6RIZ0USqngo+wKEcoISrZ9QsW5JD0HtlDI5MFIQBHD8jb/Ve3fAzee6oh8W - lW8V/5JtVsuhbnMNKW6orGgvgI8EkFdVRD3g1V6a+6ni9b4zrppzIk6C7HZF+jYB7ID/Ypf8JaDBTugG - 8O8JYgJjApsrKAIwFDhTzYDSg4vNxycTE8jGhBx9OibA3V8RE7kFJogETga2cAR1fXjxmfakTHW9n1Ws - A7MiAgd0bifi4SPEgBXt9/hfy34IOCTJVBRM42hUFwqjk+QF0aoiHIJY7QXAInRZkSBiL+2P+VMkzsvF - cywGsTABuDm5TQBHQyt2Cbaeg7mo8kuAq2tEmlBSiwFE5whmn26kFKl/gwgSexNhIKF0z5aVYwA0HEkE - RwQwsP87IOpSHQZKWT4iMrgCJn9gSdl8BX5HFnjuRwCPAoPgv2yw28iTxw/Joc6VL4aWwhyReBn35AhE - KmhUG8k8Edk4P/U53lMuhBxJxPcKox9OAZQDUJPOxaQIzpT3c34OKUABsEgPEriOgSiTde1Zt9V7cU0h - riY1UX1Y9gtAzrkrK8Y5bqRGtX/1c/vW7itVeb3n8nkFfga2nP/RJhPFrhsI8B+/389Pe/3nfHe5tK7a - KyeVQQifwFQAA/J15HIRMC37ERHX+a3fDHzN937agCsmOOY8n9/mAI4HO26WwOAKcofKQfW/BLhrR1Tz - FXEggKI/fF7bzzskcfNcXn6qNlMX8TJRsL03dv9QkLQ6Uf8DCQd4BnIHbEUId9wA1gEyMJ2FH+8DuaU0 - wKm4cFJ4v/Q3KDmC9oxzofJxbRGDeS5/wKo+w3Q9JACBrSIe8Dw7qfq7bzd/jotW9uJMAXhQhH2XoCNQ - M8Oer7ktzL9hsIJI4hokgvi7EMadtjG/NMBfK0T+rMC7X7XCPZ9FHMMgLBZ2judoM9p/vd/Z/RURsJI7 - 0N8lA1T+CcCiuJ4IMmHo7wGIsezyc5eP55iFDwghEQjCiXhTMVjnlleh/IqFIx/EaMwBz8WXEYCa5Hgo - afmbIt8EjDonMWEFTpocVZQbQW8nAcgHWRbbnWQi0pdyzegvArQsV5Gy5ABbqD8AIxNH/Uirq/Q7oCvb - qM493nPv76QKahUgglfZflVomzFDwKtp0KaFNvNWgJochFk1AAIOcuLfNR79Jw8lMSUXcs2HEmqeq5v6 - /9KmXQcAg9guxyFQRWEurRgYdxBBmIODWHQEKp+TVgfYPRiQu3pCAq8gK67coipUy4qK7XPZFDys9qWA - +G7zbqHvrtp3pOJSAVT+t2iwC2LLjAKginqiqAruSiu82myjrHlV6DwP+ZogjuQ4kGSS69NfGoPiwoKS - CfA9TlwDcIT+JQSAEx65R1RLJ2uOBw5H0ObgBJ5Q3dSWqfYzCMvgNwU9zqvttUEmxvbPAlBSiGzBUz/B - BeT3nQO4wHH10RQLY4kLxp/nywFWvR/vud87xURFAhiw73X+93JfUXFS3TfwsmKq62IJdwJJXIdAUrWY - BDxUXexnit1rTjRouUa2rgvMfomxefe/OgCebxSALyEANaEIngA9s5hyBggADYaq7NwOkktKQcAFdOB2 - RLB7DfcbnxuD7FI5AjopQgryUvishb33+fVDMB2gXaXYVe1XpOGCrgM/Kr8t4hVLrRWzzNUxJgjaVAwV - yt8QRAAtxlnNaY4BZenr14dxuy5uVHzxMikuoXak/CUEwJN9FgH/92LwlWVnQJp0IDF6sU4iAMhBJOKB - 1QYkjnNQRQpyvC+JSJJJZvxrzfgCo1MCBC2qVWkjkUMt7KWxImfRWfmOHOIY/76bGqzBf8RMtv7TAeBz - DzDz2ORz6159VTDj2GpTA3IfAdggGwb9OaeKdMYzSpLCtBPGYt6DxqeSxJXmvXH4TvkUIb/j7ObP0dDO - KgDaMgYXAo1z8gTW0fnzHFM4lOCm3F0CWCrAgkx2HMSwYGU9X+TnJQDmtSrvVJVgUecA0EcAHnPhVGCH - FBQ57DgGFXTRD1XtrysY8Mw8rmn+agpQyIFJQwKTvxLNbDoSbb3Tlt6NKPsuVyJU30jUEiGIsfhtDkBN - cjBPqFoAsLKV2So8Hshet1BqJgUc5EQGOKgMbrO0WAuArPpZ7RPBpUmknH0cizFTYzfVBOz9+7zqPPDc - z4B/N6fvlMYpf5AIbu9lxZwqSmraF/Fg+Q+vUwCd8y4KiTI+9IazCUh0CRBTPJ8X+VeHmc/V9Z6KjXxe - 1OJaB3D29ebPygGEO4gJwhycwVecAQ14gM2C1oBU3oeW+Lp+Le87FaCuM2e3kVX7JAMA6/tcKhRhAI1j - GOwTEKKdaI+Dw6k8kvfqb3V8B/R4XQTljJHuWQGY+Dx6pUeAl8cniCDdU3w4iI6rMUV3MYFf5sN8ToPm - HIngJD8mOlL+eY6IDezrb3MAWFFEezeZPIBnVLsoKln9YMN21UAs12UgZkXYVQ9etuNAzK+dE6BAmOTh - K8TxzPh75rcLAuEVCFZfBuROCtA5CJ7/jhQC+MfvlOuXYB7Vf0qbXD3ACsSr3UmyJAAzPkGlazuYWpCr - UAQT9yMX4EiLyaX0tbSj08AkCqMPQbZtqnY8w92fo5NYA1ABdaYAManIYMffqNpADgxYzvkdEVyMWPMv - BGgCq7P3HAxJNdSuMrLxw5ozWHFi4zmUcqSgdOpf7L/7fL/e6ecAu0MEPNcd2Dvb/wb/r/Q9/mWugijV - nKiVkKSUPXA7oK+KgFiglQDmeFdFvXKOALZVfiEok+hib8SBnv4/7YX06x4FMAG4iS7A5EnrJnZxTG3E - ScRCRNO5ge21/wm8WihKDDxYW6k4AjyKRu/zarEpX1/Xh1PwiXsegerUX5H2LrhXoHeCMOtCx7NO9YRn - T+PAG214SROLpKOOhIJDAFOg7l1gng95/bhHnlOREgoin+TP/QzBOa4JMaH38rVceLxSIU4B1Ly9Y+jm - jyIAnvTiANjWi7TA5d0IXmbu9nVb8PG7BEubGFhuMtleCtZH5UCbXvJ7IANWGEkqxnV01m+3KPgR68+k - w/l+EB4CRylyOp7mIO8ADEDE2My2JsnkbdFx/GyfyHe2pcRK9SHuUdpa7+arz3zFZO3btauxIyN8Hi4C - KqH+MgJQk349xN6W3LMzKj1QQB7n7dzDtjuYtbgJcB8MuBIgSu2P6yH4UhtwjM+JyZMgh/uU9ILvNVRF - TXibD76uU/UcJHf3t7sXtvd2Odc6Py6J1cJoBhDOM/+dgQ/OAJWTlFY6SD4n4mDj2kIqTtnFPKb+Y3yM - NhRR1rivhWSsAah5/XAKsNMwOoBksaM2QMt8ClhzUME98IMXFiXw8nHL8M4tCMV/T5gu4K3VvH5MNwVP - uR9Ut6kgdu30qzvKHNuv3t8BO57DdQNsvyi/eLYyP6iyqM4FGHnpLNWb8DouDnM7QRL4+yQqsNYpNqBK - T9fiysAVp3qJr8ahqFmYFADbRvIIATl+H+OBKQDPWSbmmynAiu3RelSmGsxORTg54GBt8XgBfSkILT4l - 6GoRguljgAP0uZ+8xLeq6uelqkuF9Bp+OQ6KwDUDtoU7c+SCYufaDvicNmC1H4MUlU1uhhHzVFZlgogV - YBFAztKL2AlwokNxRNW5RydqqYiIhHf0N8hnClndc6AEQ8WpKgIq8r4J//fp3LgKppOJzMRUBryI4Ryg - 4RTO81zFviERz+B1g4jc2MPKsVLf9JyKzR1Z0CaPFLS8wlAJJIgp/15Xf7/CCXREcS7znWPysvyhyOSa - 1OYsFIz5d6g2KnHEFox7IZdQaLpvAhCdU46xGyCRSM6jISyZ7jE+0jNlByIFSF0PhBIOoCP69/N+4Eel - AWz/EgjDxgtSwElXrMnFweX5Y5KO/qhzLTkUB0DKDArMwcYpwWXPq7o7Ujz7WkCiiSPdnwJvV8G/87zc - PyBEeMZSzJpg00QXsREKyuP4BgnUm46xJCKPfiG5qFWgW0RgirCp3UJU+gNt+EzzeYOkMP7Gs2ksvMfb - iTQSwpcQQDSIDc8lH5qUE5Socrw6QODdm5y6ZNQRSQoU6l8cy8FEa7Qw+CfwwR1w4COoMajQFp/3Ovuh - FV++P8YwtTOu/05g77Q9QRZqNJ+r2lk1PgnYUzD0OjnbdAYNAqQQRJp7Kh5Sjepqh2oPCE4SEOkOzDnO - DdkUI+4rxjb6utoH8GHwH4ZhxwGceWIEwQzyuve/W4cPFT/Owb+PzqdAMURSmZx3c5ntmkWJ88dFmSCY - ODjYEODFDhKJxLnp+XiiB2EosOyA9LvOuYi37mtI5BhAYNJLaicI43W+InfMq1WFn4mB+5LHemNDGcWz - AnCJ0SNmEQ+U7vF8zz4XYegE701kbn6PNj9VAIxsgW8QDeMNGLAKxMjQq0lIoCImdRNQ2nfXCcCf18b7 - A3AS+KNNPP8Cuc7xuYi3r/5U8ad+fRewd9t9OyK9iUYCdwJJV8u9A6xEkEAOQJugS0SrP/W5Um0Xo0zE - uEKjjuW+GlGiWHV9K0Lxek63CagWaD+Q/+86gLMQNIPBsyoORjwMAhf/LqTSEIGyT53bSACWgCcXIKz/ - SRBACLXSX3N6fGZHBJVQYNMIAC4meGX/dgF957z3XL+KfpNMEaRKzd3+kPe5DOhCIFQULCsEah6gXa4t - WYLC+2BqEG2Z46n/EKc7QmdJI1I/FKd0//e4rRx6rOJ8EP6vKX7dpFsJwDVgNXEIlAkAqOrjACSAmIHc - YVkkkvf5tGxHAYOEUM6layvjOwtcv6UnxiIpFRIb9xMANsdxnH8HsF917qz3DPWvREo73FCJAURBnC3Q - y+qMXyZjAC6B51Z+GqB3y4DpeQRJzHgUMa2O2XGlWAlsIj6DFOL3txAAB5QqBJ6TwPk6D7xR9ZjAXRcg - JxwYdBYjC5hZpS/lZzKqoL3vAObEzsKe+T4BQwRYFf8qUN9pJ5MpKDf0l8GYyZXGl+Y/z2NTAxBAdaBn - wUj92wTrJO6jvwmEUOcSjqMK0Z47TsVzxMwY55iHIIDVHL7P/8TPimEuZdD7opeDjkUSQwqWZfl8sExp - GQmcABfnap5u1JsDPSZEuAQJFqroM6mw/Vf9jKBaTfpXHkeXFw4J+zaVHMZepYQuDlRbCFwJ4pWKt+Sy - AKJruxOwmSZ+EANdf4l0kJC+dQ8AFgK7XBMdwGqyipVqXILL4x3b8/kxUO+C1cYHMGTe5ZbsuE7Aa9qr - zT3VQbxJztcOglQUuH9HLeAN/l+pYCqJQIAhkXGqikNhLClcD6S27iMAPNWY3MMkr13QL1yDcxxdfzuy - K0XvINkRJ9+6B8CtBERewYUoCdgYMMj7lTXCCWrbERaM3YG0neAAghCQINBWYZ7PbeXXnhz0efV8dAoR - CJkIeO+AX/r5KtVXZJLHJ5PdAe4SxJ0lniAUNn/TlrObcABfFgAXTkKKzV2yIIfLJNHFe46JLDrfXgBU - DuDokKoBRL7OA1bALuzMzjWKqVXbRZGKbSfFoYBj8OEE+Ap9BmlXyUfAc8FR2etEbmPsvgroO+0EGZSK - P46bsqibllgpnF3qVeQw3pNAVST0URsPbbX3Uk6TXIfdv8CpMIzrcU8WiG9fAgwCOG7sVCFY6EwDhtVW - bCzBygOzoe6FCESxbwZraq/uwguwJ5AVC74q1H2dC1Bkw4ShCHgHyJ89p5CTmLukymFV3Xk3VNSqe+cy - VBpCIGIlZlchX+8QyLjPipRmLK/IZdaOchHVOQCMkXcfPvnDN3IuwA0Ygp//tssrihwUQQjA5oH3224v - MqlLhRzwaumOiSNen88IzuN65rpkmEmo2v1yj1cwfBbMeL2rHXDhlwuliezHs8o8H4/J+cubYxRoCuk7 - Rd0gG5UStEBFh7G4LxNKt2mtcwErYop4+m0OwG0IQiKIQqCdQGZkspB8XQ58s5FkBBQCbm3TczEw51++ - kIfgtpXwEuwAeGBx3d+6BPkek7rJ5isJYGdDUfQj9fvoW6fA7liMEV5/J+83yt6t00tAdffcTF8s4Ffu - ZlF3OGOtIZsjJnby/0/vAUDjgDdE4JdCILL8eBDFhN0DlgnDoDETV/Npv5svVBcDu+7kq1X+BMip8KvU - Yrc+wKsCtd1Qwu8ggG5lobihQUwfAZ0jjTt5f4yDAvaOmkcfVsSAx+U9F2nGSskdgbhnuIrTmgAYl+92 - vuhHMQ7eMOxIVqy8UWJV8JFLJWQbQ4k1ePN3yO2cuwZ+JZJodyriDIS6zz1Ppk9HZluT+XPRB1OK7yQA - TgmO12z/k42G/qbxNgpWQGXUUAEu3rP2mcRHAqkpJPJzrVajHBFtWX9wSNzPFifDEbL9VzHxpQRwNLZV - CBQTz4GBEzgVgSugil2VEwAllqTAjkTY9J4odtfzXf7uHECz2WimC2gFr3a+kwBU29IBEDEfYz8BcYwx - AbuAV1y/Apxr0yl5WpmilASPYd+ZXAphNdb8Frm5VGa0r8gr4lthEcU4/v5SAnAMwwUlnujdQbkz+WiF - Mnjrd+a9j+9W6rni3yt29MMvPV41gBgH7A/XK2ahcfSZCS3I8rsJIIh+dwdgfjb9ibdOFZWSOnVlsO+o - rQITx40kkUFSQRZ3Uh4897z+ozUHIJyzz+P1b3cAXAhExil1gGFT0iCPwZQDDw+2lSYwoAnku6TAoESG - ralBv4kH18nZ4aRjxwQWQtJLjdiHSQYbqwBqbj5DGnZFBOb0eCYGbQTr8b4D4S44bwuJAFzpB7mCrp87 - NYroIzuPlFrgqkJXbCTgX/O/n/+/iecLf1brjkkxivWmD05IO6+3f0YgTeWfg7MGpVQnttgASFTolXNQ - x1G1y1LgsMZ8j0w87BroGV/PvgvmzxLB3ASEpMVgFiDigGch6MigU+IgGAWoGSPQH76PFJ+7NQiV2myu - GigXwKSpxgZj+Pj7P1H/g0fi5hiAGGT4wYSrcFS/ubcqpAA+qgsoPK4/Vwu+WPOfQK+7qgKUGsB5edBb - fp1CWKsP/YngVATEfdolADdPd6/H/nMwWlsMAiCDfACVAS/BTaqpLDm+h5Yb7536MTauScK5sdTonAE/ - c3IFXSFSECw7Qbd3A7H4fq5v+OENIhxMOW/M4C+THUEgLDEPIAMEQXHVBFZLf7VG4FQiqwUU8sg9oL1P - 4BCuYtVnxf7ns4W9hkLpXRB/9HxFiPHeLngKSdwEgCUdQSL2XNipmvqNn1ExacM5B3H98ZvJ7QMOINqQ - xNAsdYcLX+Hw2whgNw2YeSOnAiIfTGAzx7lAxgBlcCmwsSXn3JxzXZcCSABESlPITLuN+TxxPric97Px - RhtyITdSgU+B/+gLpAAS9DTHxznuPCb2rdfkAM7+cFwRCKNd51BU/zpQcj+LCyEyUsCWBC/Gjp9vxvIr - Jnbt/5fn/+5zAUfneCVA7grEB4XJiodtJ6yoab8273P3S8nnZAjAMrnE6wnM4gLc6oHZzDPvmTf/MCmU - VGMQwzVWuNMQXUr+exIW3bda+wz203kc14x/MWYFgI0CyqA3eXdpN9SWAN+SxuJcBu6KSOyzCheQ4sYR - VPRPXN8RRPTDCTCne99g/t9NOjUJIsh1AJ0CnAMVyjIGogweKiIAbrIhDzCqlADYBEG639UPr/46/1fg - SQAh0pIFQdnn/F+KuRWDnbpCHismPwF2GPMJfAjYjwBPreow6FqScGQhqum77XR1hgl4IpIsClfNiusN - 2Af1dyEU5QBkinRV/zHNDjwG/o7X7/t+4w+yEN8Yj+HD2oHFCS5qbL6iayoOBPEkCfNfeovcfQKE2pPL - b4o4mnrAO2D4wz8MuuocMlEZ0EJfmAh4+dK7iuweFHkF4LEGsaOYbLudskkiGMDbJRuurLtiWwFjBzx2 - NK/X2K4dA6H6XJxUpODSifxse/b/txNA3NClAXIDBDJcY5XQyneAqoW4CpxOndV9gvHjvieBgbPIQK27 - +ia5EBFgPyqwcsqQgVPJ5AIoEOXoY75/Tpkc8GZ/wp0dbS0q4gzUQvRjfl2xqyiiAN9xD0ciV8DnlaS2 - uCZcRQfwHdJTwC7z08b6IBmZTr2ffzf//0btfzcdneF04Hgfq5QMkjkgOBBcDyguwKkmfcWXue5aIcj5 - Nlv+pJSo3MUdQDuFEJyi1/8pOBEKjccFCkxR8uccJKEFcJW6pXs038TjAE8grORz7fNwYOV0oAA77sGA - x75TFT6IWrV13C8s+hxTvl7abdizsnADeA8cE0wNmOQ6sjiPpSXKt5Pscv/A3W9R/2AXXovEThQSaBh8 - qmo5hwGrt/lybm0r96GM9DsRRFj6odrv4Lr6kQkNqvSlzc3KP9c2jjFo7jdBHwQF52fQcZ8v8lCqNMkP - CaSZs84VICAj8HfU0ZEG59jSUQ7h6TYIcftT8SfZD0GBwuME9w4xCdKSz4TLjkBsfG6MY4zhjvr/VgI4 - Oqw2JAQR8KagumnH7/pLDx/gMmCU504QadWfoB9tBrDPwT6uHcBM+TUAMxPDdb5LJVSePu9FoMf3y/4G - AijniOk58NnouRSI5rWNA9gt6KVghiBP5EB5tdtQw9ccbUf7aP+787g/6TUA0pGQIrxCDvA8q7QpQO3I - 7IiXi6i9/Q+sYSHw2+1/3IAtCXdGFQOvhyL7HoFNSpoByA6A8+7qGCKo88SqwqEnitxGvpaPudc9SeW0 - odQZjCtwtZVlcPFYj9cK3MtAFpX4FWBn/5AYHBlwri5UFlX/HP9OwU19oYwZPZeqJ0iyoP6256ixi+uD - lE4xqtX/biXutxGA+pagIIH4rXYFWqafdpjzZfUZ/1oXSOpXHEC28u8g3VgGI9eB12Hhcb4Pll6CPrWX - 7x/BgsF4/g3PUs7B4w4ccT24AKd0H30f+5zA0gA22fWGDFZ9KhV0WUTT3yjVtq12CG6qvO0TjwelA6k/ - 4Pbc1l8kgsDcbyWA46Zd51IaAMFa8nZ5rAIUFWkJxhFUCUSmD0geKxtvAVmAqvt/9ptUPZ4l+pF/VwKs - dQKq8ge5QRBZ+07gO+/NgSqq5hisq2vYSRznI5m5Qlqcs7O0N/s8nqesDqTC2kUIthbgnhnGq31uKEDi - 86prJBEdc/j6Fxhb1dzebfzmn2Ag3pgQbJSKgRiUkWNj8AFgr4CpBbgMFgj8Yu9wnRtsdlHpbP8dwE9i - mCBf7fzT6UoH7ExCo/1zTOibgcZ7ltgUoJtKNysxqxAHLAItji1ThVef2BkE6FP7QAzdMp4GDC2jMVDZ - Xg+im33nWkDTl22FjzaMm2jHrwG/SgH+EwLodgYiOcTW4Dd4sfjnvvZKqCdPGChukEL+rXNrVWVPYBIE - kcFZP66bA3J/848CPZPEFSRmf70CdwQeOI3ULr9PpDFBbnJmCUDjGhxYbfCb58GiG7sZbgvvufq7W64r - xEZ961YodsZIkW28F3OwU/3/z8C/UwdAFzDz7hRwocB66SpV5AvoeadgBp9fIkQ1r1X8tCcAnIkqSspa - gLsGgQduIoN+jAOcy6Q5iZTaQCDEObu/j2tZjVdV/3Q+W+ZhuV3NRwV/ciNNgTGBFkgKlfm2Sm8WCGW/ - FwrvyMClPhFTiB2V7/8n1X+VZfCKAFsUTBF4ANHus9KyMlc1rJX/HPA63642X6i2KehNwCeAaifj3EaQ - Wno+ad0xH28+YYfECMBx1WL1/iQVss5d8HYg7pb1nCoffWBFTqlCk5e7vmzVDxj8G5uFdhS+OAhVh2Dn - NF4f7e8U/65ax2/O//F23NnjdXSMWQzzaK9YeiPNOw9f7KobYFDqnwlG5PEzEC5XktUZaw7VOVQ34Pf6 - S3ILIBfr3hcCA7x3AN+dG8GdSMEEqsv/FUDSexsgU0ud0UZXI1DXdXUKbEsCG/qqXIZzBdvkCQT0HvM/ - eOnP8YxjqyADtyLAy3GdamYw9rvt1DJfDG4LvkIgnKLQ8h2dz+lDTScW/SbrH30uqglKvbKHHyWGIGgZ - yKTGDILiADqbzGQASsmkYfNyVFfVnnRYejNa+9xdO5tpxOs02OgDX6J6Ctz+vv8/Qv3d9wSgA8CC4Nvi - 8Yc72MqzArOSus0zwh3EikPjHlC5p/phfg0WO6sjkINdXdC1jUl0KtfHPk/lrelOkKurCitiwGvYqeH5 - SOhqpcACPpa/2DEY+96SC1fmuQ3hSixBwCoAzqFzFLbA557POJr2+ajOcZL9cM9/fPGPncCOyiQXAADL - KqdXAFIBrlXJWqVXyt8u9w0bFo4Dr5dkIUFM/Rhtnu4jtd/Yewhwvg4LQPw3A5uJQhGHI5MggvcYVOVi - IuCAn/aaSV+lFHFOA+wEWKG4XENwan6pJ20SUqsQrvawUnzlFuDZMJ3AmNgB/x+l/qvtwRFc+GAK9DW/ - r+vpDMr8WjsFJo+0no/qDn9n0IuNNuJc3Zd+yzLXKnaWKZlsHXhXDkC5tM65ObAjyG3xr0sBhDo74Mb7 - rsB2EeW1L0CSAtSSKhDpg0EO6LHS4dyOey5FMkMUuGbmhPU9F3/Yz6qwhA/HYMmqqNfSSwFx2HpsS1X4 - k3qd1xiXQMqsHYDapKM3E6nlxLavrTt4ByUCFIHPx9x5O85BzSM6ASYC3EzDDkCSRjynyoV5Wc9Z7jEW - CHh5b1Bh7sskLlRqV5x07++uIJDdr2P4l+b+KhXA/FGpUzgBBCIrbnYI+qPAfg2+q9A3LsHk8bKwF+eC - /fdOoxJaVTIiEZGGdGqw4wo6AlFugd3AJIGoUTTgOu6FQR5/JzUWYJfKP+7jrk1gEqpsFd4p+8rys+IL - cnDkohzSSWIvUdpV//c4/KE/Kkg58CKQHAjUEl6oeCYGqBfMyeyr9Ew6vrZgthIPYMakXWmLcQEjeOf5 - oPKzLylXVFt/33aWAcnketcFcJuKrHE+sYZjXQAotty958DV5sbXV3KpzUKvJk8Ate7jZnHSFRPjHrIf - pn7QuRSM578291+5ACaFeNDj93tA9SqAX0K7o/Dq3L29/LXgpwuUNqUIpSzPB8U0cBCZEDIROIXvVH1F - EB3g8Rj+fbmAd/+YCLrXrO5SJdkVxD3Ipqt1/QTKcAIEyuQi+JxVLYJXJRJx+28RasdoEBdiYpVK/6Ha - f3Vr1wUgAQQRWEIQ9nyysQIRnD/bhNyfFfwkG3U8EVQlk2r7TdFPpgpv5Qp3UxzRCH4HxlWgOFuv3lfu - wbWvVgZa9WWi+Ej1XOXQworL4iACVYD2dBDq/VXxT7gZbAtTD52+DEF53fufUX+3IqCCLi0LBtBQNSc4 - 9NJZWwMgUgiQheWq1+InBsGRGFIIwkjghXORyApJYN8C5PysMB6r3N+5AAfqXbA7h7ByARjsrH6YFsQx - BRR2B2swCQXuQO1ICd5fOZQlcTTEEwJ0jMEu+P/o3H/nMwIcUFgsDEB2y2ITvAs1TYATTkCBU60eZDfC - OwLd8p6uBdScEiw+u4DTjVwBzbm/et25ATzfgXpFCnhdJe76hRurHFoRw/I9obgM0iBkS0JG7VcOQJGB - vGbldubxe5t+Yg7/ePuPHexSgTiWgkkoPoJerhqU1OAFTGhnWn228oOdc/uuNlA/dajb5fNox2LqA2wA - gqA4gypev3673H/HxnegXgF+RTLsAmafudjm7PWG0q4UmAEoz4e8vdtGLGsKjYLHPN3ZeRj9jZhD9Ucx - dLj5q8B/d3NQVxDkgcPKu1Lz1fJiUntLFlyg9IVHVay8AMFLgLT3G6y+Cqo7ef7KBaxA7dwBt5ucW7gx - UwFPIN3ItafVV/ZdXI/E06r46Gd7DrSvc3ZTK9h4rkTsI1W8Y/3f/f4Lf4LlOjeAA8HKqqx5r+rOgr/X - WtlRTDZujpU+DdAWYgKFd6lMJQsgBHH9jgNQFp8VnsGNrxXwV2QQc4YrFzEeS7tMNjmDQ3xdF5EBtp8A - vXIV6AZ2Qcvnra47+sqrBVBMjFg6nmGXAP5a8K9cAAauTgXEpp0CVPW1YAB0sXoQDkLuNxjt51WB/sNI - l+PQG5bmfVQKUNKe/I1JTtVXAP7odSvgY+o2gTifYa8WkNRVKT0RhN1efMxtpBxcsVftRoFZHGudgVgN - 2EpPSgpxrTRN9L/+WDm3v1D3c5c5aJwV5eKSLcyFAneKnsDmvimI1/WF7Req7FwJE4EjhkhbpvIBgNjS - roJjVWfZJYpd4HPtBp+RlVyCBECRHINa5nPLcLxeb8CubDwDfaYcULvgTT48J2/XSGS3cgZAPnfA/9er - P7qAVbCmVEAo/bTvoeoBTlTt+Z7+Ys7V0mFdjfCpQ1nDpz4H0DGAUvCQQqhawg4B3AWvShl27oPnzCIg - pENORSURoB03AE6EAgArgOTCowLnMTeCUOx8CBuv7ts6h6PP5PB+lPVf7RBUgatIIK+55+2/16RcRbq8 - DIjpQN7eO5VY2PBJNmTbZdoAIOjSgUQI5p4R9BGsd4Dp1H7XBdy5l6oByO2xO+BmRT8IvlFUWaBjMjUq - rfqonAh/9FneU6UUIn2JWFJOuBvzf0b9+UtDsIocwRm/49jxGwHjK/uwlZhs/0kOTZpQQC5cxySJJhVQ - pJD7nvN6BvnZj9TX6/w7oPxd5yJJVxdkPkorAO1AdYxPq6wdqbi0Aa9ZuY9xruzfRwqJr7g6nudHWv87 - XxyCJKCLgmjjxL78MdCXzdebdWoOX4t3TD7aEeRVhWnhkSzYQQgi8ZuE6j6A3wXy1X1UCrBjkTkd2LnG - EkJToe8cxDa53CSaes+61RfFz43xP6f8n04FWiUXlXdFBFPdaaOQcgi4cjDb8l9OUsgirOHRdrKJsMkH - 1s0TcYD6HeBYAfG/OM7kjABlQCewCWVPKutsv8jHWxCLGsBJsjCX5/XCCbj0YvUcisjQ+qNrijrAjyYA - HoRQfyxQ2XrAUNGc66tv+fXVfwStKr51DqCmFUQOSFjK2iMZyePXLkEcl/8C7HxPtLEpLVNV/B0FdXYf - wQk1gu5TgDu78oIIts+lZ+jSllw3eMce5v1O/Tkl/uuX/XYeAHOiGCQV7IUElGKTQ9iz783aPtwj2tJt - 6q2/bnUA9wOodAHrAPN+o8KtKvC/gxBU0MZ7zrkUy94U9EJZnYIW1W5y+aTScM/StkgdLCHg/RShiWcL - 5ccYf6y/YAUVwEEC8bsUBdMkuJ19b5t/geje3xnstJ9/kIMrLno3gV/+qf/OpJA/K+DAvhNYO0Sx0w6q - P48Rg68DVNhvvMYSATmBfQWmHYWrPQWQki3dQetsPrbZ5/1cP/BnlQ/FcV0UrOusdZ1/9eUfzfZgLtiR - dUeSwQDGIuT5vnQo7oNDvDX4/XoHxN99DpJEdSvi47iHOnLevQCiIoVELu56lTIoUC/SEq5JTDLo2p99 - ul/0m27q7NcP/MEcSaUC6ATyYDFwr+KeUmdl5etqgF5ZeFu6nOeXewDIUR2rstE9iCByPzMZfDfAVb7P - qccxB+n5gBSX4B2EoHbRbeX2OzWF2BTUEE2p1ke/NttXKwxo+1G0nMD9yLzf8VvkShyArHxYDyhBiLUB - tOlCtWOyklugyj9OqN+DoD8mfAXzRVJJxQboV0GfncP7XjtWXRHFR6+TDqyQXXUtQZrT7h/zgBt+Yo5c - Tu8q+cf5q5oCAXl5/px7+i/GoQ/nXHC7+Hq4RUyTdsb83ebz84udAIIf/y5FQbbpoNYB8FOti1JlJXaF - O04pVI7fOwTe0FRJI9KESTQRbDPocvCxquwE2o57wHqLUv63Pa7fznT0P8ARFvr8LUCzZee7qn9HDAvA - KgCnfhdA14//lmca8XfEBSv/qm7zgJ+Ib5UO4PEI1qySwsIDQZxg7hxBOtftRKyrB8m2YxtFKVlFxL4A - YV1n0I322BmpcdshhdU5SLYMflb4lZuZTsAo/i1iSHsrqKC6U3egc9KzIImsnMbRjxFPKjZ5fPn1QwBm - ZcAF5q4TCKAHMKtqAVGEFR3kgNfkwDC7/iahsN33XwTi7GQ4gW55LQiPx2KlNook3HvKCSQ3VRwKbHVm - N0C2WQKdSGGHDFbn8CYfpf5dtb/MEdcvQvlfvzlN2nFbD/hN2rPrAthunSAvYPz4CoByFr4WsM4Pa8GR - vhKMUxQFHLKoYTvZru8EoCJZfI8LrpMYG1sf9l+BM723kRpYAL46Jj+KexK4+cYeyPGT5d9dGhTXv8Xh - HvjzmD55vx2BUDdlmVSlGtMBJgIMXEwBXM6vVhAyGZjVALD+KSU4iGkA9wpqTlWgiEZEkNwAByypkCIC - BeruvLD97EbkJ/1gma0FuAKtyvPZPQir34IcLLtyWTgPu8t7pZ2YZwJ/R8I4B4/ybxJf5wTQ/ionEOw8 - f9MSXq4FYF1A2HhyFUgc7/bdsthoC0Aq8+Qj6IX6BwDxHhOU7AQaIlCEyWNbA9SkSPK+XnXnMwBRHGPQ - OQUeI2f189gv+nDM/yqfD4vfkdXI+VGgXOHUpVeb4f+cdozAMdBciOpyXbatQQDZBazWsUWhMIFUrx5U - R0FBiUSgSGFli1VKIBwBrlIwUfLYHcfjH6c3bR3CgXg3PYBnkQDvntUU+YpS77oOWjnotwS/5z5EZ6fq - /9j+T3LZR53ABD0qOKl5WuJjFR6vTyDMHDDb+Xk9KSO+r4hhButC/aX9D5Dxb1LZS33rygge45RnRWRF - 1UFZk7Kz4hKoz3PxvYXyMlGkIt+NXL60s+pXVPpfccDK31X5H9v/SeDj5eEElPp36cC0zAB8JoZanOMd - hnppEZX2BDTfw7w3z+U160JAtS7g7HCfGlxOJPezb1+2CX1mG+8seQH6yumEXT/GY4cU6Bzux+p1SwjD - qQVh71b7mRi+EAo/t6mPrA4cE5Htf92Z9w6QCvq4Tl1f6wCmqJeKWKIYeNwblTxcx3ifv5aKCa2o8aoo - x+BzYFQWPMaS3E4AaAK9AXiQhiOLBMbGHcwxawgptdXk/11tIAgzBGjmo68/dgqu7z48P182Aq6wEi4A - 3QBPVspxEfBo9Um1lfVnQqhBS99BMAIZ1dcpeQnsBqB83+O1bHf3fQbJomim7l8KfIJw4hwGKK8yLD+R - 1+TuCtTY3pazOOJi2H6MJVR3VnqMzwf8Xwb73JAjAWTkIAKu0IbSS9svSAFBa11CchB+RaCod9wPSCdA - YYlAKbPJ/ZkMQqFvkYRwFMXSu/x7o6/t7sGoypMTiJqMHStHDERGPA7hSt6/c7FvpxCNsfaA/5vAH82i - JVPAZ3uGExhArIAW6/tACqH8+bf7hCDsjBsqcrmJvHX16o/5jACthU8iGWmCU+LpCHYdAIHduRRW7gTI - Adaw+lwURMC3hNQU9U6ABjlwHaUjnbOYl+shmoD6Yh+LCq8IPOD/ZvBH850TCAcQv7l4w2DOSq+/AIQB - rNzEpdxRU8iFNnYBV1qivwMA+8VAV8G7ew6eF38fYyRBD6lAcSYBKFXx33AAU8VNsW9l1dHqu/oCvu9I - bao+WX4GtypC4zkP+H8T+NEJ4AS4CUKyQDegbH0EQ5DEDA606lQ3CHIoajwdxCAVBYpUdzBEYIp7U+VJ - MZ0rUBV5WWgc7XE7qOgrh5DUH53BQqWDJNudh8IhvOfJK7wjCJzv494u33dFv3AED/h/M/jvOIFQN8Xo - 7AZUhV+RQQZ9/sqxHIzj2AD6DHBRIHM7Anvlgm/iQRCI9hlU0oaraj8Dbmd5ztQmsFBYHIWx9m7bLoP+ - HKfRxnQXY0zkuQdBD9Vnl6iKfa4A+ID/PwL/jhM4JoedgWJ5vxRY/28BJo0UXBN4sMSXwJC3D7PilWq4 - AvW4R1zrFJ8dQqvarlag3AA+T1yn0oDXeckJdE4F1VsQwcpxFMC3JHUV+laqryr9+N4D/v8Y/Hj7Lmfr - iCAIYgIKin+nSrGVp9e8Y2/m9ulaAH6ABsCdwOzeV9aXlNYW3hoiUfvzkztAMAFROHDL95W6L5wE5vjK - 4k/Q7ziS5ARyoQ/Vv6st8WrAA/4/CPyrFQJMA5AM2A2g3XfbZFe7B1HVMXArweBqAe3YOwLW1QzGsVD4 - Ow5AKimRw0l66t47S36L69iiOwdUVgxoNaRzFrIWMOx+PFtJ9l9vcD2JK/6Y7z/g/wPB7+oCysYhIXD+ - F8dcpZ8LZwow6ByQVPBat31YAtqBkt0Cg3QcLwVAYe3jvgwuVStgglAFRkUibNVRxe0xIpUgRuUK6gai - bPddru/ye3YED/D/YODz5weUtUO7v1MbuOMIJqDB+mNQR1udYqegjnYEqFdthDtgskpg3iAP6QSU5Uai - WTiFlcNYuY+V+r/HMAP/aBN/VLqoFB9t/wP+vwT8XBfoiEClBl2RkD8EhNuFJ3ihRsCgn8EvVC0RiMnZ - t7fIOnATUHecQXItkEu3QEWSIMJYAnic75yVGgMmzqjDMPAR5Ax4JoXH8v+FgFddRhvHhRx2Afgazz3+ - zlaevhdgqM55TuToQQTTvtMHgsbxuEYCaqMOgKQSbezY9tnXqNZHP/Ge87mvGkUCMB+/UzsIYiiECUub - R+6vCojyPpfyH8+mUrvOBShCiHb+ESj83MfAgOBiD4I+zlOkgXli+nARqfWpUCKoE1AR/LsWfxLJjW/h - ibZBhSXh7Fh4syGpcyVFxRVwVUoxin5c0GOSVHafHZ9ydK7A91j+f5wjlCo4F4BkwG5gFgpnni4+BRjH - BHARGOffihAc4Mf7CQx0rgO5chnczt1deOf17ASEc2hTBlc3sO9XB6YKfGreXBrwWP5/HPxq45BLCdgJ - sCNAF3FZafO9ACM9WAKdnAR/0MYBFclkldPjcT6X04eS+38W1E1dIEjkrKk0ZDAVH1KurrLPYFcpwKP6 - PwT4/Ji7tQFFBspWTlcQas5pAKi0JYPXNZ2yvwGQc2RFDKoGgNeyNXdttKoNhFCsvlmO3HIBxfnkL2w5 - iDHmhBWe52Vl/x/V/6Hg79wA5vpBEs4RKPU5zn0HOtnU4zVuaFG1g+O98a+15uwWzGun8qltrg9AUZDV - 2AFYVvZNbn85Jr0RKu6h1P44tvpRNQCXHlyk/cOB8NMfnxVFkUAEi6sZKLUpZBDgHmQQRBGg6BRSAUed - L9vYrBF0nw4MByHdBRQb+f6SHHDvP/4dxAnk6eZmRQTd8ZjLd1+fn2cExgisqv93HUGpFZzAp+8CRPXm - SnsAd8P6dwTRglCRA6YZq9y/WHb1lehm5eK4dqZKfvNOV+C7QwQP8B+oL0egyy93VgwciaCrmCnCLiEA - MaQagAGfSx9mtR6uC3JwBcSyL3+QkSQVRWZi+XDaewB/uKU7gN49F4l7GQDPCc8IHCPwVUTQVamzItEW - VnAKCOii9MI1lEq6U2lRh2gtvqtbNHsZEtgF4F1e/xWq/wD/wfKnR8ARgXMDqzTBqRaSwXQInBNzKtDY - 9wN4y5qCWlHoVNycX0kpkxluzVU5/d1q/kr5H+B/OuyfBngEXOBinn8nRehSBV6eSikDkgIpqloinAXG - 17mq2FjcBYJ8kAi2EcXAouyUy4elXxXxvkLpeT/HU9x78PttIxABzYG7cgQ7x7uNK4oUTpAh8IIcyDmk - bzwSRTf89Nydc2NNvgP76plWar5z/FH8bwv3p2E3Ao4IWI12gO/O2QUPAgDBiATxv5c9uJT81/t/JXq9 - p3/X7zJkkCMB3lHxj16niOCp6j/4/M9HIIChAnsnPbhLECtSwHs60Oyq6t3cnO+9eo39uEsiMe7/eQA8 - HXhGAHcWdlXtu2C/c/6KGHZAvzqHCQ3vqcDuCOAjfX3U/sHZXzMC6AqUsn2HM9glC7fLEa935zjA76Qw - zvp3yo+gfwp7f034Px3FEViRAYNqF8ifPQ9B3pHCDmGsrH70dUf5uZ7xRNMzAv/MCKhq+e+qHewQRkcK - iqhW5LACPBIHjs0/M+HPgzwj0I3AR9zBCnQ7QP/qc1Rq4MCP935A/+DjGYExArx8h7aZi3M7ruGriILb - UcBWKw9c5+Dneyb+GYFnBBYj0JHCqqh2Jy/n5T7XtjtvBfangPeE+jMCXzQCZaPPa0MPV/BXy3mdo3Br - 82rlQvXlix7zaeYZgWcE7o6AAuR3vHe3X8/5zwg8I/CMwDMCzwg8I/CMwDMCzwg8I/CMwDMCzwg8I/CM - wDMCzwg8I/CMwDMCzwg8I/CMwDMCzwg8I/CMwDMCzwg8I/CMwDMCzwg8I/CMwDMCzwg8I/CMwDMCv2ME - /j+XYW4M99s+lgAAAABJRU5ErkJgggAAKAAAAIAAAAAAAQAAAQAEAAAAAAAAIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A - //8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB3d3h3h3h3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAB3eIj//////////4iHd3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAHeIj/+PiIiIiIiIiI////+IdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAB3iP+PiIiIiPiPj4+Pj4iIj///+HcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAB4j/iIiIiPj4+IiIiIiPj///iIj///h3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAB4+PiIiI+PiHd3Z3Z8d3dneHiP//iP//+HcAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAB4+IiIiPiIdnR8Z8fHx2xsfHx2d4iP//j///dwAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAB4/4iIj4h3ZHx2dnx2fHfHfHfHx8bHd4j/////93AAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4+IeI/4dnRlZ2x8fHx8dsjHfHbHx8fGx3eP/////3cAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4+IiI+IZWVsfHx3x2dnx3x2fGfH58dnx8fGd4j////4cA - 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 - +I9wAAAAAAAAAAiIiHZnTGfGRlZWx0fGR0VsZHx0ZWfGVsZ0fGx2fHZ2dnx2fHx2d8dox2fIZ2x3x2fH - Z8dnd4+I9wAAAAAAAACIiPhHx2ZcZWxkbHRkZMbGRlZGR2xkdGdlbHZ2x2fHx8fHZ8dnx8dnx2fHbHyG - x2x8dsdsfHx/iPcAAAAAAAAAiIj2fGx8ZkZWVsZGR0dGVkfGVsZHR8bFbHZlx3x8dnx2fHx2fHZ8fHbH - Z8hnx3x3yGd8d8dnf4j4AAAAAAAAAIiIh8d2x0fGxsZWVsbGRkbGRsZWRsZ0dkZFRmRkZGVnx2dnx8d8 - doZ8hshsfHx2x2x8fHx2x2j4iHAAAAAAAAiIj3Z8ZWfGR0ZWRsZWR8fHR0dGR8dHRsd3d3d3d3d0Z2x8 - fHZ8dnx8dnx8d2dnyGfHfHZ+fHx3+I9wAAAAAAAHiIh8Z8bHbHRsbHR0bGRkZGRsZWRkZGVoiIiIiIj4 - hHx3x2fHZ8fHZ8fHdnx8fHbHfHZ8fHZ3R4iPgAAAAAAACIj4d8dnbHbGVlZGxlZWR0bHRkbHR8fGWIiI - iIiIiIZWx2fHZ8dnZ8dnfHx2fHZ8jHbHx2fHxnyPiIcAAAAAAAiI98Z8bHfHbGxsfGRsbGxlZMdHRsZG - dGiIiIiIiIiFZ2fGfHx2x8dsfHZ2x8dnx2fHZ2fHbHx2j4j3AAAAAAB/iId2x3x8Z8dlZkZWVlZWRsdk - bGR0dGx4iIiIiIiPhkfGfHZ2fHZ8d2fHx3Z8fHbHZ8fHbHdnZXiI9wAAAAAAiIj2fHbHZ8Z0fGVsbGxk - bHRkR0ZWRsZWSIiIiIiIiIVsdHZ8bHZ8dnx8dnx8dnZ8d8dnbHfHx8dviPgAAAAAAIiIh8fHbHx2x8ZG - x0dHRlbGVsbHTGVkbHiIiIiIiIj3R2fHx3Z8dnx2dsfHZ8fHx2x2x8dsdnx2WIiIcAAAAACIj4Z2fHZ2 - x2dnx2xsbGxkdMZWRmVsZWRoiIiIiIiIiEZWZWbHx2x2x8d2dsdnZ2fHZ3x2d8fHbHf4j3AAAAAAiIh8 - fHbHx2x8fHxlZ0dHxsZ0bHTGR0bHx4iIiIiIiIh0bHx0dnx2x3Z8bHx2x8fHZ8fHbHx2bHZniI9wAAAA - CIiPd8fHbHx2x8Z2xsbGxnR0bHRmVsbHRkiIiIiIiIiIhHR2Z8dGdWfHx3Z2fHZ8dsdsdnx2bHdld4iP - cAAAAAf4j2dnbIZ2x3Z8dndHR2TGRsdGx8ZWRkdGiIiIiIiIiIdGR8dsfGx8Z2xsfHZ8dnx8d2x2x3x8 - fGX4j3AAAAAIiIh8fHbHx2x8Z8fGxsbHZWx0bHRkZWxsbIiIiIiIiIiIdHRsdlZ2dlx2d8dsdsfHZ8Z8 - d2x2dkdmiIiAAAAACIj4Z8fl7HyGx2x2x3Z0fGxlbHRkfGx2VlaIiIiIiIiIiPdGVlZsfHxnZcZ2Vnx2 - dsdnx2x2XGVsdI9/gAAAAAiIiHx2x8dnx2fHZ8fHxsZWbGZGxkZWRsZGWIiIh4h4iIiIdGfHx2VnbHZ0 - bHxnR8dlx2R2XGdsdlaIiIcAAAAIiPhnyGx2x2x8fsdsdnx2x0fHx0fGRsdHxsiIeIiHiHh4iPdEZnRm - x0dMfHZ2Vsdkdmx8fGdsdlZ0iIj3AAAACPiIx2x3yGx+dsfHx2x2fGRsZGRsdHxkZHRmiIeHiIeIh4iP - hFZHx0dsdmdHx8dkfGx2VmdHx0fGx3+IhwAAAAiI93fIxnx3x8fHZ2yGx8dsdlbHxmxnR8bGXHiIiHh4 - h4iHiIhkdHbGVmXGfGZ0fGd0fGfGx2R2ZWSIiPcAAAAIiPfIZnx+x2x2fHx2x2x2fHxsdkdHTGR0dGZI - eHiIh4h4iIiPh0bHR8fGdGVlbGdGx2VkdWR8bHx2f4iHAAAACPiIZ8fIx2yGyMfnx3x3x8dnx0bGxmfG - xmx8ZYiHh4h4h4eIiPhkdGZkdGfGVsdHx2RsdsZ8Z0dGVniIhwAAAAiI93yG52x3x2x2x2x2x2x2x2xl - ZWXGR2XGR0bIeIeHh4iIeIiPhUZWVsfGdGdkdmR8dlZ0Z0Z8dkWIiPcAAAAI+Pdox8x3xnyGx2x2yGx+ - x2x3xsbGZWxkZ8bGZ4h4iIh4yIiIiPhkZcdmVkfGVsfHRlbGVsdMdkdmeIiHAAAACIiIyGyGyGfHx+x3 - yGx2x3x3xndnZcbHR8ZHR8TIh4d4eIiIiIiPhHZkdGVsdGx0ZHxlZWx0dkfGVIiI9wAAAAj4+Gd8d8bI - bnx3x2x2fIxnxnxsfHxnRsZHxsZGZIiIiIh4h4iIj/dEfGXGdGx2R0fGdGx2RsdGVmWIiIcAAAAIiIjI - yM53x8fHx2yGyMdnx2fHfHbHbHx2xkdlbHxnh4yIiIiIiIj/dGR2bGVnR8bGdGx2R0dkfGx0iIiAAAAA - CPj4doZ8fIbH58aMaMZ8fHbHbHbHfHZmx0fGxlZGxIiIh4h4iIiIj4ZHxHR8ZGRnR0ZWR0bGVmVnRoiI - gAAAAAiIiGfHx+fIbHx8dnx8fnbIbIbIbHbHx2xsZWxsdHxnh4iIiIiI+Pj3RmVsZ0fHRlbHZHxlZWx2 - RlaIj4AAAAAH+Ph8jnx8bIZ8hnx2fsfHbHbHbHbIZ8fHdnxlZ8ZkxniIeIiIiIj4/0VkZ0bGdGxnRsZH - bHZHTHRliIiAAAAACPiPd3x8fnfHx+x+x8d8fIbIZ8fIbHx2fHxnbGRlx2x4iIiIiI+Pj492R8ZWVkZW - VsdHbHRsZGdGV4iPcAAAAACPj3yOfsfH7IbHx3x8dsfHbHyGfHZ2x8dnx8dsdmRlxoiIiIiIiPj/hGR0 - bGVsfGRkfGVkdHx0Z0eIiIAAAAAAj49+fHx8jHfHfIxoznyGfIZ8bHbHx2dsfHZ8d8bHxmWIiIiI+PiP - j/dGxlZGx2R8dkdGRkdkbHRoiIhwAAAAAI+IjIjIZ8dsjOdnxnx2x+fHx37HZ8fHx2fGx2x3x2XGeIiI - iI+Pj4j4R0fGfHRkZ0bGR8dsZWVkd4iIAAAAAACIj4fIbIyMhmfHyGfIx+x8fOfHbIx+fH7HZ8fHbHbH - bHiIiI+I+Pj/+EZGZWRkfHRlZWZGVlbGRliIiAAAAAAAj4/3eIx+Z8jH7Hzsdnx3x2fHbIx2x8Z8fHx2 - fHbHZ8fPj4/4+Pj4iP9GXHxlbHZGxlbHR8ZGdHR4iPcAAAAAAA+I986MfHznx8hnd8jHx2yMfIbHZ8dn - x2fHbHbHZ8dmePj4+P+Pj/+PdGZGRnRsdHRsdGxlbHRneIiIAAAAAAAI+Ph3jnyGx+fHx8fsfnyGx+fH - fHx+x2x8Z8fHZ8fGx8+Pj4+P+Pj4/3R8dlxsdGxnx2R2VnRnRoiIgAAAAAAACPj4zoyGyMfH5858d8fH - x+x8fOfGZXx+dnx+fHx2d8dvj4//j4//j492Z8dndnx3x2R8fGfHx0eIiIAAAAAAAAj4j4eIyMfnyMd8 - fsdn5+x3x2fHiGRnx8fHbHbHbHx8iP/4+P/4+P//dMdsfGx2R2R8Z2dGZWZ3iI9wAAAAAAAAj4+MiHyM - fIx858d8jMfHx2fHaIj4Rnx8flbIbHbHZo+Pj/+Pj/+Pj3Z8dnZWx2x8dnxsfHZWWIeIgAAAAAAAAI+P - h8iOZ+fH58d8fsd8d+yM58j/j4dGZ8fIbHfIbHj4//j4//j4//98Z8bHx2VnZlbHZWdMdniI+AAAAAAA - AAAPj/h+jIx8jHyM58d858fHx3xoj4/4h8ZmfHbHbHaI/4+P/4+P/4+PZ8dlZ2x8fHxnZWx8dmV4h/cA - AAAAAAAACPj4d4jHyG58dnyM58fnyGx+yP/4//+IVkZHbHZ4+Pj/+Pj/+Pj4/0dkfHx2dmVnx8Z2Z0dH - iHiAAAAAAAAAAAj/j3eI5+x8fsjIZ8d8fIZ+x3iPj4+P//+Ih3h4/4//+P//j4/4//hsfHZsfGx8bHZW - x8Zsd4iPgAAAAAAAAAAA//+MiIx3yMd8fOyM58jGx3zI///4+Pj///////j/j/+Pj//4/4/3VnbHx2Vn - x2dGx2VldliHiHAAAAAAAAAAAI+P9+iHyMhnyOd8d8fnyHx36Pj4////j4+Pj4////j///j4/4+P9sfH - Z2VsfGfGfHbHbGV4iIgAAAAAAAAAAAAP//h8iOx+yOx8d858fHznx8j///j4////////j4//j4+P/4+P - j4dsdsfGdnZWfHZHbHZWiHj3AAAAAAAAAAAACP//iIh3x3x8fshnyMhox+x4+Pj///j4+Pj4///4///4 - /4+P+P98dsfHbHxsfGfHx8dHZ4iIgAAAAAAAAAAAAAD//4aIjIznyMd8jIZ87Hx3yP//+P////////j4 - //j4/4/4+Pj4bGdnbHbHfGfGZ2Z2x1iIiIAAAAAAAAAAAAAAj//4yIjnyGjOfH7HyHyGyGj4+P/4+P+P - j/j///j//4/4/4+P9lfHx8fHbHZ8dHxcZWZ4h/gAAAAAAAAAAAAAAA///3joyMfOfIbHfnx+yGx4//// - /////////4//+Pj4/4/4/3xnxnxnbHbHxnxnZ8dHiIiHAAAAAAAAAAAAAAAI//+HeIyOfIx3jHx+x3yM - 5//4+P/4/4/4/4//j////4/4j/fHxnx2fHZ8dnxnxsZ2eIh/gAAAAAAAAAAAAAAAAP//+HeIx8jIzsjI - x3yMdsiP///4////////j/+Pj4/4+P98dnx2x8Z8Z8ZWfHZ8dIiHiAAAAAAAAAAAAAAAAAAP//+OiI58 - hnyG587Ibsh8j/////+P+P+P//+P/4/4+P+Hxnx2x3x2x8dnxsdsdkeIePcAAAAAAAAAAAAAAAAACP// - h3iHyM58jHyHx8d858eP/4///////4+P/4/4///4xnbH5Wx2Z8dsfHdsdlZ4iIiAAAAAAAAAAAAAAAAA - AAD///h3iIyMjH7Ix+d8hnyMbIj///j/j////4/4//+Ixnx8hsd+x8dsdsdsdlbHiIeIAAAAAAAAAAAA - AAAAAAAAD///h+iOfOfIfOfHyMfIZ+fIaI/////4//////iHxnx2dsdsfHZ8d8dnx8bHd4h4+AAAAAAA - AAAAAAAAAAAAAAj/j/h3iMjIbIZ8jIbn7Hx8jGx8iIiPj/j4iIfHxnx2yMdnx2fHx8Z8fGdndoiHj3AA - AAAAAAAAAAAAAAAAAAAAj///h8j37IzsjIbsfHfIaM5358bGx8fHx8bH7HyGyGx8jHx8dnx2x2fHxseI - ePgAAAAAAAAAAAAAAAAAAAAAAAj/j/iOiIyHd8jHyMjI7Hx3x8fIaMhn5858jHdnx+x2fsdufHxn7HbH - bHeIiIiAAAAAAAAAAAAAAAAAAAAAAAAA//j/iMiIzsjOfnyGfHfnznyMjHx+x8d8d8fOyGx3yMdsfHbI - bHfHbHdniHiIAAAAAAAAAAAAAAAAAAAAAAAAAAj/j4iI6IfIaMfIyMjOXIyGfmfnx8jOx85+fHx+x2x8 - d8fIbHbHbIbHiIeI8AAAAAAAAAAAAAAAAAAAAAAAAAAA/4j/iHiIjHyMhnbnx358fHyMx+fHfIaMfHfI - x3x+fGfnbHbIbIbHeIiIiIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4j/iMiIjnyM7Ix3yMfn58dox8jOfH - x8fOdnxox8jHx8fIbHfHd4iHiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iPiI54h+yHyM7Ix8fHyMjI - yGfH58hufHx+x8dsfsdn7HfGfHiHiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iP+HjIiHznyHfsjn - yGfsfnzsjHyGx8fIx3yMhsd8fHfGjHiIiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iP+IiHiIyM - 7HyMfIyMd8fHd8jH7IyGjHbH5shsfsfGfGiIh4iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iI+I - joeIhoyMfnyGyM58jOyG58d2x858hsd8d8d8jHiIh4iIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - iP+I/4jI6Ih358fIznZ8hud8fHyM5358fsd8fsfsdmeHiHiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACP+Ij/iHjIiHjI58jIyMjHyOfIZ8fHx8d8hsd8d8iIiIeI+AAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAACI/4iP+IjoyI6MjH7IbsjIx8jOyMjIaMfsd858h4iIeIiIAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAIj4iPj4h4eMiOd3yMd8fnyGfIx+fOx8d851iIiIeIj4AAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAIj/iIj4iIeO13yOyMjsfIznyGx8d8jsd3iIiIeIiIgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiP+IiP+Ih4yOeH58h358jIyOeMhseIiIiIeIiIgAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI//iIj/j4iIx3d8jHyGfnx8eOiIiIiIeIj4gAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP+IiIj/iPiIiHiIeIeIiIiIiIiHiIj4cA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI/4iIiIj4+Ij4iIiIiI+IiIiIiP - iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP/4iIiIiIiIiIiIiIiI - iI+PiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP/4+IiIiIiI - iIiIj/+IhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIj/ - ////////j4dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAACHd3d3d3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////wAAH////////////////+AAAAD/// - ////////////4AAAAAH//////////////wAAAAAAP/////////////wAAAAAAAf////////////wAAAA - AAAB////////////wAAAAAAAAH///////////wAAAAAAAAAf//////////wAAAAAAAAAB//////////w - AAAAAAAAAAP/////////4AAAAAAAAAAA/////////4AAAAAAAAAAAH////////8AAAAAAAAAAAA///// - ///+AAAAAAAAAAAAD////////AAAAAAAAAAAAAf///////AAAAAAAAAAAAAD///////gAAAAAAAAAAAA - Af//////wAAAAAAAAAAAAAD//////4AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD//////AAAAAAAA - AAAAAAAf/////gAAAAAAAAAAAAAAD/////wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAH////8AAA - AAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAP// - /8AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAA - AAA///8AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP//wAAAAAAAAA - AAAAAAAAD//8AAAAAAAAAAAAAAAAAAf/+AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAA//wAAAA - AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/ - 4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAA - AAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAA - AAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAA - AAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/ - gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAA - AAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAA - AAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAA - AAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAD/ - wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAA - AAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAA - AAAAAAAAA//4AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//8AAAA - AAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAB// - /wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAA - AAB////AAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////wAAAAAAAA - AAAAAAAD////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAA - AAAAAAAAAAAAH/////8AAAAAAAAAAAAAAD//////gAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAf/// - ///gAAAAAAAAAAAAAP//////8AAAAAAAAAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAAAAA - D////////gAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAA - AAAAAf/////////4AAAAAAAAAAf//////////AAAAAAAAAAP//////////8AAAAAAAAAP/////////// - wAAAAAAAAP////////////AAAAAAAAP////////////+AAAAAAAf/////////////4AAAAAAf/////// - ///////4AAAAA////////////////4AAAH/////////////////+AB//////////KAAAAGAAAADAAAAA - AQAEAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA - wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d3d3d3d3cA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3iIiIiIiIiId3dwAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3eIiIiIiIiIiIiIiIiHd4AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAB3eIiIj4////////j4+IiIiHeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeIiI - j/+Ph3d3d3d3iIj/+IiIh4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd4iIj/+Hd2VnxsbHxsdHd3 - j/j4iIh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHiIj4+HdlZWfHZ3fHZ8fGx8Z3iPiIiHeAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAd4iPiIdlZWx8dsfMdsfHyMfHzHx3/4iIh3AAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAh4//iIjIh3zn7IyGjOfOfOyM58foiPj4iHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeP/4iI - d4h8jIzsfl58jIx8fIiI+PiIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3iP/4iH6HjOd3yMfIyGjo - iPj4+Ih4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeIj//4iIiIjIhoh4iIiI//j4iHgAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeIj//4+I/4j4j4iPj/iPiHcAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAACHd4iP/////////4+IiHeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - CHd3eIiIiPiIiHh3eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3d3d3d3d4AA - AAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////// - ////////////////////////////////+AAD////////////gAAAP//////////8AAAAA//////////g - AAAAAP////////+AAAAAAD////////4AAAAAAA////////gAAAAAAAP///////AAAAAAAAH//////8AA - AAAAAAB//////4AAAAAAAAA//////wAAAAAAAAAf/////gAAAAAAAAAP/////AAAAAAAAAAD////+AAA - AAAAAAAB////8AAAAAAAAAAB////4AAAAAAAAAAA////wAAAAAAAAAAAf///gAAAAAAAAAAAP///gAAA - AAAAAAAAH///AAAAAAAAAAAAH//+AAAAAAAAAAAAD//+AAAAAAAAAAAAB//8AAAAAAAAAAAAB//4AAAA - AAAAAAAAA//4AAAAAAAAAAAAA//wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/gAAAAAAAAAAAAAP/gAAAA - AAAAAAAAAP/gAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAD+AAAAA - AAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB+AAAAA - AAAAAAAAAB+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD/AAAAA - AAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAP/wAAAA - AAAAAAAAAP/wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/4AAAAAAAAAAAAA//4AAAAAAAAAAAAA//8AAAA - AAAAAAAAB//+AAAAAAAAAAAAD//+AAAAAAAAAAAAD///AAAAAAAAAAAAH///gAAAAAAAAAAAP///gAAA - AAAAAAAAP///wAAAAAAAAAAAf///4AAAAAAAAAAA////8AAAAAAAAAAB////+AAAAAAAAAAD/////AAA - AAAAAAAH/////gAAAAAAAAAP/////wAAAAAAAAAf/////4AAAAAAAAA//////+AAAAAAAAD///////AA - AAAAAAH///////wAAAAAAAf///////4AAAAAAA////////+AAAAAAD/////////wAAAAAf/////////8 - AAAAB///////////gAAAP////////////AAH//////8oAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A - /wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHd3d3d3d4AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACHd4j//////4h3eAAAAAAAAAAAAAAAAAAAAAAAAAAAd3j//4+P+P////+HeAAAAAAAAAAAAAAAAAAA - AAAAAHeP/4h3d2VnR2d4j//3eAAAAAAAAAAAAAAAAAAAAACHiPiHdlZlZ8dsfHR3j//3eAAAAAAAAAAA - AAAAAAAAB3j/h3RlZ8fHbHx8fGx0iP/3cAAAAAAAAAAAAAAAAAh4+PdkZWx8dnx8d8fHx8bHj/+HgAAA - AAAAAAAAAAAAh4j4dGVsdnbHx2jGfOfGfHxlj/h4AAAAAAAAAAAAAAh4j3RkZHbHx2x8fHzlx8fHxsdo - /4eAAAAAAAAAAAAAh4j3RkdGx0Z8dnZ2x8dsjGx8fMdv/3cAAAAAAAAAAAh4j3RkRsdGfGZ4iIiGfIxs - jOx2x8f/94AAAAAAAAAAB4j2RGRkZGxlZYj4+PjHx8fHx8fHx0/4eAAAAAAAAAB4j3RkR0R8dHx4+IiI - j3bH7Hx8fOx8dv+HAAAAAAAACIj3RGRsZGRkZs+IiIiPjHx3znznx8fHf/hwAAAAAACHj3RkZUZEfGXH - eIiIiIiGfGx8fHx8fsfI/3gAAAAAAHiPZGTGRGxkZGR4iIiIiIx8hnx2x8fHx2T/hwAAAAAIiPdGVkbG - VkVsfGiIiIiPfHbIx8jH7Hx8fH/4cAAAAAeIhGxGxHRkbGVmx4iIiIjHyGx+fHx3x+x2ePhwAAAAiI90 - ZGR0ZMZGRsdGx4eIxnZsd8fH58Z8dsfG/4cAAACIiGTHxkxkZFbHRkdGxsZ8fHfGfHx8fH7HfHaPhwAA - AHj3x2RsZGx0bGRkfGfHbHbHx2fHZ8dnx3x8fH/4gAAIiPR2xkdGVkxkRlxmxGR0fHZ8fH7HbIx8Z8dn - T/dwAAiPdsfHxGxsZGVsZkWIiIh2fHbHZWyGx2fHbHx3/3AACI92fGZGx0ZHxkZFbIiIj4R8Z2fHx8ds - fHx+x2ePcACIiHxnx8dGxGxkx8bHiPiI9GfHx2x2fHfHZ8dsfP94AIiIZ8Z8bGxlZMZGRkaPiPj3xnxs - d8fHbH7HbHfGj4cAiPjHx8dnx0xsdGx0bIiIiIhGx2fGdmx2x2x2xnSPhwCI93bHbHxmxnRsdGxkiIiI - iHR2x2x8dsdsdsd8Z3j3AIj3x2x8Z8dsbGRsZHxoiIiI90ZWx2bHfHZWfGfEf4cAiPdshsjGfHbHxsZc - ZGiIiIiIhGx2x2xnxsfHRnZ49wCI93xnxnznx2xlZGbGxYiIiIiIZGVsdHRnRmx8TH+HAIj3yM5858fG - x2xsfGVkaIeHiI+FbHRsbHxlZWZ2X4cAj/dmfHx8fHfHx2xkRsbHiIiIiPhGRlZ0ZHxsbEZ49wCI93x8 - fsdmznx8d8fGVsTIh4iIj3RsbGR8ZHR0dHj3AIj4yM7HfHx8dmfGbHxsZkaIiIj490dHRsZWxkbGf4cA - iPhnZ3xn58fHznx2fHbHxMiIiP/4RsbHRsZWx0aIhwCI/3yMaMx8fnx8fHxnx2xnZ4j4j49kdGR0dGR0 - ZY+HAIj/dsjGjH7Hznx+x8Z8dsfHj4/4/3xsfGxkbGRkiHgACP94znx+x8dsdsdsjGx8dsb/+P//dGRk - ZWx0fHePcAAI/4aMdsfIbIx8fHbH58fHbP////+Gx8fGdGxmSIhwAAiP98jIyGyMfshoh2x8fmx4///4 - /4R2Z2xnx2Vo+HAAAI/4fs58jOfHbHj/hsbHxnj/////jGx8dHxnxniHAAAAiPh3x858fIyM6P//iHd4 - //////92fHxsdsZWiIcAAACI/4eMjH7H7GfP//////////+P/2x8Z2fGfGWPeAAAAAj/iM52yMjHfH// - ///////////4x8Z8xnxnSPhwAAAACI/4jIyM587Iz///////////+PdsdsdsdHx4iHAAAAAAj/9+fOfI - yGbo//////////j/fGfHbHbGx4+HAAAAAACI/4h4yM58jHj///////////fGx2x2x2dIiHgAAAAAAAiP - +H7Ix8jIzHj////////4xnx8dsfGxoiIcAAAAAAAAIj/iHaM585+xsiIj/+Ih8Z8fsfHxnx3iIcAAAAA - AAAACP/4d8jIx8d37Gx8bHxsfOfHbH58Z8j4cAAAAAAAAAAIj/+I52fnfOx3yOyM58hnx8Z2x8fIj4eA - AAAAAAAAAACI//iIyMfnyMjGfH5WfOx858jGxoiIiAAAAAAAAAAAAAiI/4iOfHyM52jIx8jHyMfHxnyI - j4hwAAAAAAAAAAAAAIj//4iHfsjIx+yOx+yG58hseIiIeAAAAAAAAAAAAAAAAIj/+Ih4dozsfHyMdsfH - 7HiI+IcAAAAAAAAAAAAAAAAACIj/+Ih353jI5853dox4iIiIgAAAAAAAAAAAAAAAAAAAiI//+IiHd+fI - d8jIeIiPiIgAAAAAAAAAAAAAAAAAAAAAiIj//4iIiIeIiIiP+IiIAAAAAAAAAAAAAAAAAAAAAAAAiIj/ - ///4+Ij4//iIiAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIj4///4iIeIAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAIiIiHh4iIgAAAAAAAAAAAAAAAAA/////////////////////////wAD///////wAAA//////8AA - AA//////AAAAA/////wAAAAA////+AAAAAB////gAAAAAB///8AAAAAAD///gAAAAAAH//8AAAAAAAP/ - /gAAAAAAAf/+AAAAAAAA//wAAAAAAAD/+AAAAAAAAH/wAAAAAAAAP/AAAAAAAAA/4AAAAAAAAB/gAAAA - AAAAH8AAAAAAAAAPwAAAAAAAAA/AAAAAAAAAB4AAAAAAAAAHgAAAAAAAAAeAAAAAAAAABwAAAAAAAAAD - AAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAA - AAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAOAAAAAAAAAB4AAAAAAAAAH - gAAAAAAAAAfAAAAAAAAAD8AAAAAAAAAPwAAAAAAAAA/gAAAAAAAAH+AAAAAAAAAf8AAAAAAAAD/wAAAA - AAAAP/gAAAAAAAB//AAAAAAAAP/+AAAAAAAB//4AAAAAAAH//wAAAAAAA///gAAAAAAH///AAAAAAA// - //AAAAAAP///+AAAAAB////8AAAAAP////8AAAAD/////8AAAA//////+AAAf///////AAP///8oAAAA - MAAAAGAAAAABAAQAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAA - gIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - B3d3d3d3cAAAAAAAAAAAAAAAAAAAAAB3eI////iId3cAAAAAAAAAAAAAAAAAAHeP//h3d4j//4d3AAAA - AAAAAAAAAAAAeI+IR0dnx2VlZ4+HcAAAAAAAAAAAAAAHj/dlZ2XHbHx2V3ePh3AAAAAAAAAAAAB/90dG - VsdsjHbHxsdoj3cAAAAAAAAAAAj4dGR0Z2x3ZsjHx8fHePdwAAAAAAAAAI+GR0ZHxleIiHx858fHx493 - AAAAAAAAB/hHRkZGfHiIiIbHx8Z8dnj3gAAAAAAAf4dGRGVsZoiIj4jHbIx8fHf4cAAAAAAIj3RkZUZH - RYiIiIhsjHznx8d/dwAAAAAH90ZFZGxkbHiIiIfHZ8fHx2x49wAAAAB/9lZGRkR8dmiIiIx8fH5efHZ2 - +HAAAACPdGRsZGxkbFZ3fHZ8fsfHx8fHf3AAAAiIdGx0R8ZHRmzGx2x+V8dsdnx2eIcAAAf4ZWRsZEdE - bFZ3Z8fHxnx3x8fHyIcAAAj3RsfGVsZGx2iIiGdnbHbHZ+dnd/cAAIiHZ8ZGxkbHRGiI+Fxsd8d8fHzH - x/eAAHiHx8fHRsdEbHiIiHZ8fHbHbHZ8dohwAH+Gx2dsbHRsZMiIiIxnZsdsdsfGdIiAAH93x8bHfGxk - dkeIiIhUx2x2x2dlZ49wAH98fnx8Z8ZcbGyIiIiHbHbHZcbGxn9wAH93x8fnxnxmxlZIiIiIdkdkdmVn - R39wAH92fOXGfHbHRsbHeIiI9GxWxsbHxn9wAH93x8dsfGfHx0ZMaIiI+EZsdHR0ZYhwAH+M52fIZ8fs - dsdsbIiI/4RWRsZGVoiAAHj3fHzsfIx2x2x2VniPj4bGx0fGZYhwAIj3yOd8hsbHx8fHxs/4/4RlZGRl - ZvgAAAj3jMx+x+fIbIbHZ8////fGfHx8dfcAAAf4jn7Hx8fIiGx+xo//j/dsdmZnSPcAAAiPd8d8jIzo - /4dneP////R8bHxWeIgAAAB/iHyM58fI/////////4xnZWZ8f3AAAACI+OyGyOx+///////4/4bHxsfH - +HAAAAAI+IjIx8jI////////+Mdsdnx39wAAAAAHj3jOfsfnj///////jGx2x8d/iAAAAAAAf/iMfIx8 - eIj/+PiMZ2fHx2ePcAAAAAAAB/iI58jOzOx8fHxnx8fHZ2j3AAAAAAAAAI/4h+yHd8jOfOfH7H5sfP+A - AAAAAAAAAAj4iHfOyM58d8dsd8fHj/gAAAAAAAAAAAB/+IiMjIx3znyMfHZ4+IAAAAAAAAAAAAAHj4iI - 587Ix8hn53j/hwAAAAAAAAAAAAAAh/+IiId+d+yMiI+IcAAAAAAAAAAAAAAAAHiP+IiHd4iP/4hwAAAA - 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 - wPEbmP0G/n+7sMqt4AflUwAAAABJRU5ErkJggigAAACAAAAAAAEAAAEACAAAAAAAAEAAAAAAAAAAAAAA - AAEAAAABAAAAAAAAXCQMAF8qFABmJw0AYysUAHMtEQBpMhsAdzcbAGk6JwB3OyQAbUAtAHdBKwBrRzcA - d0k2AH1RPgBxT0EAeVVGAH5dUQB8Y1kAfGpkAH19fgCLOxgAkz0ZAIM9IgCNQB4AmUEdAKBFHgCLQyUA - lUcnAIVLNACYTjAAilE6AJxSNACiSCMAplAtAKZPOQC4TzgAp1c3ALZbOgC7YT0AxE00AMFTOQDEYzwA - iFhGAJlYRQCFXlEAml1RAKpbQgC2W0IAoF5SAJVhSwCJZFYAk2ZTAJpkVACWZ1oAm2RYAJVqWwCbalwA - pmNHALxkQgCma1YAtG5TAKdyXQC7c1cAiWxjAJNuYQCebmIAjXNoAJRyZQCYcGQAknVrAJJ4bwCaeWwA - hnl3AJR7cgCcfHAApG1iAKRxZQCpdmIAoHNoAKhyaAChe20ArXxqALV7ZgCpe3EAyGlEANFuSQDLcE0A - 1XBKAMJvUADGdlcA1nhVAMJ7YADRf2AAnIN6ALiCbACphXgAuIl3ANuBXwDNg2YA2YdnAMmMdgDUjXEA - 2pN4AOKLawDgj3AA45Z5AH9+gACAf4AAg4ODAIuDgwCHiIgAi4uLAJmNjACdk44Ajo6QAJOPkACTk5MA - mpSTAJeXmACXmJgAmpqbAKSKgACrjYMAtI6CAKuSiAC1lYkAppuZALSclAC5m5MAsp6ZAKqgnAC5oJUA - taOdALukmwCfn6AAoJ6gAKSiowCrpKQArKmmAKumqACuqakAtKWgALumoACyq6YAuqqlALKsrAC9raoA - urSsAK6usACzrrAAtbGxALq0tAC+uLYAtrW4ALq2uAC9ubkAx5iHANibgwDHnpMA5J2CAN2ijADCo5oA - 2amXAOajiQDlqpQA5LCcAMSspQDFua0Aw7WxAMy3sADCu7QAy7q0AMK8vADKv7sA0ry1AOm6qQDHwK4A - xsG0AMnCtQDEwLsAy8O8AM3KvADTwrsA1si/AO3ArwDsw7QA8cu9ALy9wgDCvsAAv8DAAMXBwQDJxMQA - zcjEAMnGyADNysoA08bAANLMxADdysEA0czNANrOyQDU0cUA1NLKANvTzADMztAA0s7QAM7Q0QDV0tIA - 2dTUANbY1gDc2dUA2dbYANfY2ADd2toA78zAAPDOwQDl1swA8tLGAODW0gDi29QA6dzUAOHd3QDz29IA - 5eLUAOji1gDk4dwA6uTcAOvo3gDy4doA39/gAOLf4ADl4+MA6eXlAOfo5QDs6uMA5uboAOjn6ADn6ewA - 7OrqAPPm4gDx6+QA8O7tAPLw5gD08uwA+PTuAPn47gDt7vAA8e7wAO3x8gD08vIA+PX0APv59QD09vgA - +fb4APb4+gD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - b29wdXV3d3h4eHh4dXV1cG8UbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAb3Bwib/O3fn7+/v7+/v7+/v7+/v799XOlXVwFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAHBweL3R8fr56N3Sx8K/v729vb+/wsLOzdXn8f37+/v2zolwFAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAcHCVx/b66N3CmZiYmL3Cx9HR3d3d5t3d3d3Rz8fOws3R5vn7+/v2mnBsAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAcInH8fHdwpeWl67N3ebj8NvLyMbExMSvxMTIyNji8PDw8efRzc/V9vv7 - +/eVb28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdZzn8dW9lpCZy+fw4tjEhoF7UUVFNjc1NTc1NzZMT1R+gaev - 3PD19Pbo5/b7+/v7z3drAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdb/2586WjZjR8PDbqoFeQTMrHyssLCwvLy8vLy8v - Ly8vLC8sLDxMYJ+q3PH7+/v++/v7++uHbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdcL23b2KkMLv9NinekErDh8sLCUsLy8v - Ly8vOjAvMDAwMDAwMCQwLyMvLDFQfKrc+vv7+/v7+/vneG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdb/o1ZmOl9H15Kl6Mw4dHywg - LCUvLy8vLy8vMDAwMDAwMDAwMCkwMCkpMCkpJC8jMUx8r/H7+/v7+/v75XVvAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdZXd3ZyKl9Lz2KJB - Dh0dLB4gJSUlJSUsLy8vLzAvLzowOjAwMDAwMCkpMCkpKSkpKSQkIy8xVKfk+/v7+/v7+8JvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHXP6L+K - ltH12H4zDR0dHh4eICwgJSwlOi8vLy8vLzswMDAwOzAwMCkpMCkpKSkpKSkoKSkoJCQjMVCi4vv7+/v7 - +/uHbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AHWX58eWisL63H4tDR0bHh4eHiAgICUlJSwvJS8vLycvLy8wMDAwMDAwMDAwKTApKSkpKSkoKCgoKCkk - IzFMou/7+/v++/vMbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAB1zt29ipfo8KdBCwsbGx4bHh4gHiAsJSwlJSU6JS8vLy87LzowOjAwMDAqKTBVKSkwKSkp - KSkoKSgoKCgoJCQsVK/5+/73+/v+dQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAidXRloPH+thRDQkbGxwcGx4eHh4gICAgJSwlLC8sLy8nOi8wMDA7MDAwMCkw - KSkwKSkpKSkpKSgoKCgoKCgoJCQjMXzc/fvr9/v7lW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXdwoOW5/GBDgkXFxgbGxweGx4eHh4gLCAlJSwvLy8vLy8vLzow - LzA6MDAwMDA7MCkwMCkpKSkpKCkoKCgoKCgoKCkkMUyn+fvr5/77whQAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHic0r2DnPvcUQsJFxUYGxgcGxweHB4eICAgJSwsJSUs - JSw6LycvOy86OzAwMDAwVSkwMCkwKTApKSkoKCgoKCgoKCgoKCgkIzF84vvrz+z71WsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4wtWYg8L6ty0JFxUVFxgYGxscGx4eHB4e - ICAeJSUsJSwlJy8vLC8lLy8vMDAwMDApMDAwVSkpKSkpKSgpKCgoKCgoKCgoKCgkJDFUxv3sztX79m8A - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeMLRl4PT+YYNCQcVBxUVGBgY - HBscGx4eHh4eJSwgICUsJTogIB0eDR0NCxcbIDAwMDA7MCkpMDApMCgpKSkoVSgoKCgoKCgoKCgpJDE8 - p/rsx9H7928AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHjB0Y6K1fF7DRcH - FRUVFRUYGBgbHBwcHB4eHiAeICUsJSwlJR80e4WZrq6nfUQLCyMwMCkwMDAoMChVKSkpKSkoKCgoKCgo - KCgoKCgoKSwxovH5x9H9+W8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwseW - iubxVAsHFRUVFRUVFxUYGBsbHBweHB4eICAgICUlICA0lMrR0c/Kz9Xl5sJFCR0wMDAwMFUpKSkpKSlV - KSkoKSgoKCgoKSgpKSgpKS8xgfD5x8379msAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAJzPloro5FEKFwcVFQcVFRUVGBgYGBwbHB4cHh4fICAsICwgYMrPx87BzsLOws7H3eyACR0wKTAp - KTApWSkpKSkpKSkpVSkoKSgoKCkoKSgpMC8xe+/5zsf76xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAACV0ZeK3fBIChcVFRUVFRUVFRUVGBgYGxwcHB4eHh4gICAgIGDKzMHBwsKuwsLCwsLD - zfeBCSMwMDAwWSkpMCkpKSkpKSkoKSkoVSkoKSkpKSgoKS8xe+/xwtH7zGwAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAidGTg9XxUQsXFRUFFRUFFRUVFRUXGBgbGxwbHB0eIB4gICA+w8PAwr+/ - v66/rsKuwsLC0PdFFzAwMCkpMCkwKVkpKSkpKSkpKSkpKSkpKSkoKSkkMCMxfvHxwtH7mwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHjRvYPN+nsKFxUVFRUVFRUVFQUVFRUYGxgbHBweHB4cHSAg - IJTAwL+/vb29vb29vb2uwsKu68MLIzAwMDAwKTApKTApWSkpKSkpKSkoKSgpKSkpKSkpMC8xgfrmwt37 - eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIwq6Kvf2BCxcVFRUVFRUVFRUVFRUVFRgYGBwc - GxweHh0gICA8tMC+v5y9mZm9nJm9vb29rsLN9y4dKTAwKTBZKTApKVkoKTApKVkpKTApMCgpKSkpKSkp - MCwxp/vVv/b+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJfHlpP7qg0JFRUVFQUVFRUVFRUV - FRUVGBgbGxscHBseHh4eHGDDtJycnJiZmJiZmJiZmb29vcLuexwwMDAwKTAwMFkpKSkwKVkpKSkpKSlV - KSkpKSkpKSkpMDE2t/vNwvrVFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJx5iK8dwQGxcVFRUV - FRUVBRUVFRUVFRUYGBgYHBscHhweHh4cYLS+nJycl5iYmJiYmJmZvb29vex+GzAwMDAwMCkwKTAwMCkw - KSkpKVkpKSkpKVkpKTApKTApMDFF2Pu/zfuXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeMe9itLx - QQsXFRYVFRUVFRUVFRUVFRUVFRgYGBgYHBwbHhweHh5gtpqUl5iYl5iXmJiYmJiYmb2u7H4dMDAwMDBZ - MDAwMClZKTApMFkpKSkwKSkwKSkpMCkpKTAwMCxK8ey95vtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACXt469+34LFxUVFhUVFRUVFRUVFRUVFRUVFRgYGBwbHBwbHh4eG2C2l5qclJeXl5iUlpeYmJiZvb33 - fB4wMDAwMDAwKVkpMCkwMDApKTAwKVkpMCkwMDApMDApKSkwMTGA+8+9/tUUAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAg82XlvS3DhsVFRUVFhUVFRUVFRUVFRUVFRUWGBgYGBwbHhseHh4bPpyalJSWlJaWlpaW - l5eYmJiYvfZMIzAwMDAwMDAwKTEpMDAwKVkwKTAwKSkwWSkpMCkwKTApMDApLDO3+7/H+4wAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAC9v4rP9DMLFRYVGRkVFhYVFhUWFRUVFRUWFRUWGBgcGxscGx4bHh4gkJqU - lZaWlpaWlpaXl5eYmJjV0SAvMDEwMDAwMDAwWSkwWSkwMDAwKTAwWSkpKTAwKTBZKTApMDAwLkfx7L3m - +W8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAiceWnPuBCxsWFhkVFhYVFhYVFhUVFhUVFRUWFRUYGBgYHBwb - HBweGx5StJWWlpaWkJaQlpaXl5iYvflgIzowMDAwMD0wMDAwMSkwMDAwMDAwKTApMDAwMFkpMCkwMDAp - MDAsLn37x739lwAAAAAAAAAAAAAAAAAAAAAAAAAAAADCmYro4BAbGBYWFRkVFhYVFhUWFRYVFhUWFRYV - GBgYGBgcHBwbHhweHh5+mpSWkJaWkJaWlpeXl5nrqiMvMDowMDEwMDA9KTAwMDAwWSkwKVkwMDAwMDAp - KTEpMDAwMCkwMDAxNtL0vdH5bwAAAAAAAAAAAAAAAAAAAAAAAAAAiceWvftgCxgYGRkVGRYWFhYWFhYV - FhUWFRUVFRUVGBkYHBgcHBwbHhweHiB+mpSWkJaQlpCQlpfC56ovLy8wOjA6MDAwMDAxMDAwMDAwMDAw - MDAwMDAwMDAwKTAwMDAwMDAwMCwsXvrNvfqcbwAAAAAAAAAAAAAAAAAAAAAAAADCmZbixQ4bGBkZGRkZ - FhYWFhYVFhYWFRYVFhUWFRUZGBgYGBwbHBwcHhweHiBgl5yal5eUmJy/z8udLy8vLy8wLzAwMTAwMDAw - MDAwMDAwWTAwMDAwWSkwMDAwMDAwMCkwKTAwMDEtt/u90flvAAAAAAAAAAAAAAAAAAAAAAAAiceWrvVg - DRgZGRkVGRUZFhYWFhYWFRYWFRYVFhUZFRUZGBwcGRwcHBweHB4eHhwvUoSXmZm9rqd8OiUsLy8vLy86 - MDowMDEwMDA9MDAwPTAwMDBZMDAwMDAwMDAwMDAwMDAwMDAwLyte9ce9+pcAAAAAAAAAAAAAAAAAAAAA - AAC/vZDoxS0gGRkZGRkZGRYWFhYWFhYWFhUWFhYWFRUZFRUZFhkYGxwcHB4bHh4eHh4cJS8vJS86LyUl - Ly8lLy8vLzAvMDowMDA8MDAwPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAvMS23+pjS9m8AAAAAAAAA - AAAAAAAAAAAAg8eWvfV7HyAiGRkZGRkWGRYZFhYWFhYWFhYWFRYWFRUZFRgYGBgcGRseHB4eHB4eICAe - Hh4sICAgLyUlJS8vLy8vLy86MDo6MDAwMDAwMDEwMTAwMSkxMDBZMDEpMDAwMDAwMDAwMC8vK176x736 - eAAAAAAAAAAAAAAAAAAAAACWwpDd2zMsIiIaGRkZGRkZGRkWFhYWFhYWFhYWFhYWGRUZFhkYHBkbHBwc - HBweHB4eICAgJSAlJSUsJSwlLC8sLy8vLy8vMDowOjEwMTAwMDAwMDAwMDAwMSkxKT0wPTAwMDAwMTAw - JC8sM9j2l+jRbwAAAAAAAAAAAAAAAAAAiceYmPSBDiUiICIZGRkZGRkZGRkZFhYWFhYWFhYVFhUWFRkV - GBkYHBkcHBwcHh4eHh4eICAgICAsHiUlJSwvJSUvLy8vLy8vLzowMDowMDEwMDA9MDEwMDAwMDAwMDAw - MDAwMTAwJC8vLzErffW9wvpwAAAAAAAAAAAAAAAAAACMypbH9kEsICAiIiEZGhkZGRkZFhkZFhYWFhYW - FhYWFhkVGRYWGBwZGBkcHBwcHB4cHh4eICAgICAgLCAsJSwlLywvLy8vOi8vLy86MDowMDEwMDAwMDA9 - MDEwMDAwMDEwMDAwMC8vMC8kMSxA8NKY+ZcAAAAAAAAAAAAAAAAAAJzCluKuKyUgIiUiIhoZGhkZGRkZ - FhkWGRYWFhYWFhYWFhkVGRYWFhgcGBscHBweHBUHBwcHBgYJCQkHCQsgJSwlJTolLy8vLy8vLzAvOi86 - MDEwMTAwMTAwMDAwMTAxMDAxMC8vMC8wLy8vLCuu8ZjV3W8AAAAAAAAAAAAAAACJx5i99HsfLyIlJSIl - IhkZGhkZGRkZGRkZGRYWFhYWFhYWFhkVFhgYGRgcGRwcHBkgSENDQ0NKSkpKSl5KDgkgLCUsJSwlLywv - Ly8vLy8vMDowMDowMTAwMTAxMDEwMDAvMC8vMC8vMC8jMC8jK171wr36cAAAAAAAAAAAAAAAAJXHlsro - QSUlJSUlJSIiIhkaGhkZGRkZGRYaGRoWFhYWFhYZFRkZFhkZGRgZGBwcHoa2tr6+w7a+wMPDytGUCB8l - IDolJTogJywlLy8vLy8vLy86Ly8wOi8wLzAvMC8vLy8vMC8vLzAsMC8vLy8sM+jbl/mWAAAAAAAAAAAA - AAAAl8WX4sIrOiUiJSIlJSIiGhoZGhkZGhkaGRYZFhYaFhYWGRYZFRkWGBYYHBkcGRwesb6+tr60vr6/ - tMDAwsANHiUgIC8gLyAsJTovLy8vLy8vLy8vLy86Ly8vLy8vLy8vMC8vLy8vLyQvLyMjLywQrvCX3c9v - AAAAAAAAAAAAAADCvZzwhCsvIiYiJiIlIiUiGhoaGhkZGhkaGhkZFhYaFhYWGRkZFRkWGBkZGBkYGB6x - vr6+tL6+v7+0wMDMvwocLCAvIDogOiUvIC8gLywvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8jMC8l - LB9y9ZzC9m8AAAAAAAAAAAAAeNiYzuhRLC8mJiYiJiUiJiIiGhoaGhkaGRkZGhYaFhYaFhkWFhkZFhwZ - GRkbGRsZHrK+tr6+v7+/v8DAwMyuDR0gICAgICwlICwlLDolJSwlLy8vLy8vLy8vLzovLy8vLy8vLyMv - Iy8vIy8lIy8lK0DwxZj6dQAAAAAAAAAAAACVzZjR20EvJSYgJiYiJiImIiYiGRoaGhkaGhYaGhkaGRYa - FhoWGRkWGRYZGBkZHBketMC+wL+/v7/AwMDBw8EQFyAgIC8gIDogJTolIC8sJS8sJSUlLC8vLy8vLy8v - Ly8jLy8vLy8vLyUvJS8vJSwfLcvVlvGWAAAAAAAAAAAAAJzHmOS9KzolJiYiJiImIiYlICIiGhoaGhka - GhkaGRoWGhYaFhkZGRUZFhkZGBkYGRyxwMDAwL/Cwr/AwMHBz0gGHiAgICAlICAgICA6IDolIC8sLywl - LyUlLC8lLyUvLy8lLyMvJS8lLyUvJSUlJSwOmOKW3cdwAAAAAAAAAAAAv8KY8I8yOyUmJiYlJSYiJSYi - JiIiGhoaGhoaGhkaFhoWGhYaFhkZGRkWGRkYGRgZG4/MtMDAv7+uv7/Av8DMgwYdJSAgLCAsJTogICAl - ICwlJSAlLyAvJSwvLywlLCUvLCUvLCUvIC8gLyAlIC8gIA599JjH5m8AAAAAAAAAAADHrr/jeiw6JiYm - JSYiJiUmIiUmJiAhGhoaGhoaGhoaGhoZGRkZGRkZGRYYGRkZGRgZfsPAwMC/v7+/v7+/v8LOEAYeICUg - ICAgICAvICwlIDogOiAvICwvJSUlJS8lLCUlLCUlJS8jLCUjJSwjJSMsH0fwvb30cAAAAAAAAAAAiN2Y - zt9GOjslJiYiJiYlJiYmJiUiJiYiGhoaGhoaGhYaGRoZGhkWGRkZGRkZGRgZGRVfw7TAvr+9v729mb+9 - vcGFBgkeICAgICAgICAgICAgICAgLCUgJSAsJSUsIC8lLCUlJSwjLCUlLCUgJSMsIh4rEtLBmPl1AAAA - AAAAAAB43ZjP5kU6OiYmJSYlJyYmIiYiJSUmJSIiGhoaGhoaGhoaGRoZGRoZGRkZFhkZGRkZFjrDtr6+ - nJm9mZm9nJm9vcpeAgseICAgICAgICA6ICAsJSAlIDogLCUgLCUlLCAlLCUsJSAlICIlICUgJR4lIB8t - 28qW+XgAAAAAAAAAAJbPm9vKNDo7JicnJiYmJiYmIiclJiYlJSYiGhoaGhoaGhoaGRoZGRkZGRkZGRkZ - GBkZHpS+nJy9nJycnJeZmZycvcxDAgscICAgICAgICAgICAgICAgICAlICAlIB4vICUgJR4lICAlLB4l - ICAgJR4gHw7B0ZbolwAAAAAAAAAAnNGZ25w0OjsmJiUmJiYmIiclJyYmJSYiJSYiIRoaGhoaGhoaGRoa - GRkZGRkZGRkZGRkWfLaanJiXl5eXmZeYl5icv8pGBBceHh4gICAgICAgICA6ICAgICAgLCUgJR4gICAg - JR4lLB4lHiAjIB4eIx4fDZjbkN2/AAAAAAAAAAC9z5zmkzo9JyYnJyYlJyYlJyYiJSYiJSYmIiYmIRoa - GhoaGhoaGRoZGRkaGRkZGRkZGRY6nJqUmJiXqZeXl5eXl5eXwtJGAhceHh4eHiAgICAgICAgICAgICAl - ICAgICUgICAgLB4iHiIsHiAiLCIeHh8NituW3cdwAAAAAAAAAL3RmeKQMj0nJicmJicmJiciJycmJiYm - JiYlJiImISEaGhoaGhoaGhoaGRoZGRkaGRkZGRl+nJqUlJSWlpeTlpaTlJeXv+FeAgYeHh4eHh4eICAg - ICAgICAlICAgICAgHiAgIB4iHh4sHiIeHh4eHh4iHw2D35bPz3AAAAAAAAAAv9GZ4o46PScnJyYmJyYm - JicnJSYlJiUmIiciJSYmIiEaGhoaGhoZGhoaGhkZGRkZGRkZFjqUlJWWlpaQlpCWkJWWlpeXv+uFCAYb - Hh4eHh4eHh4eHiAgIB0gIB0gICAeHiAgHh4sIh4eHiIeHiIeHh4eDX/blsjTbwAAAAAAAAC9z73jgyw/ - JycmJycnJicnJScmJyYmJiYlJyUnJSYmIiIaGhoaGhoaGhoZGhoZGhkaGRkaFmCalpaMlpCWjJCMkJaQ - lpeYv+uzCgYbIR4hHh4eHh4eHh4eHh4eHh4eHiAeHiAeHh4eHh4eHh4eHh4eHhwLf+CWx89vAAAAAAAA - AL/RmfCAOj8nJycnJicnJiYnJiYlJSclJyYlJyYiJSYmJSIaGhoaGhoaGhoaGRkaGRkcGhkZGoCVlZCW - io6VjJaKkJaWl5SYv+nSDgIbHh4cHiEeHh4cHh4eHh4eHh4cIB4eHh4eHh4hHh4hHh4hHiEeHAty35bH - 0WwAAAAAAAAAv9Gu8H86WicnJycnJicnJSclJycnJSclJyYlJiclJiInJyIiGhoaGhoaGhoaGhkaGhkZ - GRoZIJSVjIyQlY6MkJWKlpCWlpicv+nfDgMbHBweHB4cHB4cHh4cHiEeHhwcHh4cHh4aHh4hHh4eIR4c - HhwfC3LmkMfRbwAAAAAAAADC0b3wfTpcJzsnJyonJycnJycnJSonJyUnJiYlJyYmJSYiJyYiIRoaGhoa - GhoZGhoaGRoZGRkZL5SMkJWKlYyMkJCMlpaXmL29v+nhDAYbHBwcHhwhHhweHBweHB4cHh4cHB4cHh4e - HB4bHBwcHhweHh0Lct+Qx9FsAAAAAAAAAL/YveODOlxVJyo7JycnJycnJycnJyUnJyUnJiYmIiclJiYm - IicmISEaGhoaGhoaGRoaGRoaHBkWL5CUipaKkJaKloyWkJiYnJm/wvHSCAUbIRweHBwcHBweHBwcHBwe - HBweHBwcHB4bHB4eHB4cHhwcHAty25bH0W8AAAAAAAAAv9W98IMvXFU7OyonJyonJycnJycnJycnJyYl - JScnJyUlJiYmIiYlJiEhGhoaGhoaGhoZGhkaGhkWIISVlZCKkIqWkJaXl5i9v67BzvmzBAcbHBwcHBwe - HBwcHBwcHBwcHBwcHhseGB4cHBweHBweHB4fC3fYkMfPbwAAAAAAAADC1b/jjjpcWSo7KjsnJyonJycn - JyUnJScnJycnJiUmJyYlJSYmJiYlJiIiGhoaGhoaGhoZGhoZGhoZIn2XlZCVipaQlpeXmZm/v8630vuA - AhgcHBwcHBwcHBwcHBwcHBweGxwcHBweGB4cHBwcHBweHB0LiNKQ0c1wAAAAAAAAAL/dwuKTOlxZKjsq - OyonKicnJycnJycqJycnJycmJScmJyYmJSUlJiYmJSciIhoaGhoaGhoZGhocGhwZHH6XlY6WlpaQl5iZ - vb/CwcfP5/4zAxscHBwcHBwcHBwcHBwcGxwcHBwcHBwcHhgeHBweHBwcHQyDyorRxwAAAAAAAAAAvd2/ - 5qg6XFwqVTsqKioqOyonJycnJyclJyUnJyUqJScmJiYnJiUmIiYmIiYmJSIhIRoaGhoaGRoaGRoZGnyX - lZaQlpeYmb29rsHOx8/P+d8GBxkcHBwcHBwcHBwcHBwcHBwcHBwcHBwYHhwbHhscHB0dDJbIjt2/AAAA - AAAAAACV3a7mzDpcXSo7KlU7Oyo7Kic7KicnKicqJycnJycnJSclJyYnJyUmJSYmJiYiJyIiIRoaGhoa - GhoaGRoZGnyXlpaWmJiZvb/CwsfH0dHV+30CGBwcGRwcHBwcHBwcHBwcHBscHBwbHBwcHBwcHB4cHBsM - vcGM6JYAAAAAAAAAAHjxwubfPD9jVVU7VVUqOyo7Ozs7KicnJycnJyclJycnJyUnJiUmJyUmJSYmJSYm - JiYmJSEhGhoaGhohHBoZGYGXlJiYmL29rsHHx8vR0dX29ggHGRkcHBwaHBwcGRwcGRscHBwcHBwcGxwe - GxwbHBsdCxHBworxeAAAAAAAAAAAivHB0uZOWWZVVVU7O1U7OztVKjs7Oyo7JycnJyonJyUqJyUnJyYm - JyclJiUmJiUlJSIlJiUiIRoaGhoaGhoZIZCYmJy9va7BzrfPz9HV1d37fgEbHBwcGRwZHBkbHBwcHBwZ - GxwcGxwcGxwcGB4bGBwLEsWZlvl1AAAAAAAAAAAA58fK8GA7ZVlVKlVVKlVVVSo7Ozs7OyonJycnJycn - JycnJyclJyUnJicmJyUlJiUmJSYmJSUlJh4iGhwaGhoZPZycvb29wsLHx8/V2NXV3fnbBhUcGRwcHBwZ - HBwcHBwcGRwcHBkcHBwcGxwYGB4cGwtJyZiY8XUAAAAAAAAAAADK5s70gTpkY1VVKlU7VSoqO1VVOyo7 - KjsqJycnJycnJycnJycnJyYmJSYmJicmJSYmJiIlJiIlJSYiIiEhGhkhor69va7BxcfR0dHV1dXd6PtA - BRwZGRwZHBwcHBwaGBwcHBwYHBscHBwYHBwcGB4dCHLSkMLRcAAAAAAAAAAAAL/owvCcO1xnVVVVVVU7 - VVkqKjtVOypVJzs7KicnJycnJycnJSclJyUnJScmJSYnJiInJSclJiUmJSYmJSUgIhlfzr3CwcfHys/P - 1dXV5uTl+4QDGxwcGRwZHBkcGRwcHBwYHBwcHBwYHBwYHBwYGx0Kla6M0scAAAAAAAAAAAAAlejC8Mo9 - XKFXVVVVVVUqKllVVTtVO1UqVScnOycnJycnJycnJycnJycnJScmJiUnJSclJyUlJiYlJSUmJSYiIj3P - 0cvPx9HP0dXV1d3d5ub50QcVGhwZHBwZHBwcGBwaHBkZGxwZHBwcHBgcHBwbCw+0torolQAAAAAAAAAA - AACK+cfV8E5Znl1VVVVVVVUqVSo7VTtVKic7VSdVJzsnOycnJycnJycnJScnJSclJScnJSciJyUmIiUm - JSUiJiUiL8vd1d3d3d3k1d3d3d3m5vHwCBUcHBoZGRwZHBkcGhgcHBwcGRsZGBgcHBgYHBsJE7aYlvF1 - AAAAAAAAAAAAAADn3c/1fVdnnlVVVVUqVVVVO1VVO1U7VVUnVSdVJzsnJycnJycnJycnJycnJycnJSUn - JyUnJyUnJSYlIiUiJiUlyefn3ejo5uzm7+jo6Obm7PorBxwZHBwcGRwaGBkYHBkYHBkcHBgcHBkcHBwc - HQp0yZa98HUAAAAAAAAAAAAAAM72zvSZWV2wVVZVVVVVVVVVVVU7VTs7VSo7VSdVJyo7JycnJycnJycl - JyUnJScnJyYlJyUnJScmIiUmJSUmJSbL5+fn5+jo6Ozs7Ojv9+/s+1EXIiAeISAcHhweHB4cHhwcHB4c - HhweHh4gIB4dD4y2itLNAAAAAAAAAAAAAAAAnPHH6OZZWrBmVVZVVVVVVVVVVVVVVSpVVTtVJ1U7VScn - OzsnJycnJSEeJScnJyUnJSclJyYmJSclJyYlJiImOtjr5+fo7Ojs7O/u9+zs7Pn7ehcgICYgJSUlICIl - JSUeJSUeJR4lHiUeHh4eHR0Ss7+K8ZcAAAAAAAAAAAAAAACX+dLR9XtXoaZWVVZVVVVVVVVVVVU7VTtV - VSdVJyc7VSo7Jyc7JydhfisHHiUnJycnJScmJSYmJSciJyUmJSFf7uno9uj26PHs9uzs7+7s7Pt7FyAm - ICAgICAlICUeICUgICAgICAeHh4eIB4gDW+2lJj5dQAAAAAAAAAAAAAAAADS9sf7mVln3ltVVVZVVlVV - VVVVVVVVVSpVO1VVVSdVOypVJycnZePy330LGB4lJycnJSclJyYlJyciJyUmJbby8Ovo8Pbo9uzv9+zu - 7uz5+3sYJSAgJSUiJSAgICUeHiAeICAgHiAgICAeHh8Pi7OKz9V3AAAAAAAAAAAAAAAAAJz9x/DwPlu5 - pVVWVVZVVVVVVVVVVVVVO1UqVSdVO1UnOztVJyej6enp6bY0CxgeJSUqJyclJyUnJScnIh6d8vbp9vbo - 9vD29uz27Ozs7Oz7URsgIiUlICUlICUeJR4lICAgHiAeJR4gIB4eDhKztIz2lwAAAAAAAAAAAAAAAAAA - APvnz/uEWp7ZWFVWVVZVVlVWVVVVVVVVVVVVVVU7VVUqOyonJ6Pp6enp6emxRAsYHB4lJSUnJSclJR4e - fvLu7vD28Pbw9ujx7O/27/bs+f4rHiIlJSAlHiUgICAgICAgICAiIiAeHiAeIB4MdbOVnPF1AAAAAAAA - AAAAAAAAAAAA0/nP+89aZNekVVZWVVZVVlVWVVVVVVVVVTtVVVUnVTtVVScno+np6enp6fPpyYA0HRsb - GBgcGBwdPrH17u7x8fb28Pb29u/27Oz26Ozx7x0iJSAmICIiJSUgIiAiICIgIiAgICAgICAgHxGUs4nS - zAAAAAAAAAAAAAAAAAAAAACX++f2+3xioddYVVZWVlZVVlZVVVVVVVVVVVU7VVVVVSdVKieh+PP46fPp - 8/jy8+nftoV9enp9hsny9e7u8/Hx9vb29ujx9ujx7Ojs6P7IHSIlICAiJSIlHiIlICAiIiIgICAgICIi - Hh8Nb7GUlfCHAAAAAAAAAAAAAAAAAAAAAAD5/ef7wV1k16FYVVhWVlZVVlZWVVZVVVVVVVVVVTtVVSdV - J6H48/ju8fjp8fj4+Pjz8/X19fX19fP48fPx8fH28fD28fbo8ezx6Ojo+4EVJSUiJiUlIiIiJSAiIiIg - ICIgIiAgIB4eHxCUsovA5ngAAAAAAAAAAAAAAAAAAAAAAJz7+fv7e2ak11tYVVhWVlZVVlVWVVZVVVVV - VVVVVVVVVSono/jz8fHx8fHx8e7u8/P48fHx8fH48fPx8/jx8fHx9vHw9ujx6Ojo6Pb7NyIlJSIgJiAi - JSUlICUiJSAgIiAgIiAhIB4ObbGUi+OVAAAAAAAAAAAAAAAAAAAAAAAAAPv7+fvBXWm6pVhYVVZWVlZW - VlVWVVVVV1VVVVVVO1VVKiqj/vjx8fHx8fHx9fHz8fH48/j1+PT48fj48fj09vbx9uz26Pbo6Ojm+8ge - IiUlJSImJSUlICIiJSAiIiAgIiAgICAeHw6UsYu26XgAAAAAAAAAAAAAAAAAAAAAAAAAwvv7+/uBZ2rk - ZFhYVlZWVlVWVlZWVVVWVVVVVVVVVVVVJ6P+8fj5+Pn4+fj4+Pj49fj1+Pn4+Pn5+fn49Pbx8fbw9ujw - 6Ojo5/b7Uh4lIiUlIiUlJSIiJSUgICIiICIgIiAhICAOb7GUi+maAAAAAAAAAAAAAAAAAAAAAAAAAAAA - +/v7+9Ffaqa5WFdWVlZWVlZWVVVVWFZVVlVVVVVVVVUqpvX1+Pn5+fn5+fn1+fX49fj5+fn5+fn49PH4 - 8fH28Pbo8ezo6Ofd+8YeIiYlIiYiJh4lIiIlICIlIiUgIiAiICIgHxKxsYm26XUAAAAAAAAAAAAAAAAA - AAAAAAAAAADC+/v7+5dnadekVlZYVlZWVlZVWFVVVVZVVVVVVVVVVSej/v759fn59fn1+fn5/vj5+fX5 - +fn5+fn4+fHx8fH26Pbo6Ojn3f7xLyIlJiUiJSImJSIlIiUiJSAlICIiIiAgICAOcrGLi+mVAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAD7+/v78nxqpN5kVlhYVlZWVlVVW1hVWFdXV1dVVVVVKqb++fn++f75+f75 - /vn5+f75/vn5+fn5+fT28fHx9uj26Ojo5935+18iLyYlJiUmJSUlIiYiJSIlIiUiIiAiJSAgHUOxsYnJ - 5XgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL/7+/v7ymVqpblYWFhYVlZYWFhVWFVYVlZVVlVVV1Uqpf71 - +fn5+f75+f759f75+fn5+fn1+Pn4+fHx8fbw9ujo6Ofn+PthIiYlJiImIiYlIiIlIiUlJSIlIiIlIiAi - IB4Ri7GLlemLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOv7+/v7mWppuaZYWFhWVlVYVVhVWFhVV1VX - V1dVVipk9f7++f71/v359f7++f75/vn++f74+fnx+fH29ujo6Ojn5/v5ZSImJSYlJiUmJiUmJSYiJSUl - IiUiIiIlIiAgDnKxlIvfzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7+/v0gZ5q16BYWFhYWFhY - WFhVWFdXWFhVVlVWVVWe9fv7/v75+v3++f75/vn5/vn5+fn59/n29ujw9ujo6Pn75D8iJiYmJiYlJiUm - JSIlJiInIiUlJSIlIiUgIB9tsbGJvul4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwvv7+/vpnaBq - 5GlYWFhYWFhYVVtWVldYVVhVVlVWVVVduvn7+/v++f75+f35+/n5+fn5+Pn29vHx9ujo9vn7+aMvJSYm - Ji8mJiYmJiUmJSYiJyUlJSUiJSUiJSAeE7GxiZTplQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 6/v7+/vPnaSg2WhYWFhYWFhYVVhYVlVYVlZWVlVWVSoqXabv+/v7+/v9+f35/vn5+fn59vHx9vD2+fv7 - 76M6JiYnJyYmJiYlJiUnJiYiJSclIiYlIiciIiUlHhKQsYuL384AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA+/v7+/vHZ2qk12JYWFhYVlhYWFZYWFZWVlZWVlVWVlVVKlVksNz6+/v7+/v7/vv+/v77 - /vv7+/3vsGUwJiYqJicmJiYnJScnJSclJSYlJiInJSUlIiclJSAri7GUi8nlhwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAC++/v5+/vEaqCku2RYWFhYWFhVWFZWV1ZWVlZVVlZWVVVWVSoqKldnprC6 - 4vHw8PDv8OTYsKadWTsmJicnJycnJycmJycnJiYnJiYmJScmIiciJSclIiUgH3KxlIey+IcAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADM+/v3+/uqpGqlu2RYWFhYWFhYWFhYVlZWVlZVVlVWVVZV - VlVWKlUqJioqVlZZVllVVVUmJikqJzsnJycnJycnJyYnJiYnJiYmJSYmJSciJyUmJSclJR9ysbGLlOmV - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV+/7n+/WopGqk2WpYWFhYWFhYWFhXWFZW - VlZWVlZWVVZVVlVWVSoqVlVVVSpVJlUnKioqKjsqKlUnJycnJycnJzsnJSclJiYnJiYnJSciJyUlJSUf - crGxiZTpvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2+/fl+/SopKCg3qRYWFhY - WFhYWFhYVlZWVldWVlZWVVZVVVZWVlZVVVVVVVVVVVU7VVU7VTs7JzsqJzsnJyY7JicnJycmJiclJyUn - JiciJiUlIHKxsYmV39EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr++vV+fnE - nqRq2aZYWFtYWFhYWFhWWFZWVlZWVVZWVVZWVVVZKlZVVVVVVVVVVVU7VTsqVVVVJztVJycnOycnJycn - JicmJycmJyYmIiclJTSDsbGJld/RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD2++XP9PXMnaRqubtoWFhYWFhYWFhYWFhWV1hYVlZYVVZXVlVWKlZVVVVVVVVVVVVVVTtVJztVJyc7 - VSc7OycnJycmJycnJyUnJiclJyU0i7GxiZXf0YcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAADr+9XO9vvSn6Vppd6kWFhYWFhYWFhYV1hYVlZWVlZYVVZWVVZWVVVVVVVVVVU7VSdV - VSdVVSdVOyonOycqOycnJycmJycnJyYmJyU6SouxlImV386HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAADV++fB5vvjlKSkaru7aFhYWFhYWFhYWFhXWFZVVlZYVVZWVVZWVVZV - VVVVVVVVVVU7VVUnVVUnVTsqOzs7JzsnJycnJycmJyUlOnCxsZSJlOnJAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV+/bB1Pvus56laqXepWJYWFhYWFhYWFhYWFhWVlZY - VVZWVVZWVlZVVlVVVVVVVVUnVVUnVTsqVScqOyo7JycqJycnJyclJz6HsZSVibLpvgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC++/nOx/T10YakpKC5u6BYWFhYWFhY - WFhXWFhWVlhWVlZYVVZVVlVVVVVVVVVVVVVVKlVVVTtVVTsqOyo7JycnJycnIjpyi7GUi4u2+JUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc+fnPwOX16bKEpKCg - ublqWFhbWFhYWFhYWFZWVlhVWFVYV1VWVlZVVlVVVVVVVVVVO1U7VSdVKjsqOyoqKicnJSdLi7GxlIuU - 0emLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/z/vn - wszx89GnnqSgpLC5amJYWFhYWFhYWFhWWFhWWFVYV1VWVlZZVVVVVVVVVVVVKlVVKjtVVTsqOyo7KiU/ - g5SxlIuLvunKhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAwvv5yr/V9fLJkZ6kpGqkuaRoWFhYWFhYWFZWWFZWV1ZWVlVWVVVWVlVVVVVVVVVVKlVVVTtV - VVU7Oyc9g5SUsZWLlcrplAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAl9X79r/A4fPptqedpKSkoKSkaWJYWFhYWFhWWFhWVlZWWFVYVlVWVlVWVVVV - VVVVVVUqVVUnKiZShpeUsb6Li7bpyocAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJzr+9W/wOnu48mUfmakpGpqaWliW1tYWFhYVlhWVlZWWFVY - VlVYVVVWVVVVVVVVVVUqJj18lL6UspyLi7Tf6ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL/O9fnRv7Tp6fLftoZlampqamliYltbWFZY - WFhWVlZWV1ZWVlVWVlVWV1hWVSo7VWGPnJqxtJyVibTf676JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVzvv50r+2zunp8tG2i2Fh - ZmloaWhoYmJbW1tbW1hYWFtYW1tbWFhVVVVSnZacnLG/v5eMi7Tf8cKHAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl8z5+eHA - nLbR3/Lj38myi51hTlxiXV1aXVlZWllZWVlXVz9gYZ+Umr6atLO2nJCMlMHw8MKHAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAJea6fjxyr6+vsnR6ePf38nOtpSLg3l/eYODeIOIkJeYv76cv7PBxa6cloqWv9v28LyHAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAlczx+O7KvrKcvrbR39Hp39HfycnKycnJycnBycnKxcXCmZSVjJjC5vT5z4kA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqaw/j1+OnKvr6XlZSytr7Dw7bDwcHCrr+cmJaWkJScwt3w - +vnPlYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIuazOn+8fHu6cy/v7ScnJSamJicvb/B - 0d3o9vrxz5uJlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWVmszM4fj1/vv1 - 9fn6+vv5+ezVx5iVgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAlYl4eHV1dXV3eImVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////wAAH////////////////+AAAAD///////////////4AAAAAH///////////// - /wAAAAAAP/////////////wAAAAAAAf////////////wAAAAAAAB////////////wAAAAAAAAH////// - /////wAAAAAAAAAf//////////wAAAAAAAAAB//////////wAAAAAAAAAAP/////////4AAAAAAAAAAA - /////////4AAAAAAAAAAAH////////8AAAAAAAAAAAA////////+AAAAAAAAAAAAD////////AAAAAAA - AAAAAAf///////AAAAAAAAAAAAAD///////gAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAD//////4AA - AAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAD/// - //wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAH////8AAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAA - AAH////gAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAB///+AAAAAAAAA - AAAAAAAAf///gAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAA///8AAAAAAAAAAAAAAAAAH//+AAAA - AAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAAf/ - +AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAA - AAAD//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAA - AAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAA - AAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/ - gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAA - AAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAA - AAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAA - AAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/ - gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAA - AAAAf8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAA - AAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAA - AAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAA//4AAAAAAAAAAAAAAAAAAP/ - +AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAA - AAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAAf//8AAAAAAAAA - AAAAAAAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAA////4AAA - AAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAA/// - //gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAH/////8AAAAAAAAAAAAA - AD//////gAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAf//////gAAAAAAAAAAAAAP//////8AAAAAAA - AAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAAAAAD////////gAAAAAAAAAAAB////////8A - AAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAAAAAAAf/////////4AAAAAAAAAAf///// - /////AAAAAAAAAAP//////////8AAAAAAAAAP///////////wAAAAAAAAP////////////AAAAAAAAP/ - ///////////+AAAAAAAf/////////////4AAAAAAf//////////////4AAAAA////////////////4AA - AH/////////////////+AB//////////KAAAAGAAAADAAAAAAQAIAAAAAAAAJAAAAAAAAAAAAAAAAQAA - AAEAAAAAAABqJQcAdSgHAHEuEgBpNB0AejQXAG44JABxPCYAe0IpAHxKNQB6UD4Ae1VEAHxfUgB+ZFkA - dm5uAHdwcAB6c3MAf3h4AIQuCwCMNA4AkjUOAIo4FACXOxQAoDoPAKE+FQCGPCEAkj0lAJdBHQCkQRgA - iUUpAJpIJgCfUS8Aik00AJVNMgCIUToAm1Q3AKVNKgCwTigAqVItALNULQCiTjAAsU4yAKhVNgC3WTcA - u2A7AMxJLgDEVy0Ay00yAMRXOQDIYzwA02Y8AIFWRACMVkMAhFlHAI9aRQCEWkkAjFxNAJJaQwCcW0QA - k11LAJxcSwCIX1AAol1DAK1cRACjXUsAq11KALVWQwC8VkEAtVxAALpbQACxXkoAmmBJAIdiUQCMYlMA - hGZZAItmXACBaF0AjGlcAJNjUwCbYVMAl2hVAJ1qVgCSa1sAmmtZAKhiSAC1ZEQAu2hGALFgSAC3akkA - vGtLAKdqUwC4blIAr3VeALl2WwCCbGIAi21iAIBvaACVbmIAjXBlAIVzawCTcWUAlnVqAJx0agCUeW4A - mnlsAIp4cACDfHwAk3tzAJt8cgCid2cAt3tkAKR/dwDAW0AAy2pDANdsQwDKck4A3XBHAMt2VQDUeFQA - 4G1CAOBySADkfFQAjoB7AJuDeQCxgG0ApYN2AK2DcwCghX0Aq4V4AKKIfQCriXwAuIh3ANyAXQDkgl0A - yoJlANmFZADLj3oA3Jd8AOWIZQDrkW8A6JZ3APCcewCGgIAAi4SEAI6JiQCVhoEAmIeBAJOLhwCbioMA - kYyMAJqRjACWkZEAmZSUAJ2ZmQCoioEAt4+BAKeQhwCqkYcApZGKAKuSigC4looArJeRAKOZlACinZwA - qp2YALickwCsop0At6KbAKWhoQCppaUArampALWmoAC3qqYAvKqkALOurQC7rakAvLGuALWxsQC6tLQA - vbi2ALu3uQC8uroAxZaGANqbhQDBn5IA6Z6BANihiwDGpZkA66SIAPOnigDjr5kA86yRAO2xmwD2s5sA - xayjAMOyrADctaUAw7SxAMW5tQDLurMAwry8ANK+tgDtvKkA9rulAMrAvgDUwboA+MCrAOnBsgD4ybYA - vr7AAMC/wQDEw8MAysTEAMfFyADKxsgAzMrKANLFwgDRyMYA2MnDANLMzADc0s4Azs7RANPP0QDO0dQA - 1NPTANnU1ADX1tgA29vbAODMxQD22MwA4tvaAPjf1QDl4N4A6eHeAPng1gDe3uAA4d/gAOTj4wDp5OMA - 5uXoAOjn6ADl6eoA6+rqAPTt7AD58OwA7+/wAO/x8wD08vMA+PX1AP749gD39/gA+ff4APf4+gD9/f0A - AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - FhUeFh4bHh4jrbWztK+0tLS0tLTe6UZCREVFRUNwcHBwQzBwMHAwcHAwQ0NDMEMwMENDRkni49e0lQAA - AAAAAAAAAAAAAAAAqa74/e1JHRYWFhQWFBYUFhQWFBYTFhUWFRYbGxseHh4eVMW1tLSur6+0tN/ugylE - RERERUVFcENwcHBDQ3BDMENwMENwQzBDQ0MwQ1Sa9tTXo5kAAAAAAAAAAAAAAAAAl+L995YiFhYWFhcW - FhYUFBQUFBUWExYVFhYVHRsbHh4eHj64s7XT0tPW4c1dKUREREREV0VFRXBwQ0NwcHBDcHBDcDBwQ3Aw - QzBDQ1c43uzXtJAAAAAAAAAAAAAAAACqqv398k0eFhgYFhYWFxYXGxQWFhQWFBYVFhYbGxsbHh4eHh4e - WoOgoLu2bkQkREQqRERERERXRUVFcHBDQ3BwcHBwcHBDMENwQ0NDK0VUe/bX15ijAAAAAAAAAAAAAACY - 4f39ozkfGBYYFhcWFhYUFhQWFBYTFhUUFhYVFhsbGx4eHh8eHiQfJB8kJB9EH0REPitERERERVdFRUJW - cENDQ0NDQ0NDcHBDQ0VFRUNXONzs17GYAAAAAAAAAAAAAACY9v39YiomHBgYGBYYFhYWFhYWFBYUFhYW - FRYWGxsbGx4bHh4fHx8fHx8fRB9EPj4qRERERERERERXRVVFRUJwQnBwcHBCcENFRUMrQytEVJb219OV - qgAAAAAAAAAAAKPI/f20OSomJhgWGBgWFxYXFhYXFhYUFhQWFhYWFRsbGxseHh4eHyQfHyoqH0QfKipE - H0Q+KkREREREREVXRVVFVkJCRUVFRUVFREIrRCtCP0nx4tepmAAAAAAAAAAAAJft/f17OiYmJiYYGBgY - FhgWFxYWFxQWFhYWFhUWFhsbGxseHhsVFQUVGRkZGRkhKipEPipERCpERERERERERERXRVdFV0VXRURC - K0RCK0IrRDav8d20lQAAAAAAAAAAAJf9/fZJRCYlJSYcGBgYGBYcFhYWFhYWFxQWFBYWFhYbGxsbG1po - Z2dnZ2x7e2cIIR8qKkQqKkQqRCpEREREREREREREREREQitERCtEKyorKlRs9tfXla4AAAAAAAAAqa79 - /bRHKicnJycmHBwYHBgXFxwWFxYXFhYWFhYWFhYbFhsbHsff193d3d3i4uxhHSoqKio+Kj4qRD4qRCpE - KkRERERCK0REK0QqRCsqQkQrKj438eLdo6MAAAAAAAAAl979/ZQ+KicnJiYnJhgYHBwcHBgYGBYYFhcW - GBYWFhYWGxsWH8zX19fX1NfX3uJoGR8qKioqKioqKkQqRCpERCpEKkQqREQqREQqRCpEKisqQio5tObd - sZUAAAAAAAAAkO79/WI/JycnJycnJyYcHBwWHBgYFhgWFBgWFhYWFhsWFhsWH8zX1NTU19nZ3uZoGR8f - Kh8qKipEKio+Kj4qRCpEPipEKkQqRCpEKkIqQiorKkIjlPLd05AAAAAAAAAAlf384lMsKycrJycnJyck - GBwcGBgYGBgYGBYWFhcWFhYWGxYWH8zg29vb29ng2eycBR8fHyoqKiMqKioqKioqPioqRCpEPipEH0Qq - RCoqKioqKiojYvLg3ZAAAAAAAAAAo/b9tEcsJysnKycnKicnJRgcHBwYFhgYGBgWFxsWFxsWFhsWHsfg - 2tfZ29nZ3uLGBhoqHx8qKioqIyoqKioqKioqKj4qKkQfRCoqKiorKiorKioqC+Li4JejAAAAAACprvb2 - pFQsKycrJysnJycnJyYcHBwcGBgWGBYYFxYYFhgWGBYXG7vg19vX19fX1NfhTQMfHx8fHx8fKiojKioq - KioqKioqKh9EH0QfKioqKiooKiYqNNPj4KOYAAAAAACV0/b4e1QsJywrJysnLCcrJycmHBwcHBwYGBgY - GxcYFhcYFhYWFpvg19TU1NTM1MzgxgcVHx8fHx8fKh8qHyoqKioqKioqKioqHyoqKioqKiopHyofIqfs - 3a6QAAAAAACQ1vf2Z1csLC4sKysrJycrJycnJhwcHBwcGBgYGBgWGBsXGxgYFFvX18zMzMzMzNPG4qsE - BR8fHx8fHx8fKh8jHyojHyoqKiofKh8qKh8qJB8fJigfI5Ps3bWOAAAAAAAR4vPyYlYsLisrKysrKycr - JysnJyccHBwcHBwYGBgYGBgYGBsXFh7D17W1tbW1tbW10+KrBAUeJCQkHx8fHx8fHx8fKh8fHx8fKh8f - KiQoKCgoKCkoIWni4tNqAAAAAAAR7fL2TXEsLCsuKy4rKysrJysnKycnJRwcHBwcGBgYFhgbFhgbFxd+ - 17W1xsbGscazs7XiwwYFHiQhHh8hHx8fHx8fHx8fHx8fHyokJCgoJCgkJCEkIGDs4tcRAAAAAAAQ7fby - UnEsLiwsLC4uLi4sLCcrJywnJyUcHBwcHBwcGBgYGBsXGBYmsLXGsbGxsbGxxbOz7MkJAhokHh4kHh8k - Hx8eHx8hHyQoJCQoISQhJCQhJB4kIUzi4uAQAAAAAAAQ8vLyYXEsLCwsLiwsLCwnLiwnLCcrJycnHBwc - HBwcHBgYGBgYGxgUXLWxsbGxsbGxsbSzs+ziSAEbHx4eJB4eHiEeHx4eJCEkISEeJCEeJCEeHiQeIQzs - 4uIPAAAAAAAQ8vLyU3MxLDIuMS4sLiwuLCwsJywnLCcsJyUcHBwcHBwcGBgYGBgYGJu1sbGxsbGxrq60 - s9Hm8lIBGx4eHh4eHh4eHh4kHh4eHh4eHh4eHh4eHh4eGkzi4+IPAAAAAAAQ7fLyU3UxMSwsLDEsLCwu - LCwnLiwnLCcnLCcnHBwcHBwcHBgYHBgcFhyltbGwsK6wsLGxs8jT5vZSARseHh4eHh4eHh4eHh4eHh4e - Hh4eHh4eHh4eIUrs4uIQAAAAAAAQ7fLyUXUxMTEyLCwsLiwsLiwuLCwsJywnJycsJyccHBwcHBwcHBwY - HBYeoLWxrq6usbGxs9PM1PH3MwIeHB4cHh4eHh4eHh4eHh4eHh4eHh4eHh4eGkzj4+IQAAAAAAAR4vLx - U3VxMTEuMTIuMTEsLCwsLiwnLiwsLCcnLCcnJxwcHBwcHBgcHBwXHH61sa6xsbHFtdPU29v36QcFGxse - GxweHB4bGxweGxweGx4cHhweHB4eIUzs490RAAAAAACQ3vLxbXVxMTExLDIuLCwuMSwsLCwuLC4sJywn - LCcsJycnHBwcHBwcHBwcGBh8tbGxsbG1xtPU2+Hh/ccBFRwbHhsbGxseGx4bHhobHB4eHh4eHh4eHWPi - 7NcRAAAAAACQ0/HmbXV2MTExMSxxMTExLC4xLC4sLiwsLiwuLCcnLCcnLiUlHBwcHBwcHBYYXLWxxsW1 - 08zb3uHi7v1sAhsbGxseGxsbGxsbGxseGxsbGxobGx4aGXrs7LWOAAAAAACYs/Lye3N2MTEyMTIsMTEx - MSwsLiwxLC4sLCwsJywsJywnLCcnJRwcHBwcHBwYF3y1tbW109Te3ubm5v3pBhMbHB4bGxweGxseGxsb - HhsaGxsbGhseHZjs7LGQAAAAAACpqe3xnXOEMTJxMXExcSwxMTExMSwsMSwuLiwsLiwnLCcsJycnLCcn - JhwcHBwcGBib09PTzNne4ebm7u79fQIbGxscGxsbGxwbGx4bGxsbHhsbGxsdCa7s7KiYAAAAAAAAme3x - r1aHcjFxMTIxMTIxMTEsMS4xLCwsLC4sLCwsJy4sJywnJycnJycmJhwcHBcfw9PU2eDh5ubt7u793AUW - GxsbGxscHhsbGxsbGx4bGxsbGhsbCtXs7ZepAAAAAAAAkO3tzFuKdjIyMTJxcTIxMTExMTEsMSwxLCwu - LiwsLCcsLCcsJywsJywnJycmHxwcg+DX3uHi5ubu7vL3+DMSHB4bHBsbGxsbGxsbGxsbGxsbGxsZDOPt - 7Y4AAAAAAAAAkN7y5lyLhzEycjExMXExMTExMTExMS4xLDEsLiwsLCwsJywsJywnJywmJycnJyclXePm - 4+bm5vHu8vLz/YICGxwbHBsbHBsbHB4bGxsbGxsbGxsZYPHt4I4AAAAAAAAAmNHx7X6EiXIycTIycTEx - cTExMjExMTExLC4sLDEsLiwuLCcsLCcsJywnLCYqJycmWOny8vLy8vLy8vPu/cICHBsbGxwbGxwbGxsb - GxsbGxsbHRsIl/Lx05AAAAAAAAAArqnt8adzvHYyMnJxMjJxMjEyMTExMTExMTExLC4sLiwuLCwsJywn - LCcsJywnJycmWOnz8vT39/T49Pj2/doZGx4cHhweGx4bHB4cGxweHh4eGyEL1/LyqZkAAAAAAAAAAJDm - 8dtzvIwycjIyMnJxMTJxMnEyMTExMTExMSwxJxweLC4sLCwsLCcnLCcsKicnVvL09PT09/f4+Pj4/eYg - HicqHycfJx8fHx8fHx8kIR4fHyFK8vbykwAAAAAAAAAAAJXX8u18jMpycnJyMnEyMnFxMTExMjExMTEx - MSwxusJQFSYsLiwsJywsJywnLCcliPf39/f3+Pj4+Pj2/eYdJiYnHyofHx8nHx8fHyQkHx4fHiKT9Prg - kAAAAAAAAAAAAKmq8fGndtCHMnJycjJyMjIycTEycTFxMTExMS519PfyoB0WJicsLiwsLCwnLCUs6f33 - 9/33/fj4+Pj4/dwhJCYfJx8nHx8fJyQmJB8eHyQfHwve9/axmQAAAAAAAAAAAACV4vfiXb/BcnJycnJy - cnEyMjJxMjExMTExMS6G8/f39+CbIhUcHicnJScmHD7k/Pf9+Pj9+Pj4+Pf2/c0bJiYnHx8nHycfHyQk - JB8kJCEeIWP49/SXAAAAAAAAAAAAAACY0/LyoIrQhzJycjJycjJycTJxcXEycTFxMS6H8/j3+P338sOb - UCMgIB9RuPL4/fj4/fj4/fj4+Pj3/bsbJiYmJx8nHx8mHyYfJCQeHyYkIrP9/eCXAAAAAAAAAAAAAAAA - o+331ITBwHJycnRycnJyMnIyMjJxMjJxcS6H9P34+P33+P349PLc5unz+P34/f34/fj9+Pj49/j3/Xwb - JyYnHycfJiYmJSQkJB8kJB4hTPf9/KmqAAAAAAAAAAAAAAAAldT28ZuL0IpydHJ0cnJycnJycTIycXEy - Mi6H9P39/fj9/fj9/fj9+Pj9+P39+P39+P34+P33+PT98yMlJiomJx8nJx8lHyYmJCQkJB4grv395pcA - AAAAAAAAAAAAAAAArqny9taHwc50cnJ0cnJycnJyMnJyMnEycTKE+P39/f39/f39/f39/f39/f39/fj9 - +P34+Pj39/b9whwrJicnHycfJx8mJSYeHyUfHx5i9/39tKMAAAAAAAAAAAAAAAAAAJXU9vKni9C5cnRy - dHRycnJycnJxcnJxMi6H+P39/f39/f39/f39/f39/f39/f34/fj4+Pf39vj0VSYnJyYqJycfJiYmHyUf - JR4mJCC1/f3tlwAAAAAAAAAAAAAAAAAAALGp8ffiiLzOhXJ0cnR0cnJycnJycXIycjGH+P39/f39/f39 - /f39/f39/f39/f39+Pj4+Pf39/22HCsmKycnJycnJyQmJR8lHyUfHnr9/f2uqQAAAAAAAAAAAAAAAAAA - AACX0fbys4zLwXR0dHJ0dHRycnJycnJxcjKH+P39/f39/f39/f39/f39/f39+P34+P339/f2+MQmJysn - JyonHycfJx8mJSYmJiYeSO39/eKZAAAAAAAAAAAAAAAAAAAAAAAAmOL47buLzrlydHR0dHNycnJycnJy - cjF49P39/f39/f39/f39/f39/f39/fj9+Pj39/f9xCcnKycrJysnKycnJyYmJiUmJiQgq/j99qMAAAAA - AAAAAAAAAAAAAAAAAAAAqa7y9uK4jdCLcnh0dHR0dHJycnJycnIyjPT9/f39/f39/f39/f39/f39/fj4 - +Pb4/fi6Jy4rKysnKycqJyonJycmJicmJh579/3906MAAAAAAAAAAAAAAAAAAAAAAAAAAJfT8vLet73Q - i3J3dHR0dHRycnhycnIycXnK9P39/f39/f39/f39/f39+P39/f34z3MnLissLisrKysnKycqJycnJicf - HmT09/3imQAAAAAAAAAAAAAAAAAAAAAAAAAAAACX3/jtzLm9zoV3eHR0dHR0dHJyeHJyMnEydLnQ9P39 - /f39/f39/f39/f395751Ky4sLCsrKysrKysnKycnKycnJycmUOD39/aZAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACuqeb37cmMv86Fd3h0dHR0dHJyeHJycnIyMjEycoq+wNDq6urq6uXPwIl1MS4uLCwuLC4sLi4u - LCcsJywnJyonJx9HzPb0+qqpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo67x9+bJub3Oind4eHR0dHhy - cnhycnJyMnIyMjEuMTEyMjIxMTIuLi4uMTExLCwxLCwsLiwsJywrKysnKycsHz6x9Pb2taMAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAJmx8fbsyY290Ix3d3h0dHh4dHJycnhydDJycjJ0MjIyMTFxMjIxMjEx - MTExLDEsMTEuLC4sLiwrLisrKywlPrX08fTTmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYs/H3 - 49q6vdCNeHh4dHh4dHh4cnJ0dHRycnJyMnJxcnEycTFxMXEyMTExMiwxMS4xLCwuLC4uLC4sJyVRtfTx - 9tOYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl7Px9+zMvLzOy4V3eHR4eHh0dHR0cXR0cnJy - cnFycnEyMXExMTExMTIxMTExLCwsLCwxLiwsLCwnJ23X9vTx15cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJeu7fTx3buNy9CNeHh4dHh0dHR0dHRzMnRycnJyMnJycjJyMXIxcTExMjEsMjExMSws - MS4sLicnnfL08fHTlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZru328uPDub3Qy4p4 - eHh4eHR0dHJ0dHR0dHJycnJxcnFyMXExMXEyMTIyMTExMTIsLDEuJ1yr8fHx8bGZAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo6Pd9PTj07u8wc69hXh4eHhydHR0dHRzMnR0cXJycjJycjIy - MjFxMTExMTIsMS4xLC4nneDx9PHjq6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AK6X0fH68uDDur2/wb2FeHh4eHR0dHRydHRzcnRycnJxcnEycTIxcTIxMjExMTEuLnyz8fTx8deYqgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl6rj9Pbt18K6vL3BvYp5eHh4dHR0 - dHJ0MnRycnJyMnJyMnJxMjFxMTExMS6GrPLx8fHgsZYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAKiXte309u3Xrbu5vL+Ni3l4dHR0dHR0dHR0cnJycnJxcjEycnEyMTExtrDt - 8vLt7cyZqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl6jT8vb2 - 8tuzu4m5jIuKhXh4dHR0dHR0dHJycnIycnIyMjJxhrvU8fHt8uPXppgAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALGVo9Py9Pb049esp7aJi4qHeXl5dHR0dHR0cnRz - cnaGtqfT5vL28e3s16aXsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAsZOZtePx9vf28uPTsavCtrabg4Obm4ODtrvDw8ji8fL29vHm4tOZla4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl5Om0+Px9Pr09vTx - 7e3j7ePg4+Pt7fLy9/b49vLm4tSulZcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqlZOosdfr8fH29vf4/f39+P339/Tx8ubs1tGjl5WpAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACxmY6Ql6ixtdfd4OLi4uLe17WxqZmQjpmuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqZk45qEBAQEBFqjpOY - qgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////// - ////////////////////////////////////////////////////////////////+AAD//////////// - gAAAP//////////8AAAAA//////////gAAAAAP////////+AAAAAAD////////4AAAAAAA////////gA - AAAAAAP///////AAAAAAAAH//////8AAAAAAAAB//////4AAAAAAAAA//////wAAAAAAAAAf/////gAA - AAAAAAAP/////AAAAAAAAAAD////+AAAAAAAAAAB////8AAAAAAAAAAB////4AAAAAAAAAAA////wAAA - AAAAAAAAf///gAAAAAAAAAAAP///gAAAAAAAAAAAH///AAAAAAAAAAAAH//+AAAAAAAAAAAAD//+AAAA - AAAAAAAAB//8AAAAAAAAAAAAB//4AAAAAAAAAAAAA//4AAAAAAAAAAAAA//wAAAAAAAAAAAAAf/wAAAA - AAAAAAAAAf/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAA - AAAAAAAAAH/AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAA - AAAAAAAAAD+AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB+AAAAAAAAAAAAAAB+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAA - AAAAAAAAAD+AAAAAAAAAAAAAAD/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/gAAAA - AAAAAAAAAP/gAAAAAAAAAAAAAP/wAAAAAAAAAAAAAP/wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/4AAAA - AAAAAAAAA//4AAAAAAAAAAAAA//8AAAAAAAAAAAAB//+AAAAAAAAAAAAD//+AAAAAAAAAAAAD///AAAA - AAAAAAAAH///gAAAAAAAAAAAP///gAAAAAAAAAAAP///wAAAAAAAAAAAf///4AAAAAAAAAAA////8AAA - AAAAAAAB////+AAAAAAAAAAD/////AAAAAAAAAAH/////gAAAAAAAAAP/////wAAAAAAAAAf/////4AA - AAAAAAA//////+AAAAAAAAD///////AAAAAAAAH///////wAAAAAAAf///////4AAAAAAA////////+A - AAAAAD/////////wAAAAAf/////////8AAAAB///////////gAAAP////////////AAH//////8oAAAA - QAAAAIAAAAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAHgqCQB1LhEAbTMaAHYyFQB9NBQA - czQaAHo3GwB3OSEAekQuAG1IOgBwRDIAf0c0AHJMPQB/TD4AfVJCAHpUSAB8WUoAel5TAH9/fwCKLwgA - hjMOAIwzDACUNg0AgTUUAI02EQCEOBcAjjkUAIM3GACFPR4AjDsaAJI2EACTORMAmzoRAJM+GQCZPhkA - oTYKAKI+FACFPiIAlUEdAJlBHACnQhgAsEgeAIpBJACDRSsAikQoAIlJLgCUQyIAmkUiAJxJJgCTQygA - kkovAJtKKgCeUC8AhUUxAINJMQCKSjMAgU0+AIhMPQCVSjIAnUo0AJpKOACGUTkAllE2AJ1RNACdVDwA - pkchAKRJJACtSyMApUYrAKJNKgCqTyoAsUwlAKRQLQCsUSsAtFQtAKhHMwCuSjEApE45AK5MOACySjMA - vkozAKVSMgCqVDUAqlg3AKdXOwCsVjgArVk5ALVWMAC4VTEAtlgxALtaMwCzVDkAu1Q7ALRaPAC7Wj0A - uWE9AM1JLgDQSi4AxlkuAMZMMwDNTTEAyVE1AMFdNQDIXDIAxVU5AMhUOADCWTwAyWI6ANJmPQCDUUQA - ilFCAIxYQgCDVkkAgF1OAJtXQQCbW0UAhVxSAIpfVAClXkEAtVtBALpbQACZYEoAhGFUAIpkVQCKZVsA - hWldAIpqXQCSaVgAq2FCAKNkSwCqZkoAuGdGAK1tVACtdF0AuXJXAIFsZQCFdG4Aj3hvAJBwZwCcdGQA - k3ZtAIx3cQCKf3wAkXx1AKp5ZgC6fmkAxmhCANlsQgDPcEoA3HFIAMd3WADWeVQA4G9GAONzSADnfVQA - wXxhAJWAeACYgnoAtYFtAKmBdgCjiX8ArIt9ALaHdQC+kX8A3oBdAOeBWgDIh20A24hnAMiKcgDNknwA - 2pN3AOeLZwDwj2sA65FtAOiWdwCDg4MAioqKAJeIggCakIwAk5OTAJuVkgCbm5sApo6FAKCRjAC0lYkA - pJaRAKWZlgCrmpQAqZ6ZALmekwCtop0AvaGVALSjnQC+o5kApKSkAK+koACrq6sAuaqmALyxrgCzsrIA - u7S0AL24twC4trgAu7q6AMefjwDZnYQAy6CRANutmQDpoYUA4KuUAMatpADFsqsA1berAMO8ugDUvrYA - 57ajAMTAvgDUwboA9sm4AMC/wQDEwsMAycTEAM7IxwDMy8sA0MTCANPJxgDZysMA0svLANLP0ADT09MA - 2dTUANbW2ADY1dgA3NvbAOHLwgDm1MwA9dDBAOPa2AD029IA5+DdAPvj2gDe3eAA4+PjAOvl5ADp6OcA - 6+vrAPXt6wD98u0A7e/wAPPz8wD69vYA+fj3APf3+AD3+fwA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAw7SxsbETExOxE7GxtMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAxbSxscPe8vX5+vr9+vr68+DFtLG0xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC2sbTc8vn6/fr6+vr6+vr6+v39/f313raxtgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAALaxw+jz+vPgxbqJEhAPDg4PcX+Qvdn1/f3988WxtgAAAAAAAAAAAAAAAAAA - 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 - oUolAKxMJACiTSoArE8oALNOJgCnUS0AtFQtAKJOMAC3TzEApFIyAKlUNACrWDcAp1c5AKpXOAChWTwA - rVk7ALVWMAC5UzcAtVgyALtbMwC+VDoAtFs9ALtbPgC7Yj4AyFkvAMZPNgDHUzcAyVE1AMFcNADMWzEA - xFU6AMhTOADCWjsAyGM7ANNnPQCDUkYAjVZEAIZSSACLW0sAk1NEAJ1URACWWUEAmltEAJhXSACTWEgA - hF1UAKFVQwCuV0MAoltEAKxcQgCkXUkAqF5KALRUQAC5VkAAtFtBALlaQQCTY08AiGNUAIZjWgCJZFkA - j2hZAJxrVgCrYUQAt2dHAKhtVgC1bVAAr3ReALhxVQCHa2MAhnNrAJ14aQCOeXEAknpzAK98aAC2fWkA - x2hCANltQwDIcEwA2XBIAMl1UwDaeFMA4G5EAOBwRwDjfFQAioB8AJmFfgCvgG0AuIJuAKaIfgC2iXkA - 3YBeAOWCXADehWMA1YxwAMmRewDnjm0A6ZBtAOiWdwB+foAAg4OEAIyGhACEhIkAioqLAJqFgACciYIA - nZGMAIWFkgCPj5AAkpKTAJmUkgCXl5gAm5ucAKWLgwCrkIcApJGKAKmUjACzk4oAuJaIAL6ajQCqmpQA - pJ2bALOflwC2o58Au6ScAKOjpACtpKIArq6vALKloQC8p6AAtKmmALqppAC1rq4Ava6qAL2yrgCsrLEA - ra26ALKyswC6tLMAvbi3ALe2uQC5trgAvLq7AMibiQDcnYMA4J6FANGijgDLpJYA0aaWAOWkiwDqq5MA - 8K6UAOeynQDIraQA0a2iAMayrADdtqcAwraxAMq3sgDDurYAzbmzAMK8uwDIv70A6b6tAMXBvwDKwb4A - 0sS/AOfCtAD1ybcAv7/AAMXBwgDKw8MAzMjHAMXGywDNy8sA0svLANzRzADOzdAA0M3QANTS0wDY1NQA - 19faANva2gDm1M4A89jOAOHd3AD75NwA5OTkAOrm5QDr6+sA9e7sAPT09AD79vUA//n1APb2+AD69/kA - 9/r7AP39/QD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - lkAbAJNAHQCVQB0AmUIdAKVAFgCjRBsAq0cfAK1IHwCGQSMAi0YqAJZEIQCZRSEAnEklAJJKLQCdSyoA - jk82AJNPNQCbUDEAnVc9AKBKJACsSiMAok0qAK1PKACwTycApFAsAKxRKwC0UCYAslMrALlTKgCtTjYA - s0w1AL1LNACiUTEApVExAKJTNACmVTUAq1Q1AK5ZNwCsVTkApl0/AKpZOQCtWTkArlo8AK5ePgCzVTEA - u1MyALdZMwC7WzQAslU5ALBZOwCwWj0Atlo9ALJcPwC1XD8Au1s+AMlFKwDRSi0AzU0xAMxQMwDKUjYA - zVA0AMlUNwDCXDQAyl40AMRVOgDJVDgAw184AMBaPQDEWT0Ax2A2AM1hNgDFYTkAy2Q8ANFjNwDTZTsA - 2Gc7ANNoPgDZaj8Aj1VDAItZRACJXEwAlFVDAJNZRACUWEcAnltHAKNeQQCkXUAAoFhHAKJfTwC6XEAA - m2JKAIFhVACBaF0AiGleAJhmUgCWZlkAoGFPAKhmSgCraE4AumZEALhmTACgbVoAtmhTAKJxXQCsdF4A - s3BVAL94WwCGdW4Am3JiAJR2awCOe3MAoXVkALJ3YADAXEAAwmhEAMtqRADVakEA221DANpySwDMdVMA - 3XxWANZ/XgDgbUEA4nFGAOV2TADielMA6HxTAL+DbwCigXQApIZ+AKiHegCjin8AtoJyALiGcgC4iHcA - vol4ANqCXgDCjXcAwI59AM+QeQDekHIA6Y1qAOyRbgDtknAA7Zp6AH9/gACOjo8AlYiCAJ2OiACPj5AA - lZWVAKWUjgC1koUAuZOFAL+YigC5oJcAtKOdALmjmwChoaEApqKgAKioqQC6p6IAsKqoALSvrQC6sa4A - sLCwALaxsQC7tbQAt7e4ALi4uAC/uroAv76/AM6YhADFmYkA756BAMqnmgDRqpkA362bAOGnkgDEqqIA - w7OuANm4qgDDtrIAw76+AOO1owDptaEAwcC/AM7CvgDawLcA1cK7AN/IvwDywa4A7MS2AOnHugDxw7EA - vb3BAMO/wADAwMAAxcHBAMbDxADHxMYAy8XEAMvIxwDMzMwA0cnGANrJwgDSzcsA0c3NANfRzwDQztEA - 0tLTANbQ0QDV09QA1NTVANjS0ADW1tgA2dnZAN3Z2QDZ2t0A3d3dAO3a1ADh4eEA6urqAO3s7QD46ucA - 8erpAP/x6wD18/MA+PPyAPr6+gD8+fkA//z6APr9/gD+/v4AAAAAAP///wAAAAAAAAAAAAAAAAC0pgQD - AwSmtAAAAAAAAAAAAAAAAAAAAAAAAAAAALQEstns8/n58+zZsgS0AAAAAAAAAAAAAAAAAAAAALmm2fPj - qHFkYmVnc5Xg89mmuQAAAAAAAAAAAAAAAACqvPO3byM2PUhthVhVUDNrtfO8qgAAAAAAAAAAAAAAqebs - cBwWIjY6OTFBWFRQTkxLbOrmqQAAAAAAAAAAAKnxzgEHDRYiNjaErZg6VFVQTk5MMsjxqQAAAAAAAACq - 5s4BBwcNFh8gmubq7sdEVFVQTk5OMsrmqgAAAAAAubzsAgYHBwwQHyLK3NjZ63pUWFRVUFVQMeq9uQAA - AACm838ICAgICA0WIK/YvdjgeFdYWFhYVFhUdPOmAAAAtL29HQsJCAgMDhYWa6+7ypNEV0lthYVYWFdB - sdm0AACl84IYDw8PDAgODh8fHzY5LT1JSW1XSW1XSFdo86UAALLmbioYDw8PDw4OESJ7e4MmOj1JP0lJ - SEhXRDnPsgC02bI5LyoYEw8PDw8Kdebm5nksPD09PUlIPT1EOZTYtKbspzBCLy8YExMPDwtq4+Pmlh82 - Njw8Njo6OjkxZeymBPOBUkJCMS8aExMPDxnK2dzLchAsNDQ2NjY2LCwk8wQD+YBZUlJSQi8aGBgTD3zX - u7vZgxAiIiwgLCcsIiH5AwP5g1xSUlJSQkIvKBMTE3y5u8vmrBAXFxcXIhYXJPkDBPOUYFxcXFJSUjlC - LygYEna72Ofzew4XFx8WFxcd8wSm7KuKXFxcW1tSUlJCQi8oE5nn7PPREBEXFxcfFmTsprTZtpxgXFyG - XFxbQjBCQkIvfvPz9/M0HxEXFxcQl9m0ALLmwIpgYFxcXFKfmi8vMBrA+fn6+HQoLCwsLBfjsgAApfOw - omCJYGBcWtT54cGdxPj5+fnzOSoqNiwgcvOlAAC0vdnGkWGJYGBa1Pn5+fn5+fn5+ckrKioqLB/KvbQA - AACq87ikiYmKYGDW+fn5+fn5+fnwhi85Kiong/OqAAAAALS98dCjiY+JYYzW9vn5+fn2zIYwOUI5K2rs - u7kAAAAAAKrm5dWjj4mJiV+KnKCgnIdSUlJCUi5I3OaqAAAAAAAAAKnx5dLCko6JiYlhX19cXFxcXFIw - fd7xqQAAAAAAAAAAAKnm8d7NopCOiYlgYGBfXFpSUq3s5qkAAAAAAAAAAAAAAKq589/RxaGQjo6JX19c - i67c872qAAAAAAAAAAAAAAAAALmpvfPszsjDnpvBx8rs886puQAAAAAAAAAAAAAAAAAAAAC0pbLZ7PP5 - +fPs2bIEtAAAAAAAAAAAAAAAAAAAAAAAAAAAALSpBAMDBKa0AAAAAAAAAAAAAAAA//AP//+AAf/+AAB/ - /AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACAAAABgAAAAYAAAAHAAAADwAAAA+AAAAfwAAAP+AAAH/wAAD/+AAB//4AB///wD/8oAAAA - GAAAADAAAAABAAgAAAAAAEACAAAAAAAAAAAAAAABAAAAAQAAAAAAAHs/JABxcHEAkjYOAJk0CgCWOA8A - njgOAI83EACJORYAjToVAI46GACQNxMAlTkSAJM8FgCXPhcAmToSAJw7EgCdPBMAmTsUAJI8GACXPxkA - mT8ZAKA6DgCmPhMAoj4UAIE9IACSQR8AlkEeAJtAGwCZQR0AnUIdAKVBFwCmQhkAqkUcAIlBIQCBRSsA - k0UkAJlFIgCVSCkAnkwqAJ1NLgCfUi8Aik40AJBPMgCbTjAAhVM+AJ1SMgCYUTQAmVU7AJ1WOgCZWDwA - okchAKxLIwCuSyQArk4mAKJMKgCpTikApFAtAKxRKwCoUS4Ar1QvALRTKwCqTzIAvU8xALJOOgCjUTEA - pFMzAKJUMwCnVDMAoVU2AKZUNACoVDIAqlc1AKBVOQChVj0Ap1Q9AKlVOACsVzgAolg+AK5aOgCuWjwA - tFYwALlXMAC4UTQAtVgzALFaNQC7WzQAtFI4ALFRPQC7VD4As1w5ALZbPgCyXD4Atlw/ALhdOAC9Wj8A - ulw/AL5cPwC/YjsAu2E9AMJeNgDKXTMAwVA6AMVTOQDCVDsAxVQ5AMFXPQDCWT0AxWA5AMtkPADSZDkA - 1mg+AIlVQQCkXEAArF9AALNaQgCyXEEAullBALxYQACLYE4AgmJUAJFgUQCWYFEAk2ZVAJJtXwCrY0cA - oWFJAKpmSQCvZkgAqGhNALZnSAC7a0wAomtUAKdtVgClZlkAoGxfAItsYACbbWAAmHJkAJ51ZACleWgA - qHxqALR4YQC6emEAw2ZBAMdoQwDMaUIAxm5MAMtvTADTakIA2WxEANdvSADIcE0A13BJANpxSQDTd1QA - 2XlVANd7WADcf1sAn4J3ALOGdQC6hXEAvYp3AM2IbgDdhmUAyolwAMGLfQDTjnUA2ZN6AIKBggCJiIkA - jIuMAJ2PigCdlZIAmpqaAKWLgACrjIIAro6CAKKPiAC9locAsZCIAKuemAC2mJAAt5+YALKhmwC/opgA - o6OkAKSjpACnpqcArKysALippAC2tbkAv7y7ALu7vAC+vr4AxpCAAMSYhwDPmIIA1pqDAMCdkQDCp5wA - yqmfAOKiiwDpqZAA6bKfAMKrowDIrqcAwbWxAMK7uQDBvbwAxL+8AOy2oQDGwL0AysG/AMzAvQDZw7wA - xsPEAMrGxgDOyccAy8rKAM3KyQDNzcwA0MbDANXIxADYy8UA0MvJANPNygDWzcoA0c3OANjOywDa0M4A - 09LSANbS0gDY1tYA1tXZANjZ3QDZ3d8A3NzdAPbg1wDe3uAA4+HjAOTk5ADv5OAA6OjoAOnp7ADv7+8A - 9OrnAPLs6wDu7vAA8O/xAPHx8QD28/MA9PT1APr29QD4+PgA////AAAAAAAAAAAAAK6pAgKprgAAAAAA - AAAAAAAAAAAAALyqvd3z/v7z3b2qvAAAAAAAAAAAAAAAqsLz4rJ8eXmHtOb6wqoAAAAAAAAAAAC879R4 - KjBKTD52WUCG3/G8AAAAAAAAALzzrAEiJih9zslXaWlpQLb+vAAAAAAAqu+tGQgKGkXe7/qmP2lpaVi3 - 8aoAAAC8wsIjCAcHFC7V3ejDU2traXZK5cK8AACq9IgUDAMHDBtxucRMW3Z2dnZzifqqAAC93TAdEBAQ - DBQwhH5IUFtdXVtzceK9AK7dtUg6GBAQDBCO79UoRUhQUFBQcbDdrqnzn1tRNiAYEASA6+KFJUVFRUhF - RXnzqQL+i2NWVj0hGAY32MLijRw3Nyg3LHD+AgL+jJBkVlZRNSAWNtHZ6YAMJR0aJi3+AqnzsJFtbGxW - VlE1GEjZ8d8aHR0lGnfzqa7dvpRtbWxsVlJWPTXX+fp/EB0aJq/drgC94qWVlW1lm6ddUZP2/v6PNzk5 - KuK9AACq9MidlZVlpP7+8v7+/vpbNTkpi/iqAAC8v93Fl5Zunu7+/v7+/qU9Okgv2sK8AAAAqurRqJqW - lqTL09PLmFZRWym476oAAAAAALzz1MaclpZub21lZWNjcrj4vAAAAAAAAAC86t3Op5yalZWRkIOg2u+8 - AAAAAAAAAAAAqr/z6M/HoqGzzujzwqoAAAAAAAAAAAAAALyqvd3z/v7z3b2qvAAAAAAAAAAAAAAAAAAA - AK6pAgKprgAAAAAAAAAAAP+B/wD8AD8A+AAfAPAADwDgAAcAwAADAIAAAQCAAAEAgAABAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAIAAAQCAAAEAgAABAMAAAwDgAAcA8AAPAPgAHwD8AD8A/4H/ACgAAAAQAAAA - IAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAenl6AJsyBwCQNA0AljcOAJk4DwCPOhYA - kDUQAJM4EACVPBUAnjsRAJg8FgCWPxoAoTwSAKZBFwCsQhYApkUdAJpFIgCaRyQAnkooAJ1QMACgRyEA - pEkiAKxJIACiTy0AsU8oAKJQLwCtUSsAq1IvALVSKgCpVjYArFU2AKRaPAChXT8Arlo8ALdXMAC+VDcA - u1s0AL5dNgCwWjsAu1s/AMZOMgDAXjYAxFo9AMRgOQDKYjoA1GM3ANFmOwDZaT0Atl1AALpdQACaYksA - nWRMAK5hQwClYEgArWJMAKdoTgCzYkEAvGZDALhnRgC+Y0sApmpTALxuVgCqc18ArXNcALV0WgC+eFsA - rH1rALV3YQC/c2EAtnpiALB7ZADBZ0MAzGlDANBpQgDUakIA1nBKAMd9XwDKeFkAwnZjAMd0YQDKhWoA - zohtANiCZADZjG8A145zAOSZfACLiYkAkJCQAJuXlwC6k4IAuZ6TAL2glAC8pp4ApaGgAKSkpACxsLEA - vrm3AMCajQDLnIkAy5yRAMOjlwDWq5oA4aiTAMSupwDUr6EAx7GpAMK3swDMtrAAxLi1AMa7uADFvboA - x7+9ANHAuwDSwrwA78S1APDDsgDNxsMA0MnIANfNyQDf09AA0dbaANLY3gDf3N4A5cvCAOHZ1gD67+sA - +PPyAPn4+QD5/P0A/v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - vLd9JGbdee98htjClwGvE1L+KZ+BXZ0BFEIppRAzBcAFWzDlQCUc4IM1ILgTCOAkC4EAVgTrXErseXs9 - v2t/x/4u/4P/ZSDnPfBeYstudD4GO5+n/FM+A+Uz8DnPQKwUbI4B7gMC4Ew5YHERAAkwTQCqKQyURk1i - r4t/l79lfxdrzv8ykPP/DeiWniuD/XN+yeVfK5+Bz3sGigoCMJqiAKCIKYzdHe31MbDt79n/+bzvs/x7 - 5TNQPgPlM1A+A+UzUD4D5TNQPgPlM1A+A+UzUD4D5TNQPgPlM1A+A1/SGfj/BBff+U1oCsQAAAAASUVO - RK5CYIIAAAAoAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAB - AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB - AAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAC - AAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAwAAAAUAAAAHAAAACgAAAA4AAAAOAAAAEAAAABIAAAAT - AAAAEwAAABMAAAATAAAAEwAAABEAAAAQAAAADgAAAAwAAAAJAAAACAAAAAUAAAAEAAAABAAAAAMAAAAD - AAAAAgAAAAIAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAYAAAAKAAAADQAAABIAAAAX - AAAAGwAAAB4AAAAiAAAAJAAAACcAAAAnAAAAKAAAACoAAAArAAAALAAAAC0AAAAtAAAAKgAAACsAAAAp - AAAAKAAAACYAAAAgAAAAGgAAABgAAAASAAAADAAAAAkAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAAB - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAF - AAAACgAAAA4AAAAUAAAAGQAAAB0AAAAkAAAALAAAADMAAAA7AAAARwAAAFAAAABWAAAAXQAAAGIAAABk - AAAAZgAAAGcAAABnAAAAZQAAAGIAAABdAAAAWAAAAFIAAABJAAAAQwAAAD8AAAA3AAAAMwAAADEAAAAq - AAAAJQAAAB0AAAAUAAAADQAAAAkAAAAGAAAABAAAAAMAAAACAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAAQAAAAQAAAAJAAAAEgAAABYAAAAbAAAAJQAAAC8AAABBAAAAUgkICWYdHR19 - JyYnjTk6OqBdXV2zb25vwHl5e8uCgYHShISF14iIiNqJionciYiL3IiHh9qEhYbXgYOC1Hp6fM5ycnLD - X2BhuD8/P6coKCiWHx8fiAsLC3gAAABkAAAAWAAAAEoAAABBAAAAOQAAADMAAAAtAAAAJAAAABoAAAAP - AAAACgAAAAYAAAAEAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAgAAAAPAAAAEwAAABoAAAAo - AAAAPAAAAFYZGBl1LCwsk1taW7N0c3TMmJaX4MC+vvPRz9D/4+Lh//Xy8v//+vr///7+//////////// - ///////////////////////////////////////////+/v//7+3u/9vZ2//LysvzpaWn5Hp7etFiYmK7 - Li4vnhsbG4UAAABtAAAAWQAAAEsAAAA/AAAAOAAAADEAAAAlAAAAGQAAAA4AAAAIAAAABgAAAAQAAAAD - AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AAAABQAAAAsAAAAQAAAAFgAAACQAAAA+DAwMYyorK4xdXF22ioiJ1ry6vPHZ2Nf/8O3t//f09P/y7+// - 6ubm/+Xf3//c2Nf/0MvL/8nDw//Evr7/wr29/8C7u//Au7v/wby8/8K9vf/Evr7/xcDA/8nEw//MyMj/ - 083N/9nX1v/o5OT/8+/v//v4+v/////////////////q6uv/zs7P9JSTldtlZWbALi4ung0ODnsAAABf - AAAATQAAAEAAAAA6AAAALgAAACAAAAAVAAAACwAAAAYAAAAEAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAsAAAARAAAAFwAAADAHBwdaKysrimNiYrqioaHj - 0tDQ/+3q6v/28fH/6+Xm/9/Z2P/Mx8b/v7m5/7q0tP+6tLX/u7a2/8K7vP/JxcX/0c3N/9jU0f/d19b/ - 39vZ/+Le2//i3dz/4+Dd/+Pf3f/i393/4d7b/9/b2v/c2Nf/1dLT/8/LzP/MyMj/zMnJ/9DLy//V0dH/ - 4d7f//Ty8//////////////////n5un/sbK05m1sbcUwLzGdCAgIdwAAAFkAAABGAAAAPQAAADMAAAAl - AAAAFgAAAA0AAAAHAAAABAAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAP - AAAAGgAAADsWFhZtTU1Np5eVltzRz8//8O7u//Ht7f/g3Nz/ysTE/7i0tP+1r6//ubSz/8XAv//Vz9D/ - 4dzZ/+bj2//r6OH/7+rj/+Tc1f/d1M7/2s7I/9fKxP/UxsD/1MS+/9LBu//SwLr/08K9/9bHwP/XysT/ - 3NDK/+HX0f/p4dn/9PDn//Px6P/x7uf/8Ozo/+Xj4f/b19b/0c7O/9HNzf/a1dX/7Orq//////////// - /////+np6/+mpqfiV1dYtxsbHIkAAABlAAAATQAAAEIAAAA2AAAAJgAAABYAAAALAAAABwAAAAQAAAAD - AAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAGAAAAD4mJSZ/cXBxw7i4uPHm5eT/8Orr/97Y2P/Ev7// - tK2t/7OsrP/Aubr/1tLR/+Xj4P/x7un/6uXd/9/Wzv/Swbr/u6Wc/7WakP+sjoP/nXxw/5dyZv+XbmH/ - l2pc/5dnWf+YZlj/mGVX/5plVv+aZlj/m2ha/5xrXv+ebmL/oHNo/6Z+dP+0j4X/vZuT/8Onn//Vwrv/ - 5NnS//Hr4f/49u//9vTv//Dt6//n4+T/4+Li/+vp5//6+fn/////////////////z8/Q9X5+gM8uLi+b - AAAAbAAAAE4AAABCAAAAOAAAACUAAAAWAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAJAAAAFAAAADooKSl/ - eXh5x8bExPvs6Oj/6OPj/83IyP+1r6//r6mq/724uP/Z1NT/7url//Dr5P/j2tL/x7St/7edkv+ggXb/ - lG9i/4xiUv+IWEb/i1ZD/45UQP+TVUH/mFdC/51ZQ/+hWkT/o1pE/6ZaRP+nWkT/qFpD/6lZRP+oWUP/ - qFhD/6ZXQ/+jV0P/oVVC/55VQ/+cV0b/m1pL/59kWP+lcWb/r4R7/8Gelv/Ot7D/6N7V//Xw6//8+/r/ - ///8//f19f/19fX//f38/////////////////+Pj5P6Li47TLy8wmgAAAGoAAABOAAAAQgAAADQAAAAg - AAAAEAAAAAgAAAAFAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAQAAAAGAAAACgAAACwfHx9xcnFyw8rHx/vt6ur/4t3d/8O7u/+tqKj/s62s/83Iyf/r6OT/ - 9PHq/+LWzv/DrKP/p4uA/5FuYP+FWkn/hFI//4lQO/+TVT3/mlg//55ZQP+hW0H/plxC/6dcQv+pXEP/ - rF1D/65eRP+wXUT/sl1E/7NdRP+0XUP/tlxD/7ZcQv+2W0P/t1pC/7ZaQv+3WUH/t1hB/7ZXQP+0VkD/ - r1U//6pTP/+kUkH/oFZF/6BgUv+ncmf/t46E/8qupv/p3NT/+PTx//39/f////////////////////// - ///////////k5OX8hISH0CcnKJYAAABhAAAASQAAAEAAAAAuAAAAGAAAAAoAAAAHAAAABAAAAAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABgAAABgPDg9YZmVmtsG/v/bp5+f/ - 3dnZ/763t/+upqT/ubGy/9jV1v/38+//7ubf/8izq/+nin7/i2ZX/4BTQf+CTDf/jFA4/5ZUOv+aVjz/ - n1c8/6FZPv+lWz//pltA/6lcQf+qXEL/q11C/61dQ/+vXUP/r11D/7FdRP+zXUT/tF1E/7VcQ/+3XEP/ - uFxD/7lbQv+5W0H/u1lA/7xZQP+9WD//vVc+/75WPf++VT3/vVU9/7tUPf+6Uz3/s1I9/6xRPv+kUkL/ - n1pL/6VtYv+2joX/z7ex//Dp4v/7+vn/////////////////////////////////39/g/HR0d8gVExWE - AAAAVwAAAEcAAAA6AAAAJAAAABEAAAAIAAAABQAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD - AAAABAAAAAcAAAAzQD8/kKakpObk4OH/4tvb/7+6uv+tpaX/trGx/9vY1//28ez/5drS/7yjmf+TcmT/ - f1NB/35JM/+KTDT/klA2/5hTOP+cVTj/n1c6/6BYO/+jWTz/pFo+/6ZbP/+nW0D/qVxB/6pcQv+rXUL/ - rl1D/65dQ/+vXUP/sV1D/7JdQ/+0XUP/tVxD/7dcQ/+4XEP/uVtC/7pbQv+6WUD/vFlA/71YP/++Vz7/ - vlY+/8BVPP/BVDz/wlM6/8FSO//BUjn/wFE5/7xROv+3UDv/rU88/6NSQf+hXlH/rHtx/8ann//q3tX/ - +vj3/////////////v3//////////////////8HCwuxLS0yuAAAAagAAAEwAAABCAAAALgAAABcAAAAL - AAAABgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAARFRQVWnd1dcLV0ND/6OPj/8fCwv+tpaX/ - samq/9jT0//38+3/5trS/7GXjP+KZlb/eks2/4BHL/+MSzD/k04y/5dQM/+ZUjT/nVQ2/55UN/+fVjn/ - oVc7/6NZPP+kWj7/pVo//6dbP/+oXEH/qVxC/6tdQv+tXUL/rl1D/69dQ/+xXUP/sl1D/7RdQ/+1XUP/ - tlxD/7dcQv+4W0L/uVtB/7paQf+8WUD/vVg//75XPv++Vz7/v1Y8/8BVPP/CVDv/wlM6/8NSOP/EUDf/ - w1A3/8NPNv/BTjf/u084/7RPOv+oUD7/oVhK/6hyaP/DoZn/6t7U//r49////////Pv7//v6+f////// - //////v7/v+Hh4nRFxgYiQAAAFQAAABHAAAANwAAAB8AAAAMAAAABwAAAAQAAAACAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAD - AAAAIzs8PIqvrK3r5uHi/9TOz/+zraz/q6Wj/8vGx//69/T/7OLb/7OZjf+FYFD/eEcx/4BEKv+KSSz/ - kUot/5VNLv+YTzD/mVAy/5pSNP+cVDX/nVQ3/59WOf+hVzv/olg8/6RZPf+lWj7/p1tA/6hcQf+pXEH/ - q11B/61dQv+uXUP/r11D/7FdQ/+yXUP/s11D/7VdQ/+1XEP/t1xD/7hcQv+5W0L/ulpB/7tZQP+9WUD/ - vlc//75XPv+/Vj3/wFU8/8FUO//CUzr/w1I4/8RROP/EUDf/xU42/8VNNf/ETTX/w001/8BON/+4Tzn/ - rFA8/6FWSP+mcWb/waCY/+7l3P/8+/r///////X19P/39vb////////////LzM3xRERGqwAAAGYAAABH - AAAAPgAAACUAAAASAAAACAAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAQEBDtjYWGtzszM/+Lf3//Cu7v/qaOi/7izs//q5uf/ - 8+zp/8WupP+LZ1j/dkUw/35BJ/+IRSj/j0gp/5JJKf+VSyz/lk0u/5hPL/+ZUDL/mlE0/5xTNf+eVTj/ - n1Y5/6BXOv+iWDz/pFk9/6VaPv+mWz//qFtB/6lcQf+rXUL/rV1C/61dQ/+vXUP/sF1D/7JdQ/+zXUP/ - tF1D/7VcQ/+3XEP/uFtC/7lbQv+6WkH/u1pA/7xZQP+9WD//vlc+/79WPf/AVTz/wVQ7/8JTO//DUjn/ - w1I4/8RQN//ETzb/xU41/8VNNP/GTDT/xUwz/8RMNP/ATjb/uU84/6tQPf+gWEv/q3lw/8+1rv/17+v/ - /v7+//Pz9P/t7Ov/+fn5///////39/n/dHN0xwEAAXMAAABNAAAAQwAAACoAAAATAAAACQAAAAUAAAAD - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAUSERFT - ioqKzt7a2v/Y0tL/tK+t/6qjo//Oysv/+ff0/+HTyf+aemz/d0k0/3o+Jf+FQST/jEQk/49GJv+SSCj/ - k0kp/5VLLP+WTS7/l04v/5lQMv+ZUTT/nFM1/51UN/+fVjn/oFY6/6JYPP+jWT3/pVo+/6ZbP/+nW0D/ - qVxB/6tdQf+sXUL/rV1D/69dQ/+wXUP/sV1D/7NdQ/+0XUP/tVxD/7dcQ/+4W0L/uFtC/7paQf+6WUH/ - vFlA/71YP/++Vz7/vlc9/79WPf/AVDv/wVQ7/8JSOv/DUjj/xFE3/8RQNv/FTzX/xU41/8VNNP/FTTT/ - xksz/8VLM//ESzP/wE42/7dPOv+oUUD/oF9T/7WLgv/m2M7/+/n4//n4+f/n5eb/7Orq//////////// - nJye2xUVFIgAAABPAAAARQAAAC8AAAAXAAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAIAAAALJCQkaqOhoeLj39//y8XF/6ylpf+zrK3/5eLi//Tt6v+5oJX/ - fVVD/3Q9Jf+BPSD/iEAg/4xBIP+PRCP/kEUl/5FGJ/+TSSn/lEor/5ZMLf+XTjD/mE8x/5pRM/+bUjX/ - nVQ3/55VOP+gVjr/oVg8/6NZPf+kWT3/pls//6dbQP+oXEH/qlxB/6tdQv+uXUL/rl1D/69dQ/+xXUP/ - sl1D/7NdQ/+1XEP/tlxD/7dcQ/+4W0L/uVpC/7paQf+8WUH/vVlA/75YPv++Vz7/v1Y9/79VO//BVDv/ - wVM7/8NSOv/DUjj/xFA4/8RQN//FUDb/xU41/8VONP/FTDT/xUwz/8ZMM//FSzP/w001/75POP+yUDz/ - olRF/6RuY//Gq6T/9e/t//7+/f/l4uP/4d7c//b09f//////wMHC7CgoKJgAAABUAAAARwAAADUAAAAY - AAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAADzw8PIG2tbXy - 39nZ/8C6uv+ooqD/vLe5//v59v/o3db/mnpt/3RFL/95OyD/hDsc/4k+Hv+MQB7/jUEg/49DI/+PRST/ - kUcn/5JIKf+USSv/lUwt/5dOL/+YTjD/mlAy/5tSNf+cVDb/nlU4/59WOv+gVzv/olg8/6RZPf+lWj7/ - p1tA/6hcQf+pXEH/q11C/61dQ/+vXkP/sF5D/7JeRP+zXkT/tF1D/7VdQ/+2XEP/t1xD/7hbQv+4W0L/ - ulpB/7tZQf+8WUD/vVg+/75XPv+/Vj7/v1Y8/8BUO//BVDv/wlI6/8JSOf/EUjn/xFA3/8RQNv/FTzX/ - xU40/8VNNf/FTTT/xkwz/8VMM//FSzL/xEwz/8FNNv+4UDv/qVJA/59eUv+0joX/7OHY//z8+//k4uX/ - 2NTT/+jm5f//////2dfZ9zw7PacAAABcAAAARwAAADYAAAAXAAAACgAAAAYAAAADAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAAQAAABBFREWKx8TE+97a2v+5tLT/p6Ch/8rGyP/49vL/1cK4/4ZgUP9yPCT/ - fzob/4U7Gv+JOxr/iz4c/4w/Hv+NQSD/jkIi/49FJP+RRib/kkgo/5RKKv+VTC3/lkwu/5hPMP+ZUDL/ - mlI0/5xTNf+dVDf/n1Y5/6BXO/+iWDz/pFk9/6VaPv+nW0D/qFtA/6lcQf+qXEH/qFpA/6VXPv+iVDz/ - o1U8/6VVPf+qWD//r1tC/7RcQv+3XEP/uFxC/7hbQv+5W0L/u1pB/7xZQP+8WUD/vlg+/75XPv+/Vj3/ - v1U8/8FUO//BUzv/wlM6/8NSOf/DUTj/w1A3/8RQN//FTzb/xU41/8VONf/FTTX/xU00/8VNNP/FTDP/ - xEw0/8JNNf+9UDn/sVI//59XSP+penD/3crB//r49//n5ef/z8zM/97b2///////6Ojp/U1MTrIAAABf - AAAARwAAADUAAAAYAAAACgAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAQT05Ok8vGx//X0tH/ - tq+u/6mhov/Y09b/9/Lx/7qhlv93Tjz/djsh/4E5Gv+GOhj/iDsY/4k8Gf+LPRz/jD8e/41BH/+OQiH/ - j0Qj/5BGJv+SSCj/k0oq/5VLLP+WTC7/mE4w/5lQMf+aUTT/nFM1/51UN/+eVjj/oFc6/6JYPP+jWT3/ - pVo+/6ZbP/+kWT7/m1A2/41HL/+ISTP/hko2/4NKOP+BSDX/gEMw/4A9KP+JQiz/m003/6pWPv+1W0L/ - uFtC/7lbQv+6WkH/u1lB/7xZQP+9WD//vlc+/75XPv++VTz/v1U8/8FUPP/CUzr/wlM6/8JSOf/DUTj/ - xFA4/8RQN//EUDb/xU82/8VPNv/FTjX/xU40/8VONf/FTjT/xU40/8NONf/AUDj/t1M+/6RWRf+faV7/ - yK6n//j18//s6uv/zsvL/9nV1P///v7/8PDy/1hYWbkAAABeAAAARwAAADMAAAAXAAAACgAAAAUAAAAC - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAACkxNTZDKx8b/1tHR/7KsrP+spaX/3dra//Tt6v+tkYT/dUg0/3s9IP+COBj/ - hjgY/4g6F/+IOhf/iTsY/4o8G/+MPx7/jEAf/45BIP+PRCP/kEYl/5FHKP+TSSn/lEsr/5ZMLf+XTi// - mFAx/5pRM/+bUjX/nFM2/55VOP+gVjr/oVg7/6NZPP+kWT3/nFE2/5BONf+XaVj/p4yC/7ekoP/Dt7T/ - yL+9/8e8uf++ran/rZOM/5NtYf95QDD/fzso/5xOOP+wWED/uVtC/7lbQf+6WkH/vFlA/71ZQP++WD7/ - vlc+/75WPf+/VTz/wFU8/8FUPP/BVDr/wlM6/8NTOf/DUTn/xFE4/8RQN//EUDf/xE82/8RPNv/FTzb/ - xU82/8VPNf/ETzX/xE81/8NPNv/AUDj/uVM9/6hVQ/+dY1j/v6GZ//bw7P/y8PD/0MvM/9bS0f/++vv/ - 8fHy/1FRUrQAAABeAAAARgAAADAAAAAUAAAACQAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANBQUF+yMPD/9bR0P+yrKz/ - rKem/+Tf3//y6uf/oIJ0/3JDLv98Ox7/hDkY/4Y4F/+HOBf/iDkX/4g6F/+JOxj/ijwa/4s+HP+MQB7/ - jUEg/49DI/+PRST/kUYn/5JIKP+USir/lUwt/5dNLv+YTzH/mVAy/5pSNP+cUzb/nlU4/59WOf+hVzv/ - oVc7/5hOMv+calj/va2n/9LPz//Y19j/19TV/9XS0//V0dH/1tLT/9nX2P/f3+D/4uDg/8/Ewv+Vb2T/ - dDYk/5FHMv+uVj//uVtC/7pbQf+6WUD/vFlA/71ZP/++WD7/vlc+/79WPv+/Vjz/wFU8/8FUPP/CVDr/ - wlM6/8JSOv/DUjn/w1I4/8NROP/EUTf/xFA3/8RQN//ETzb/xE82/8RPNv/ETzb/xE82/8JQN//BUDj/ - vFM9/6tWQ/+cYFP/uJmR//Ps5v/19PL/z8rK/9TQ0P/9+/z/6uvs/0ZGRq0AAABZAAAARAAAACwAAAAS - AAAACAAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAADMTAwab28vPnW0tL/tK2s/6ynpf/l4uL/8Ojh/5h5bP9xPyn/fjod/4U4F/+HORX/ - iDgX/4g5F/+IORf/iDoX/4k7GP+KPBn/iz0c/4s/Hf+NQR//jkMi/49FJP+RRib/kkco/5NKKv+VSyz/ - lkwu/5dOMP+ZUDH/mlE0/5xTNf+dVDf/n1Y5/59WOf+ZUDT/rIV3/9DLzP/U0tP/0MzM/87Jyf/Oycn/ - zsnJ/87Jyf/Oycn/zsrK/8/Ly//Szc7/393e/+rp6v+0nJX/dDop/5JHMv+yWD//ultC/7paQf+7WUH/ - vFlA/71ZQP++Vz7/vlc+/79WPv+/VTz/wFU8/8FUPP/BVDv/wlM6/8JTOf/DUzr/w1I5/8NSOP/DUjj/ - w1E4/8NROP/EUDf/xFA3/8NQN//EUDf/w1A3/8NQN//BUTn/vFM9/61WQ/+aXFD/r42F//Hq4v/18/L/ - zcnK/9XQ0P///v7/4+Pk/TMzM6AAAABQAAAAQgAAACgAAAAQAAAABwAAAAMAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh0bHFKopKXp2NPS/7Wvr/+rpKT/ - 4N3d//Hp5P+YeGr/c0Aq/4A5HP+GOBf/iDkV/4k5Fv+JORb/iDkX/4g4F/+JORf/iTsX/4k7Gf+LPRv/ - jD8d/41AH/+OQSH/j0Qk/5BFJf+RRyj/k0kp/5RLK/+WTC7/l04v/5hPMf+aUTP/m1I1/51TNv+eVTj/ - mlAy/6+Ief/Qz9D/z8zM/8zHx//Lx8f/ysbG/8rFxf/KxcX/ysXF/8vGxv/Lxsb/zMfH/83IyP/NyMj/ - 1dHS//Hy8/+1nZb/djYk/59OOf+3W0L/uVtC/7paQf+7WUH/vFlA/7xYP/++Vz7/vlc+/75XPv+/Vjz/ - v1U8/8FUPP/BVDv/wVQ7/8FUO//CUzr/wlI6/8JTOf/DUjn/w1I5/8NSOP/DUjj/wlE4/8NROP/DUTj/ - w1E4/8JROP/AUjn/u1Q9/65XRP+ZW07/rYyE//Lr5f/z7+7/y8bH/9bT0v//////ysnL8hoZGo0AAABN - AAAAPwAAACEAAAAMAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAEPDg41l5WX19jT0/+7tLT/qKCh/9nV1//17uv/nH1w/3NAKv+BPR//hzgX/4k4Ff+JORX/ - iTkV/4k5Fv+IORf/iTkX/4k6GP+JOxf/ijsZ/4o8G/+MPh3/jEAe/41BIP+PQyP/j0Uk/5FHJ/+SSCj/ - lEoq/5VMLf+WTS7/mE4w/5lQMv+aUjT/nFM2/5pPMP+ncl7/zcrK/8zIyf/JxMT/ycTE/8fCwv/HwsL/ - xsHB/8bBwf/GwcH/x8LC/8fCwv/Iw8P/ysXF/8vGxv/Lxsb/1tLT//Dw8P+VbmP/hT0p/69XP/+6W0L/ - ulpC/7paQf+8WkD/vFlA/71ZP/++WD7/vlg+/79XPv+/Vj3/wFY9/8BVPP/AVDz/wVQ8/8FUO//BVDv/ - wlQ6/8JTOv/CUjr/wlM6/8JTOf/CUjn/wlI5/8JSOf/BUjn/wlI5/8JSOf/AUzr/ulU+/61XQ/+aXVD/ - spOL//Tu6P/s6+v/yMTD/9jV1f//////r66v5gwMDH8AAABHAAAAOAAAABgAAAAKAAAABQAAAAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFnNxcbPY09P/wbu6/6qiov/SztH/ - +PTy/6iLf/9zQSz/gT0f/4c5GP+JOBX/ijgV/4k5Ff+JORX/ijoW/4o6Fv+JORf/ijoY/4o6GP+KOxj/ - ijwa/4s+HP+MQB7/jUEg/45CIv+PRCT/kUYm/5JIKP+TSSr/lEss/5ZMLv+XTjD/mE8x/5pRNP+bUTT/ - nFI1/8CrpP/Lysv/x8LC/8bBwf/FwMD/xL+//8O+vv/Dvb3/wr29/8K9vf/Dvr7/w76+/8XAwP/GwcH/ - yMPD/8rFxf/JxMT/5eXl/9TIxf97PSz/o1E6/7hbQv+5W0L/uVtC/7paQf+7WkH/vFlA/71ZQP++WD// - vlc+/79XPv++Vz7/wFY9/8BWPP/AVTz/wFQ8/8FVPP/BVTz/wVQ7/8FUOv/BVDv/wVQ7/8JUO//CUzr/ - wVM6/8FTOv/BUzr/wVM6/8BTOv++VDv/ulY//6tYRf+YX1L/uZ2W//j19P/l4uP/x8HB/+Dd3f////// - h4eH0wAAAGkAAABFAAAAMAAAABMAAAAIAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAJSUFOMysTF/8jCwv+spKT/xL2///v49/+3npP/dUUw/4E+IP+IORf/ijkW/4s4Ff+KOBX/ - ijkV/4o5Fv+KORb/ijoW/4o5F/+KOhj/ijoY/4o7GP+LPBr/jD0c/40/Hv+NQR//jkIh/49EJP+QRSb/ - kUco/5NJKf+USiv/lkwt/5dOL/+YTzH/mlEz/5hNL/+nbFX/yMPC/8bBwv/Dvr7/wr29/8G8vP/Au7v/ - v7q6/8C6uv+/urr/v7m5/7+6uv/Au7v/wby8/8O9vf/Ev7//x8LC/8jDw//Szs7/7uzs/41cT/+XSDP/ - tltC/7hcQv+5W0L/uVpC/7taQf+7WkD/vFlA/7xZQP+9WD//vlg+/75YPv++Vz7/v1c9/79WPf+/Vj3/ - v1U8/8BVPP/AVTz/wFQ7/8BVO//BVTv/wVQ7/8FUO//BVDv/wVM7/8BTO//AUzv/wFQ7/8BUOv+9VTv/ - uFY//6hYRv+YY1f/xK2m//v5+P/a1tn/xsLC/+zp6P/19Pb/WltbuQAAAFkAAABBAAAAJwAAAA8AAAAH - AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKCopWLSxsvbSy8z/r6in/7iys//8+/b/ - yriv/3dKN/+BPiH/ijoY/4s6Fv+MOhb/jDkW/4s5Ff+KORX/ijkW/4o6Fv+LOhf/ijoX/4o6F/+KOxj/ - ijsY/4s8Gf+LPRv/jD8d/41BH/+NQiD/j0Mj/5BFJf+RRib/kkgo/5RJKv+VSy3/lk0u/5hPMP+ZUDL/ - l0kq/7GGdf/Ixsf/wr29/8G7u/+/urr/vri4/723t/+8t7f/vLe3/7y3t/+9t7f/vLe3/724uP++ubn/ - wLq6/8K8vP/Dv7//xsHB/8nExP/u7/D/rIqA/49BLP+0W0L/uFxD/7hbQv+5W0L/ulpC/7pbQv+7WkH/ - u1pB/71ZQP++WD//vlg//75YPv++Vz7/v1c+/75XPv+/Vj7/v1Y9/79WPf+/Vj3/wFY9/8BWPP/AVTz/ - wFU8/8BVPP/AVTz/v1U8/79VPP+/VTz/v1U8/79VPP+9Vj3/tlhB/6RZR/+WZ1z/08O7//38+//QzM7/ - ysXE//r4+f/d3N38JSUllwAAAE0AAAA8AAAAHQAAAAsAAAAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQYGBiOOi4rO1c7O/7exsf+vp6b/8e7r/+nc1P+AWEf/fT8j/4k8Gv+MOxf/jToW/406Fv+NOhb/ - jDoW/4s5Fv+KORb/ijoW/4s6F/+LOhf/ijoY/4s7Gf+LOxj/izwZ/4s9Gv+MPh3/jkAe/45BH/+OQiH/ - kEQk/5BFJv+RRyf/k0kq/5RKLP+WTC7/l04v/5hPMf+WSSn/r4l6/8TExv+/urr/vri4/7y3t/+7trb/ - urW1/7m0tP+5tLT/ubS0/7q0tP+6tLT/u7W1/7y2tv+9uLj/wLq6/8G7u//Dvr7/xcDA/+nr7P+ylIv/ - jEAq/7RcQv+3XEP/t1xD/7hcQv+4W0L/uVtC/7paQv+7WkH/vFlB/7xZQf+9WUD/vVhA/75ZP/++WD// - vlc+/75YPv+/Vz7/v1c9/75XPv++Vz7/vlY9/75WPf++Vj3/v1Y9/79WPf++Vj3/vlY9/75VPf+/Vjz/ - v1U8/75VPP+8Vj3/tFhC/59ZSP+YcGX/49nQ//78+P/Fw8P/087O//////+ko6ThBQUFdgAAAEQAAAAw - AAAAEwAAAAgAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWVlZks7Hx//CvLv/q6Wl/9vZ2f/07+r/ - km9g/3c+Jv+JPh//jjsY/487F/+NOxf/jToX/406F/+MORb/jDoW/4s6Fv+LOhb/jDoX/4w7F/+MOhj/ - izsY/4s7GP+LOxj/jD0a/40+HP+NQB7/jkEf/49CIP+PQyL/kEUl/5FGJ/+SSCj/k0kr/5VMLf+WTS7/ - mE8w/5ZJKP+thnj/wcHD/7y3t/+7tbX/ubS0/7m0tP+5s7P/uLKy/7eysv+3srL/t7Ky/7eysv+5s7P/ - ubS0/7u2tv+9uLj/v7m5/8K9vf/Dvr7/6Onq/7OVjP+PQyv/s1xC/7ZdQ/+3XEP/t1xD/7hcQv+5W0L/ - uFtC/7pbQv+7W0L/u1pB/7tZQf+8WkD/vFlA/71ZQP++WUD/vlg//75YP/++WD//vlc+/75YPv++Vz7/ - vlc+/75XPv++Vz3/vlc9/75XPf++Vz3/vlc9/71WPf+9Vj3/vlY9/71WPf+6Vz//sFpE/5dYSf+ce3H/ - 8u7m/+vo6P/Dvrz/4N3d//z6+/9naGjBAAAAXwAAAD8AAAAlAAAADgAAAAYAAAADAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAASgpKVGxrq72zsfH/6+mpv/Bu73/+/n3/6+UiP91QSv/hz4g/448Gf+PPBj/jzsX/487F/+OOhf/ - jToX/446F/+NOhf/jDoW/4w6F/+MOxf/jDsX/4w7F/+LOxj/izsZ/4w8GP+MPBr/jT4c/40/Hf+OQB7/ - j0Ig/49DIv+QRST/kkYm/5JIKP+TSSn/lEss/5ZMLv+XTi//lUgn/62Edf/AvsD/urW1/7qzs/+4s7P/ - t7Gx/7axsf+3sbH/trGx/7axsf+2sbD/trGx/7exsv+4srL/urOz/7q2tv+9uLj/wLu7/8O9vf/s7e7/ - s5GH/5ZHLv+0XUP/tV1D/7ZcQ/+2XEP/t1xD/7hcQ/+4XEP/uVtC/7pbQv+6W0L/u1tB/7taQf+7WkH/ - vFpB/7xaQP+8WUD/vVlA/71ZQP++WUD/vlg//75YP/+9WD//vlc+/71XP/+9Vz//vlc+/71XPv+9Vz7/ - vVc//71XPv+9Vz7/vVc+/7tXP/+3WED/qVlG/5FcT/+2nZX/+/r5/9TR0v/Dv7//9vP0/9rY2v4nJyiZ - AAAASgAAADgAAAAZAAAACgAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMXfnx8vNPNzf+3sbH/squs//Xz8P/WyL// - e047/4RAI/+PPRr/kDwY/5A8GP+QPBj/kDsX/487F/+OOhf/jjoX/446F/+NOxf/jToX/4w7F/+MOxf/ - jDsY/4w7GP+MOxn/jTwZ/4w8Gf+NPRr/jj4d/45AHv+PQSD/kEMi/5BFI/+QRiX/kkgn/5NJKf+USyr/ - lUwt/5ZNLv+VSSr/qHJd/725uf+4tLT/t7Ky/7awsP+2sLD/ta+v/7Wvr/+0rq7/tK+v/7Svr/+1r6// - trCw/7exsf+4srL/urS0/7y3t/+9uLj/xsLC/+3t7f+hcGH/o1E4/7RdRP+zXUP/tV1D/7ZdQ/+2XUP/ - t1xD/7hcQ/+3XEL/uFxC/7hbQv+6W0L/ultC/7tbQv+7W0L/u1pB/7taQf+7WkH/vFlA/71ZQf+9WUH/ - vVlA/7xZQP+9WUD/vVlA/71YQP+9WED/vFg//7xYP/+8WD//vFg//7tYPv+8Vz7/u1g+/7pXP/+0WUP/ - olpI/45jWP/Sxr7//v76/8XCwv/Qy8v///7//5mYmdoAAABsAAAAQQAAACsAAAAQAAAABwAAAAMAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAUZFRXbDv7//xcDA/6ylpf/Z1dX/8+7m/4xoWP99PyX/jT8d/5E9Gf+SPRn/kT0Y/5E8GP+QPBj/ - kDwY/487GP+POxf/jjsX/447F/+OOhf/jTsX/4w7F/+NOxj/jTsY/407Gf+NOxn/jDwZ/409Gv+OPhz/ - jj8e/49BH/+PQiH/kEQj/5FFJf+SRif/k0ko/5RKKv+VSyz/lk0t/5ZNLv+aUzb/uaml/7i1tv+1sLD/ - ta+v/7Wvr/+0rq7/s66u/7Ourv+zra3/tK6u/7Surv+1r6//trCw/7exsf+5s7P/u7a2/7u1tf/Z2dn/ - 4NbT/5dSPP+tWkD/sl1E/7JdRP+zXUP/tF1D/7VdRP+2XUP/t11D/7dcQ/+3XEP/uFxD/7hbQv+5W0L/ - uVtC/7pbQv+6W0L/u1tC/7tbQv+6WkL/vFpB/7xaQf+8WUH/u1lB/7tZQP+7WUD/u1lA/7tZQP+7WUD/ - vFhA/7xZQP+7WUD/u1k//7pZP/+7WD//ulg//7hYQP+uWkT/l1hJ/5d1a//w6+L/6+jo/7+6uv/l4OD/ - 8O/w/0dGR6sAAABRAAAAOQAAABkAAAAKAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDgwllJGR1NLKy/+xrKz/vre5//z79v+1nZP/ - dkIr/4tAIv+SPhv/kz0Z/5I9Gf+SPRn/kjwY/5E8Gf+QPBj/kDwY/5A7F/+POxf/jzsX/447F/+NOxf/ - jTsX/408F/+NPBj/jTsZ/407Gf+NPBn/jTwZ/44+G/+PPx7/j0Ef/5BCIP+QQyL/kUQk/5JGJf+SSCf/ - lEkp/5RLKv+VTC3/lk0u/5VJKf+rfWv/u7q8/7Wvr/+0rq7/tK2t/7Otrf+zra3/s62t/7Otrf+zra3/ - s66u/7Surv+1sLD/trGx/7izs/+4s7P/w7+//+7w8f+ziHr/oE82/7BeRP+xXkT/sV1E/7JdRP+zXUP/ - tF1E/7VdRP+2XUT/tl1D/7ZdQ/+2XEP/uFxD/7hcQ/+5XEL/uVxD/7lcQv+6W0L/ultC/7pbQv+6W0L/ - ulpC/7pbQv+7WkH/u1pB/7taQf+6WkH/u1lA/7paQf+7WkD/ulpA/7lZQP+6WUD/ullA/7pZQP+5WT// - uFlA/7VaQv+oW0b/jFpM/6+bk//7+/n/z8vM/8TAv//8+fr/ra2u5wsLC3sAAABBAAAAKwAAAA8AAAAH - AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAUpJSn3Iw8P/wrq6/66nqf/q5uX/6eDW/4JZR/+GQSX/kUAd/5Q+Gv+UPhr/kz4Z/5I+Gf+SPRn/ - kjwZ/5E9Gf+RPBj/kDwX/5A8GP+PPBj/jzsX/447F/+OPBf/jjwY/448Gf+OPBn/jTwZ/408Gv+NPRn/ - jj0b/48/HP+PQB//kEIf/5BDIf+RRCP/kkYl/5JHJv+TSSj/lEoq/5VLLP+WTC7/lkwt/5lPMf+0mI7/ - urm7/7Ourv+zraz/s62t/7Otrf+zra3/s62t/7Otrf+zra3/tK+v/7WwsP+2sbH/trCw/7+7u//k5+n/ - zrWu/55SOv+tXEL/r15E/69eRP+wXUT/sV5D/7JdRP+zXUT/s11E/7RdRP+1XUT/tl1E/7ZdRP+3XUP/ - t11D/7hcQ/+3XEP/uFxD/7hcQ/+4W0L/uVxC/7lbQv+5XEL/ulxC/7pbQv+6W0L/uVtC/7lbQf+6W0H/ - uVpB/7laQf+5WkH/uVpB/7lZQP+5WUD/uVpA/7laQP+4WT//t1lA/7FaQ/+cWUj/jmhd/+LZzv/28u// - v7q6/9vX1//18vb/VlZWtQAAAFMAAAA4AAAAGwAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREsl5SW2NDKyv+yq6n/xsDB//n48v+jhXj/ - eUAo/49CIv+VPxz/lT8b/5U/Gv+UPhn/lD4Z/5M+Gf+SPRn/kj0Z/5E9Gf+RPRj/kTwY/5A8GP+QPBj/ - jzsX/488GP+OPBj/jjwZ/448Gf+OPBn/jTwa/449Gv+OPhr/jz4c/49AHv+QQR//kEMg/5FEIv+SRST/ - kkcm/5NIJ/+USSn/lUor/5ZLLf+XTS//lkss/5tSNP+0mI7/u7m7/7aysv+yra3/sqys/7GsrP+yraz/ - s62t/7Otrf+zrq3/s66u/7eysv/HxMX/4uTl/9C4sf+iW0L/qVk+/65eQ/+uXUP/rl1D/69dRP+wXkP/ - sV5E/7JdRP+zXUT/s11E/7NeRP+1XUT/tV1E/7ZdRP+2XUT/t11E/7ddQ/+3XEP/t1xD/7hcQ/+3XEP/ - uFxD/7hcQ/+4XEP/uFxC/7lcQv+5W0L/uFtC/7lbQv+4W0L/uFtC/7hbQv+4W0L/uFtB/7hbQf+4WkH/ - t1pB/7haQP+3WT//tFpB/6pbRv+OWEn/oIZ9//n38f/V0tL/v7u7//r39/+4uLjsERERgAAAAEEAAAAr - AAAADgAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAUxMTX7JxMX/wLq6/7Gqq//t6eX/1svD/31RPv+JQiT/lEAd/5dAG/+XPxv/lj8b/5U+Gv+VPhr/ - lD4Z/5Q9Gf+TPhn/kz4Z/5I9Gf+SPBj/kTwY/5E8GP+QOxj/kDsY/448GP+OPBj/jz0Z/489Gf+OPBr/ - jzwa/449Gv+PPRv/kD8d/5BAH/+QQh//kUMh/5FEI/+SRiX/k0cm/5RIKP+VSSr/lksr/5dNLv+XTi// - l0wt/5pQMf+ugnD/u6+t/7u7vf+4t7j/trKz/7Wxsf+1sLH/t7O0/7y4uf/Fxcb/1NXX/9nRz/+/l4n/ - olg9/6hZPf+rXUL/rF1C/61dQ/+tXUP/rl1D/69dRP+wXkT/sF5E/7FeRP+yXkT/s15E/7NdRP+0XUT/ - tF5E/7VeRP+2XUT/tl1E/7ZdRP+2XUP/t11E/7ddQ/+3XUP/t1xD/7dcQ/+3XEP/t1xD/7hcQ/+3XEL/ - uFxC/7hbQv+4W0L/uFtC/7dbQv+3W0H/t1tB/7dbQf+3W0H/t1pB/7daQf+1WkD/sFtD/55aR/+IYFT/ - 0ce///n38v/Au7r/2tXV//Xz8/9ZWFm3AAAAVAAAADUAAAAZAAAACgAAAAQAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAkko+Q0NHLy/+zra3/x8PD//f17f+hhHf/ - gUky/5NDI/+XQBz/mEAb/5dAG/+WQBv/lj8b/5U/G/+VPxr/lT4a/5Q+Gv+UPhn/kz0Z/5I9Gf+RPRn/ - kT0Z/5E8GP+ROxj/kDwY/489GP+QPBn/kD0Z/488Gv+PPRr/jj0a/489Gv+QPhz/kEAe/5FBH/+RQyD/ - kUQi/5JFJP+TRib/lEgn/5RJKf+VSiv/lkws/5dNLf+YTjD/mE4v/5hLK/+fXED/roFw/7idlP/As6// - v7a0/8C4tv/Fvbv/y7+7/8eupv+7j4D/qWZN/6JTN/+nWj7/qVxB/6pcQf+rXUL/rF1C/6xdQ/+tXUP/ - rl1D/69eQ/+vXkT/sF5E/7FeRP+xXkT/sl1E/7NdRP+zXkT/tF5E/7ReRP+0XUT/tV1E/7VdRP+2XUT/ - tl1E/7ZdQ/+2XUP/tl1D/7ZdQ/+2XEP/t11D/7ZcQ/+2XEP/t1xD/7dcQv+3XEL/t1xC/7ZcQv+2W0L/ - tltC/7ZbQf+1W0H/tVpB/7ZaQP+0WkH/qltF/49XSP+dgnn/+Pbu/9bR0/++ubn/+PT2/6+vr+gKCgp2 - AAAAPgAAACcAAAAOAAAABgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAERERW7FwL//xL2+/7Crq//p5uP/183H/4heTP+TUTT/mUYi/5lAG/+ZQRz/mEAc/5dAG/+XQBv/ - l0Ab/5Y/G/+VPxr/lT4a/5Q+Gf+UPhr/kz4Z/5I9Gf+SPRj/kT0Z/5E8GP+RPBj/kD0Z/5A9Gf+RPRn/ - kDwa/488Gv+PPRr/jz4a/5A+G/+QQB3/kUAf/5FCIP+RQyH/kkUj/5NGJf+URyf/lUko/5VKKv+VSiv/ - lkwt/5hNL/+ZTzD/mVAx/5lOMP+ZSyv/nVI0/6BaPv+hXED/oVxB/6NeQ/+kXUL/olc6/59RM/+jVzr/ - plo//6ZbP/+nW0D/qFxB/6lcQf+qXUL/q11D/6xdQ/+tXUP/rl5D/65eRP+vXkP/r15D/7BeRP+xXkT/ - sV5E/7JeRP+zXkT/s15E/7NeRP+zXkT/tF1E/7ReRP+0XUT/tV1E/7VdRP+1XUT/tV1D/7ZdQ/+2XUP/ - tVxD/7VcQ/+1XEP/tVxD/7ZcQ/+2XEL/tVxC/7VcQv+1W0L/tVtC/7VbQf+0W0D/tVtA/7NaQP+uW0P/ - nlpG/4dfU//Qx8D/9vPu/723t//b2Nb/7Ovt/0NDQ6kAAABMAAAAMgAAABUAAAAIAAAAAwAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBAMNfXl7t9TOzf+1rq3/xL+///r37/+ojYP/ - ilI8/59VNv+eSyr/mkId/5lBHP+ZQRz/mUAc/5hAHP+XQBv/lkAb/5Y/G/+VPxr/lT8a/5Q+Gv+UPhn/ - kz4a/5M9Gf+SPRn/kj0Z/5I8GP+QPRn/kD0Z/5E9Gf+QPRr/jz0a/5A9Gv+PPhr/kD4b/5E/HP+RQB7/ - kUEf/5JDIP+SQyL/k0Yk/5RGJv+USCf/lEko/5VKKv+WSyz/l00t/5hNLv+ZTzD/mlAy/5pRNP+bUTT/ - m1Ez/51SNP+eUzX/nlQ3/6BVOP+hVzr/olg8/6NZPf+lWj7/plo//6dbP/+nW0D/qFxB/6lcQf+qXEL/ - q11C/6tdQ/+sXUP/rV1D/65eQ/+uXkP/r15E/7BeRP+wXkT/sV5E/7FeRP+yXkT/sl5E/7NeRP+zXkT/ - s15E/7NdRP+0XkT/tF1E/7RdQ/+0XUT/tF1E/7RdRP+0XUT/tF1D/7RdQ/+0XEP/tFxD/7RcQv+0XEL/ - tFxC/7RcQv+0W0L/tFtB/7NbQf+zW0D/s1pA/7FaQf+nWkT/jFZH/5+Gff/6+e//z8vL/8K8u//6+Pj/ - jY2O1gABAmkAAAA4AAAAIQAAAAsAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAACgnKEe0r6/5y8TE/7Cqqv/j4N7/493X/41kU/+WVDn/o1Qz/6NRL/+dRyL/mkEc/5pCHP+aQhz/ - mUEc/5hBHP+YQBz/l0Ab/5ZAGv+WPxv/lT4a/5U+Gv+UPhr/lD4a/5M9Gf+TPhn/kj0Z/5I9GP+RPRn/ - kT0Z/5I+Gf+RPRr/kT0a/5A+G/+QPhv/kT4b/5FAHf+RQR//kUIg/5JDIf+TRSP/lEYk/5RHJv+USCf/ - lUop/5ZKK/+WTCz/mE0t/5hPL/+ZUDH/mlEy/5tSNP+cUjX/nFQ2/51VNv+eVTj/n1Y5/6BXOv+hVzv/ - olk8/6NZPf+lWT7/pVs+/6ZbQP+nXED/qFtA/6lcQf+qXEL/ql1B/6tdQv+sXUP/rV1D/61eQ/+uXkP/ - r15E/69eRP+vXkT/sF5E/7BeRP+xXkT/sV5E/7JeRP+yXkT/sl5E/7JeRP+zXUT/s11E/7NdRP+zXUT/ - s11D/7NdQ/+zXUP/s11D/7NcQ/+zXEP/s1xD/7NcQ/+zXEL/s1xC/7JbQf+yW0H/sltB/7JbQf+xWkD/ - sVpA/6tbQ/+YWEX/imRY/9/Y0f/t6uf/ubSy/+Xi4v/V1db+KSoqlAAAAEMAAAArAAAAEAAAAAcAAAAC - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXFtbjdHNzf+8t7b/ura2//Py6/+ynpb/ - iFQ+/59XOP+kUzH/pVIw/6JNK/+cQx//m0Ic/5pCHf+ZQR3/mUEc/5lAHP+YQRz/l0Ac/5ZAG/+WQBv/ - lj8b/5U+Gv+VPhr/lD4Z/5M+Gf+TPhr/kz0Y/5I9Gf+RPhn/kT4a/5I+Gv+RPRv/kT4b/5E+G/+RPhv/ - kT8c/5JBHv+SQiD/kkMh/5JEI/+TRSP/lEYl/5VIJ/+VSCn/lUoq/5ZLK/+XTC3/mE4u/5pPL/+bUTL/ - m1Ez/5xSNP+dUzX/nlQ2/55UN/+fVTj/oFc6/6FXO/+iWDv/olg8/6RZPf+kWT7/pVo+/6ZbP/+mW0D/ - p1xB/6hcQf+pXEH/qlxB/6tdQv+rXUP/rF1D/61eQ/+tXkP/rl5D/65eQ/+vXkT/r15E/69eRP+wXkT/ - sF5E/7FeRP+xXkT/sV5E/7FeRP+xXkT/sV1E/7FdRP+yXUT/sl1D/7JdQ/+yXUP/sl1D/7JdQ/+yXUP/ - slxD/7JcQv+xXEL/sVxC/7FbQf+xW0H/sVtB/7FbQf+wWkD/rVpB/6JbRP+HVkj/qZaP//n47v/Fv8D/ - ycTE//r3+P9paGjBAAAAVwAAADMAAAAYAAAACQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAABARER+UkpLN083N/7KsrP/Szs//7+3m/5ZzZP+SVDr/pVY1/6ZTMP+mUjD/pVIw/59IJf+bQhz/ - m0Id/5tCHf+aQh3/mkIc/5lBHP+ZQBz/mEAb/5dAG/+XQBv/lj8b/5U+Gv+VPhr/lT4a/5Q+Gv+UPhn/ - kz0Z/5I+Gf+SPhr/kj4a/5E+Gv+SPhv/kj4b/5E/G/+RPxv/kkAd/5JBH/+SQiD/k0Mh/5NEI/+URiT/ - lUcm/5VIJ/+WSSj/lkoq/5dMLP+YTC3/l00u/5dOL/+XTzD/l1Ay/5lQM/+aUTT/mlI1/5tTNv+cVDf/ - nVU5/51VOf+fVzr/olg8/6NZPf+kWT3/pVo+/6ZbP/+nW0D/p1xA/6hcQf+oXEH/qVxB/6pdQv+rXUL/ - q11D/6xdQ/+tXUP/rV1D/61eRP+uXkP/rl5D/69eRP+vXUT/r15E/69eRP+wXkT/sF5E/7BeRP+wXkT/ - sF1E/7FdRP+xXUP/sV1D/7FdQ/+xXUP/sV1C/7FdQv+xXEL/sVxC/7BcQv+wXEL/sFtB/7BbQf+wW0H/ - sFtB/69aQP+uWkD/qFtC/5JXRf+NbmP/8O7j/97a2f+5srL/9PHx/62uruYPDw93AAAAOAAAACEAAAAM - AAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAxUry4uP/LxMT/tK6u/+vm4f/Nwr3/ - iVtI/59XOv+lVTP/p1Mx/6dUMf+mUzH/o1Au/55FIP+cQh3/nEIe/5tCHf+bQh3/mUIc/5lBHP+ZQBz/ - mEEb/5dAG/+XPxv/l0Aa/5Y/Gv+VPxv/lT8a/5U+Gf+TPRn/kz4Z/5I+Gv+TPhr/kz4a/5I+G/+SPhv/ - kz8c/5E/G/+SQBz/kkAd/5JBH/+TQyD/k0Mi/5NFJP+URiT/lUcm/5VIJ/+WSSr/k0Ym/4Q8Hf93Nhr/ - czUa/3Q1HP90Nh3/dTcd/3U4Hv92OCD/dzkg/3c6If93OSH/eDoi/4JELP+UUDb/oFc7/6NYPf+jWT3/ - pFk9/6VbPv+mWz//p1tA/6dcQf+oXEH/qVxB/6lcQv+qXUL/q11C/6tdQv+rXUL/rF1D/61dQ/+tXkP/ - rV5D/65dQ/+uXkP/rl5D/69eQ/+vXkT/r11D/69eQ/+vXUP/r11D/69dQ/+vXUP/r11D/69dQ/+vXEL/ - r1xC/69cQv+vXEL/r1xB/69cQf+vW0H/r1tB/69bQP+vWkD/rlo//65aP/+rWUD/nFlE/4NZTP/Kv7n/ - 9PDq/7iztP/e2dn/3t/f/zY2Np0AAABFAAAAKwAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAFgX1+R1c/P/7u1tf/BvL3/8e/p/6iPhP+NVT7/pVk6/6hVMf+oVDL/qFQx/6dTMf+nUzH/ - o00q/51EHv+cQx7/nEMe/5tCHf+aQhz/m0Ed/5pBHf+ZQRz/mUAb/5lBHP+XQBv/l0Ab/5Y/G/+WPxv/ - lT8a/5U+Gv+UPhr/lD4a/5M/Gv+TPhv/kz4b/5I/G/+SPxz/kj8c/5I/G/+SPx3/k0Ee/5NCIP+TQyH/ - lEQi/5RFJP+VRiX/lUgn/5VGJf+ZWT7/m3hr/5B1a/+OdGr/j3Rr/491a/+Rdmz/kXdu/5J4b/+UenD/ - lnxz/5iAdv+XfXL/dkw8/3g/KP+YUzj/olg8/6NZPf+jWT3/pFk9/6VaPv+mWz//pltA/6ZcP/+nXED/ - qFtB/6hcQf+qXUL/ql1C/6pdQv+rXUL/q11D/6xdQ/+sXUP/rV1D/61dQ/+tXkP/rV5D/61dQ/+uXUP/ - rl1D/65dQ/+uXUP/rl1D/65dQ/+uXUL/rl1C/65cQv+uXEL/rlxC/65cQv+uXEH/rlxB/65bQf+uW0H/ - rltA/61aP/+tWj//rVo//6tZQP+jWUL/h1ND/6CJgP/49uv/yMPD/8S/v//69vj/bm5uxQAAAFcAAAAw - AAAAFgAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQHZKPkMfUz8//ta6u/9bS0f/p5+L/ - lG5f/5hZP/+pWTf/qlUz/6lVMv+pVDL/qFQy/6dTMf+nVDH/oUom/51CHf+dQx7/nEIe/5xDHv+bQh3/ - m0Id/5pBHf+aQR3/mUEc/5hBHP+YQBv/mEAb/5c/G/+WPxv/lT8b/5U/Gv+VPhn/lD8b/5M/Gv+UPxv/ - kz4b/5M/HP+TQBz/kj8b/5JAHP+TQB3/k0Ef/5NDIP+UQyH/lEQi/5VGJP+URiT/l0op/7qknf/Fxcf/ - xMLE/8TCxP/Fw8T/xcPE/8bExf/Hxcf/yMbI/8vJyv/NzM7/0M/Q/9bV1/+4q6f/cD4q/5FNM/+hVzv/ - oVg7/6JZPP+iWT3/o1k9/6RZPv+lWj7/pls//6ZbP/+nW0D/p1xA/6hbQP+oXEH/qVxB/6ldQf+pXEL/ - ql1C/6tcQv+rXEL/q11D/6xdQ/+sXUP/rF1D/61dQ/+tXUP/rV1D/61dQ/+tXUL/rV1D/61dQv+tXUL/ - rVxC/61cQv+tXEL/rVxB/61cQf+tW0H/rVtA/61aQP+sWj//rFo//6xaP/+sWT7/q1k+/6ZZQP+RVkP/ - i2ld/+nm3f/f2tj/uLKx//Lu7/+opqjlCwwMcQAAADUAAAAdAAAACgAAAAQAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAhICBBtbGy9NDKyv+2sK//6OPf/87Hwv+LXUr/ol1A/6lXNf+rVjP/q1Uy/6pUMv+pVDL/ - qFQy/6hUMf+mUjD/oEgj/55DHv+dQx7/nUMe/5xDHf+bQh7/m0Id/5tCHf+aQh3/mkEc/5lBHP+YQRz/ - l0Ac/5c/G/+WQBv/lj8a/5U+G/+VPxv/lD8b/5U/G/+UPhz/kz8c/5Q/HP+UQBz/k0Ac/5NAHf+TQB3/ - k0If/5RDIP+URCL/lEQj/5REIv+ZTi//wLi2/8K/v//BvLz/wbu7/8G7u//CvLz/wr29/8O+vf/Ev7// - xcDA/8fCwv/Iw8P/zcnJ/8vFxP91RDH/j0sx/6BWOf+gVjr/oVc7/6JYPP+iWDz/o1k9/6NZPf+kWT7/ - pVo+/6VaPv+mW0D/p1tA/6dbQP+nXED/qFxB/6hcQP+pXEH/qVxB/6pcQf+qXEL/qlxC/6tdQv+rXUL/ - q1xC/6tdQv+rXUL/rF1C/6xdQf+sXEH/rFxC/6xcQv+sXEL/rFxB/6xcQP+sW0H/rFtB/6tbQP+rW0D/ - q1pA/6taP/+rWj//q1k+/6tZPv+rWT7/p1g9/5hXQf+BV0n/x765//Dt5v+2sbH/49/e/9TS0/0jIyOM - AAAAPQAAACUAAAANAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAExMTXbLx8j/w76+/724uf/w8Of/ - sp2V/49YQf+pXkD/q1c1/6tXM/+rVzP/q1Yz/6pWM/+qVjL/qVUy/6hVMv+lUi//n0Yh/55DHv+dRB// - nUQe/5xDHv+cQx7/m0Id/5tCHf+bQh3/mkIc/5lBHP+YQRz/mEAc/5dAG/+XQBv/lz8b/5Y/Gv+VPxv/ - lUAb/5U/G/+UPhv/lD8c/5RAHP+UQBz/k0Ab/5RAHf+TQR7/lEMg/5RDIf+URCL/lEIh/5hNLv/CuLf/ - xcHC/8S/v//Dvr7/xL6+/8S/v//EwMD/xcDA/8bBwf/Hw8L/yMTE/8vFxf/Oysr/ycLC/3JCL/+OSy// - oFY4/59WOf+gVjr/oFc7/6FYO/+hWDz/olg8/6NZPf+kWT3/pFk9/6VaPv+lWz//pls//6ZbP/+nXED/ - p1xA/6hcQP+oXED/qFxB/6lbQP+pXEH/qVxB/6lcQf+pXEH/qlxC/6pcQv+qXEH/qlxB/6pcQf+qXEH/ - q1xB/6tcQf+qW0H/qltA/6pbQP+rW0D/qlo//6paQP+qWj//qlo//6pZPv+qWT7/qVk9/6lYPf+nWD3/ - nlhA/4FRQP+mk4v/9vXq/765uv/KxsX/7u7u/1NTU68AAABMAAAAKgAAABEAAAAHAAAAAgAAAAAAAAAA - AAAAAAAAAAAkJSYEY2JiodzW1f+6s7P/zsjI/+ro4/+bfG//mVxD/61fPv+uWDX/rVg0/61YNP+sVzT/ - q1c0/6tXNP+qVjP/qVYz/6lWNP+mUC3/oEUg/59EHv+eRB//nkQe/51DHv+cQx7/nEId/5tCHf+aQhz/ - mkEc/5lBHP+ZQRz/mEEc/5hAG/+XQBv/lj8b/5ZAG/+VQBv/lT8b/5U/HP+VPxz/lEAd/5VAHP+UQBv/ - lEEd/5RAHf+UQh//lEIg/5REIf+UQh//mU0t/8W7uf/Hw8T/xsHB/8bAwf/GwcH/xsDB/8bBwf/GwcH/ - x8HC/8jDw//JxMX/y8bG/8/Ky//Kw8P/ckQy/4hGLP+eVDf/nlU4/59VOP+fVjn/oFY6/6BXO/+hVzv/ - oVg8/6JYPP+jWTz/o1k9/6RaPv+kWj7/pVs//6VaP/+mWz//pls//6dbQP+nW0D/p1tA/6hcQP+oW0D/ - qFxB/6hcQf+oXEH/qVxB/6lcQf+pXEH/qVtA/6lbQP+pW0D/qVtA/6lbQP+pWj//qVo//6laP/+pWj// - qVk//6lZP/+pWT7/qVk9/6hZPf+oWDz/qFg8/6dYPP+hVz7/i1NA/4xxZv/t7OD/zsvK/7u1tf/69vf/ - dnV2ywAAAFwAAAAtAAAAFwAAAAgAAAADAAAAAQAAAAAAAAAAAAAAABITExmVlJTM19DQ/7ixsf/e19b/ - 4N3Y/5NqWP+iYEX/sFw8/69ZNv+uWDX/rlg1/61YNf+sWDT/q1c0/6tXNP+rVjT/qlYz/6lWM/+lTyv/ - oEUf/59EH/+fRB//nkMe/51EHv+dQx3/nEIe/5xCHf+bQh3/mkId/5pCHf+aQRz/mUEc/5hBHP+YQBv/ - lz8b/5ZAG/+WQBv/lkAc/5Y/HP+VQBz/lUAd/5VBHf+VQRz/lUEd/5VBHv+UQh//lUMh/5RBHv+ZTCz/ - xry6/8nFxv/HwsP/x8LC/8fCwv/IwsL/x8LC/8fDwv/Hw8P/yMPE/8rFxf/Lxsb/zsnJ/87IyP98VUX/ - fT4l/5tSNf+eVDf/nlU3/59VOP+fVjn/n1c5/6BXOv+gVzr/oFc7/6FYO/+iWDz/o1k8/6NZPf+kWj7/ - pFk+/6VaPv+lWj7/pVo+/6ZbP/+mWz//pls//6dbQP+nWz//p1s//6dbQP+nW0D/p1tA/6dbQP+nWz// - qFs//6haP/+oWj//qFo//6haPv+oWT7/qFo//6hZPv+nWT7/p1k+/6dZPf+nWTz/p1c8/6dYPP+nVzv/ - p1c8/6FWPf+RVED/g15Q/9vX0P/f29f/ta6u//Ds7f+qqanlERAQcgAAADEAAAAZAAAACgAAAAMAAAAB - AAAAAAAAAAAAAAAAGxwcNbe0tO7Szc3/uLOz/+Xi2//Fvbn/jl5K/6plSP+vWjn/sFk2/69ZNv+uWDb/ - rlg1/65YNf+tVzT/rFc0/6xXNP+rVzT/qlYz/6lWM/+kTir/n0Qf/59EH/+gRR//n0Qf/55EHv+dRB7/ - nEMe/5xDHv+bQx3/m0Id/5tBHf+aQRz/mUEc/5lBHP+YQBz/l0Ab/5dAHP+WQBz/lkAc/5Y/HP+VQB3/ - lkAd/5ZAHP+VQR3/lUEe/5VBHv+UQh//lEEe/5hKKP/FtrH/ysjJ/8jExP/Iw8P/yMPD/8jCwv/HwsL/ - yMPD/8jDw//Iw8P/ycTE/8rFxf/Lxsb/1NHS/5J2a/9tMxz/lE4y/55UNv+dVDb/nlQ3/55VN/+fVjj/ - n1Y5/59WOf+fVzr/oFc7/6FXO/+hWDv/olg8/6JZPP+jWTz/o1k9/6NZPf+kWT3/pFk9/6VaPv+lWj7/ - pVo//6VaPv+lWj7/plo//6ZaPv+mWj//plo//6daP/+nWj//p1o//6daPv+nWj3/p1k+/6dZPv+nWT7/ - plk+/6dZPP+nWTz/plg8/6ZXPP+mVzv/plc7/6ZXOv+lVjn/o1Y7/5ZUPv97UUL/vLOv/+jk3f+1r6// - 4d3d/8/OzvsjJSWIAAAAOAAAACAAAAALAAAABAAAAAEAAAAAAAAAAAAAAAAwLy9TwsDA/8/IyP+8tbb/ - 8fDn/7ypof+QW0X/r2VH/69bOP+wWjf/r1o2/69ZNv+vWTX/rlg1/65YNf+tWDT/rFc0/6xXNP+sVzT/ - q1Y0/6pWNP+lTir/oEUg/6BFH/+gRR//n0Qf/55EH/+dRB7/nUMe/5xDHf+bQh3/m0Id/5tCHf+aQR3/ - mUEd/5lBHP+ZQRv/l0Ab/5dBHP+WQRz/l0Ac/5dAHf+WQR3/lkEd/5ZBHf+VQR3/lUEe/5VBHv+UQR7/ - l0Uj/8Cpof/Lycv/yMPD/8jDw//Iw8P/x8LC/8fBwv/HwcH/x8LC/8jBwv/HwsP/yMPD/8jDw//Qzc7/ - s6Sf/2YzHv+GRSv/m1Iz/51TNf+dUzb/nVQ2/55UN/+eVTj/n1U4/59WOP+fVjn/n1Y6/59WO/+hVzr/ - oVc7/6FYO/+iWDz/olg8/6NYPP+jWDz/o1k9/6RYPP+kWT3/pFk9/6RZPf+lWT3/pVk+/6VZPv+lWT3/ - pVk+/6VZPv+lWT3/pVk9/6VZPf+lWD3/pVg9/6VYPP+lWDz/pVg8/6VYPP+lVzv/pVc7/6VXOv+lVjr/ - pVU6/6VWOf+iVDn/mlQ8/31OPf+smpP/8/Dl/7mztP/Tz8//397e/zc3OJ4AAABAAAAAJAAAAA0AAAAF - AAAAAQAAAAAAAAAAAAAAAFVUVHfVz8//xb29/8bBwP/q6eD/o4l//5ldRf+xZEX/sFs3/7FbN/+xWzf/ - sFo3/7BZNv+wWTb/r1k2/65ZNv+tWTX/rVg1/61YNf+sWDX/q1g1/6pXNf+mTir/oEUg/6BFH/+gRSD/ - n0Uf/55EHv+eRB//nUMe/5xDHf+bQx7/m0Md/5tCHf+bQh3/mkEd/5lBHf+ZQBz/mEAc/5dBHP+XQRz/ - mEAc/5dBHf+WQR3/lkEd/5ZCHf+WQh7/lkEe/5VBHv+TPxv/uJaK/8vLzf/Hw8P/x8LC/8fCwf/GwcD/ - xsDA/8XAwP/FwMD/xb/A/8XAwP/FwMD/xsHB/8jDxP/Oysr/e1ZI/240HP+SSy//nVI0/5xSNP+dUzT/ - nVM1/55UNv+eVDf/nlQ3/55UN/+eVTf/nlU4/55WOf+fVjr/n1c6/6BXOv+hVzv/oVc7/6JYO/+iWDv/ - olg8/6JYO/+iWDz/o1g8/6NYPP+jWTz/o1g8/6RYPP+kWDz/pFg8/6RYPP+kWDz/pFg8/6RYPP+kVzv/ - pFc7/6RXO/+kVzv/pFc7/6RXOv+kVjr/pFY5/6NVOf+kVTn/o1Q4/6JUN/+cVDr/gk47/5J7cv/r6d// - w76+/8O8u//z8vL/YWFktgAAAEwAAAAmAAAADwAAAAYAAAACAAAAAAAAAAAeHh8EYV9fmOHc3P+8t7b/ - z8vJ/+Lh2v+Wdmr/omFJ/7NjQ/+zWzj/sls4/7NbOP+yWzj/sVo3/7FaN/+wWjf/r1k3/69ZN/+uWTb/ - rVk2/61YNv+sWDb/q1g1/6tXNf+mTyr/oUYg/6FFH/+gRR//oEUf/6BFH/+eRB//nkQe/51DHv+cQx7/ - nEId/5tCHf+bQh3/mkId/5pBHf+YQRz/mEEc/5hBHP+YQBz/mEAd/5dAHf+WQR7/l0Ed/5ZBHf+WQR7/ - lkEe/5I5FP+vgnD/zMvN/8bBwv/FwMD/xMDA/8S+vv/Dvr7/wr6+/8K9vv/Cvbz/wr28/8O9vf/Dvr7/ - xL6+/83LzP+1p6L/YzId/3o9JP+VTjD/nFIz/5xSM/+cUjT/nVI0/51TNf+dUzb/nlM2/55UN/+eVTf/ - nlQ4/55VOP+eVTn/nlY5/59WOf+gVjr/oFc6/6BXOv+hVzr/oVc6/6FXO/+iVzv/olc7/6JXO/+iVzv/ - olc7/6JXO/+iVzv/o1c7/6NXOv+jVzv/o1c7/6NWOv+jVjr/o1Y6/6NWOf+jVTn/olU5/6JVOP+iVTj/ - olQ4/6JUOP+iVDf/oVM2/5xTOP+JUDv/g2hd/+Hf1v/Nx8b/urOy//j19f93d3bKAAAAVQAAACgAAAAS - AAAABwAAAAIAAAAAAAAAADc4OBFvbW2039vb/7u1tf/Y1NP/5ePc/5hvXv+lZUv/s2ND/7RcOv+0XDn/ - s1s5/7NbOf+yWzj/sVs4/7FaN/+wWjf/r1k3/69ZN/+uWTb/rVk2/61ZNv+tWDX/rFg1/6pYNf+nUCz/ - okYg/6FFH/+hRSD/oEUf/6BFH/+fRB//nkQe/51DHv+dQx7/nUMe/5xDHf+bQh3/m0Id/5pCHf+aQRz/ - mEEd/5hBHf+ZQR3/mEAd/5hBHf+XQR7/l0Id/5dCHf+WQh7/lDwX/6dpT//Hw8P/xcDA/8O9vv/Bvr7/ - wby8/8G7u//Bu7v/wLu6/7+6uv+/ubr/v7u7/8C7u//Au7v/wr29/9HOz/+dhnz/YCwW/39AJv+WTTD/ - nFAy/5xRMv+bUjP/m1I0/5xTNP+dUzX/nVM1/51UNv+dVDf/nVQ2/51UNv+eVDf/nlU4/59VOP+fVTj/ - n1Y5/6BWOf+gVjn/oFY5/59WOv+gVjr/oFY6/6FWOf+hVjr/oVY6/6FWOv+hVjr/oVY5/6FWOf+hVTn/ - oVY5/6FVOf+hVTn/oVU4/6FUOP+hVDj/oVQ3/6FUN/+hVDf/oVM2/6FTNv+hUzX/nFI3/4tQO/+AXk// - 4d/V/9fS0P+yq6v/8/Hx/4iIidkAAQFhAAAAKgAAABYAAAAIAAAAAgAAAAAAAAAAExQUHJyamsnY09T/ - vre3/97a1v/Szsv/k2ZT/6tnS/+2YkL/tV06/7VdOv+zXDr/s1s5/7NbOP+zWzj/slo4/7FaOP+xWjj/ - sFk3/7BZN/+uWTf/r1k2/65ZNv+tWTX/rFk2/6xYNf+oUS7/o0ci/6FGH/+hRR//oEUf/59FH/+fRR// - n0Qe/55EHv+dQx7/nUMe/5xCHv+cQh3/m0Id/5pBHP+aQR3/mUId/5lBHf+ZQh3/mUEd/5dCHv+YQh7/ - mEId/5hDHv+WQRz/m0oq/8G0sP/Cv7//wLu7/8C6uv+/urr/vri4/723t/+9uLf/vLe3/7y3t/+9t7f/ - vbe3/724uP+9uLj/wr6+/9HOz/+NcWX/YCsV/39BJv+WTS7/m1Ax/5tRMv+bUTL/m1Iy/5xSM/+cUjP/ - nFI0/5xTNf+dUzX/nFM2/51UNv+dVDb/nlQ3/55UN/+eVDf/nlU3/55UN/+eVTj/n1U4/59VOP+fVTj/ - n1U4/59VOP+gVTn/n1U4/6BVOP+gVTj/oFU4/6BVOP+gVTj/oFQ3/6BUN/+gVDf/oFQ3/6BTNv+gUzb/ - oFM2/6BTNv+fUjX/n1I1/59SNP+bUTb/jVA5/3lTRP/NycP/3dfT/7Kqq//q5+f/q6qs5xISEnEAAAAt - AAAAGQAAAAgAAAADAAAAAAAAAAAbHBwosK6v29jR0f+9t7j/4N3X/7+5tv+TYUz/r2pN/7ZhP/+2Xjr/ - tl46/7VdOv+0XTr/tFw5/7NcOf+zWzn/sls4/7JaOP+xWjj/sFk4/7BZN/+wWTf/rlk3/65ZNv+tWTb/ - rVk2/6xZN/+pUzD/pEok/6JFH/+hRSD/oUUg/6BFIP+fRR//n0Qf/55EH/+dRB//nUMe/5xDHv+bQx3/ - m0Id/5tCHf+aQhz/mUId/5pCHf+ZQR7/mUIe/5hBHv+YQh7/mEIe/5hCHv+WPhn/tJGD/8HAw/+9uLj/ - vLe3/7y3t/+7tbX/urS0/7q0tP+5tLP/ubS0/7mzs/+5s7P/urS0/7u1tf+7trX/xMDA/9XS0v+Qc2f/ - YCsU/39AJf+VTC7/m08w/5tPMf+bUDH/m1Ay/5tRMv+cUTP/nFIz/5xRNP+cUjT/nFI1/5xTNf+cUzX/ - nFM1/5xTNf+cUzX/nVM2/51TNv+eVDb/nlQ2/55UN/+eVDf/nlM3/55UNv+eVDf/n1Q3/59UN/+fVDb/ - nlM2/55TNv+eUzb/n1M2/55TNf+eUjX/nlI1/55SNf+eUjX/nlI0/59RNP+eUTP/nlEz/5tQNP+QUDf/ - dk08/7iyrv/e2tH/squr/+Tf3v/Cw8LyHyAgfAAAADAAAAAZAAAACQAAAAMAAAAAAAAAAB8fHzS8urrr - 2NLS/764uf/k4dn/uLCt/5dgSf+0bE//uGA9/7deOv+3Xjr/tl46/7ZdOv+0XTr/tFw5/7NcOf+zWzn/ - sls4/7JbOP+xWjj/sVk3/7FZN/+vWTf/r1k3/65ZNv+tWTb/rVk2/61ZNv+qVjL/pUsn/6JGIP+hRSD/ - oUYg/6FGH/+gRSD/n0Uf/59EH/+fRB7/nkQe/5xDHv+dQh3/nEMd/5tCHP+aQh3/mkId/5lCHf+aQR7/ - mUIe/5hCHv+YQh7/mUIe/5Y9F/+kY0j/vrm6/7q2tv+5tbX/ubOz/7izs/+3srL/t7Kx/7exsf+2sLD/ - tbCw/7WwsP+2sLD/uLKx/7mys/+5s7P/xcDB/9rX2P+Tdmr/XyoU/3s8I/+TSy3/mk8w/5tPMP+bTzD/ - mk8x/5pPMv+bUDL/m1Ey/5tQMv+bUjP/nFEz/5tSNP+bUjT/nFI0/5tSNP+bUjX/nFI0/5xTNf+cUzX/ - nVI1/51TNf+dUzX/nVM1/51TNf+dUjX/nVM1/51TNf+eUjX/nlI1/55SNf+eUjT/nlI0/55RNP+eUTT/ - nlE0/55RM/+eUTP/nVAz/51QMv+dUDL/m08y/5BPNv93Sjj/raaj/+Ld0/+zra7/3tja/8/NzvsmJiaG - AAAAMQAAABkAAAAKAAAAAwAAAAEAAAAAISEhQMG/v/rY09P/v7q6/+nl3f+yqab/m2BI/7dvUv+5YD7/ - uV87/7heOv+3Xjr/t106/7VdOv+1XTr/tFw5/7NcOv+zXDn/s1w5/7NbOP+yWzj/sls4/7FbOP+wWjj/ - r1k4/69ZN/+uWTb/rVk2/61ZNv+sVzb/p08q/6NHIf+iRiD/oUYg/6FFIP+gRSD/oEUf/59FH/+fRB7/ - nkQe/55DHv+dQx7/nEMd/5xCHf+bQh7/mkMd/5pDHv+aQh7/mUIf/5lDHv+ZQx7/mUId/5hAGv+0l4z/ - ubi6/7exsf+2sbH/tbCw/7Wvr/+0r6//tK6u/7Strf+0rq7/tK6u/7Ourv+0rq7/ta+w/7eysv+3sbL/ - xcHC/+De3/+iiYH/YCwW/3Q3Hv+PSCv/mU0u/5pOL/+ZTzD/mk8w/5lPMP+aUDD/mlAy/5tQMv+aUDL/ - m1Ay/5tRMv+bUTL/mlEz/5tRM/+bUDP/m1Ez/5tRNP+bUTP/m1E0/5xRNP+cUTT/nFEz/5xRM/+cUTT/ - nFE0/5xRNP+cUTP/nFEz/5xQM/+cUDP/nFAz/5xQMv+cUDL/nFAy/5xPMv+cTzH/nE8w/5xPMP+bTjH/ - kU41/3dHNP+ooJ3/4+DV/7Otrf/a09P/1NLS/yorKo4AAAAyAAAAGwAAAAoAAAADAAAAAQAAAAAjIyNJ - w8HB/9fS0v/Aurn/6+je/6+koP+eX0b/unBS/7lhPP+6Xzv/uF87/7hfO/+3Xjr/t146/7ZeOv+2Xjr/ - tV06/7VdOv+1XTr/tF06/7NcOf+yXDn/slw5/7FcOf+xWzj/sFs4/69aOP+uWjj/rlk3/65ZN/+tWTf/ - qVMw/6RJJP+iRSD/okUg/6JGIP+hRSD/n0Ug/59EH/+fRB//nkQf/55DHv+dQx7/nUMe/5xDHf+bQx7/ - mkMe/5tDHv+bQh//mkMe/5lCH/+ZQx//lz0X/6RgRP+4s7P/ta+w/7Surv+zrq7/s62t/7Ksrf+yraz/ - sqys/7GsrP+xrKz/says/7GsrP+zrKz/tK+v/7exsf+3sbH/xMDB/+bl5/+3pZ3/YzMf/24yGv+MRin/ - mEwt/5pNLv+aTi7/mU4v/5lOL/+aTy//mk8w/5pPMf+aTzD/mk8w/5pPMf+aUDH/mk8y/5pPMv+aUDL/ - mlAy/5pQMv+aTzH/mlAy/5pQMv+aUDL/mlAy/5tQMv+bUDH/m1Ay/5tQMv+bUDL/m1Ay/5tPMf+bTzH/ - m08x/5tPMf+bTzH/m04w/5tOMP+bTjD/m00v/5pOMP+RTTP/eEQw/6Oalv/m4tb/s62t/9bP0f/W1Nb/ - LS4ulAAAADQAAAAaAAAACgAAAAMAAAABAAAAACMjI07FwcH/2NLS/8C7vP/t6uD/raCb/6BfRf+9c1X/ - umI+/7tgO/+6YDv/uWA8/7hgO/+4Xzv/t187/7dfO/+3Xjv/t146/7ZdOv+1Xjr/tF06/7NdOv+zXDr/ - slw5/7JbOf+wWzn/sFs5/7BaOP+vWjj/rlo3/65ZN/+uWjj/q1Yz/6ZMJ/+jRiD/okYg/6JGIP+hRiD/ - oEUg/6BEIP+fRR//n0Qe/55EH/+dQx7/nUMe/51DHv+cQx7/m0Qe/5tCH/+bQh//mkMf/5pCH/+aQx3/ - mT4X/6+HeP+1tLf/sqys/7KsrP+xrKz/saur/7Gqqv+wq6v/sKqq/6+qqv+vqqr/sKqq/7Grq/+zrKz/ - tK+v/7exsf+3srL/w76//+nq6//Lv7v/bD8t/2kuFf+JRCf/l0ss/5pNLf+ZTS3/mU0u/5lOLv+ZTi7/ - mU4v/5lOL/+ZTi//mU4w/5lOMP+ZTy//mU8w/5lPMP+ZTzD/mE4w/5lOMP+ZTjD/mU4w/5lPMP+ZTzD/ - mU4x/5pPMP+aTzD/mk8x/5pOMP+aTjD/mk4v/5pOL/+aTjD/mk0v/5pNL/+aTS//mk0v/5pNL/+aTC7/ - mEwu/5FMMP92Qy//oZeT/+jk1v+0rK7/083N/9jX1/8uMDCXAAAANAAAABoAAAAKAAAAAwAAAAEAAAAA - IyMjUcXBwf/Y09L/wby8/+/s4f+rnZf/omBF/791V/+8Yj7/vGE9/7tgPf+7YD3/uWA8/7lgPP+4YDv/ - t187/7dfO/+3Xzv/t187/7ZeOv+1Xjr/tV06/7RdOv+zXTr/s1w5/7JcOf+xXDn/sVs4/7BaOP+vWjf/ - r1o4/65ZN/+uWTf/rVg2/6hRLf+kSCP/o0Uf/6NGIP+iRiD/oUYg/6BFIP+fRSD/n0Uf/59EH/+eRB// - nkMe/5xCHv+bRB7/m0Qe/5xDHv+bQx//m0Mf/5pDIP+ZQRv/nEck/7Gbk/+ysLL/sKur/7Crq/+wqqr/ - r6mq/6+pqf+wqan/r6mp/6+pqf+vqan/sKqq/7Grq/+zra3/tbCw/7izs/+6tbX/wr29/+jo6v/c1dL/ - dk08/2YrE/+IQyb/l0sr/5lMLP+YSyz/mEwt/5hMLf+YTC3/mE0u/5lNLv+ZTS3/mE0u/5hNLv+ZTS7/ - mU0v/5hNLv+YTi7/mE4u/5hNLv+YTS7/mE0u/5hNLv+YTS7/mE0v/5lNLv+YTS7/mE0v/5lNL/+ZTS7/ - mU0u/5hNLv+ZTC7/mUwu/5hMLf+YSy3/mEst/5hLLf+XSy3/kUsw/3ZCLP+elI//5+TV/7Osrf/Rysz/ - 2dbX/zAwMZkAAAA0AAAAGgAAAAoAAAADAAAAAQAAAAAjIyNSxcLC/9nU1P/Cvb7/7+zh/6qblf+kYEX/ - wHda/75iPv+8YT7/vGE+/7xhPf+6YDz/umA8/7pgPP+5YDz/uGA7/7dfO/+3Xzv/t187/7deOv+2Xjr/ - tV06/7RdOv+0XTr/tF05/7JcOf+yWzn/sVs4/7FbOP+wWzj/r1o3/65aN/+vWTf/rlo4/6tVM/+mTCf/ - o0Yg/6NGIP+iRiD/oUYg/6BFIP+gRR//oEUf/59EH/+fRB//nkQe/51EHv+cRB7/nEQe/5xDHv+cQx// - m0Mf/5tEIP+ZPxn/olY3/7Wppv+wrrD/r6mp/6+pqf+vqan/r6mp/6+pqf+uqan/rqmp/6+pqf+vqan/ - saqr/7KsrP+0rq7/t7Gx/7u2tv++uLn/w76+/+jn6P/j3tv/dk09/2YrEv+KQyb/l0oq/5hLKv+XSyv/ - mEsr/5hLLP+YTCv/l0ws/5dMLP+XTCz/mEwu/5hMLf+XTC3/l0wt/5hMLf+XTC3/l0wt/5dMLf+XSy3/ - l0wt/5dMLf+XTC3/l0wt/5dMLf+XTC3/l0wt/5hLLf+YSy3/mEst/5hLLP+YSyz/mEss/5dLLP+YSyz/ - mEst/5dLLP+RSzD/dUEs/52Tj//n49b/s66s/9DJyv/Y1tj/MDAxmQAAADMAAAAaAAAACgAAAAMAAAAA - AAAAACQjI1HGw8P/2tXU/8O+vv/u7eH/q5uV/6VhRv/CeFv/v2RB/75iPv+9Yj7/vWI+/7xhPf+7YT3/ - u2A9/7pgPf+5YDz/uGA8/7hgPP+3YDv/t147/7deO/+2Xjr/tl46/7RdOv+0XTr/tFw6/7NcOv+yXDr/ - sVs5/7FbOf+wWjj/sFo4/69aOP+uWTf/rlk4/61ZNv+pUi7/pUkk/6NFH/+iRiD/okUg/6FFIP+gRR// - oEUg/6BFH/+eRB//nkQe/51EHv+dRB//nEMf/51DH/+cQx//nEMg/5tEH/+ZPhf/pWFE/7Wrqf+wrrD/ - r6io/6+pqf+vqan/r6mp/66pqf+uqKj/rqmp/6+pqf+vqqr/says/7Surv+3sbH/u7W2/7+6uf/Cvb3/ - xsHA/+np6v/l4N7/dEs5/2gsE/+LRCb/l0op/5hKKf+XSir/mEsq/5dKKv+XSir/l0or/5dLK/+WSyz/ - lksr/5ZLK/+WSyv/l0sr/5dLLP+WSyv/lkss/5dLLP+XSyz/lkor/5ZLLP+WSiz/lkss/5ZLLP+WSyv/ - lkor/5ZKK/+WSir/lkor/5ZKK/+WSiv/l0or/5dLLP+XSyv/lksr/49LL/90QCv/nJKO/+Xh0v+yq6v/ - 0cvL/9jW1v8wMDCYAAAAMgAAABoAAAAKAAAAAwAAAAAAAAAAJCMkTMbDxP/c1tX/w76//+7s4v+tnZj/ - pmJH/8J6Xv/AZ0T/v2I//75iP/++Yj7/vWI+/7xhPf+7YT3/u2A9/7pgPf+6YDz/uWA8/7hgPP+4Xzv/ - t187/7dfO/+3Xzr/tl46/7VdOv+1XTr/s1w6/7NdOv+zXDr/sls5/7JbOf+xWzj/sFs4/69aOP+uWTf/ - rlk3/65aOP+sVzX/qE8s/6RII/+iRh//okYg/6JGIP+hRSD/oEUf/6BFH/+fRB//n0Qf/55EHv+dRB// - nUMf/5xDH/+dQx//nEMf/5tEIP+ZPBb/pWBD/7appv+ysLL/r6mp/6+pqf+vqan/rqmp/6+pqf+vqan/ - r6mp/6+qqv+yrKz/tK6u/7eysv+7tbX/v7m5/8O+vv/GwcH/ysXF//Dw8f/d1NH/ajso/28wFv+ORSX/ - l0ko/5dJKP+XSSj/lkkp/5ZJKf+XSSn/lkkp/5ZJKf+WSir/lkoq/5ZJKv+WSir/lUkq/5ZJKf+WSir/ - lkoq/5VJKv+VSSr/lUkq/5VJKf+VSSr/lUkq/5ZJKv+WSSr/lkkq/5ZKKv+WSir/lkor/5ZKK/+WSiv/ - lkor/5ZKK/+WSiv/jkou/3NBLf+elZH/5N7R/7KrrP/Sy8z/1tXW/y8vL5UAAAAxAAAAGQAAAAkAAAAD - AAAAAAAAAAAjIiNGx8TE/93X1//EwMD/7uvh/66fm/+nY0n/wntf/8JrSP/AY0D/v2I//79jP/++Yj7/ - vmE+/7xhPf+8YT3/vGA9/7tgPP+6YDz/umA8/7lgPP+4YDz/t187/7dfO/+3Xzr/tl46/7ZdOv+1Xjr/ - tF06/7RdOv+zXDr/s1w5/7JcOf+xWzn/sFs4/7BaOP+vWjj/rlo3/65aOP+tWTj/q1Yz/6dOKv+jSCL/ - okYg/6JGIP+hRiD/oEUf/6BFH/+fRB//n0Qe/55EHv+dRR//nUUf/51DH/+cRB//nEQg/5xEIP+aPhf/ - pFc3/7Oel/+zs7X/rqmp/6+pqf+vqan/r6mp/6+pqf+vqan/saur/7OtrP+1sLD/uLKy/7y2tv+/urr/ - w7+//8jDw//Lxsb/0MvL//f4+f/OwLv/YCwW/3c3G/+SRiX/l0gn/5ZIJ/+WSCf/lkgn/5ZJKP+WSSj/ - lkgo/5ZJKP+VSCj/lUgp/5VJKf+VSCj/lUgo/5VIKP+VSCj/lEgp/5VJKf+VSCj/lUgp/5RIKf+USCn/ - lEgp/5VIKf+VSCn/lUgp/5ZJKv+WSSr/lkkq/5ZJKv+WSir/lkor/5VKK/+NSi//ckIv/6CYlv/g3M3/ - sqqq/9TNz//U1NX/LC0tjwAAAC8AAAAYAAAACQAAAAMAAAAAAAAAACIiIjzGxMT43tra/8TAwP/t6d// - saSg/6dkSv/Ce2D/xG5N/8BkQP/AZD//wGM//79iP/+/Yj7/vmI+/71iPv+8YT3/u2E+/7tgPf+7YDz/ - umA8/7lgPP+4Xzv/t187/7dfO/+3Xzv/t186/7ZeOv+2XTr/tV06/7RdOv+zXDn/s1w6/7NcOf+yWzn/ - sFs4/7BbOP+vWzj/r1o3/65aN/+uWTf/rlk3/6tVMv+mTir/o0ci/6JFH/+hRR//oUYg/6FFH/+gRB// - n0Qf/59FH/+eRR//nUUf/55FIP+dRCD/nEQg/5xEIP+aPhj/oE0q/7KWi/+0tLf/r6mq/6+pqf+vqan/ - r6qq/7Crq/+xrKz/s66t/7awsP+5s7P/vLe3/8C7u//EwL//ycTE/83IyP/Pysv/19PT//7///+xmpH/ - XCQM/4I9IP+VRib/lkcm/5VHJv+VRyb/lkcm/5VIJ/+VRyf/lkgn/5VHJ/+URyf/lUcn/5VHJ/+VRyj/ - lUcn/5RHJ/+USCj/lEgn/5RIKP+VSCj/lEgo/5RIKP+USCj/lEgp/5RIKf+VSCn/lEgp/5VIKf+VSCn/ - lUgp/5ZJKv+WSSr/lEkr/4tJL/9wQzH/pJ2b/9vXzP+vqar/19HR/9PR0/8pKSuHAAAAKgAAABcAAAAI - AAAAAgAAAAAAAAAAHx8fMcK/wOnf29v/x8HB/+nm3v+6rKf/p2VL/8F5Xf/FclL/wWVA/8BlQP/AZD// - wGM//79jP/+/Yj//vmI+/71iPv+9Yj7/vGA9/7xgPf+7YDz/umA8/7lgPf+5YDz/uWA8/7hgPP+4Xzv/ - t187/7deO/+2XTr/tV47/7VdOv+0XTr/tFw6/7NcOf+yXDn/sVs5/7FbOP+wWzj/r1o3/69aOP+uWjj/ - rlk4/61ZN/+rVTL/pk4q/6NHIv+iRR//okUf/6FFIP+gRSD/n0Qf/59EH/+eRR//nkUf/55EIP+eRCD/ - nUQg/5xEIP+bQBr/nkgi/7OTh/+1s7X/r6qq/6+qqf+xq6v/squs/7Osrf+0r67/t7Kx/7q1tf++uLn/ - wry9/8XAwP/KxMX/zcnJ/9LNzf/Tz8//4t/f//v6+v+HY1T/ZykP/4xBIv+XRyT/lUcl/5VGJv+VRiX/ - lUcm/5VHJf+VRyb/lUcm/5RHJv+URib/lUcn/5VHJ/+VRyf/lEcn/5RHJ/+URyf/lEcn/5NHKP+USCf/ - lEcn/5RHKP+TSCf/k0go/5RIKf+USCj/lEgp/5RIKf+VSCn/lEgp/5VIKf+TSCr/iEgv/29EM/+po6H/ - 1tLJ/6+pqf/b1df/zcvM+yUmJn4AAAAmAAAAFAAAAAcAAAACAAAAAAAAAAAdHR0jtLO02eHd3f/HwsL/ - 5+Td/8O3s/+lZUv/wHhc/8h4WP/DZUH/wmVB/8FlQP/BZED/wWRA/8BjQP/AY0D/v2M//75jP/+9Yj// - vWI//7xiP/+7YT7/u2E+/7phPf+6YD3/umA9/7pfPf+5Xzz/uF88/7dfPP+2Xjv/tl47/7VeOv+1Xjr/ - s145/7NdOv+yXDn/slw5/7FcOf+wWzj/sFo4/69aOP+uWTf/rlk3/61aOP+tWTf/q1Uz/6dOK/+kSSP/ - oUYf/6FFH/+gRSD/oEUf/59EH/+eRSD/nkUf/55FIP+eRCD/nkQg/51FIf+bQhz/nkQe/7KOfv+0tLb/ - sKur/7KsrP+zra3/tK6v/7ewsf+6s7T/u7a2/7+7uv/Ev7//yMLD/8vHx//Pysr/087O/9bS0v/X0tL/ - 8fHy/+Lb1/9nNiD/eDYZ/5NFJP+WRiT/lkYk/5ZHJf+VRib/lUcm/5VHJv+VRyX/lEcm/5VGJv+VRyb/ - lEcm/5VHJv+URyb/lEcn/5RHJ/+URyf/lEcn/5RHJ/+URyf/lEcn/5NGJ/+TRyj/lEco/5RIKP+TSCj/ - lEgo/5RIKP+USCj/lEgp/5FIKv+FSC7/a0U1/7Svq//Vzsf/rqio/9/b2//CwcLxHR4dcwAAACMAAAAR - AAAABgAAAAEAAAAAAAAAAG9wcRqRkZLF49/f/8fCwv/l49//zczI/59mUf+/dVj/y31f/8RmQf/DZkL/ - w2ZB/8NlQf/CZUH/wWVB/8FlQP/AZUD/v2Q//75kQP++Yz//vWM//71iP/+8Yj7/u2I+/7phPf+6YD3/ - umA9/7pgPf+5Xzz/uF88/7dfPP+2Xjz/tl47/7ZeO/+1Xjv/tF46/7ReOf+zXTn/sl05/7FcOf+xXDn/ - sVs5/7BaOP+vWjf/rlo3/65ZN/+uWTj/rVk4/6tXNP+oUC3/pEol/6JGIP+hRR7/oEQf/59EH/+fRSD/ - nkUg/59FIP+eRCD/nkQg/51FIf+bQhz/nkMd/7KPgv+2tbj/sq2t/7Our/+1sbH/uLKz/7y2tf++ubn/ - wby8/8XAwP/KxcX/zcjI/9DLy//U0ND/2NPT/9nV1f/e2tr//////6mQhv9iJg3/iUAh/5ZGJf+WRiT/ - lkYk/5ZGJf+VRiX/lUYm/5VGJv+VRyb/lUcm/5VHJv+URyX/lEYl/5RHJv+URyb/lEYm/5RGJv+USCf/ - lEcn/5RHJ/+TRyb/k0cn/5NHJ/+TRyf/k0Ym/5NHJ/+TRyf/k0cn/5RIJ/+USCj/kEgq/4JGLf9pSjz/ - wsG7/9DLxv+spqb/6OPk/6inqeQQERFkAAAAHgAAAA4AAAAGAAAAAQAAAAAAAAAAMzMzD3Rzc67t6Oj/ - yMLC/+Pg3//f3tf/p25Y/75xUv/NhGf/xWdC/8NnQv/DZ0L/w2ZC/8NmQv/DZkL/wmVB/8FlQf+/ZUD/ - wGRA/79jQP+/Yz//vWM//71iP/+8Yj//vGI+/7thPv+6YD3/umA9/7pgPP+5Xz3/uF88/7hfPP+4Xjz/ - tl47/7ZeO/+1Xjv/tV46/7ReOf+zXTn/s105/7JcOf+xXDn/sVs5/7BbOf+wWzj/r1o3/65aN/+tWTf/ - rVk3/61ZN/+sVzX/qVMw/6VNKP+iRyL/oUQe/6BEHv+fRR//n0Ug/55FIP+fRSD/nkQg/55FIf+cQRz/ - n0Yi/7OWi/+2trj/trCw/7izs/+7tbX/vbi4/8C7u//Ev7//yMPD/8vGxv/Pysr/087O/9bR0f/Y1NT/ - 3NfX/9zX1//t6+v/7+vq/3BALf94NBj/lEUk/5dGJf+WRiT/lkYk/5ZGJP+WRST/lUYl/5VGJf+VRyb/ - lUYm/5VGJf+VRyb/lEcl/5RHJf+URib/lEYm/5RGJv+URyb/lEcm/5RHJv+TRyf/k0cn/5NHJ/+TRyb/ - k0cm/5JGJv+SRib/kkYn/5JGJ/+PRyn/fkUt/3RYTP/QzsX/ycTC/62npv/x7e3/hoWG1AAAAFMAAAAb - AAAADAAAAAQAAAABAAAAAAAAAAAdHh4BZWNjkvHs7P/Nycn/2tfV/+Pi2f+vdV7/umxP/9KMcf/Ia0f/ - xWdC/8RnQv/DZ0L/w2dC/8NmQv/DZUH/wmVB/8JlQf/BZED/wGRA/8BkQP++Yz//vmM//71iP/+8Yj// - vGI+/7xiPv+7YT3/umE9/7phPf+6YDz/uWA9/7lgPP+3Xjv/t187/7deO/+1Xjv/tV47/7ReOv+0Xjr/ - s106/7JdOf+xXTn/slw5/7FcOf+wWzn/sFs4/69aN/+tWjf/rVk3/61ZN/+tWTf/rFg2/6pVM/+nUC3/ - o0om/6FGIP+gRR//n0Uf/59FIP+fRSD/nkQg/55FIP+cQBr/oU4t/7ippf+6t7j/urW1/724uP/Aurv/ - w76+/8fCwv/Lxsb/zsnJ/9HMzP/V0ND/19PT/9rV1f/d2Nj/3tra/+Dc3P//////qpCG/2YmDP+NQSH/ - l0Yk/5ZGJP+WRyT/lkYk/5ZFJP+VRiT/lkYk/5VGJf+VRiX/lUYl/5VGJv+VRiX/lUcl/5RGJf+URiX/ - lEYl/5RGJv+TRib/k0cm/5NGJv+TRib/k0Ym/5NHJv+SRiX/k0Ym/5JGJv+SRib/kUYm/4xGKP94Qyz/ - fWVa/9DNwv/Burr/tKyu//Tw8P91dXXEAAAARAAAABcAAAALAAAABAAAAAAAAAAAAAAAAAAAAABaWVpu - 5uLi/9XQ0P/Uz8//7+7l/6mCdP+5aUr/0Ipw/8t1VP/GZ0P/xWdC/8RnQv/EZ0L/w2dC/8NmQv/DZkL/ - w2VB/8JmQf/BZUD/wGRB/8BkQP+/ZED/v2NA/75jP/+9Yz7/vWM+/7xhPv+7Yj7/umE+/7phPf+6YD3/ - umA9/7lgPf+4Xzz/t147/7deO/+2Xjv/tV46/7VeO/+0Xjr/tF06/7JeOf+zXTn/sVw5/7FcOf+xWzn/ - sVw5/7BbOP+vWjj/rlo4/65ZN/+tWDf/rFg2/6xZN/+rVzX/qVQy/6ZPK/+jSib/oEYh/59FH/+fRB// - n0Qg/55FIP+cPhf/rG1W/767vP++ubn/wbu7/8O+vv/GwcH/ycTE/83IyP/Qy8z/1M/P/9bS0v/Z1dX/ - 29fX/97a2f/g29v/39vb//Hw8f/j3Nr/aDMc/4I6HP+XRST/l0Yj/5ZFJP+WRiT/lkYk/5VGJP+WRiT/ - lUYk/5VFJP+URiT/lUYk/5RGJf+VRiX/lEYl/5RGJf+URiX/lEYl/5RGJf+TRiX/k0Ym/5NGJf+TRib/ - kkUl/5NFJf+SRSX/kkYm/5JGJf+RRib/ikYp/3E/Kv+GeHP/19PF/7mysv+7t7b/7uvr/19eXq0AAAA4 - AAAAEwAAAAkAAAADAAAAAAAAAAAAAAAAAAAAADIyMkvT0ND/4t7e/83IyP/39uz/tJ6W/7poSf/Nhmv/ - z4Fj/8dnQ//GZ0L/xmdC/8VnQv/FZ0L/xGdC/8NnQv/DZkL/w2ZC/8JmQf/CZUH/wWVA/8BlQf/AZED/ - v2Q//75jP/++Yz//vWM//7xiPv+7Yj7/umI+/7pgPf+6YT3/umA9/7lgPf+5Xzz/uF87/7dfO/+3Xjv/ - tl47/7VeO/+1Xjr/tF45/7RdOf+yXTn/sl05/7FcOf+xXDn/sVw5/7BbOf+vWjj/r1o4/65ZOP+tWTb/ - rVg2/61XNv+sWDb/rFg2/6pXNf+oVDL/pVEu/6JMKP+gSCT/n0Ug/55DHv+gRSH/u6Sc/8G/wf/Dvr7/ - xsHB/8nFxP/NyMj/0MvL/9POzv/W0dH/2NPT/9rX1//c2dn/39rb/+Hd3f/h3d3/5uPj//39/f+NaFn/ - cy0R/5VEIv+YRiT/l0Uj/5dFJP+XRSP/lkUk/5ZGJP+WRiT/lUYk/5ZGJP+VRST/lUUk/5RGJP+VRiX/ - lEYl/5RGJf+URSX/lEUl/5NGJf+TRiX/k0Yk/5NGJf+TRST/k0Uk/5JFJf+SRSX/kkUk/5BFJv+HRSr/ - bUAs/5yVk//Z1cj/r6mq/8vGxv/a2dn/NDQ0kQAAACgAAAATAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAA - MzU1K8G+v+rp5OT/y8fH//Ht5//AtbL/sWZJ/8yBZP/WkXb/yGhD/8hoQ//HZ0P/xmdC/8ZnQ//FZ0L/ - xGdC/8NnQv/DZ0L/w2ZC/8NmQv/CZUH/wWVB/8FlQP/AZUD/wGQ//79jQP+9Y0D/vmI+/71iPv+7Yj7/ - u2E+/7phPv+6YT3/umE9/7pgPf+5Xzz/uF88/7hfPP+3Xjv/t147/7VeOv+1Xjr/tF46/7ReOv+zXTr/ - sl05/7FdOf+xXDn/sVs5/7BcOf+wWzn/sFo4/69aOP+tWTf/rlg3/6xYNv+sWDb/rFg2/6tXNv+rWDb/ - qVc2/6hWM/+lUi//pE4r/55BHP+0gGz/ysnL/8fCwv/JxMT/y8bH/8/Kyv/Szc3/1NDQ/9fT0//a1tb/ - 3djY/97a2v/g3Nz/4t7e/+Pf3//i3t7//f///7aflv9pKA3/kEEg/5hFI/+XRSP/l0Uj/5dFI/+XRSP/ - lkUj/5ZFI/+WRiT/lkYk/5VGJP+VRSP/lUUk/5VGJP+URST/lEUk/5RGJf+URiT/lEUl/5RFJf+TRSX/ - k0Uk/5NFJP+SRSX/kkUk/5JFJP+SRST/jkUm/4JEKv9nRDT/rKmn/8/Jw/+spqX/3NbW/8vJyvkiIiN3 - AAAAHgAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAABoZ2gXlZOUxO7p6f/Lx8f/7Ojm/9bV0P+ybFD/ - yHhY/92jjf/Lbkv/yWlD/8hpQ//HaEP/x2dD/8ZnQv/FZ0L/xWdC/8RnQv/EZ0L/w2dC/8NmQv/CZkL/ - wmZB/8FlQf/BZUD/wGVA/79kQP+/Yz//vmM//71jP/+9Yj//vGE+/7tiPv+6YT7/umA9/7pgPf+5YD3/ - uV88/7hfPP+4Xjv/t147/7ZeO/+1Xjv/tV46/7ReOv+zXjn/s106/7JdOf+xXTn/sVw5/7FcOf+xWzn/ - sFs4/69bOP+vWjj/rlk3/61ZN/+tWDb/q1c2/6tXNv+rVzX/qlc2/6lYNv+pWDb/p1Iw/7NuVP/Y09P/ - 2NXV/9bT0//V0ND/1dDQ/9XQ0P/X0tL/2dXV/9vX1//e2dn/39vb/+Hd3f/i3t7/49/f/+Pe3v/z8/T/ - 3NLO/200HP+LPh3/mUYj/5dFI/+XRSP/l0Uj/5dFI/+WRSP/lkUj/5ZFI/+WRSP/lkUj/5ZFI/+VRiT/ - lUYk/5REJP+URCP/lEUk/5RFI/+URST/lEUj/5NFJP+TRST/kkUk/5JFJf+SRST/kkQk/5JFJP+MRCb/ - fEMq/3FTR//Ewbn/ycO//6ukpP/o5OX/paSl4A0NDlsAAAAXAAAADAAAAAQAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAABtbWyY9fLy/9HOzv/f29z/6urh/6l2Yv/HcE//256H/9OBYv/KaUT/yWlE/8lpRP/IaEP/ - x2hD/8ZoQ//FaEL/xWdC/8VnQv/EZ0L/w2ZC/8NmQv/DZkL/wmVB/8FlQf/BZUH/wGVA/8BkQP+/Y0D/ - vmM//71jP/+9Yz//vGI//7tiPv+7YT3/umE9/7phPf+6YD3/uV89/7lfPP+4Xzz/t148/7deO/+2Xjr/ - tl47/7ReOv+0Xjr/s145/7JdOv+yXTn/sVw5/7FcOf+xXDn/sFs5/7BbOf+vWjj/rlo4/61ZN/+sWDb/ - rFg2/6xXNv+rVzX/qlc2/6pXNv+pVTP/rF4+/9jOy//f3t7/4N3d/+Hd3f/i3t7/4t7e/+He3v/h3d3/ - 4Nzc/+Hd3f/h3d3/4t7e/+Pf3//k39//5N/f/+3q6//w7Or/cDsk/4U6Gv+YRSL/mUUi/5hFIv+XRSP/ - l0Qj/5ZEI/+XRSL/lkUj/5ZFI/+WRCP/lkQi/5ZFI/+VRSP/lUUj/5VFI/+URSP/k0Uj/5NEI/+TRCP/ - k0Qj/5JEI/+TRCP/kkUj/5JEI/+SRCP/kEMi/4pEJ/90Pyn/fWxm/8/Nvv+8tbT/ta2t//Pv8P9yc3TE - AAAAPwAAABQAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNTVWbl4uP/39vb/9PQ0P/5+O3/ - sZWL/8ZtS//Xk3n/2pl//8tqRf/KakX/yWlE/8hpRP/IaUP/x2hD/8doQ//GaEL/xWdC/8VnQv/DZ0L/ - w2dC/8NnQv/DZkL/w2VC/8JlQf/CZUH/wGRB/8BkQP/AY0D/vmRA/75jP/++Yj//vWI+/7xiPv+7YT7/ - u2E+/7thPv+6YT3/umA9/7lfPP+4Xzz/uV88/7hfO/+3Xjv/tl47/7VeO/+0Xjr/tF46/7NdOf+yXTn/ - sV05/7FcOf+xWzn/sVw5/7BbOf+vWjn/r1o4/65ZN/+tWDb/rVg2/6xXNf+rVzX/q1c1/6pVM/+sXT3/ - 2c3I/+Lh4v/i39//4+Dg/+Xi4v/m4+P/5+Tk/+jl5f/p5eX/6ebm/+nm5v/o5eX/6OTk/+fk5P/n4uL/ - 6ebm//f29v+EV0T/gDYX/5lFI/+ZRSP/mEUi/5hFIv+YRSL/l0Qi/5ZEIv+WRCL/lkQi/5ZDIv+VQyL/ - lUQi/5VEIv+VRCL/lUQi/5REIf+URCL/lEQj/5NEI/+TRCP/kkQk/5JFJP+TRCX/k0Ul/5NGJ/+RRyj/ - iUgu/25BLv+TjIv/08/C/7Grq//Evr//6ujq/1FRUZ4AAAAsAAAAEQAAAAgAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAISEhNMzKye7v7Oz/z8rL//Xy7v/IvLf/vGtM/9GGaf/ltaP/zW1I/8xqRf/LakX/ - ympE/8lpQ//JaUP/yWhD/8hoQ//HaEP/xmdD/8VnQv/FZ0L/xGdC/8RnQv/DZkL/w2ZC/8NmQf/CZUH/ - wWVB/8FkQf/AZED/v2M//79kP/++Yz//vWM//7xiP/+8YT7/u2E+/7phPf+6YD3/umA9/7pgPP+3Xzz/ - tl47/7hfO/+3Xjv/tl47/7VeO/+1Xjr/tF46/7NeOf+zXTn/sl05/7FcOf+xXDn/sVw5/7BbOf+wWzn/ - r1s4/65aN/+tWTf/rVk2/6xYNv+sVzX/q1Uz/61cO//bzsv/5eTl/+Ti4v/l4uL/5+Tk/+jl5f/o5eX/ - 6Obm/+rn5//q6Oj/6+jo/+vo6P/r6Oj/6+jo/+vo6P/s6en//P39/558bv+CPSD/n1Ex/59QMP+eTy// - nU8t/5xNLP+bTSz/m0wq/5tMKv+aSyr/mUsq/5lLKv+YSir/mUsq/5hKKv+YSir/mEsr/5hLLP+YTCz/ - mEwt/5hNLv+YTi7/mE8v/5lPMP+ZTzH/mFAx/5VQM/+GTTT/bk0//6+tqf/NyMH/q6Sk/97Z2v/S0NL9 - ICEgdQAAABoAAAAOAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkWpaOkvvXx8f/Szcz/ - 6+fn/+Pi3P+8b1P/zHZV/+W5p//XjG//zGpF/8xqRf/LakX/ympF/8ppRP/JaET/yWhE/8hpQ//HaEP/ - xmhD/8ZnQv/GZ0L/xGdC/8RnQv/DZ0L/w2ZC/8NmQv/CZUH/wmVB/8FkQf/AZEH/wGRA/79jP/++Yz// - vmM//71jP/+8Yj7/u2I+/7tiPv+6YDz/r1Ux/5pIKP+XSiz/plU2/7NcOv+3Xzv/t147/7ZeO/+2Xjv/ - tV46/7NeOv+zXjr/s106/7JcOf+xXDn/sVw5/7FcOf+xWzn/r1o5/69aOP+uWjj/rlk3/6xYNv+rVTL/ - rmFC/+DY1v/n5uf/5uPj/+fl5f/p5ub/6efn/+rn5//q6Oj/6ujo/+vp6f/r6en/7Onp/+vo6P/r6Oj/ - 6+jo/+zp6f/8/v//p4h7/4M+If+iVTX/o1Y1/6JVNf+iVTX/olU1/6FVNf+hVTT/oFQ0/6BUNP+gVDT/ - n1Q0/59UNP+dVDP/nVM0/51TNP+dUzT/nVM0/5xTM/+cUjL/nFIz/5tSMv+bUjL/mlAy/5lQMf+YUTH/ - k1A0/4FNOP98ZFn/xsG4/8K7uf+tpqb/7+rs/6imqN4JCQlUAAAAFgAAAAsAAAAEAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABlZWWB9vT0/9vZ1//a1tf/+fnv/6uKf//NdFL/36ON/+Sxnv/Ma0b/ - zGtF/8xqRf/MakX/y2pF/8pqRf/JaUT/yWlE/8hoRP/IaEP/x2hD/8dnQ//FZ0P/xWdC/8RnQv/EZ0L/ - w2ZC/8NmQf/DZUH/wmVB/8FlQf/AZUH/wGRA/8BkQP++Y0D/vmM//71jP/+9Yj//vGI9/7phP/+9iXT/ - spGD/4taR/98PCL/lUsu/6xaOP+2Xjv/uF88/7deO/+2Xjv/tV47/7ReOv+0Xjr/s1w6/7JcOf+xXDn/ - sVw5/7FcOf+wWzn/sFo5/69aOf+vWjj/rlo4/6lPK/+7hG7/6enq/+nm5v/p5ub/6ufn/+ro6P/r6Oj/ - 6+np/+zp6f/s6en/7Onp/+zp6f/s6en/7Orq/+vp6f/r6Oj/7Onp//z+//+nh3n/hD4h/6NUNP+kVTX/ - olU0/6FVNP+hVTT/oVU0/6FUNf+gUzT/n1Qz/59UM/+fVDP/n1Mz/55UM/+eVDL/nVMz/51SMv+dUjL/ - nFIy/5xRMf+cUTL/m1Ey/5tRMf+aUDH/mlAx/5hQMv+RUDX/d0o2/42FhP/Oyb3/tK2t/7y0tv/18vP/ - bGxttwAAADIAAAASAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OEHY19f8 - 7+vr/9HMzv/59/L/v7q4/8JvUP/XjXD/8trR/9J8Wv/MbEb/zGtG/8xqRv/MakX/zGpF/8pqRP/KakT/ - ymlE/8loRP/HaET/x2dD/8dnQ//GZ0P/xWdD/8VnQv/EZ0L/w2dC/8NmQv/DZkL/wmZC/8JmQf/BZUH/ - wWRA/8BkQP+/Yz//v2NA/71iP/+7XDb/y494/+fp7P/q7e7/3djX/62SiP93Pij/gz4j/55RMv+vWzn/ - tl87/7hfPP+2Xjv/tl47/7VeOv+0Xjr/s106/7JdOv+yXTn/sVw5/7FcOf+xWzn/sFs5/7BbOf+vWDb/ - pVMy/9W+tv/t7u//6ufn/+vp6f/r6Oj/7Orq/+zq6v/s6ur/7erq/+zq6v/s6en/7erq/+zp6f/s6en/ - 7Onp/+vo6P/s6en//f///6mIev+GQCH/o1Y1/6RVNf+iVDP/o1U0/6JVNP+iVTT/oVU0/6BUNP+fVDP/ - n1Mz/59TM/+fUzP/n1My/55UMv+eUzL/nVMy/51TMv+dUjL/nFEx/5xRMf+bUTH/m1Ex/5pRMf+aUDH/ - l1Az/4pPN/9xT0H/rKum/8rEvv+qpKT/2NTU/93c3f80NTWEAAAAHAAAAA4AAAAGAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmFaenqcD89/f/1M/P/+vn5//n59//snVd/9Z/XP/pvq7/ - 4qeR/85sRv/Oa0f/zGtG/8xrRf/MakX/y2pF/8tqRf/LakT/yWlE/8loRP/JaEP/yGhD/8doQ//GZ0P/ - xmdC/8VnQv/FZ0L/xGdC/8NnQv/DZkL/wmZC/8JmQf/BZUH/wWVA/8BkQf+/Y0D/v2RA/7taM//TpZT/ - 6u7x/+Xj4//n5+f/6urs/87Cvv+Ua1z/eDsj/4U/I/+cTzD/q1g4/7NdOv+2Xjv/tl86/7VfO/+1Xjv/ - tV46/7RdOv+zXTr/sl05/7JcOf+yXDr/rlg1/55KKP++l4f/7vDx/+zp6f/s6ur/7Orq/+zq6v/t6ur/ - 7evr/+3r6//t6+v/7evr/+3q6v/t6ur/7Onp/+zp6f/r6en/6+jo/+zp6v/7/P3/n3lp/41FJf+kVjT/ - pFY0/6NVM/+jVDP/olQz/6JUNP+iVDT/oVQ0/6BTM/+fUzP/n1Mz/59TM/+fUzP/n1Iy/55TMf+eUzH/ - nVMy/51TMf+dUjH/nFEx/5xRMf+cUTH/m1Ex/5lQMf+TTzP/gUw2/3xpYv/Hwbf/v7m3/62lpf/u6uv/ - rKqq3w0NDVUAAAAVAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - YmBifPr4+f/i39//2dbW//779P+snJf/zHhX/+CehP/x08j/0HBL/85sR//NbEb/zWtG/8xrRv/Ma0b/ - zGtF/8trRf/La0T/ympF/8lqRf/JaUT/yGlE/8doQ//HaET/xmhD/8VnQ//FZ0P/xWdC/8RnQ//DZkL/ - wmZC/8NlQf/CZUH/wWVB/8BkQP/AZED/vFs0/9SmlP/s8fL/6Obm/+fl5f/o5eX/6+vs/+no6P/GtbD/ - mXFj/31DLf9/OyD/jkQn/55PMf+nVTX/rVk3/7BcOf+yXDn/s105/7JdOf+vWzj/q1g1/59NK/+VSy3/ - uZOE/+zr6//u7e3/7erq/+3r6//t6+v/7evr/+3r6//t7Oz/7uzs/+7r6//t6+v/7erq/+3q6v/s6ur/ - 7Onp/+ro6P/p5+f/7evr//f29v+OXEj/lkoq/6dWNP+lVjT/pFY0/6NUM/+jVDP/olQz/6JUNP+iVDT/ - olQz/6BTMv+fUzP/n1My/59TMv+fUjL/n1Iy/55SMf+eUjH/nVIx/51SMf+cUTH/nFAx/5xRMf+cUDH/ - mVEy/49QNf90Szr/k4+Q/8zGu/+xq6r/vLW4//Lu8P9mZmewAAAALAAAABEAAAAIAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvMS811dPU8ff09P/X0tH/+/n4/9bV0f/EclT/ - 2IRl/+7Lv//gn4b/z25I/85tR//ObEf/zm1H/81sRv/NbEb/zGxG/8xsRv/La0b/ymtG/8pqRf/KakX/ - yWpF/8hpRP/IaUT/x2hE/8ZoRP/GaEP/xmhD/8VnQ//FZ0P/xGZC/8NmQv/DZUL/wmVB/8FlQf+9WzT/ - 16eV/+/z9f/r6Oj/6ujo/+ro6P/p5+f/6ujo/+/v8P/s7O3/183K/7GXjf+WbFz/gEgy/4JEK/+EQCT/ - hj0g/4pBI/+NQiP/jEEi/41EJ/+NSzD/oHBc/8+9t//x8vP/7+7v/+7s7P/u7Oz/7uzs/+7s7P/u7Oz/ - 7+zs/+/s7P/u7Oz/7uzs/+7r6//t6ur/7erq/+zp6f/r6en/6ufn/+jm5v/x7/D/8Ozr/4VJMf+dTy// - p1Y0/6VVNP+kVTT/pVUy/6RUMv+jVDP/o1Qz/6JUM/+iVDP/oVMy/6BTMf+gUjL/n1Ix/59SMv+fUjL/ - nlIx/55SMf+dUjH/nVIx/5xSMf+dUDH/nFAx/5tQMf+WUDT/iFA5/3lbT/+5tq3/xb66/6miov/b1Nb/ - 0M/P/SYnJ3UAAAAXAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAA4ODwSNjY2o/////+Th3//s6ur//f32/7OOgv/YgmL/4aWN//DPwv/Qb0r/z25I/89uSP/Pbkj/ - z21I/85tSP/NbEf/zWxH/8xsR//La0b/y2pF/8tqRf/KakX/yWpE/8lqRf/IaUT/x2lE/8ZoRP/GaET/ - xmhD/8ZoQ//EZ0L/xGZC/8RmQv/DZUL/wmVC/75bNf/YqJf/8fX4/+3r6//t6+v/7Orq/+zq6v/s6ur/ - 7Onp/+zq6v/v7+//8vT1/+3r7P/f2dj/z8G8/7ukm/+ukIX/qop+/6uJff+tjoL/v6ed/9rPzP/u7u7/ - 9PT2/+/t7f/v7Oz/7+3t/+/t7f/v7e3/7+3t/+/t7f/v7e3/7+3t/+7s7P/u7Oz/7evr/+3q6v/s6ur/ - 6+np/+vn5//q5+f/5+Tk//f4+f/c0Mv/ikgs/6NSMf+nVTX/pVU0/6VVNP+lVTT/pVQz/6VUMv+kVDL/ - o1Qy/6NUMv+iVDL/oVMy/6BSMf+gUjH/n1Ix/59SMv+fUjL/n1Iw/55SMf+dUjD/nVIx/5xRMf+cUDD/ - mlAy/5JRNv98TDn/jIOB/8vFt/+0rq//sqqr/+7q6/+Hh4nKAAAAPgAAABMAAAAJAAAAAwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFQUVvv7e//+vj4/+Xj4v////// - zMjE/8l2V//cimr/78zA/+GhiP/Qbkn/z25J/89uSP/Pbkj/z25I/85tR//ObUf/zmxH/8xrRv/MbEb/ - y2xG/8trRv/La0b/yWpF/8lqRP/IakT/yGlE/8dpRP/GaUT/xmhD/8ZoQ//FZ0L/xWZC/8NnQv/DZkL/ - v1s2/9mqmP/z9/r/7+3t/+7s7P/u6+v/7uzs/+7s7P/u7Oz/7uzs/+7r6//u7Oz/7u3t//Dw8P/z8/T/ - 9ff4//b4+v/19vf/9Pb3//b4+v/3+Pn/8/P0//Hv8P/w7u7/8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/ - 8O3t/+/t7f/v7e3/7uzs/+7s7P/t6+v/7erq/+zp6f/r6Oj/6ufn/+jm5v/n5OT//////7qbjv+NQCD/ - qFU0/6hVNP+nVTT/plU0/6VVNP+lVTT/pVQz/6VTM/+kVDL/pFQy/6NUMf+jVDL/oVMx/6BSMf+gUjH/ - oFIx/6BSMf+fUTD/n1Ew/55RMP+eUTD/nVEw/5tQMP+YUTP/jFI5/3dXSP+wrab/yMC7/6qkpP/Lxsf/ - 4t/g/0FAQI0AAAAZAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAKSgpFKqrqsD/////7uzs//r5+f/8/fb/sIt+/96MbP/io4v/8dPH/9R2Uv/Qbkn/ - 0G5I/9BuSf/Pbkj/z21I/89tR//ObEf/zWxH/81sRv/MbEb/zGxG/8trRv/Kakb/ympF/8lqRf/JakT/ - yGlE/8hpRP/GaET/xmhD/8ZoQ//GZ0P/xWdC/8RnQv/AXTb/26uZ//T4+//w7u7/8O7u//Du7v/w7u7/ - 8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/8e/v//Hv7//x7+//8e/v//Hv7//x7+// - 8e/v//Hv7//x7+//8e/v//Hv7//x7+//8e7u//Du7v/w7u7/8O3t/+7s7P/u7Oz/7uvr/+3q6v/s6ur/ - 6+jo/+rn5//p5ub/5uPj/+zq6v/7+/v/m2dS/5xNKv+pVzT/qFY0/6dVNP+nVTT/p1U0/6ZVNP+lVDP/ - pVMz/6RTM/+kVDP/pFMy/6RTMf+jUzH/olMx/6FSMf+gUjH/oFIx/59RMf+fUTH/n1Ew/59RMP+eUTD/ - m1Ax/5RSNf9/TDb/in9+/8fEtv+3sbH/rqen/+nl4/+mpqbeBwcHSgAAABQAAAAKAAAAAwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcZ/z9/v////// - 8O/v///////LxsT/0X9g/9+Ob//swrP/5auV/9JvSv/Sbkn/0W5J/9BuSf/Pbkj/z25I/89tSP/ObUj/ - zm1H/81sRv/MbEf/zGxH/8trRv/La0b/ympF/8pqRf/JakX/yWlE/8dpRP/HaUT/xmhE/8ZoRP/GZ0P/ - xmhC/8FdNv/crJr/9fr9//Hv7//x7+//8e/v//Hv7//x7+//8e/v//Hv7//x7+//8e/v//Hw8P/x8PD/ - 8u/v//Lv7//y8PD/8vDw//Lw8P/y8PD/8vDw//Lw8P/y8PD/8vDw//Lw8P/y8PD/8fDw//Hv7//x7u7/ - 8O7u/+/t7f/v7e3/7+zs/+7s7P/s6+v/7Orq/+vp6f/q5+f/6efn/+jl5f/l4uH/+fr7/93Oyf+QRyn/ - p1Uy/6lXNP+pVjT/qFY0/6hWM/+nVjT/p1U0/6ZVM/+lVDL/pVMy/6VUM/+kUzP/o1Mz/6RTMv+jUzH/ - oVIx/6BSMf+gUjH/oFIx/6BSMP+fUTD/n1Ew/51RMP+aUjP/jlE3/3pWR/+wrKb/xb+7/6ulpf/IwsL/ - 5+Xm/1JSVJ0AAAAcAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDIYtLS2yf/////5+Pj///////399/+tl5H/3JF1/+GZfv/14Nf/ - 2odo/9JuSv/Sbkn/0W5J/9FuSP/Qbkn/z25I/89tSP/PbUj/zm1I/85tSP/ObEf/zWxG/8xsRv/La0b/ - ymtG/8prRf/JakX/yWpF/8hqRf/IaUT/x2hE/8ZoRP/GaEP/wl02/92um//3+/7/8vDw//Lx8f/y8fH/ - 8vDw//Lx8f/y8fH/8vHx//Lx8f/y8fH/8/Hx//Px8f/z8vL/8/Ly//Px8f/z8fH/8/Hx//Px8f/y8vL/ - 8/Hx//Px8f/z8fH/8vHx//Lw8P/x8PD/8e/v//Hv7//w7u7/7+3t/+/t7f/u7Oz/7evr/+zq6v/r6en/ - 6ujo/+nm5v/n5OT/5eLi/+ro6P/+////rX5r/55KKP+rVzX/qVY0/6lWNP+pVjT/qFY0/6dWM/+nVjP/ - p1Uz/6ZVM/+lVDL/pVMy/6VTMv+kUzL/o1My/6NSMv+iUjH/oVIx/6BSMf+gUjH/oFIx/59RMP+gUS// - nVEw/5ZTNv9+TDb/jIWG/8nCtf+3sLD/rqam/+nj4/+vrrHjDA0NUAAAABMAAAAKAAAAAwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcXF1l - ///////////6/Pv//////9fX0/++hG7/5pd5/+ewnP/svq3/029K/9JvSv/Sb0r/0W9J/9FuSf/Qbkn/ - z21J/89uSP/Pbkj/z21I/85tSP/ObEf/zWxH/81sR//Ma0b/y2tG/8prRv/KakX/yWpF/8hqRf/IaUT/ - x2lE/8dpRP/DXjf/3q+d//j9///z8vL/8/Ly//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/ - 9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/z8vL/8/Ly//Px8f/y8fH/8vDw//Lw8P/x7+// - 8e/v//Du7v/v7e3/7+zs/+3r6//s6ur/7Onp/+ro6P/p5ub/5+Xl/+Xj4//j4OD//P3+/9fCuf+YSir/ - rFY0/6xYNv+qVzT/qVY0/6lWM/+pVjP/qVYz/6hWM/+mVjP/p1Y0/6VVMv+lVDL/pVMy/6VTMv+kUzL/ - pFIy/6NSMv+iUjH/oVIx/6BSMf+hUjH/oFEx/59RMf+aUjT/jE80/3xhWP+5tav/wru6/6qjpP/HwsH/ - 5eTk/05PTpgAAAAYAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4uLxC1tLXF/////////////////////7qqpf/Yj3T/ - 4JFz//DNwP/joYj/029K/9NvSv/Sb0r/0m5J/9FuSf/Rbkn/0G5I/89uSP/Pbkj/z21I/89tSP/ObEf/ - zWxG/81sRv/Ma0b/y2xG/8trRv/Ka0b/yWpF/8lqRf/IaUX/x2lE/8NfN//fr53/+f7///Tz8//08/P/ - 9PPz//Tz8//18/P/9fPz//Xz8//18/P/9fPz//Xz8//18/P/9PPz//Xz8//08/P/9PPz//Tz8//08/P/ - 9PLy//Ty8v/08vL/8/Hx//Px8f/y8PD/8vDw//Hv7//w7u7/8O7u/+/t7f/t7Oz/7Orq/+vp6f/q6Oj/ - 6efn/+fl5f/l4+P/4t/f//T09f/y7ez/o2FG/6dRL/+tWDf/rVg2/6xYNv+qWDT/qlc0/6lWNP+pVjT/ - qVYz/6lWM/+oVjP/plUz/6ZVMv+lVDL/pFQy/6VUMf+lUzH/pFMy/6NSMf+jUjH/olIx/6FSMf+gUjH/ - nVEy/5VSNv9+Tjr/mpaV/8nDtv+xrK3/r6qq/+rk5f+lo6TdCAcHSAAAABIAAAAJAAAAAwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAF9eX17/////////////////////7O7n/7KOgv/pnYH/4puA//Ta0P/bhmb/1G9K/9RvSv/Tb0r/ - 0m9K/9JvSf/Rbkn/0W5I/89uSP/Pbkj/z25I/89tSP/ObUj/zm1H/81sR//NbEb/y2xH/8trRv/Ka0b/ - ympG/8pqRf/IaUX/xV84/+Gwnv/6////9fPz//Xz8//19PT/9fT0//X09P/19PT/9vPz//b09P/19PT/ - 9fT0//X09P/19PT/9fT0//X09P/18/P/9fPz//Tz8//08/P/9PLy//Ty8v/z8vL/8/Hx//Lw8P/y7+// - 8e/v//Du7v/v7e3/7evr/+3q6v/s6ur/6ujo/+nn5//n5eX/5eLi/+Lf3//v7u///Pv7/7WAa/+kTSr/ - r1o4/61ZN/+tWTf/rVg3/6xYNf+rWDT/qlc0/6lWNP+pVjT/qVY0/6lWM/+oVjP/p1Uy/6ZUMv+mVDL/ - pVQy/6VUMf+lVDH/pFMx/6NSMf+iUjH/olIx/6BRMf+bUzb/iEoy/4R1dP/CvrD/vLa1/6mjo//Qycr/ - 4+Dh/0BBQokAAAAXAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fBJ6goKf///////////////////// - z83K/8WLd//nm37/562W/+3Csv/VcUr/1XBK/9RvSv/Tb0r/029K/9JuSv/Sb0n/0W5J/9BuSf/Qbkj/ - z25I/89uSP/PbUj/zm1I/85sR//NbEf/zWxG/8xrRv/Ka0b/y2tG/8pqRf/GYDn/4KuW//v////18/P/ - 9fPz//b09P/29PT/9vT0//b19f/29fX/9vT0//b09P/29fX/9fX1//X09P/19PT/9fT0//X09P/19PT/ - 9fPz//Tz8//08/P/9PLy//Py8v/y8fH/8vDw//Hv7//w7u7/7+3t/+7s7P/t6+v/7Orq/+ro6P/p5+f/ - 6OXl/+Xj4//j4eH/8fLz//z7+/++jHf/pU8r/7FbOP+wWjf/rlo4/65aN/+uWDf/rVg2/61YNv+rWDX/ - qlc0/6pXNP+pVzT/qVY0/6lWNP+oVjL/p1Qy/6dTMv+mVDH/pVQx/6VUMf+lUzH/pFMx/6JSMf+hUjL/ - nlM1/5NQNf9+XVH/sa6n/8a/uv+rpab/t7Ky/+/r6/+Ojo/IAAAAMAAAABAAAAAIAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAANDQ0NOHh4e7/////////////////////v7Cr/92UeP/hj3H/7cCv/+iumP/VcUr/ - 1HBK/9RwSv/TcEr/0nBK/9NvSv/Sbkr/0W5J/9BuSf/Pbkj/z25I/89uSP/Pbkj/z21H/85sR//ObEf/ - zWxG/8xsR//Ma0b/y2tF/8lmP//Thmf/+PLv//r8/v/29PT/9vT0//b19f/29fX/9vX1//b19f/29fX/ - 9vX1//b19f/29fX/9vX1//b19f/29PT/9fT0//X09P/18/P/9PPz//Tz8//z8vL/8/Hx//Lx8f/y8PD/ - 8e/v//Dt7f/u7e3/7evr/+zq6v/r6en/6efn/+jl5f/k4uL/5+Xl//j7/P/38vH/v4hx/6hQLP+yWzj/ - sVs4/7FbOP+wWzj/r1o4/65aN/+tWTf/rVk3/6xYNv+sWDX/rFg1/6pYNP+qVjX/qVY0/6lWNP+oVTL/ - qFQy/6dUMv+mVDH/pVMx/6VTMf+lUzH/o1Iw/6BTMv+YUzf/gk45/5uVlP/IwrX/sqyu/6ulpf/f2tr/ - zMvL+SMjJGkAAAAUAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4eJev////////// - ///////////w8ez/sp6Z/+GehP/hkXP/8tLF/+Oeg//VcUr/1XFK/9VwSv/UcEr/1G9K/9JvSv/Sbkr/ - 0m5K/9BuSf/Qbkn/z25I/89uSP/Pbkj/z21H/85tSP/ObUf/zWxH/81sR//La0b/y2tG/8pnQf/bmoH/ - +fLw//3////5+vv/9vX1//b19f/29fX/9/X1//f19f/29fX/9vX1//b19f/29fX/9vX1//b09P/29PT/ - 9fT0//Xz8//08/P/9PLy//Py8v/z8fH/8vDw//Hv7//w7u7/7+3t/+7r6//s6ur/6+np/+nn5//n5OT/ - 6OXl//Dx8v/9////6tnR/7p3XP+sUSz/tF05/7RcOv+yXDn/sVw5/7FbOP+wWzn/r1s3/69aOP+tWTf/ - rVg3/61ZNf+sWDX/q1g1/6tYNf+rVzX/qlc0/6lWNP+oVTP/p1Uy/6dUMv+nVDH/plQx/6VUMf+jUzL/ - nVQ3/4lNNP+KgIH/wr+v/721tP+po6P/xsLC/+rn5/9gYGCiAAAAGgAAAA4AAAAGAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAA6OjsNra2vwP///////////fz7///////k5OD/xpSB/+ijiP/imHv/ - 9d3U/+CRc//WcUv/1XFK/9VwSv/UcEr/1G9K/9NvSv/Sbkr/0m9J/9FvSf/Rbkn/0G5J/9BuSf/Pbkj/ - z21I/89tSP/ObEf/zmxH/8xsR//MbEf/y2tF/8llPv/RfVz/6MCx//n08//+////+/3///j4+P/39vb/ - 9/X1//b19f/39fX/9vX1//b19f/29fX/9vX1//X09P/19PT/9fPz//Tz8//z8vL/8vLy//Lw8P/x8PD/ - 8O7u/+/t7f/u7Oz/7Orq/+ro6P/p5+f/6+nq//P09f/9////9e3q/9Kkkv+yXTv/slcy/7VeO/+1XTr/ - tFw6/7NcOv+yXDr/sVw5/7FbOf+xWzn/sFo4/69aN/+uWjf/rlk2/61ZNv+tWTb/rFg1/6tYNf+rVzX/ - qlc0/6pXNP+pVTP/qFUy/6dVMv+nVDL/pVQz/6BVN/+RTjL/hmtk/7m2rP/Dvbj/q6Wl/7ewsP/r6Oj/ - np2e0wQEBDoAAAAQAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NTU4 - 5OTk7f/////+/f3//fv8///////R0M//xZWF/+Wghf/jnoP/89PH/92IaP/WcUv/1nFK/9VxSv/VcEr/ - 1G9K/9NvSv/Tb0r/0m9K/9FuSf/Rbkn/0G5J/9BuSf/Pbkj/z25I/89uSP/PbUf/zm1H/81sR//NbEf/ - zGtG/8lmQP/IYz3/0Hxb/+Gumv/z4dr//Pr5///////8////+fr7//j3+P/39fX/9vX1//b09P/19PT/ - 9fT0//X09P/08/P/9PHx//Px8f/y8PD/8e/v//Du7v/v7e3/7uzs/+7t7f/w7/D/9PX2//r////8/f7/ - 8eTf/9SmlP+7a0z/tFUx/7ddOf+3Xzz/tl87/7ZeOv+1Xjr/tF06/7RdOv+zXDr/sls5/7JbOf+xWzn/ - sVs5/7BaOP+vWTf/rlk3/65ZNv+tWTX/rFk1/6xXNf+rWDX/q1g0/6pWNP+pVjP/qFYy/6dVM/+jVjb/ - l1M2/4NiV/+sqqT/x8G4/6+pqv+upaf/4t3d/9DOz/ghIiFiAAAAEwAAAAoAAAAEAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+fn9s+fn5///////29fb//Pv8///////Oycj/ - 25J3/+Wafv/lo4r/8cy+/9yCYf/Xckv/1nFL/9VwSv/VcEr/1G9K/9RvSv/Tb0r/029J/9JuSv/Sbkn/ - 0W5J/9BuSP/Qbkj/0G5I/89uSP/Pbkf/zm1H/81sR//NbEf/zGxH/8xrRv/KZ0H/x2I6/8pqRf/Thmj/ - 4rGe/+/Yz//48u///Pz8//7////+/////f////r9/v/5+/z/+Pr7//j6+v/4+fr/9/n6//f4+f/3+fr/ - +Pz9//v////8////+/7///n19P/y5eH/4Lqs/8uMc/+6Y0H/tVYx/7ldOf+6YD3/uV88/7hfPP+4Xzz/ - t187/7ZeOv+1XTr/tF06/7RcOv+zXTr/s1w5/7JcOf+yWzn/sVs4/7BbOP+wWTf/r1k2/65ZNv+tWTX/ - rVk2/6xYNf+sWDX/q1c0/6pWNP+pVjX/pVc3/5tVN/+LV0H/o6Cg/8fBs/+0rq//q6Sk/9LMzf/i4eL/ - U1RUlAAAABUAAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACMjI2Y///////////w7+3//v3+/////P/Rvrj/4Jh8/+SZfP/mp47/78i5/9yDYf/Xckv/ - 1nFL/9ZxS//WcEr/1HBK/9RwSv/Ub0r/029K/9JuSv/Sbkr/0m9J/9BuSf/Qbkn/0G5I/89uSP/PbUj/ - z21I/85tR//NbEf/zWxH/8xsR//Ma0b/y2lE/8llP//GYDj/yGpF/8txT//UjnP/3quX/+GwnP/ow7X/ - 8N3V//To4//05+P/8+fi//Pn4v/z5+L/9Ojj//Hh2//r0cj/4LOi/9ytmv/UmYP/w3JR/75mQ/+5WjX/ - uVs1/7tgO/+7YT3/umE9/7phPf+6YDz/ul89/7lfPP+4Xzz/t187/7deOv+2Xjr/tV06/7VdOv+0XTr/ - s1w6/7NcOf+yXDn/sVw5/7FbOP+vWTf/r1k3/69ZN/+tWTb/rlk2/6xZNv+sWDX/qlc1/6ZXOP+fVzn/ - jVQ9/52Vlf/JwrP/uLKx/6miov/CvLz/8u/v/39/f7oAAAAhAAAADgAAAAYAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTFBO7u7zC//////v6+//r6er/ - /vz9//v79P/KuLL/4p6E/+SZff/np47/8cy+/92JaP/Xckv/13FL/9dxS//WcEv/1XBK/9RwSv/UcEr/ - 1HBK/9NvSv/Sb0r/0m5J/9FvSf/Qbkn/0G5J/9BuSP/PbUj/z21I/89tR//ObEf/zWxH/81rR//MbEb/ - zGtG/8trRf/KaUT/yGhC/8ZkPv/FYDn/xF03/8RjPP/Gakb/yG5K/8htSv/HbEn/xmxJ/8ZrSf/FbEn/ - w2lF/8FkQP+9WzT/vFoz/71cNv++YTv/vmI9/75jPv+9Yj//vWI//7xiPv+7YT7/umE+/7pgPf+6YD3/ - umA9/7lfPP+4YDz/t187/7deOv+3Xjr/tl06/7RdOv+0XTr/tF06/7NcOv+yXDn/sVs5/7FaOP+xWTf/ - sFo3/69ZNv+uWTb/rVk2/6xZN/+oWTj/oVc5/5FVPP+ZkZD/xb6v/7u1tP+ro6P/urS0/+vm5/+gn5/U - CQoJPAAAAA8AAAAHAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAACcnKCfQ0NDX//////Px8v/n5OP//Pz8//T07//Jt7D/4p6E/+Sbfv/lpIr/ - 89PH/+CSc//XcUv/13JL/9dxS//WcEv/1XFK/9VwSv/UcEr/1HBK/9NvSv/Sb0r/0m9K/9JuSv/Rbkn/ - 0G5J/89uSP/Pbkn/z25I/89tR//ObUf/zWxH/81sRv/NbEf/zGxH/8trRv/La0X/ymtF/8lqRf/JakX/ - yGhD/8dnQv/GZkH/xmZB/8VlQP/FZUD/xGVA/8RlP//DZT//wmVA/8NlQv/CZUH/wWVB/8FlQP/AZED/ - v2Q//79jQP++Yj//vWM//7xiPv+7YT7/u2E+/7phPf+6YT3/umA9/7lgPf+4YDz/t147/7deO/+2Xzr/ - tl46/7VdOv+0XTr/tFw6/7RcOv+zXDr/sls4/7FaN/+wWjj/sFo3/69ZNv+uWTf/qlo6/6JYOv+TVT3/ - l46O/8O8rP+9t7X/q6Wl/7ewsP/o5OT/u7q66BcWFlAAAAARAAAACQAAAAMAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5NTkHm5ufv - /////+zq6v/g3t///fz6//Ly7f/MubP/5J6E/+megf/knoP/9t3U/+Sfg//Yckv/13JL/9dyS//XcUv/ - 1nFL/9ZwS//VcEr/1XBK/9RwSv/Tb0r/0m9K/9JuSf/Rbkn/0W5I/9BuSf/Pbkn/z25I/89tSP/PbUj/ - zmxH/81tR//MbEf/zWtG/8trRv/La0b/ympG/8pqRf/JakX/yWlF/8hpRP/HaUT/xmhD/8ZoQ//GaEP/ - xmhD/8VnQv/DZkL/w2ZC/8NlQv/CZkH/wmVB/8FkQf/AZEH/wGRA/75jP/++Yz//vWM+/71jP/+8Yj// - u2E9/7phPf+6YT3/umE9/7pgPf+4Xzv/t187/7dfO/+3Xjr/t146/7ZeOv+1XTr/tF06/7NdOv+zXDn/ - sls4/7JaOP+xWjj/r1o4/6xbO/+lVzj/lVY8/5qRkf/BvKv/v7i2/6ulpf+yqqv/5eHh/9TS0vguLi9r - AAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRiY1fn5uf5/////+bk4//b2Nn/9/X1//b18f/Rwbz/ - zZ2M/+mghf/jlnn/89LG/+mvmf/Xckv/13JL/9dyTP/Xckv/13FL/9ZxSv/VcEr/1HBK/9RwSv/Tb0r/ - 029K/9JvSf/Sb0r/0W5J/9BuSP/Qbkj/z25J/89uSP/PbUj/zm1H/85tR//ObEf/zWxH/8xsRv/La0b/ - ymtF/8pqRv/KakX/yWlE/8dpRf/HaUT/x2lD/8ZoQ//GaEP/xmdD/8VnQ//EZ0L/w2ZC/8NmQv/DZkH/ - wmVB/8FkQf/BZUH/wGRA/8BkQP++ZED/vmM//71jP/+9Yj7/vGI+/7thPf+6YT7/umE9/7lgPf+5YDv/ - uGA7/7dfO/+3Xjv/t186/7ZeOv+2XTr/tV06/7RdOv+zWzn/s1s4/7FbOf+uXDz/pVY3/5JjT/+impr/ - w72s/763tv+spab/squr/+Da2v/Z19f8Q0JDfAAAABIAAAAKAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAGhnaGno6On7/////+De3f/U0dD/8O7t//z79f/Pzs7/y52L/+yliv/jknP/7sCw/+7Ds//eiWj/ - 13JM/9dyS//Xckv/13FL/9ZwSv/VcEr/1XFK/9VwSv/UcEr/029K/9NvSv/Sb0r/0W5J/9FuSf/Rbkn/ - z25I/89uSP/Pbkj/z25I/89tR//ObUf/zWxH/8xrR//Ma0f/y2tG/8prRf/Ka0X/yWlF/8hpRf/IaUT/ - yGlE/8dpQ//GaUP/xmhD/8VnQv/EZ0L/w2dC/8NmQv/DZkL/wmVB/8JlQf/BZUH/wGRA/79kQP+/Yz// - v2NA/75jP/+9Yz//vGI//7thPv+7Yj7/u2E+/7pgPP+5YDv/uGA7/7dfO/+3Xzr/t186/7deO/+2Xjr/ - tV46/7NdOv+yXTr/r109/6VUNP+Valr/pqam/8fArv+9tbT/rKWm/7KrrP/f2tn/3Nvb/0pKS4UAAAAT - AAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhoaWvl5Ob5/////93a2P/Py8v/ - 7err////+//X1NL/wKCV/+Gqlf/kkXH/6ayV//Xb0f/lo4n/13JM/9dyS//Xckv/13FL/9ZxS//VcUv/ - 1nFK/9VwSv/Ub0r/029K/9NvSv/Sb0r/0m5K/9JuSf/Rbkn/0G5J/9BuSP/Pbkj/z25I/89tR//ObUf/ - zWxH/81sR//MbEb/y2tG/8prRv/La0X/ympF/8lqRf/JaUX/yGlE/8dpRP/HaUT/xmdD/8VnQv/FZ0L/ - xGdC/8NmQv/DZkL/w2ZC/8JmQf/CZUH/wWVA/8BlQP+/ZED/vmRA/75jP/++Yz//vWI+/7xiPv+7Yj7/ - umE9/7pgPP+6YDz/uWA8/7hgPP+3Xzv/t187/7deO/+2Xjr/tF88/69cPP+fVzv/lXpz/6yqpv/HwbL/ - u7S0/6ujo/+0rq3/497e/9jV1f9MTEyKAAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAGBeXl7Z1tny/////+Lg4P/Nysn/49/h//v69//i5OL/wa6p/96hif/ooYb/ - 5Jt///LNv//tvq3/3opp/9dyS//Xckv/13JL/9dyS//WcUr/1XFK/9VxSv/Ub0r/1HBK/9RwSv/Tb0r/ - 0m9K/9FuSf/Rbkn/0W5J/9BuSP/Pbkj/z21I/89tSP/ObUj/zm1G/81tR//MbEf/zGxG/8xsRv/La0b/ - ymtF/8pqRf/IaUX/yGlF/8dpRP/HaEP/xmdD/8ZnQ//EZ0L/xGdC/8RnQv/DZ0L/w2ZB/8NlQv/CZUH/ - wWVB/8FlQP/AZED/v2NA/75jQP++Yz//vWI//71iP/+8Yj7/u2E9/7pgPf+6YDz/uWA8/7hgPP+4Xzv/ - tl88/7VgPf+uXDr/oFo+/5uOjf+4tq3/xb6z/7evsP+po6P/urKy/+fi4v/Mycr4UVBSfQAAABEAAAAK - AAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNjZFDV1dbh - /////+fl5f/Oysn/2NXX//z7+v/u7un/w7++/8mdjf/nqZH/5ZZ3/+mwmv/13dP/56qS/9p6VP/Xckz/ - 13JL/9dxSv/WcUv/1nFK/9VxSv/VcUr/1XBK/9RvSv/TcEr/029K/9JvSv/Rbkn/0W5J/9BuSf/Qbkn/ - z25I/89uSP/Pbkj/zm1I/85tR//NbEf/zGxH/8xsRv/La0b/y2tG/8prRf/JakX/yGpE/8hpRf/IaEP/ - xmdD/8ZnQ//FZ0L/xWdC/8RnQv/DZ0L/w2ZC/8NmQv/DZkH/wmVB/8FkQf/AZED/v2RA/79kQP++Yz// - vmM//71iPv+8YT7/vGE9/7tgPf+7YDz/uWA8/7dhPv+1YD3/qVc3/6FuXP+loaX/vLms/8a+t/+yrK3/ - qqSk/8K8vP/o5OT/v7297Dw8O2sAAAAQAAAACQAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElKSjSqq6vL//////Du7v/Rzs7/0MzN//Du7f/4+PT/ - 09PR/7iknv/fpI7/7KSJ/+Wafv/tvqz/8Mq8/+Obgf/YdE3/13JL/9dxS//Xckv/1nFL/9ZxSv/VcEr/ - 1HBK/9RwSv/TcEr/029K/9JuSv/Sbkr/0W5K/9FuSf/Qbkn/z25I/89uSP/Pbkj/z21I/85tR//NbEf/ - zWxH/8xrRv/LbEb/y2tG/8prRf/Ka0X/yWpF/8hpRP/IaUP/x2hD/8ZnQ//GZ0L/xWdC/8RnQv/EZ0L/ - w2dC/8NmQv/DZkH/wmVB/8JlQP/BZUD/wGRA/79kQP+/ZED/vmM//71hPv+9YT3/vGE9/7phPv+6YT3/ - tFs3/6hbPf+fjYr/r66t/8W9rP+/ubb/rqep/62mpv/Mxsb/7uvr/6elpdogISFTAAAADgAAAAgAAAAD - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAABYWFh6ZmJmr8/Hy//n39//Y1NP/ycbG/+Dd3v/59/X/5+jl/8G7uf+3mY//4qiS/+qegf/ln4T/ - 7b6s/+29q//hl3r/2XRO/9dyTP/Xckv/13FL/9ZxS//WcUr/1XBK/9VwSv/Ub0r/029K/9NvSv/Sb0r/ - 0W9J/9FuSf/Rbkn/0G5J/89uSP/Pbkj/z25I/85tR//ObEf/zWxG/81sRv/Ma0b/y2tG/8trRv/Ka0X/ - yWtF/8lpRP/IaUP/x2hD/8ZoQ//HZ0P/xmdC/8VnQv/EZ0L/w2dC/8NmQv/DZkL/w2VC/8FlQf/BZUH/ - wWRB/8BkQP+/ZD//vmM+/71iQP+8ZED/ul45/6xaOf+ifG//qaWo/7y5rf/Hv7X/uLKy/6qjpP+1rq7/ - 29bW/+fk5P+Mioy9Cw0NOwAAAAwAAAAGAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRUVQmHhYaB09HQ+P/+/v/k4eL/ - y8bG/9HOzf/v7ez/9fXw/9bY1v++rKj/zpqJ/+eokf/pnH//5p+E/+u2ov/ruab/4pl+/9p9Wf/Xckv/ - 13JL/9dxS//WcUv/1XFK/9VwSv/UcEr/1HBK/9NwSv/Tb0r/0m5J/9FuSf/Rbkn/0G5J/89uSP/Pbkj/ - z25I/89tSP/ObUj/zmxH/81sR//MbEf/y2tH/8trRv/KakX/ympE/8lpRP/IaUP/yGhD/8hoQ//HaEL/ - xmdD/8VnQv/FZ0L/xGdC/8NnQv/DZkH/wmZB/8JlQf/CZUH/wWVA/8BlQf+/ZUL/vmA7/7RZNf+tb1b/ - q56c/7W2sv/Dvaz/wbq3/7Cqq/+rpKT/w729/+rl5f/W09P/XVtbmAEBAiEAAAAKAAAABQAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABVVVVRurm51Pr3+P/08fD/1dDQ/8jCw//d2Nj/9vbz/+7u6f/NzMv/ - t6Wf/8uXhP/mpo3/7KCD/+Wdgv/nqZH/7Lyq/+WiiP/eiWj/13RO/9dyS//WcUv/1nBK/9ZwSv/VcEr/ - 1HBK/9RvSv/Tb0r/0m9K/9FvSv/Sbkn/0G5J/9BuSf/Qbkj/z25I/89tSP/PbUj/zm1H/81sR//Na0f/ - zGtG/8trRv/La0b/ympE/8lpRP/JaUT/yGlD/8hoQ//HaEP/xmdC/8ZnQ//FZ0L/xGdC/8RnQv/DZkL/ - w2ZC/8NnQ//CZkL/wWA6/7hbNv+wb1b/rJuY/7Ozs//Bu6v/xsC4/7ewsf+qpKT/tK6u/9bPz//s6Oj/ - rKqr30VGRWwAAAAOAAAACAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDQkMi - gH5/ltva2////f3/6OXl/8vGxf/Iw8T/4d7e//Px7v/o5+X/zMvK/72nn/+5lIb/2KCL/+ujhv/onYD/ - 5Z6D/+amjf/lpYz/35Fz/9yBX//XdE//1nBK/9VwSv/VcEr/1XBK/9RwSv/Tb0r/029K/9JuSv/Rbkn/ - 0W5J/9BuSf/Pbkj/0G5I/89uSP/PbUj/z2xH/85tR//NbEf/zWxH/8xsRv/La0b/y2pE/8ppRP/JaUT/ - yWhE/8hoQ//HaEP/x2dD/8ZnQv/FZ0L/xWhD/8VoQ//FZUD/wV44/7VgQP+ve2n/s6Cb/7W2tv+9uav/ - xsC2/721s/+spKX/raen/8nExP/r5ub/19TU/2tqaqcPEBA1AAAACwAAAAYAAAADAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZWZmV6Wkpcjp5+n/+PX1/9/a2f/HwcH/ - ysXG/+Pg3//y8O3/6erj/9PU0/+3r67/tZOG/8KVhP/knoT/66CE/+WZe//ilHb/4I9w/96Mbf/bgV// - 2XpW/9h1UP/Vckz/1XBK/9RwSv/UcEr/029K/9JvSv/Sb0r/0W5J/9FuSf/Qbkj/0G5I/89uSP/PbUj/ - z21I/85tSP/NbUf/zWxG/8xrRv/La0X/ymlE/8ppRP/KaUT/yGlE/8lqRv/Ia0b/yWpG/8hpRP/HYjr/ - v144/7JuVf+1joD/tK+w/7i6uv++uav/x8G1/7+5t/+uqKn/rKam/8G8uv/i3t7/6ebn/6SlpNZKSUlu - BAQEDwAAAAgAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAX15fHI2MjYPJx8jm+ff3//Xy8v/Y1dX/xcHB/8nExP/f29v/8e/s/+7u6v/b29r/ - xMPE/7yjm/+9jn3/2JJ2/9iXfv/mmXv/6Jh7/+CNbP/fhWP/2n1b/9h4Vf/YdU//1XBL/9VwSv/Ub0n/ - 029J/9NvSv/Sb0r/0W9K/9FtSf/QbUj/z21I/89tR//PbEf/z2xH/85sRv/Oa0b/zWxG/81tSP/Nbkn/ - zW9K/85wS//Nb0r/zmtE/8lkPf++Y0D/wWhG/72Hcv+7pqD/uLm8/7m4tv/Ev6//ycS6/763tv+vqKn/ - rKWl/8C5uP/g29z/7uvs/8XDxPBfXl+SDQ4OMAAAAAoAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQTB1dXWS - zs3O7/v5+v/28/T/29fW/8bAwP/Dvb3/1NHQ/+jl4v/u7er/6unl/9fY2P/Iw8L/raSi/7uQgf+sg3T/ - 04tv/9SOc//gi2z/5Y9v/+aObv/ghmX/24Ff/9p+W//Ze1f/2HhU/9d3Uv/WdVH/1nVR/9Z0UP/VdVD/ - 1XRP/9R1UP/TdlL/1HdT/9N4Vv/VdlP/1XRO/9FwSf/MaEL/wmhF/8NqSP+wfGn/wZSE/7aur/+8ubv/ - uru6/8K+sf/LxLr/x8C8/7mzsv+spqX/rqin/8O+v//i3d7/8e3t/8rIyfRsamukKSorRAAAAAoAAAAG - AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU08fn1+mcrJyuz08/L/9/T0/+He3//KxsX/ - wLu7/8fCwf/Z1dX/6eXh/+zs5f/p6uL/2drZ/83P0P+/urn/raSj/8eZif+1hnX/oXts/7t7Y//Xf17/ - zn5f/8t7Xv/Ke13/yHhZ/8Z1V//FdFX/xHJU/8RxUv/Db0//wm1N/8VvTv/JcVD/zXBM/7x1W/+tgHD/ - vYp4/82fkP+2r7D/uri5/7y9wf+7urn/xsK1/8zIuv/Lxbz/wLm3/7Grq/+rpaX/ta+v/87Jyf/o5eb/ - 7uvr/8rIyPNxcHCnMjIySwMDAwsAAAAHAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAASklKOHl6eZCwra/c5eTl//f09P/t7Ov/19PR/8TAwP+/ubn/xL6//9TPz//g3dn/ - 6ufh/+no4P/l5N7/4eHc/87Q0f/LzdD/yMbI/7u1tv+vqaj/pp+f/6Kcm/+impn/oZua/6Kbmv+jm5r/ - opua/6Sdnf+knp7/raeo/7WwsP+6tLb/wL/C/7y+w/+6urv/xMK8/8rGuf/QzMH/08zC/8jDvv+/uLf/ - sqqr/62mpv+zra3/xr/A/+Hb2//v7Oz/6+jp/728veRoaGidMTExSgkJCQ0AAAAGAAAAAwAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx7fCZqaWpo - kJCQuMvJyvfv7O3/9vPz/+/r6//Z1dX/xsLC/765uf+9trf/w768/83Jx//W0tD/3NjT/+Dd1v/n5Nz/ - 4uDY/+Hd1v/b2tH/1tTL/9bUzP/U0sn/09HI/9PQx//S0MX/0s/F/9HPxf/QzcP/0c7D/9bSxv/Y1cr/ - 1M/G/9DKw//LxcL/wLq5/7WvsP+vqan/r6mp/7u0tP/Mxsb/5ODh//Tx8v/29PX/0tHS+4yLjMFGRkh3 - GRkZMgAAAAgAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUVFQUT05OQHBvcICbmpvBycfH+uvp6f/39vb/ - 8O3t/+nk5f/V0dH/ycTE/7+5uf+7tbT/t7Ky/7q0s//Burn/xL69/8jDwv/NxsX/zsjF/83Ixv/OyMb/ - zMfE/83GxP/Kw8P/ycHA/8W/vv/Au7n/u7S0/7OsrP+wqqr/says/7Wvrv++ubn/ysXG/+Db3P/t6Or/ - 9/T3//Lx8v/V09X9mZiZyl1eXo42NTVOPz9AHQAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAGRkZhpNTU5Ba2treIGAgK6vrq7c0c/Q/+Xl5v/8+fr/8e3w/+7r7P/s6Oj/ - 4Nza/9TO0P/LxcX/xcC//8C8vP++ubf/vLa1/7u0tP+5tLT/ubS0/7y1tf+9uLj/wbu7/8XAwf/MyMj/ - 2tPU/+Xg4P/p5eb/7+zr//r29//y7/D/19XW/6+tr+KAf4C0WVtbgjU0N05QT1AiAAAABgAAAAQAAAAD - AAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - MjIyC4B/fyVBQUFFent8dHJxcpuWlZjAsK+x3s7NzvvRz8//39ze//Tx8v/59vj/+/r5//v4+P/69/f/ - +fX2//j19v/59fb/+fb3//n49//49ff/9PHy/+nn6P/b2dz/zczN/a+truCTk5TEa2prolhXV3s0MzNP - cG9wLCIhIhIAAAAFAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABISAhBVpbWhiGhYcq - HBwcPFlYWlV1dHZsYGFgg2NiZJZmZmamZ2ZmrmdnZ7RnZme2Z2ZntmdmZ7RnZmevZmVmp2NiYpleXV6G - U1NTcDw8PVscGx1BeXd5Lk1MTB0ODw8KAAAABAAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAP///////////////////////////////////////////////////8AB//////////////////AA - AAf///////////////8AAAAAf//////////////4AAAAAA//////////////wAAAAAAB//////////// - /gAAAAAAAH////////////gAAAAAAAAf///////////gAAAAAAAAB///////////gAAAAAAAAAH///// - /////wAAAAAAAAAAf/////////wAAAAAAAAAAD/////////4AAAAAAAAAAAP////////4AAAAAAAAAAA - B////////8AAAAAAAAAAAAH///////8AAAAAAAAAAAAA///////+AAAAAAAAAAAAAH///////AAAAAAA - AAAAAAA///////gAAAAAAAAAAAAAH//////gAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAH/////4AA - AAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAH////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAH// - //wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAA - AAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD//+AAAAAAAAA - AAAAAAAAA///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAA - AAAAAAAAAAAAAAD//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAA/ - +AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAA - AAAAH/AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAA - AAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAfAAAAA - AAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAD - gAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA - AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAA - AAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAD - AAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAA - AAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAA/AAAAA - AAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf - 4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAA - AAAAP/AAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAA//wAAAAAAAAA - AAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAA - AAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAA// - /8AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAA - AAB////4AAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAH/////AAAAAAAA - AAAAAAAD/////4AAAAAAAAAAAAAAB//////AAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAf//////AA - AAAAAAAAAAAAP//////4AAAAAAAAAAAAAH///////AAAAAAAAAAAAAD///////4AAAAAAAAAAAAD//// - ////gAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAAAAAAA - f/////////4AAAAAAAAAAf//////////gAAAAAAAAAf//////////+AAAAAAAAAf///////////4AAAA - AAAAf////////////gAAAAAAAf/////////////AAAAAAAf/////////////+AAAAAA///////////// - //8AAAAD////////KAAAAGAAAADAAAAAAQAgAAAAAACAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAE - AAAABQAAAAYAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAGAAAABgAAAAUAAAAEAAAAAwAAAAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAD - AAAABQAAAAcAAAAJAAAADAAAAA4AAAARAAAAEwAAABUAAAAWAAAAFwAAABgAAAAYAAAAGAAAABcAAAAW - AAAAFQAAABMAAAARAAAADwAAAAwAAAAKAAAABwAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAIAAAAEAAAABwAAAAoAAAAPAAAAEwAAABcAAAAcAAAAIAAAACQAAAAnAAAAKwAAAC4AAAAx - AAAAMgAAADMAAAA0AAAAMwAAADIAAAAxAAAALgAAACsAAAAoAAAAJAAAACAAAAAcAAAAGAAAABMAAAAP - AAAACwAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAAsAAAARAAAAFwAAAB0AAAAkAAAAKwAAADEAAAA1 - AAAAOQAAADwAAAA/AAAAQgAAAEUAAABHAAAASQAAAEoAAABKAAAASgAAAEkAAABIAAAARQAAAEMAAABA - AAAAPAAAADkAAAA2AAAAMQAAACsAAAAkAAAAHgAAABcAAAARAAAADAAAAAcAAAADAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAkAAAAPAAAAFgAAAB4AAAAn - AAAALwAAADYAAAA9AAAAQz05OXRTTU2XX1hYtGVeXslqYmLYbGVl5G9nZ+xwaGjxcGlp9HFpafVwaWn0 - cGho8W5nZ+xsZWXkaWJi2WVeXspeV1e2UkxMmjs3N3gAAABLAAAASAAAAEMAAAA9AAAANwAAADAAAAAn - AAAAHwAAABcAAAAPAAAACQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAJ - AAAAEQAAABkAAAAjAAAALgAAADcAAAA/Qj09eFtVVaptZWXTeHBw7n53d/WKhIT0mZSU96impvq0s7P9 - vby8/sTDw//IyMj/y8vL/87Ozv/Ozs7/zMzM/8nJyf/Ew8P+vry8/bOysvynpKT4mJSU9YuFhfaDfHzw - dW9v111WVq8+Ojp/AAAASwAAAEYAAABAAAAAOAAAAC4AAAAkAAAAGgAAABEAAAAKAAAABQAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAEAAAAEAAAACQAAABAAAAAbAAAAJgAAADEAAAA8RUFBemVeXrp6dHTpg31995mVlfuvrKz+ - vr29/8rKyv/MzMz/zc3N/83Nzf/MzMz/y8vL/8nJyf/IyMj/yMjI/8fHx//FxcX/xcXF/8XFxf/ExMT/ - xcXF/8bGxv/Hx8f/x8fH/8jIyP/Av7//trS0/qekpPuSjY34iYSE7XFsbMJAPDyDAAAATAAAAEUAAAA8 - AAAAMgAAACcAAAAcAAAAEQAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAcAAAAOAAAAGQAAACUAAAAyHhwcTFdRUZx7dXXi - hoCA+KKfn/24t7f/ycjI/8zMzP/Ozs7/z8/P/9fX1//e3t7/5OTk/+vr6//x8fH/9fX1//r6+v/9/f3/ - ///////////9/f3/+fn5//X19f/w8PD/6enp/+Li4v/Z2dn/0NDQ/8fHx//Dw8P/w8PD/8TExP/ExMT/ - uLe3/6uoqPyZlJT5joqK52tnZ60ZFxdcAAAASAAAAD4AAAAzAAAAJgAAABkAAAAPAAAABwAAAAMAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACwAAABUAAAAi - AAAALysoKFNnYWGxgnt775eSkvu1srL/x8fH/87Ozv/Ozs7/2NjY/+Pj4//s7Oz/9vb2/+3r6v/a1dP/ - wrq2/66hnP+ei4P/k3tz/4xwZv+JaF7/imZc/4xnXP+Oal//j25k/5Z3bv+ghX3/rJeR/72vq//Tycf/ - 6OPh//Px8f/r6+v/3t7e/9DQ0P/Dw8P/w8PD/8PDw//CwsL/tLGx/6SgoPuWkZHzfXl5wDAuLmgAAABI - AAAAPQAAADAAAAAiAAAAFQAAAAsAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAgAAAAcAAAAPAAAAHAAAACoUExNCZ2Bgq4R+fvGempr8u7q6/87Ozv/Pz8//2NjY/+Li4v/s7Oz/ - 6+nq/83Hxf+qnZj/kHpy/4ZnWv+LYFD/k19L/5leSv+dYEr/o19J/6lfSf+sX0j/r19I/7FfR/+yX0j/ - sWBI/7FeSf+vXkr/rF9M/6leS/+gXUz/lWBS/5pyaf+rkov/xrm0/+Xg3v/t7e3/4eHh/9DQ0P/Dw8P/ - w8PD/8PDw/+3tbX/paGh+5eSkvR7d3e8IB8fWgAAAEUAAAA5AAAAKgAAABwAAAAPAAAABwAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACQAAABMAAAAiAAAAMVNNTYuEfX3qnJiY+728vP/Pz8// - 0dHR/9ra2v/j4+P/5+fn/8O/vf+ai4T/g2VY/4lgUP+PWkX/l1g//55YQP+kWj//p1o//61bP/+wWz// - s1s//7ZdQP+3W0D/ultA/7xbP/++Wj//v1o+/79YPf/AWD7/wFg9/8JWPf/BVz7/v1hA/7pXQv+zWET/ - p1tM/5piVf+kf3f/wbGs/+fk4v/q6ur/2NjY/8XFxf/Dw8P/w8PD/7W0tP+hnJz7koyM7WhkZKAAAABL - AAAAQAAAADEAAAAiAAAAEwAAAAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALAAAAFgAAACY2MTFW - enR0zZGMjPm5t7f/0dHR/9PT0//Z2dn/4ODg/9fW1/+nn5v/gWpg/4RaSf+MV0D/klM5/5tTNv+iVTb/ - pVY2/6lXOP+rWTv/rlk8/7BaPv+xWz7/tFs//7VbP/+3W0D/ultA/7xaP/++Wj//v1o//8FZPv/CVzz/ - w1c8/8ZVOv/GVDj/yFM3/8lRNv/IUDf/xFE5/8BSPP+3VkP/qlpK/5tjV/+sk4z/19HO/+vr6//a2tr/ - xsbG/8PDw//Dw8P/sa+v/5WQkPmDfn7UQD09cgAAAEUAAAA2AAAAJgAAABYAAAALAAAABAAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AAAABQAAAA0AAAAZAAAAKlROToaHgYHvqqen/czMzP/S0tL/19fX/9zc3P/Q0NL/m5GM/3xgU/+CUTz/ - jE81/5NMMP+aTC//nlEw/6NSMv+kVDT/plY2/6lYOP+qWDv/rFk8/69aPv+xWz7/s1s+/7VbP/+3Wz// - uls//7xbP/+9Wj//vlo+/8BZPf/BWD3/w1c8/8ZVOv/GVTr/x1Q3/8lSNv/KUTX/y04z/8tNMf/LTDL/ - xk01/8FTPf+1WEX/nVtN/6eIgP/Sysj/6+vq/9fX1//Dw8P/w8PD/729vf+joKD8jIWF8F1XV5oAAABI - AAAAOgAAACoAAAAZAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADgAAABwAAAAtcWtrtI+Kive+vLz/1NTU/9bW1v/Z2dn/ - 29ra/56Wk/98X1P/f044/4pILP+SSCf/mEgn/5tLKf+dTSz/nk8v/6JSMf+kVDT/plU2/6hXOP+qWDr/ - rFk8/69aPf+xWz3/s1s+/7VbP/+3Wz//uVs//7tbP/+8Wj//vlo//8BZPv/BWD3/w1c8/8ZWO//GVTr/ - x1Q4/8lSNv/KUTX/y08z/8xNMv/NSzH/zUow/81JL//KSzD/xFA3/7dVQf+fXE3/qYyE/9nT0f/n5+f/ - 0NDQ/8PDw//Dw8P/sbCw/42Hh/Vwamq8FBQUTgAAAD0AAAAtAAAAHAAAAA4AAAAFAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAOAAAAHS8sLEd+eHjR - n5ub+czLy//V1dX/2dnZ/9vb2/+3tbT/f2lf/3xNOP+ERCn/jUIh/5NDIf+XRiP/mUgm/5pLKP+cTSv/ - nk4v/6JSMv+kUzT/plU2/6hXOP+qWDr/q1k7/65aPf+xWz7/s1s+/7RbP/+2Wz//uVs//7tbP/+8Wj// - vlo//79ZPv/BWD3/wlc9/8VWO//GVTr/xlU4/8lSNv/KUjb/y080/8xOMv/MTTH/zUww/81JL//NSi7/ - zUkv/8pJL//DUDj/s1dG/5thVP+1o57/7evr/9zc3P/ExMT/w8PD/7u6uv+Xk5P3fXd31Tg1NWcAAABA - AAAALwAAAB0AAAAOAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AAAABQAAAA4AAAAdQj4+WYN+fuGtqan71tbW/9jY2P/b29v/3Nzc/5OHgv96V0f/f0Qp/4k+Hf+OPRn/ - kkAc/5NCH/+VRSP/mEcl/5tKKf+cTCv/nk4u/6BRMf+jUzP/pVQ1/6dXOP+pVzj/q1k7/65aPf+wWj3/ - sls+/7VbP/+2XT//uV1A/7tbP/+8Wj//vVo//79ZPv/AWD7/wlg9/8VXPP/GVjr/xlU6/8dTN//JUjb/ - ylE2/8tPM//MTTP/zE0x/81MMP/NSi//zUkv/85ILP/NSS3/yEsx/8BTPv+qW0r/n3lw/9DIxf/m5ub/ - zMzM/8TExP/CwsL/oZ2d+oF6euFHRER3AAAAQQAAAC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADQAAABxJRERhhYCA6Lazs/zY2Nj/2tra/93d3f/Hxsf/ - gm5m/3tJM/+DPB7/ijgU/446Ff+QPRn/kj8c/5NCHv+VRSP/mEcl/5pKKP+cSyr/nk0u/6BRMf+jUzP/ - pFQ1/6ZWN/+pVzj/q1g7/65aPf+wWz7/s10//7RbP/+0Wj3/tlo+/7pbP/+9XUD/vltA/79ZPv+/WT7/ - wVg9/8NXPP/FVjv/xlU6/8dUOP/IUjb/yVE2/8pPNP/MTzT/zE0y/81MMf/NSzD/zUow/85JL//NSS7/ - zUku/8tJLf/ETzf/t1hG/5phVP+5q6b/6unp/9PT0//ExMT/xMTE/6elpfuDfX3nVVFRggAAAEEAAAAv - AAAAHAAAAA0AAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAGUpFRWCGgIDp - u7i4/dra2v/c3Nz/39/f/7Svrv98X1L/fEIp/4U4F/+LNRD/jDcR/446Ff+QPBn/kT4a/5JBHf+URSH/ - l0cl/5pIJ/+cSyr/nU4s/59PMP+iUjL/o1Qz/6ZWNv+pVzj/q1g7/6xYOP+lTzL/mkks/5VIL/+QRi// - j0Ur/5FAJ/+bRSn/r1E1/75aPv/AWj//wVk+/8JXPf/DVzz/xVY7/8ZVOv/GUzf/yFM3/8pRNv/KUTX/ - yk80/8xNM//MTTL/zEww/81LMf/NSzD/zUsv/81KL//MSjD/x000/75VQP+jXk//qJCJ/+jl5P/Z2dn/ - xMTE/8TExP+sqan8g3x86VhUVIIAAABAAAAALQAAABoAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAgAAAAkAAAAXRUBAVYeAgOi9urr929vb/9/f3//h4eH/rKaj/3tXR/9/QSX/hzUT/4k0D/+LNQ// - jDYQ/444FP+PPBj/kT4a/5JBHf+UQyD/l0Yj/5lJJv+bSyn/nE0r/59PL/+gUTH/o1Mz/6ZVNv+oVzf/ - pU8w/5tOMv+falb/rIyB/7ujnf/Br6n/vqij/7GTi/+bb2L/hUEv/5I9Jf+1VDr/wls//8FYPf/DVzz/ - xVc7/8ZVOv/GVDj/x1M3/8lSN//JUjX/ylE1/8tPNP/MTjP/zE0y/8xMMf/MTDH/zUwx/81MMP/MTDD/ - zEww/8lMMv/AUz3/q15O/518c//e29n/3Nzc/8XFxf/ExMT/qqio/IR/f+hUUVF6AAAAPgAAACoAAAAX - AAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAABM1MTE/hoCA4bi2tvzc3Nz/4ODg/+Pj4/+nn5v/ - elE+/4E+IP+INRH/iTMO/4kzD/+LNQ//jDYQ/404E/+POxX/kD0Z/5JAHP+TQh//lUUh/5lIJv+bSij/ - nEwr/51OLv+gUTH/o1Mz/6VVNf+iTS7/pGJK/8CooP/Z1tb/4ODh/+Df4P/g39//4t/h/+Tl5v/p6On/ - 0sXC/5RoWv+GNyH/s1M4/8FZPv/BVzz/w1c8/8ZWO//GVTr/x1Q4/8hTN//JUjf/ylI2/8pPNf/LTzT/ - y080/8xOMv/MTjL/zE0y/8xMMf/MTDH/zEwx/8tNMf/JTTL/wlM7/7FdTP+Xcmj/2NPS/9zc3P/FxcX/ - xcXF/6impvuEf3/jSkhIbAAAADsAAAAnAAAAFAAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADwAAACKDfHzR - sK2t+97e3v/i4uL/5eXl/6ujn/98UkD/gz0f/4o0EP+MMw3/jDQO/4szD/+MNA//jDYP/403Ev+POxX/ - kDwY/5E/G/+UQR7/lEMh/5hHJP+aSSf/m0sq/55NLP+fTzD/o1Mz/59MK/+oalH/zsPA/97e4P/Y1dX/ - 1c/P/9XPz//Vz8//1c/P/9bR0f/Y09P/5uXo/+3r7P+ed2v/izcg/7xXPf/CWT7/wVg9/8NXPP/FVjv/ - xlU6/8ZUOv/HVDf/yFM3/8lSNv/JUjX/ylI2/8pPNP/KUTT/y080/8tOM//LTjP/yk4z/8tOM//LTjP/ - yU80/8JTO/+wXk3/lG5k/9jU0//c3Nz/xcXF/8XFxf+hn5/6hYGB1jAwMFUAAAA3AAAAIgAAABAAAAAF - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAIAAAALAAAAHHdxcbKkoKD53t7e/+Tk5P/n5+f/tq+t/4BVQ/+EPyH/izQP/40zDf+MNA3/ - jDQO/4s0D/+MNRD/jDYP/402Ev+OOhT/jzwX/5E+Gv+SQR3/lEMg/5dGI/+ZSSb/mkop/51MK/+eTy// - n0wr/6RZPf/Lu7X/2Nnd/9LMzP/Pysr/z8rK/87Jyf/Oycn/z8rK/9HLy//Tzc3/0szL/+Ti4//q5uT/ - jlZH/6NHLv/DWj//wVg+/8JYPP/DVzz/xVc7/8ZWOv/HVTr/x1Q4/8hTN//IUjf/yVI3/8lSNv/KUjX/ - yk81/8pRNf/KUTT/yk80/8pPNP/JTzT/yk80/8lPNf/AVDv/sF9N/5VwZv/e3Nv/2dnZ/8bGxv/ExMT/ - l5SU93x3d8IhISFNAAAAMgAAABwAAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAVW1VVfJSPj/fV1dX/5OTk/+rq6v/Dvr7/ - h2JR/4RAIP+MNhD/jTMN/40zDf+MNA3/jTUO/401Dv+NNRD/jTUQ/402Ef+OOhT/jzwX/5A9Gv+SQB3/ - lEIf/5dGI/+YSCb/mkoo/5xMK/+eTSz/nUkn/7mLev/V1df/zsrK/8zHx//Lxsb/ysXF/8nDw//Jw8P/ - ysXF/8vGxv/NyMj/0cvL/9HLy//v8fP/waef/448Jf+9WD3/wVk+/8FYPf/CWD3/w1c8/8VWO//GVTr/ - xlU6/8dUOP/IVDf/yFM3/8hTN//JUzf/yVI2/8lSNv/JUjb/ylI2/8lRNf/JUTX/yVE1/8hRNf/HUTb/ - wFU9/61eTf+afnX/6uno/9XV1f/Gxsb/vby8/42IiPVtaWmgAAAAQAAAACsAAAAWAAAACAAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA9DPz9F - joiI78jGxv/k5OT/6+vr/9XU1v+QcWP/gz8i/443Ef+PNA3/jzQO/440Df+NNA7/jTUO/441D/+NNQ// - jTYQ/402EP+OOBP/jzsV/5A+GP+RPxv/k0Ee/5RDIf+YRiT/mUgn/5tLKf+cSij/n1Ex/8Wro//PztH/ - ycLC/8fBwf/GwMD/xb+//8W/v//Gv7//xb+//8fBwf/JwsL/y8bG/83IyP/f3+D/3tPP/5RMOv+1Ujb/ - wFtA/8BZPv/BWD7/wVk9/8JYPf/FVzz/xlY7/8ZWOv/GVTr/x1U6/8dUOP/HVDj/x1M4/8hUN//IVDf/ - yFM3/8hTN//IUjf/x1I3/8dTN//HUzb/xlI3/71YP/+lYFH/ppGK/+vr6//Pz8//xsbG/7Oxsf+KhYXv - VVNTdgAAADkAAAAjAAAADwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAACAAAACQAAABmFf3/MtbGx/OXl5f/r6+v/6urq/5+Kgv+ERiz/jjkU/5A1Dv+QNQ7/ - kDUO/481Dv+NNA7/jTUO/441D/+NNRD/jjYR/442EP+OOBL/jzoV/5E9F/+RPhr/k0Ad/5NCH/+XRiP/ - mUcn/5tKKf+aSCX/n1Q1/8Wzrv/Kycv/xb6+/8K9vf/BvLz/wLu7/8C7u//Bu7v/wbu7/8O9vf/Fv7// - yMHB/8nDw//X1db/493a/5tZR/+yTjL/wFtA/79aPv+/WT7/wFk+/8JYPf/DVz3/w1c9/8VWPP/GVzv/ - xlY7/8ZWOv/HVTr/x1U4/8ZVOv/GVDj/xlQ4/8dUOP/HVDj/xlQ4/8ZTOP/HVDf/x1M3/8VUOP+6WkT/ - nWFS/7erp//n5+f/x8fH/8fHx/+koKD8h4KC1S0tLU8AAAAwAAAAGgAAAAkAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEV1XV3ublZX54eDg/+zs7P/t7e3/ - pJmU/4dQOP+MPRn/kjYP/5E2D/+QNQ//kDUP/5A0Dv+ONQ7/jjUO/481D/+PNRD/jjYQ/442EP+PNxH/ - kDoU/5A8F/+SPhn/kj8c/5NCH/+VQyH/l0cl/5pKKP+aRyT/n1Mz/8Cvqf/Gxcf/wbu7/7+6uv+/ubn/ - v7m5/765uf++ubf/vrm5/8C6uv/BvLz/xb6+/8fAwP/V0tP/49zZ/55dSP+xTzL/v11A/75aP/+/Wj7/ - wFk+/8BZPv/CWT7/wlg9/8NYPP/DVzz/xVc8/8VWO//GVjv/xlY7/8ZWOv/GVTr/xlU6/8ZVOv/GVTr/ - xlU4/8ZVOP/FVDr/xlQ4/8VUOP/CVTr/tl1I/5JjVf/Qysj/3t7e/8fHx//BwcH/kYuL93FsbKIAAAA9 - AAAAJgAAABEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAK - JSIiJZCKiurPzc3/7u7u//Ly8v/FwsL/j2VT/4w+Hv+TNxH/kzcQ/5M3EP+SNg//kTUP/5E1D/+QNg// - kDUP/482D/+PNhD/jzYQ/482Ef+PNxH/kDgT/5E7Ff+SPRn/kz8b/5NCHf+VRSD/l0cj/5lJJv+ZRiX/ - nU4v/76lnf/DwsX/vrm5/723t/+8trb/vba2/7y2tv+8trX/vLa2/763t/+/ubn/wry8/8K9vf/W1tf/ - 4dTR/6JWPv+1VTj/vFs//71bP/+9Wz//vlo//79aPv/AWj7/wFk+/8FZPv/CWT7/wlk+/8JYPf/DWD3/ - w1c8/8ZXPP/GVzz/w1c7/8VWPP/FVjz/xVY7/8NWO//DVjv/w1Y7/8NVOv/CVjr/vlc+/61gTf+WeXD/ - 8O/v/9PT0//IyMj/srCw/4uGhupCQUFeAAAAMwAAABwAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAUAAAARdnBwoKynp/vw8PD/8/Pz//Dw8P+SeW//jEUo/5Q7FP+VOBD/ - lDgQ/5Q3EP+TNxD/kjYQ/5I2D/+RNg//kTUP/482D/+QNhD/kDYQ/5A2Ef+PNxH/kDgS/5E6Ff+SPBj/ - kj4a/5NBHf+VQiD/l0Yh/5lIJf+aSSb/mUUj/7GDcf/CwsP/vLe3/7y1tf+7tLT/urS0/7qzs/+7tLT/ - u7S0/722tv++t7f/wbu7/8C7u//l6er/zKui/6RLMP+6W0D/ultA/7tbP/+8W0D/vVs//75aP/++Wj// - v1o//8BZPv/AWT7/wVk+/8JZPv/CWT7/wlg+/8NYPf/DVz3/wlc9/8JXPP/CVzz/wlc8/8NWPP/DVzz/ - wlc8/8FXO//CVjv/wFU7/7paQv+fYVD/saOe/+np6f/IyMj/yMjI/5qVlfp9eHi5CAgIQAAAACcAAAAR - AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAlDPj41kYuL8trZ2f/09PT/ - 9fX1/6WcmP+LUTj/kz4a/5g6Ev+VOBH/lTgR/5U3EP+TNxD/kzcQ/5M2D/+SNg//kTYP/5A2D/+QNw// - kDcQ/5A2Ef+QNxH/kDcR/5I6FP+SPRj/kz4Z/5M/HP+VQh7/l0Ug/5hHJP+ZSSf/mUYj/6BWN/++q6f/ - vr7A/7qysv+6s7P/urOz/7qzs/+6s7P/urS0/7y1tf+8trb/vLW1/9LS0//o397/rmVP/7FVN/+3XkH/ - t1tA/7pbP/+7W0D/u1tA/71bP/+9Wz//vlo//79aP//AWj7/v1o//8BZPv/AWT7/wVk+/8FZPv/BWT7/ - wlg9/8FYPf/BWD3/wlg8/8FYPP/BWDz/wFc8/8FXPP/BVzz/wFc7/75YPP+zXkn/j2JU/9vX1f/b29v/ - ycnJ/7i2tv+KhYXyUE5OawAAADIAAAAbAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAwAAAA95cnKls6+v/Pf39//4+Pj/4+Hk/4tmVv+QRCX/mTsV/5k7E/+YOhH/lzoR/5c6Ef+VOBH/ - lDgR/5Q4EP+TNxD/kzcQ/5I2D/+RNxD/kTcR/5E3Ef+QNxL/kTgS/5E6E/+SOxf/kz0Y/5NAGv+VQR3/ - lUMf/5hGIf+ZRyX/mkko/5lFIf+nZkv/v7Gu/7++wP+7tbb/ubOz/7ezsv+6s7P/ubOz/7q0tf+9urv/ - 0tPV/+bh4f+8g3D/qlEy/7VdQP+0Wz//tVtA/7ddQP+5W0D/ultA/7tdQP+8W0D/vFtA/71bQP++W0D/ - vls//75aP/+/Wj//v1o//79aP//AWj//wFo+/8BZPv+/WT7/wFk+/79ZPv+/WT7/v1g+/79YPf+/WD3/ - v1g8/75XO/+5WT//pWBO/6GKgf/u7u7/zMzM/8nJyf+dmZn7fHd3vQgICD4AAAAkAAAADwAAAAQAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABzk0NCiRjIzw3t3d//n5+f/5+fn/nJCL/4xOM/+WPhn/ - mzwT/5s7E/+ZOhL/mToS/5g6Ef+XOhH/lzoR/5U4Ef+UNxD/lDcQ/5M2EP+SNxD/kTcQ/5I4Ef+RNxL/ - kjcS/5E4Ev+TOhX/kzwY/5M/Gf+UQBz/lUIe/5hFIP+ZRiT/mkgm/5tKKP+aRSD/pmBD/7qbkP/Bu7r/ - wL/B/7+/wP/Av8H/w8PG/8vLzP/X1dX/18C5/7l4Yf+pUTH/slo9/7NbP/+zWz//tFs//7ZdQP+2XUD/ - t11A/7pdQP+6W0D/u1tA/7xdQP+9W0D/vVtA/71bP/++W0D/vls//75aP/++Wj//vlo//79aP/++Wj7/ - v1o+/79ZPv+/WT7/vlk+/75ZPf++WT3/vlg9/75YPf+8WD3/s11G/5FfT//Tzsv/3t7e/8rKyv+4t7f/ - ioWF8ERDQ2AAAAAuAAAAFwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADGVeXoerp6f6 - +/v7//z8/P/o5+j/jGhZ/5dLKf+cPBT/nDwT/5s8E/+aOxP/mjsT/5k7Ev+YOhL/mDoR/5c4Ef+UOBH/ - lDgR/5Q3EP+TNxD/kjgQ/5M3Ef+SNxL/kjgS/5E4Ev+TOhP/kzwX/5Q+GP+UQBv/lUEd/5hDIP+YRiP/ - mUcl/5pJJ/+cSin/m0ck/55MKf+qaU7/toh4/7yYjP+8mY7/wZ+S/8OYh/+3eWL/qlg6/6hRMf+uWTz/ - r1o9/7FbPv+yWz//s1s//7VdP/+1XUD/tl1A/7ddQP+5W0D/uVtA/7tdQP+7XUD/u1tA/7xbQP+8W0D/ - vFtA/71bP/+9Wz//vVo//75bP/+9Wj//vVo//71aPv++Wj7/vlo+/71ZPv+9WT7/vFk9/7xYPf+9WDz/ - uFk//6ZeSv+ehn3/8O/v/83Nzf/Kysr/mJSU+XRubqoAAAA4AAAAHwAAAAwAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAEAAAAEY6Hh+HY1dX//f39//z8/P+lnJn/lFlB/6JOKv+fPxj/nT0T/509FP+cPBT/ - mzwT/5o8E/+ZOxL/mTsS/5g6Ev+XOhL/lzgR/5U4Ef+VNxD/kzgR/5M4Ef+TOBL/kjgS/5I4Ev+TOhP/ - lDsU/5Q8GP+VPhn/lUAb/5hCHv+YRSD/mEYj/5pIJf+bSSj/nEwp/51MKv+cSCb/nkko/6BMKf+iTSv/ - o04u/6RNLP+kTi7/qVY2/6tZO/+sWTv/rFk8/69aPf+wWj7/sVs+/7NbP/+zWz//tF0//7VdQP+2XUD/ - tl1A/7ldQP+5XUD/uV1A/7pdQP+6XUD/ultA/7tbQP+7Wz//u1tA/7xbQP+7W0D/u1s//7taP/+8Wj// - vFo+/7taPv+7Wj7/u1k+/7pZPf+7WTz/uVg9/7JdRf+MXE3/2tbU/97e3v/Ly8v/tLKy/4mEhOQqKipI - AAAAKAAAABEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHXlhYWpeRkfj39/f//v7+//z8/P+NcGP/ - oVg4/6lRK/+kRyD/nj0U/54+FP+dPRT/nD0U/5w8FP+aPBL/mjsT/5k6Ev+YOhL/mDoS/5c4Ef+VOBH/ - lTgQ/5Q4Ef+UOhH/lDgS/5M4E/+TOhP/lDoT/5Q9F/+UPhn/lT8a/5hCHf+YQx//mEYg/5pHJP+aSCb/ - nEsn/51NKv+fTy7/n08v/6BPMP+iUjD/o1Iy/6VVNf+nVjf/qFc3/6lXOv+qWTr/q1o8/65ZPP+vWj3/ - sFo+/7FbPv+yWz//s1s//7RdP/+1XUD/tV1A/7ZdQP+2XUD/t11A/7ldQP+5XUD/uV1A/7pbQP+6W0D/ - ultA/7pbP/+6Wz//uls//7paP/+6Wj//ulo//7paPv+6Wj7/uVk9/7lZPf+5WT3/t1g8/7VaP/+hXkn/ - pZKL/+3t7f/MzMz/x8fH/46Hh/dkYGCJAAAAMAAAABgAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAL - dm9vqr+7u/3//////////7u2tf+RXEX/qVYz/6pRKv+pTSj/o0Ib/54+FP+ePRX/nT0U/509FP+cPBT/ - mzwT/5o8E/+ZOhL/mToS/5g6Ef+XOhL/lzgQ/5U4Ef+UOhL/lToS/5Q4E/+UOhP/lDoT/5U8Ff+VPhn/ - lT8a/5VAHP+YQh7/mUUg/5lGI/+aSCX/m0on/55MKP+gTiv/n04u/6JRMP+kUjH/o1Iy/6ZUNP+nVTb/ - qFY2/6lXOP+pVzr/qlg6/6tZPP+sWj3/rlo9/69aPf+wWz7/sVs//7JdP/+zXT//tF0//7RdQP+1XUD/ - tV1A/7ZdQP+2XUD/tl1A/7ddQP+3XUD/t1tA/7lbQP+5Wz//uVs//7lbP/+5Wz//uVs//7laPv+3Wj7/ - t1k9/7dZPf+3WT3/tlg8/7RYPf+sXkf/i2JU/+ro6P/X19f/zMzM/6Whofx+d3fCAAAANwAAAB4AAAAM - AAAAAgAAAAAAAAAAAAAAAAAAAAMAAAAPjIWF6OHg4P///////////5SCev+fWz//rVQv/6xRK/+sUiv/ - p0ok/6A/Ff+gPhX/nz4V/54+Ff+dPRT/nTwU/5w9E/+bOxP/mjsS/5o7Ev+ZOxL/mToR/5c4Ef+VOhL/ - lzoS/5U6Ev+VOhP/lTsU/5Q8E/+VPBf/lT0Y/5c/Gv+XQR3/mEIe/5pFIP+bRiT/lD8c/4Y3F/9/NRX/ - gDYY/4E3Gv+COBv/gjoc/4Q8Hv+DOx7/hj0g/5dMLv+nVjf/qFc4/6pYOv+rWTv/q1k7/6xaPf+uWj3/ - r1o9/7BbPv+xWz7/sls+/7JbP/+zWz//s10//7RbP/+0XT//tF0//7VdQP+1Wz//tV0//7ZbP/+2Wz// - tls//7ZbP/+2Wj7/tlo+/7ZaPv+1Wj3/tVk9/7VZPf+1WTz/tFg7/7RYO/+vWkH/lVtJ/72zr//l5eX/ - zc3N/7q4uP+LhYXsMTExSAAAACUAAAAPAAAAAwAAAAAAAAAAAAAAAAAAAAVfWFhTlI6O9/v7+/////// - 8fDx/41mVv+oWjv/r1Ms/65SK/+uUiv/rFEr/6ZHHv+gPxX/oD8X/58+Ff+fPRX/nj0V/509E/+dPRT/ - mzwT/5s8E/+aOxP/mTsS/5k6Ev+YOhL/lzsS/5c6E/+VOxP/lTsU/5U7E/+VOxT/lz0Y/5c/Gv+YQBv/ - mEEd/5lDHv+aQyD/o2lR/5x/cv+UeW7/lXlv/5d7b/+YfHL/mn10/5yBd/+iiH3/lXdq/3lCLP+XSy7/ - qVc4/6hXOP+pVzj/qlg6/6tZPP+rWjv/rFo8/65aPf+wWz7/sFs+/7FbPv+xWz//sls//7NbP/+zWz// - s10//7NbP/+0Wz//tFs//7RbP/+0Wz//tFs//7RbPv+0Wj7/tFo+/7RaPv+0Wj3/tFk9/7RZPf+0WTz/ - s1g7/7NYO/+xWDz/oVtE/5d9c//x8fH/zs7O/8zLy/+Nh4f4ZmFhgwAAACwAAAAUAAAABQAAAAAAAAAA - AAAAAAAAAAdqY2OSs6+v+v7+/v/+/v7/uLOx/5hgSf+uWjb/sFMu/7BSLP+uUiz/rlIs/6tRKf+kQhv/ - oj4V/6A+F/+fPhX/nz4V/549Ff+dPRT/nT0U/5w8E/+bOxP/mjsT/5k7E/+ZOhL/mDsS/5g7Ev+XOhP/ - lzsU/5c8E/+VPBT/lzwV/5c+GP+YPxr/mEAc/5c/Gf+dTiv/x7m1/87R1P/Ny83/zczN/87Nzv/PztH/ - 0tHS/9XU1f/a2t3/3t7f/5JvYf+JPiH/p1U1/6dWN/+nVzj/qFc4/6lYOv+qWDv/q1k7/6xaPP+uWTz/ - rlo9/69bPf+vWj3/sFs+/7FaPv+xWz//sVs//7JbP/+yWz//sls//7NbP/+zWz7/s1s+/7NbPv+zWj7/ - s1o9/7NaPf+zWj3/slk9/7JYPP+yWDv/slg7/7JXOv+xVzr/p1k//4hfUP/n5eT/2dnZ/8/Pz/+fm5v5 - d3FxtQAAADIAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAp7dHTL0s/P/v39/f/9/f3/mYqE/6JdQf+xWTX/ - sVUu/7FULv+wUy7/r1Ms/69TLP+qTij/pEEZ/6I/F/+iQBf/oD8X/6A/F/+fPhX/nz4V/54+FP+cPRT/ - nDwU/5s8E/+aOxP/mjsS/5k8E/+ZOxP/mDoT/5g8FP+YPBT/lzwU/5c8F/+YPxn/mEAa/5c8F/+fUTH/ - ysC+/8zJyf/KxcX/y8XF/8vHx//Mx8b/zcnI/87Kyv/Tzcz/3drd/5p4bP+HPR//plQz/6VUNf+mVTb/ - plY2/6dWN/+oVzj/qVc4/6pYOv+rWTv/q1k7/6xaPP+sWjz/rlo8/69aPf+vWT3/r1o9/7BaPf+wWj3/ - sFo+/7FaPf+xWj3/sVo9/7FaPf+xWj3/sVk9/7FZPP+xWTz/sFg8/7BYO/+wWDv/sFc6/7BXOP+wVjj/ - qlg7/49XRP++t7T/4uLi/8/Pz/+zsbH+gnx82AoKCjgAAAAdAAAACgAAAAEAAAAAAAAAAAAAAAyFfn7u - 6Ofn//v7+//8/Pz/j3Jn/61ePv+1WDL/s1Yv/7NWL/+xVS//sVUv/7BULv+vVC//qk0m/6RBGP+jQBf/ - o0AX/6I/F/+gPhX/nz4V/54+FP+dPRT/nT0U/5w9FP+bPBP/mjsT/5k8E/+ZOxP/mTsU/5g8Ff+ZPBT/ - mDwU/5g8Ff+YPRj/mD8Z/5c8FP+fUS//zMLA/8/Mzf/OyMn/zsnJ/87Jyf/Oycn/z8rK/9HMzP/Vz8// - 3trd/5h4bP+COhz/pFIy/6RTM/+kVDT/pVQ1/6ZVNv+mVjf/p1Y3/6hXOP+pWDr/qVk6/6pYO/+rWTv/ - q1k7/6xZPP+sWTz/rlo8/65aPf+uWj3/rlo9/69aPf+vWj3/r1k8/69ZPP+vWTz/r1k8/69YO/+vWDv/ - r1c7/69XO/+vVzr/rlc4/65WN/+uVjf/rFY5/5hUPf+ci4T/6Ojo/9DQ0P/DwsL/hX9/8CAgID8AAAAg - AAAADQAAAAIAAAAAAAAAAGFbW0mMhob1+fn5//r6+v/g39//k2dW/7VhQP+2WDL/tVYw/7RWMP+zVi// - slUv/7FVL/+xVS//sFUv/6pLJP+kQRj/pEAX/6RAF/+iPxX/oD8X/6A+Ff+ePhX/nj4V/589FP+cPRT/ - nDwT/5o7E/+aPBP/mjwU/5o7FP+ZPBX/mT0V/5k9FP+ZPRf/mD0Y/5c7E/+fTiz/zsK//9LP0f/Ry8v/ - 0cvL/8/Kyv/Ry8v/0cvL/9LMzf/Tzc3/3tzd/6eQh/93NBr/nk0u/6NTMv+kUzP/pFQz/6VVNf+kVTX/ - pFU2/6dWN/+nVzf/qFc4/6lXOP+pWDr/qVg6/6pYOv+rWTv/q1k8/6tZO/+rWTv/rFk8/6xZPP+sWTz/ - rFk7/65YO/+uWDv/rlg4/65XOv+uWDv/rFc6/6xXOP+sVzj/rFY3/6xWN/+sVTb/qlU3/55VPP+KbWL/ - 6unp/9LS0v/R0dH/hoCA9VZRUXEAAAAkAAAADwAAAAMAAAAAAAAAAGliYneemZn19vb2//f39/+7tbP/ - mWBJ/7diPv+2WDH/tVgx/7VXMf+0VjD/tFYw/7NWL/+yVS//sVUv/7BUL/+qSyT/pUAY/6VBGP+kQBj/ - o0AY/6JAF/+gPxX/nz4V/58+Ff+ePRX/nT0V/5w9E/+cPBP/mz0U/5o8FP+aPBX/mj0V/5o9Ff+ZPRX/ - mT0X/5c6E/+dSSX/y7qz/9TS1P/Ry8r/0cvL/8/Jyv/Rysr/0crK/9HLy//Ry8v/2NXW/8O3tP9wOiT/ - kUMk/6RTMf+iUTH/olIx/6NTM/+kUzP/pFQ0/6VUNf+kVTb/plU2/6dWNv+nVjf/p1Y3/6hWN/+pVzj/ - qVc4/6lXOP+pVzj/qlc6/6pXOv+qVzr/q1c6/6tXOv+rVzj/q1c4/6tWOP+rVjj/qlY3/6tWN/+qVTb/ - qlU1/6pUNf+qVDX/qlM0/6JVOv+DWEj/3NrZ/9fX1//S0tL/kYuL82dhYZcAAAAoAAAAEQAAAAQAAAAA - AAAAAG1lZZyxra339PT0//X19f+jmZX/pV9E/7pgPP+3WDH/t1ky/7ZYMv+2VzH/tVcx/7RXMf+zVjD/ - s1Yw/7JWMf+xVjD/qksk/6VBGP+lQRj/pEEY/6NAF/+iPxf/oD8V/58/F/+fPhX/nz4V/549Ff+dPBT/ - nDwU/5s9FP+cPBT/mz0V/5o9Ff+aPhX/mj4X/5k7E/+ZPhj/w6ed/9TU1v/Pysn/z8rJ/87IyP/NyMj/ - zcjI/83HyP/NyMj/zsnJ/9jV1v+Mal3/ci4R/59OLv+iUS//olEv/6NSMf+jUjL/o1Iy/6NTMv+jUzP/ - o1Q0/6RVNf+lVTX/plU2/6dWNv+nVjb/p1Y2/6dWN/+oVjf/qFc3/6hWN/+pVjf/qVY3/6lWN/+pVjf/ - qVY3/6lVNv+pVTb/qVU2/6lVNv+pVTX/qVQ0/6hTNP+pUzT/qFIy/6RUNv+IUz7/xsG//9vb2//T09P/ - n5ub9mtlZbQAAAArAAAAEwAAAAUAAAAAAAAAAG9nZ7jBvr768vLy//Pz8/+XhoD/q2FE/71fPf+6WTP/ - ulkz/7pZNP+3WTP/tlgy/7VXMv+0VzL/s1cx/7NWMf+zVjH/sVYx/6tNJf+nQhn/pUAY/6ZBGf+lQBj/ - pEAX/6I/F/+gPhX/oD4V/58/Ff+ePRX/nT0U/5w9FP+cPBT/nTwV/5s8F/+bPRX/mj0V/5k8FP+XNg3/ - u5CA/9PT1v/Mx8f/y8bG/8rFxf/KxcX/ycPD/8nCwv/Jw8P/ysPD/9LOz//GvLn/cEAr/381GP+gTy7/ - ok8u/6BPL/+gUTD/olEw/6NSMf+jUzL/o1Iz/6NTM/+jUzP/pFQ0/6VUNP+lVTX/plU1/6ZVNf+mVTb/ - plU2/6dVNf+nVTb/p1U2/6dVNv+nVTX/p1Q1/6dUNf+nVDX/p1Q0/6dSNP+nUzT/p1Mz/6dSM/+nUjL/ - p1Ex/6VUNf+LTzj/rqWh/9zc3P/T09P/rqqq+m9pacoAAAAuAAAAFQAAAAYAAAAAAAAAAHBoaMvOzMz9 - 7+/v//Dw8P+TeW//s2VG/71gO/+8WzX/ulo1/7pZNP+5WTP/uVgz/7dYM/+2VzL/tVcy/7RXMv+0VzH/ - s1cw/7FXMf+uTif/p0Ia/6ZBGP+lQRj/pEEY/6NBGP+jQBf/oj8X/6A+F/+gPhX/nz4V/549FP+dPhX/ - nT0V/509Ff+cPhf/nD4X/5s+Ff+YNg3/rm5V/83MzP/JxcX/yMLC/8fAwP/Gv7//xsC//8W+v//Fv7// - xr+//8W/v//U09T/tqag/2k0Hv+ANhf/n00r/6BPLP+fTi7/n08s/6BPLv+gUTD/oFEw/6BRMf+iUjH/ - olIy/6NSMv+jUzL/o1My/6RTM/+kUzP/pFMz/6VTM/+lUzT/pVM0/6VTNP+lUzP/pVMz/6VTM/+lUjP/ - pVIy/6VSMv+lUTL/pVEx/6VRMf+lTzD/pU8v/6NRMv+OUDf/mouF/93d3f/U1NT/urm5/XFpadgAAAAx - AAAAFgAAAAYAAAAAAAAAAHFpadvY19f+7e3t/+7u7v+PcWT/u2hG/75gOP+9XTX/vFs1/7tbNf+6WjT/ - ulk0/7lZM/+3WDP/tlcz/7ZXMv+1VzL/tFcx/7NXMf+zVzL/r1Eq/6lFHP+mQRf/pkEZ/6VBGf+kQBj/ - o0AY/6NAGP+gPxf/nz8V/58+Ff+ePhT/nT4V/549F/+dPhf/nD0X/5w+F/+aNw//ok0p/8OzsP/Hxcj/ - w729/8K9vf/Au7v/wbu7/8C6uv+/urr/v7q6/8C6uv/Cvb3/1tXW/7enoP9qNR3/fTQV/55MK/+gTSv/ - n00r/59OLP+fTS7/oE8u/6BPL/+gTzD/oFEw/6BRMP+gUTD/oFEw/6JRMf+jUjH/o1Ix/6NSMv+jUTL/ - o1Ix/6RSMv+kUjL/pFIx/6NRMf+jUTH/pFEw/6NPMP+jTzD/o08w/6NPL/+jTi//o04u/6JOMP+TTzX/ - inhw/93d3f/V1dX/xcTE/nFra+QAAAAyAAAAGAAAAAcAAAAAAAAAAHJqauXh4OD/7e3t/+3t7f+QbV7/ - wGtI/8BfN/++XTX/vV01/7xbNf+7WjT/ulo0/7pZNP+5WTP/uVgz/7dYMv+2WDL/tVcy/7RXMv+zVzH/ - s1gy/7BTLP+qSB//p0EZ/6ZCGf+lQRn/pEEY/6RAF/+kQBf/oj8X/6M+Ff+fPhT/nz4V/50+Ff+ePhf/ - nT4X/5w/GP+dPRT/mzgO/7SFdP/Dw8f/v7q7/765uf+9t7f/vbe2/7y0tP+7tbX/u7W1/7y2tv+9trf/ - wLu7/9rY3P+9q6b/bjgk/3kwEv+cSij/oEwq/55MK/+eTCv/nk0r/59NLP+fTi7/n04u/59PLv+gTy7/ - nk8v/6BOL/+gTy//oE8w/6BPMP+iTzD/ok8w/6JPL/+iTzD/ok8w/6JPL/+iTy//ok4v/6JOL/+iTi7/ - ok4u/6JNLv+iTSz/ok0r/6FNLf+UTTL/g21l/9zc3P/W1tb/zczM/3JqausAAAAzAAAAGAAAAAcAAAAA - AAAAAHJqauzl5eX/7Ozs/+zs7P+Ta1z/xG1I/8FgOP/AXjb/v142/75dNf+9XTX/vVs1/7tbNf+7WzX/ - u1s0/7paNP+5WjT/t1k0/7ZYM/+1WDL/tFgy/7RYM/+yVTD/rEwl/6dDGv+mQBj/pkIZ/6VBGf+kQBj/ - pEAY/6NAGP+iPxf/oj8X/58/Ff+ePxf/nz8X/54+F/+dPxj/mzgP/6RRLv++sK7/vbu9/7q0tP+6s7P/ - ubOz/7mysv+5srL/ubKy/7eysv+6s7P/vLW2/7+5uf/e3N//zsG9/3hJNf9wKAv/mEYk/59MKf+eSyj/ - nUsp/55MKv+eTCr/nkwr/55NKv+eTSv/nk0s/55MLP+eTSz/nk0u/55MLP+fTS7/n00u/59NLP+fTS7/ - n00s/59NLP+fTSz/n0wr/59MK/+fTCv/n0wr/59LK/+fSyr/n0sp/59LKv+VSi7/gGhe/9zc3P/X19f/ - 0tLS/3Nra/AAAAA0AAAAGAAAAAcAAAAAAAAAAHJqau/p6Oj/6+vr/+vr6/+Xa1r/x29L/8JhOv/BXzb/ - wF83/79fNv++Xjb/vl42/75dNv+9XTX/vF01/7tbNf+6WjX/uVo0/7lZNP+2WTT/tlgz/7VYM/+0WDP/ - tFgz/7BRKf+pRhz/p0EY/6dBGf+lQRn/pUAZ/6RBGP+jQBj/oj8X/6I/F/+gPxf/nz8X/58+GP+ePxj/ - nj8Y/5w3DP+vdV7/vLq9/7ezs/+3srH/t7Gx/7axsf+2sLD/tbCw/7WwsP+3sbH/urOz/7u1tf++ubn/ - 3t7f/+Hc2f+FXUz/ayYJ/5NDIf+fSyj/nUon/51LKP+dSyj/nUsp/51LKf+dSyn/nUsq/51MKv+dTCr/ - nEwq/51LKv+dSyr/nUsq/51MKv+dSyr/nkwq/55MKv+eSyr/nksp/55LKf+eSyr/nkop/55KKf+eSin/ - nkko/51JKP+TSSr/f2Zc/9vb2//Y2Nj/1tbW/3JqavMAAAAzAAAAGAAAAAcAAAAAAAAAAHJqavLq6ur/ - 6urq/+vr6/+abFn/y3JO/8VhO//CXzr/w184/8BfN//AXzb/v182/75fNv++Xjb/vl01/71dNf+7WzX/ - uls1/7tbNf+5WjT/uVkz/7dYMv+1WTP/tVgy/7RYM/+yVS//rEoj/6hCGf+nQhj/pkIZ/6RCGf+kQRj/ - pUEY/6Q/F/+iPxf/oEAX/6BAF/+gPxf/oD8Z/549FP+ePRT/s41//7q7vv+1sLD/ta+v/7Wvr/+1r6// - tK+v/7Wvr/+1r6//t7Gx/7q0tP++t7f/wbu8/97c3v/v7Ov/j2pa/2klCP+UQiD/nkkm/5tIJv+cSCb/ - nEgn/5xKJ/+cSib/m0oo/51KKP+cSSj/nEoo/5tKKP+cSij/nEkn/5tKJ/+cSif/nEoo/5tKJ/+bSij/ - nUko/51JKP+cSSj/nUgn/5xJJv+bSCb/nEgn/5xIKP+TSCn/f2Ra/9vb2//Z2dn/2dnZ/3JqavQAAAAy - AAAAFwAAAAcAAAAAAAAAAHJqau/n5+f/6urq/+rq6v+ba1n/zXNR/8ZjPP/FYTr/xWE6/8NgOP/CXzj/ - wV84/8BfN/+/Xzf/vl82/75dNv+9XTX/vV01/7tbNf+7WjX/ulo1/7daNf+3WTT/tlgz/7VYM/+1WDP/ - s1cy/69RKf+rRx7/qEEY/6ZBGP+mQRj/pUEY/6VBGf+kQBj/o0AX/6JAGP+gPxj/oj8Y/6A/Gf+eOxD/ - o0gh/7aZjv+5ur7/tbCw/7Wvr/+1r6//tK+v/7Surv+1r6//trGx/7qzs/++t7f/w76+/8a/v//g3t// - 8/Dw/5BsXf9qIwX/lUMg/51IJP+bRyT/nEgk/5tHJP+bRyX/m0gm/5pIJv+aSCX/m0gl/5tIJv+aSCX/ - mkgm/5tIJv+aRyX/mkcm/5pIJv+aSCb/m0cl/5tHJf+bRyX/mkcl/5tHJf+bRyX/m0gm/5tIJv+TSCj/ - fmVb/9vb2//a2tr/19fX/3JqavMAAAAwAAAAFgAAAAYAAAAAAAAAAHJqauzi4uL/6urq/+np6f+aa1n/ - znZV/8hmQP/GYTv/xmE6/8VhOv/CYDj/wl84/8FfOP/AXzf/v183/79eNv++Xjb/vl41/71dNf+8WzX/ - uls1/7pbNf+5WTT/uVk0/7dZM/+1WDP/tVcz/7RYM/+zVjH/rk0n/6lFHP+nQhj/p0EY/6ZBGP+lQRj/ - pEAY/6RAF/+iQBj/oj8Y/6I/GP+gQBn/nToQ/6NIIf+3lIj/urq9/7Wxsf+1rq7/tK+v/7Wvr/+1r6// - trGx/7qzs/++ubn/w729/8rDw//LxsX/5uXm//Xx8f+EWUf/cCYG/5lGIf+cRiH/m0Yh/5pGI/+bRiP/ - mkYj/5pHJP+aRyT/mkYk/5lGJP+aRiP/mkck/5lGJP+ZRiT/mUYj/5lGJP+ZRiT/mkYk/5pGJP+aRiT/ - mkcl/5pHJf+aRyX/mkcl/5tHJv+QRin/fmdd/9zc3P/b29v/1dXV/3JqavAAAAAuAAAAFQAAAAYAAAAA - AAAAAHJqauXc29v/6enp/+jo6P+cbVz/zndW/8pqQ//IYTr/yGI7/8dhO//GYTj/w2E4/8NfOP/CXzf/ - wl83/8FfN/++Xjb/vl42/75eNf+9XTX/vV01/7xbNf+7WzX/ulo0/7paNf+3WTT/tlgz/7RZM/+1WDP/ - tFgz/7JUL/+uTCX/qEUc/6dBGP+lQRf/pUEY/6VAF/+kQBf/o0EY/6JBGP+iQRn/okAa/546Ef+jQhr/ - tIh4/7q5u/+1sbP/ta6u/7WwsP+1sLD/ubOx/7u1tP+/ubn/xb6+/8rGxf/Ry8v/1M3O//Dw8f/q4t// - cj8o/3wvDv+cRiH/mkMf/5lDH/+aRSD/mUYg/5pFIP+ZQyD/mEUh/5lDIP+ZQyH/mUMg/5hFIf+YRiH/ - mUUh/5hFIf+YRSH/mUUj/5lFI/+ZRSP/mkUj/5pFI/+aRSP/mkcl/5pGJv+NRin/gWxj/93d3f/c3Nz/ - 0dDQ/3FpaeoAAAArAAAAEwAAAAUAAAAAAAAAAHJqatrU0tL+6Ojo/+fn5/+gc2H/zHdW/81tSP/IYzv/ - yGM7/8hiO//HYTv/xmE6/8VhOv/DYDj/w184/8JfN//AXzj/wF83/8BfN/+/Xjb/vl42/75bNv+8XTb/ - vFs1/7tbNf+6WjT/uVo0/7dZNP+2WTP/tVgy/7VYM/+0WDP/sVMu/6xMJf+oRRz/p0EY/6ZAF/+lQBj/ - pEAY/6NBGP+jQRj/o0AZ/6JAGv+fOxL/oD4T/7OBbf+8ubv/tbO0/7awr/+5sbL/urOz/722tv/Bu7v/ - x8DB/8zHx//TzM3/2NPU/9zW1v//////zLqz/2YoDf+NOBX/nEUe/5lCH/+ZQh7/mUMf/5lDH/+ZQx// - mEIf/5lDIP+ZQyD/mUMg/5hDIP+YQyD/mEMh/5hFIP+YQyD/l0Uh/5dFIf+YRSP/mEUj/5hFI/+ZRSP/ - mUUj/5hGJf+JRSr/hXJr/93d3f/d3d3/y8nJ/m5mZuEAAAAnAAAAEQAAAAQAAAAAAAAAAHFpacrIxsb9 - 5+fn/+bm5v+hemz/ynRS/9J0Tv/KYzv/yWQ8/8pjPP/IYjz/yGI8/8djO//FYjv/xWE7/8NhO//CYDr/ - wWA4/8FfOP/BXjj/wF43/79eN/+9XTb/vV02/7xdNf+7XTX/uls1/7paNP+3WjT/tlkz/7ZZM/+1VzP/ - tVgz/7NYM/+yVDD/rk0n/6lHHf+nQhn/pUAY/6RAF/+jQRn/o0EY/6NAGf+jQBr/oD4U/6A7EP+yeWH/ - u7m6/7m0tf+6s7P/vLW2/8C5uv/Dvr7/ycPD/8/Jyv/Uz8//2tXV/97Y2P/m4uP//////517bP9vJQT/ - mUEc/5pCHf+aQx7/mUIf/5lDH/+ZQx7/mEIf/5lDH/+YQx//mUMf/5hDIP+YQyD/mEMg/5hDIP+YQyD/ - l0Ig/5dDIf+YQyH/l0Mh/5hFIf+YRSH/mEUj/5dGJf+ERCn/joB7/97e3v/e3t7/wb+//WxkZNQAAAAk - AAAADgAAAAMAAAAAAAAAAHBpabW6t7f65ubm/+fn5/+fg3n/ynJP/9R5Vf/LYzz/y2Y+/8tlPv/KZT7/ - ymQ9/8hkPf/GYzz/x2I8/8ZiO//FYTv/w2E7/8JhOP/BXzj/wV84/8FeN/+/Xjf/vl03/75dN/+9XTb/ - vF02/7xdNP+6WzT/uVs0/7daNP+3WDT/tlkz/7VYMv+0WDP/s1gz/7JVMP+vTyn/qkkf/6ZCGf+lPxX/ - pEAX/6RBGf+jQBn/pEEa/6A9FP+gOg//s31p/727vf+7t7n/vrm5/8K9vP/HwcH/y8bG/9LMzP/X0tL/ - 3dfX/+Ld3f/i3d3/9/b3/+nh3v9xNx//iDUS/5xDH/+aQh3/mkId/5pBHv+ZQh//mUMf/5lDH/+ZQh7/ - mEMf/5hDHv+YQh//mEIg/5hDIP+YQyD/l0Mg/5dDIP+XQyD/l0If/5VCH/+VQh//l0Mg/5ZGJf+ARCv/ - nJSS/9/f3//f39//tLGx+mlhYcMAAAAgAAAADAAAAAIAAAAAAAAAAHBoaJirpqb35eXl/+bm5v+uk4r/ - yG5L/9iCYf/NZT3/zGY+/8tmPv/LZT7/y2Q9/8pkPf/JYzz/yGM8/8djPP/GYjv/xWE7/8NhO//DYTr/ - wmA4/8FgOP/BXzf/wF84/79eN/++Xjb/vV02/7xdNv+7XTX/u101/7lbNf+3WzT/uVo0/7ZZNP+2WTP/ - tVgy/7NXMv+zWDP/slYx/69SLP+rTCX/p0Yd/6VBGf+kQRj/pEAY/6NAGf+gPRP/oj0T/7aPgP/CwsX/ - wr29/8bAwf/Lxcb/z8vK/9XP0f/a1dX/4Nra/+Pe3v/o4uH/6eTk//////+lg3b/ciQE/5xDHv+bQx3/ - mkMd/5pBHf+ZQh3/mkId/5lCHv+ZQh7/mUIf/5lDHv+YQh7/mEIe/5hCH/+XQh//l0Mf/5dCH/+XQh// - lUMe/5dCH/+VQh//lUIf/5NEIv9/STL/sqyq/+Dg4P/g4OD/o5+f9mRdXaoAAAAcAAAACQAAAAEAAAAA - AAAAAG9nZ3GYk5P05eXl/+bm5v+3qaX/v2tK/9uHZ//RbEb/zWU9/8xmPv/MZj7/y2U+/8tlPv/KZT3/ - yWQ8/8ljPf/HYzz/x2I8/8ZiO//FYjr/w2E6/8FhOv/BYDj/wV84/8FfOP+/Xjf/v102/75dNv+9XTX/ - vF02/7tbNf+6XTT/uVs0/7daNP+3WTT/t1o0/7ZZM/+0WDP/tFgz/7JXMv+yVzL/sVUw/65RKv+qSyT/ - p0Ye/6VCGv+kQRn/oDoP/6hNKv/Csq//yMbI/8vGxv/Pysr/1M7O/9nU1P/f2Nj/4t3d/+Tg4P/p5OT/ - 6uTk//z8/f/f087/cC8T/5M8GP+dQh3/mkEd/5pCHf+ZQh3/mkId/5lBHf+ZQh3/mUId/5lCHv+YQh7/ - mEIe/5hCHv+YQh7/l0If/5dCHv+XQh//l0Ee/5VBHv+VQh//lUIf/5BBIf96UD7/yMfG/+Hh4f/h4eH/ - kYyM81tVVYkAAAAXAAAABwAAAAAAAAAAAAAAAG1lZUGIgoL05OTk/+bm5v/LxcL/uG5S/92Jav/VdlH/ - z2Q7/89mP//OZj//zWY+/8tmPv/LZj7/y2U+/8tlPf/JZD3/yWQ8/8hkO//HYjz/xWI8/8VhOv/CYTr/ - wV84/8FgOv/BYDj/wV84/75eNv+/XTf/vl02/71dNf+8XTT/ul00/7pbNf+3WzT/t1s0/7dZNP+2WTT/ - tlk0/7VYM/+0VzL/s1Yy/7JXMv+xVjH/r1Qw/6xSK/+pTCb/p0gg/6M7Ef+8jHv/zs7R/87Jyf/Tzc3/ - 2NPT/9zX1//g3Nz/5ODg/+jj4//r5ub/7ejo//Pw8f/8+vn/iVdD/4QuC/+eQx7/m0Ed/5tBHP+bQRz/ - mkId/5pCHf+aQh3/mUIc/5hBHf+ZQh7/mEEe/5hCHv+YQh7/mEEe/5dCHv+XQh3/lUEe/5VBHf+VQR3/ - lUEe/4k+Hv99YVT/29vb/+Li4v/i4uL/gnx89ExGRl4AAAATAAAABQAAAAAAAAAAAAAAAAAAAAOCe3vs - 0tHR/+fn5//f3t7/snRb/9+Ma//dhmT/0WU7/9FoP//PZj//zmY+/81mPv/MZj7/zGY+/8tmPv/KZT7/ - ymU9/8lkPP/IZDz/xmM8/8diO//FYjv/xWE7/8NgOv/BYDr/wV84/8FfOP/AXjf/v143/79dNv+9XTb/ - vF02/7xdNf+6XTT/uls1/7dbNP+3WjT/t1o0/7ZZM/+1WTP/tVgz/7NXMv+zVjH/sVUx/7FWMf+wVjH/ - r1Uw/6pKJP+8dlv/4N3e/97c3P/e2Nj/39nZ/+Da2v/j39//5uLi/+rj4//s5ub/7enp/+/r6/////// - q4l8/3ooBf+dQhv/m0Ec/5tBHP+bQRz/mkEc/5pBHP+aQRz/mkEc/5lCHf+ZQh3/mEAc/5hBHf+YQRz/ - mEEc/5dBHf+XQR3/lUEe/5VBHf+VQB3/lEEe/4M9IP+Ab2j/5ubm/+Xl5f/T0tL/e3R07AAAACQAAAAP - AAAAAwAAAAAAAAAAAAAAAAAAAAF9dXXHv729/ufn5//j4+P/rYNz/9uBXf/ilXn/02tD/9JoP//RaD// - z2g//85oP//NZj7/zWY+/8xmPv/LZT7/y2U+/8pkPf/JZD3/yWQ8/8hjPP/HYjv/xWI7/8ViO//CYTr/ - wmA4/8FgOP/BXzj/wF84/8BeN/++XTf/v102/75dNf+8XTX/u101/7ldNf+5WzT/t1o0/7daNP+2WTT/ - tlk0/7RYM/+0VzL/slYx/7JVMf+xVTD/sFUx/69PKv+3akn/5t/d/+zr7P/t6en/7urq/+3q6v/u6ur/ - 7enp/+7q6v/v6+v/7+vr/+/q6v//////w6ug/3YoB/+bPhj/nEAa/5tAG/+bQBv/mj8a/5pAG/+aQBv/ - mj8a/5lAG/+ZQBv/mUAb/5hAG/+XQBv/lz8b/5c/G/+VPxz/lUAc/5VAHP+VQBz/kUEf/39EK/+Zko// - 6enp/+jo6P/CwMD+cWtrzQAAAB0AAAAKAAAAAQAAAAAAAAAAAAAAAAAAAABwaGiKpqKi+eXl5f/m5ub/ - tqCY/9J1UP/pp43/2HZR/9NmPf/SakD/0mk//9FpP//PaD//zmg//81mP//MZj7/y2Y+/8xmPv/LZT7/ - y2U9/8lkPf/JYz3/x2M8/8diO//GYjv/xWI7/8NgO//CYDr/wWA4/8FfOP/AXjb/wF01/8BeNv+/Xjf/ - vV02/7xdNv+7XTX/ul00/7dbNP+3WTT/t1o0/7ZZNP+2WTT/tVgz/7NXMf+zVjD/slUw/7BOKP+3Zkb/ - 6ODd/+/v8P/v7Oz/8e7u//Tw8P/08fH/9vPz//f09P/28/P/9vHx//Tw8P//////2MnD/4I8Hf+cQh7/ - oEgk/59HIf+eRiD/nUUg/51FH/+cQx//m0Mf/5pDH/+bQx//mkMf/5pDH/+aQyD/mkUh/5pGI/+ZRiP/ - mkcl/5pHJv+aSSf/lEkp/4FXRf/Lycj/7Ozs/+vr6/+ppaX6Y1xcnQAAABcAAAAHAAAAAAAAAAAAAAAA - AAAAAAAAAABvZ2dHjYeH9+Dg4P/p6en/0s3M/8VtSf/rqY//4pJ0/9RmPf/UakH/02pB/9NpQP/SaED/ - 0Wk//89oP//OZj7/zmY+/8xmPv/LZj7/y2U+/8tlPv/KZD3/yWM9/8hjPf/HYjv/xmI7/8ZiO//DYTr/ - wmE6/8FfN/+5VS7/n0gl/59HJP+2VzL/wV83/79eN/+9XTb/u101/7pdNf+6WzX/uVo0/7daNP+3WjT/ - tlk0/7VYM/+0WDP/s1cy/69OJ/+6bEz/7ujo//Px8//z8O//9fHx//bz8//29PT/9vT0//f19f/49fX/ - 9/X1//bz8///////5NnV/4xKL/+iSyf/qFQx/6ZTL/+mUi//pVIv/6RRLv+kUSz/pFEs/6NPLP+iUSz/ - oE8u/6BPLv+gTy7/n04r/6BPLv+fTyz/nk4s/55OLP+cTi3/kk0w/4JoXf/s7Oz/7+/v/+vq6v+LhYX2 - UkxMYQAAABEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACh4GB5sjGxv/q6ur/4+Pj/7GAbv/nknL/ - 8Lql/9VtQ//VakH/1WpB/9RqQf/TaUD/0mlA/9JoQP/PaD//z2Y//85mP//MZj7/zGY+/8tlPv/LZD3/ - ymQ9/8lkPf/IYzz/yGM8/8diPP/GYjv/w2A3/8VjPf/RoI7/xauj/5VkUv+GOx3/pkwo/71eN//AXzf/ - vl43/7xdNf+7XTX/uls1/7daNP+3WjT/t1o0/7ZYNP+1WDT/tlo1/65KIf/KlID/9/j6//bz8//29PT/ - 9/X1//f19f/49fX/+PX1//j19f/49fX/+Pb2//bz8///////5drV/41LL/+jSyb/qVQw/6dTMP+nUzD/ - p1Qw/6VSMP+kUy//pFIv/6RSL/+kUi7/o1Mu/6JRLv+iUSz/ok4r/6BOLP+fTiz/nk0r/55NK/+bTy7/ - iUw0/5OLh//z8/P/8vLy/9bV1f+Ce3vmAAAAHgAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - e3Nzo66qqvzn5+f/6Ojo/7emoP/YeVT/98m2/+CJaP/VaD3/1WtC/9VrQf/UakH/1GpB/9NqQP/SaED/ - 0WY//9FoP//OZj//zmY+/81mPv/MZj7/y2Y+/8tlPv/KZT3/yWQ9/8lkO//HYz3/wlox/8x5WP/z7u7/ - +f///+rm5v+zl43/hkgw/407Gv+oTSj/uVgz/75dNv++Xzb/vV82/7xeNv+7XTX/ul01/7pbNf+5WTP/ - r0sk/69hQP/q3Nf/+vv8//j19f/49vb/+fb2//n39//59/f/+ff3//n29v/49fX/+PX1//fz8/////// - 4tXR/49KLP+lTSf/qVQv/6hSLv+nUi7/p1Iv/6ZSL/+kUS7/pFEu/6RRLv+kUS7/pFEr/6NRK/+iUSz/ - ok8r/6BOK/+gTiv/n04r/55NK/+YTy//glZE/9HQ0P/19fX/9PT0/7i0tP1tZ2euAAAAFgAAAAcAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb2dnTI+Jiffe3d3/7+/v/9rY2P+/eF3/86uR//C0nv/WaD3/ - 1mxC/9ZrQv/Va0L/1WtB/9RrQP/TakH/0mpB/9JpQP/PaD//z2hA/85oP//NZj//zWY+/8xmP//KZT7/ - y2Q9/8pkPf/IZD3/xVow/89/X//07u3/9Pb3//f3+P/5+/3/3tXS/6+MgP+NUjz/iz4g/5hBH/+lSST/ - rE4o/7FSKv+zUyv/sVIq/6pMJf+gRR//qGJG/+DMxf/9////+fb3//n39//59/f/+ff3//r4+P/69/f/ - +ff3//n29v/49vb/9/X1//Xz8///////1L62/49BIf+qUiv/qlQv/6hTLv+oUi7/p1Iu/6dSL/+nUi7/ - pFEs/6RRLP+kUSz/pE8s/6NPK/+jTyv/ok8r/6BOK/+gTSv/oE0r/59OLP+QTC3/hXRs//n5+f/4+Pj/ - 8PDw/5GMjPdWUFBjAAAADwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYqEhN3Bv7// - 7e3t/+bm5v+5lor/5Yhm//jKt//ghWH/1mg8/9dtRf/XbEP/1mxD/9VsQv/Ua0L/02tC/9NqQf/SakH/ - 0WlA/9FpQP/OaED/zmg//85oP//NZj//zGU+/8tkPv/KZT7/xlsx/9J/X//48fD/+fr7//b09P/39vb/ - +/z9//z9///q5eP/ybSs/6uFeP+calb/lFc9/5JOM/+UTzP/mFQ4/6VrU/+/nI3/7ebl///////7+fn/ - +vj4//r4+P/6+Pj/+/j4//r4+P/6+Pj/+vf3//n29v/49fX/9/T0//Xx8///////x6ea/5M+G/+sVC// - qlMv/6pTLv+pUiz/qVIu/6dSLv+nUi7/plEr/6VPLP+kTyv/pE8s/6NPK/+jTyv/ok8r/6BPK/+iTSv/ - oE0r/5xOLv+HUTv/vLi2//r6+v/6+vr/1dPT/4V/f90AAAAZAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAHBoaHmfmpr65ubm/+/v7//MyMn/0XpZ//W1nf/vsJn/2GxB/9dtQ//YbkX/ - 2G5F/9dtQ//WbEP/1WtC/9VrQv/Ua0L/02tB/9JqQf/RakD/z2lA/89pQP/OaD//zWg//81lPv/MZj// - yFoy/9SAYf/69PT//P3///n39//59/f/+ff3//n39//9/Pz///////3////29PT/6uTh/+PZ1v/h19P/ - 6N7c//b08/////////////z5+f/8+vr//Pr6//z6+v/8+fn/+/n5//r4+P/6+Pj/+ff3//j19f/39PT/ - 9vHx//b09P//////sYBs/51CHf+vVDD/q1Mv/6pTL/+qUy//qlEu/6lSLP+pUiz/qFIr/6ZRK/+lTyv/ - pU8r/6VPK/+kTir/o04q/6NOKv+iTir/n00s/5VLLP+Ga2D/9PT0//z8/P/7+/v/qaWl+mJbW4oAAAAQ - AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlhYRaMhobuycjI//Ly8v/k5OX/ - u5SG/+uRb//4zLv/44hm/9hpP//Zbkb/2G5F/9htRf/XbEP/1mxD/9ZsQv/VbEL/1GtC/9NqQv/SakH/ - 0mpA/9FpQP/PaED/zmg//85oP//NaD//yV0y/9WCYf/89vX///////z6+v/8+vr//Pr6//z6+v/8+fn/ - +/n5//37+//////////////////////////////////9+/v//fv6//37+//9+/v//fv7//z6+v/8+vr/ - +/n5//r4+P/69/f/+fb2//f19f/28/P/8+/v//v7/P/17On/nFQ2/6pOJ/+vVTD/rFMv/6xTL/+rUy// - qlEu/6lRLv+pUi7/qVEr/6hRK/+nUSv/pU8r/6VPK/+kTiv/pE4q/6ROKv+jTir/nk0s/4tPNf+yrKr/ - /v7+//39/f/h39//jYeH7TMvLy0AAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACBenqbpqKi++jo6P/w8PD/z8zN/9ODZf/0spn/9b+r/91xSf/abUX/2W5G/9luRf/YbUX/ - 121F/9dtQ//WbEP/1mxD/9VrQv/TakH/02pB/9JqQf/RaUD/z2lA/89oQP/OaED/y14y/9aCYv/9+Pf/ - //////38/P/9+/v//fz8//38/P/9/Pz//fz8///8/P///Pz///z8///8/P///Pz///z8///8/P///Pz/ - //z8///8/P/9/Pz//fv7//z6+v/7+fn/+/n5//r4+P/49/f/+Pb2//b09P/08fH/8O3t///////Pr6L/ - nUId/7FVMP+vVC//rlQu/6xUL/+sUy//q1Ms/6pRLP+qUi7/qVEu/6lRLP+oUSv/pk8r/6VPK/+lTyv/ - pU4q/6ROKf+jTyv/lk0s/4ptYf/39/f///////7+/v+2srL7dW5uogAAABAAAAAFAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsZWUhjYaG8MjIyP/z8/P/5ubm/7mhmf/pkXD/ - +sq3/+mYev/ZaD7/3G9H/9pvRv/Zbkb/2G1G/9huRf/YbUX/121F/9dsQ//VbEP/1GtC/9NrQv/TakH/ - 0mpB/9FpQf/PakH/zF80/9iEY///+vn//////////////f3///////////////////////////////// - //////////////////////////////////39///8/P///Pz//fv7//z6+v/7+fn/+vj4//j29v/49fX/ - 9vT0//Xx8f/u6+v/+fn6//r08f+rY0b/rkwn/7FVMP+vVC//r1Qu/65ULv+uVC7/q1Qv/6tTLv+qUiz/ - qlEs/6lRLP+pTyz/qE8s/6ZPK/+lTyv/pU4r/6VOKv+hTy3/iVA5/7y4t////////////+Ph4f+Qi4vv - RD8/NQAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - gnt7laKenvrn5+f/8vLy/9nZ2P/Lj3r/8aKD//nHtP/igFv/3GtB/9xvR//abkb/2m5G/9luRf/YbkX/ - 2G1F/9htRf/WbEP/1mxC/9VrQv/Ua0L/02tC/9JqQf/RakL/zF80/9mFZf///Pr///////////////// - //////////////////////////////////////////////////////////////////39///8/P///Pz/ - /fv7//z6+v/7+fn/+ff3//f19f/29PT/9PHx/+/s7P/z8fP//////8aVgf+mRh//s1Yx/7JWMf+wVi// - r1Uv/69UL/+vVC7/rlQu/6xTLv+rUyz/qVIs/6pSK/+qUSv/qE8s/6hPK/+nTyv/pk8r/6VPLP+TSSr/ - k393/////////////////7Ourvt0bm6bAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamNjDY6IiOfAvr7/8PDw/+rq6v/Curj/4ZF0//i6ov/0uaL/ - 3m9G/91tRf/cb0f/3G9G/9puRv/ZbkX/2G5F/9huRf/XbUX/121D/9ZsQ//VbEP/1WtC/9NrQv/Ta0L/ - zl81/9yGZf////v///////////////////////////////////////////////////////////////// - ///////////////////////8/P//+/v//fv7//v5+f/59/f/+Pb2//b09P/18fH/7+3t//Hw8f////// - 2rSl/6pNKP+0VS7/s1gz/7NWMv+yVjD/sVYw/69UL/+vVC//r1Qv/65ULv+sUyz/q1Is/6pSLP+qUiv/ - qlIr/6hPK/+nTyv/p08s/59LKP+NYlL/5eTk//7+/v/+/v7/3Nra/5GLi+crKCggAAAABwAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFpaWWWkZH3 - 3Nvb//f39//h4eH/w6SZ/+yUcv/3vqj/7J+B/91sP//eb0f/3XBH/9xvR//cbkf/2m5G/9huRv/YbkX/ - 2G5F/9huRf/XbEP/12xD/9VsQ//VbEP/0mQ6/9d3Uf//8Or///////////////////////////////// - //////////////////////////////////////////////////39///8/P/9+/v/+/n5//n4+P/49/b/ - 9vT0//Pw8P/w7u7/+Pv8///////ftqb/r1Mu/7ZWL/+3WTP/tVkz/7RYMv+zVzL/s1cy/7FWMP+xVjD/ - sFUv/69UL/+vVC7/rlEs/6xSLP+rUiv/qlEr/6pRK/+oTyv/pE8s/5BOM/+tpqP//Pz8//39/f/z8/P/ - oJub+GJbW3UAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAGMhobFr6ur/Onp6f/w8PD/29zc/8mdjv/wnHv/+sm1/+qUcv/ebED/ - 3nBH/95wR//db0f/3G5H/9puR//Zbkb/2G5F/9huRf/YbUP/121F/9dtQ//WbEP/1GtC/9JkO//imHr/ - //bw//////////////////////////////////////////////////////////////////////////// - //39//37+//8+vr/+/j4//j19f/18/P/9PHz//j5+v////////bx/9egi/+zUir/uVUu/7pbNf+3WjT/ - t1k0/7VZM/+1WDP/s1Yy/7NXMf+yVjD/sVYw/7FVMP+wVS//r1Mv/6xTLP+sUiz/rFIr/6pSLP+pUCz/ - mEkp/5iHgf/6+vr/+/v7//v7+//DwMD8h4GBxAAAAA8AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxaWkpjoiI7MHAwP/v7+// - 6urq/9DMzf/Zm4X/8aiN//rKuf/oiWb/3mxA/99wR//eb0f/3W9H/9xuR//ab0b/2m5G/9luRv/YbkX/ - 2G1F/9htRf/XbEP/1mxD/9VrQv/RYjb/2HpV/+66pv//7OT///////////////////////////////// - ///////////////////////9/f///f3//fv7//v5+v/6+Pj/+ff4//r6+//////////////49f/pwbL/ - xXFR/7ZRKP+7WjL/vV01/7paNf+6WjX/uVo0/7dZNP+2WDP/tVgz/7RXMf+zVzH/s1cx/7FWMP+xVTD/ - sFUv/69ULv+uUyz/rFMs/61UMP+eTCr/lXNm/+zs7f/4+Pj/+fn5/9za2v+Tjo7tU01NOAAAAAcAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAcWlpZJOOjvXV1NT/9PT0/+Tk5P/KwsL/5Zh7//SpjP/4waz/5YJd/99tQP/fcEf/ - 33BH/95vR//db0f/3G9G/9xuR//abkb/2W5F/9luRf/YbkX/2G5D/9ZsQ//WbEP/0mQ7/9FhNf/WdU7/ - 5JyB//TItv//7+n///////////////////////////////////////////////////////////////// - ///////8/P/339b/4q+a/8p4WP+8Vi//vVYv/79eN/++Xjf/vl42/7xbNf+7WzX/u1o1/7paNP+5WjT/ - uVk0/7ZYM/+1VzL/tVcx/7NXMP+zVjH/slYw/7FVL/+wVC//r1Uw/6RMJv+XaFX/2dnZ//X19f/29vb/ - 6unp/5uWlvZlXl5vAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeBgaeinp744uLi//X19f/g4OD/ - 1cC5/+mXdv/0rpH/9r2n/+aEXv/fbUH/4HFI/99wR//ecEf/3m9H/91vR//cbkf/3G9G/9luRv/ZbkX/ - 2G5F/9htRf/XbUP/1m1F/9VrQv/TZDr/0WA0/9FiN//Uckz/3Idm/+Wmjf/rs53/8cm5//nf1P/64df/ - +eDW//jg1v/54Nf/9tjM/+y/rP/lr5n/3Jd8/855Vv/FYz3/v1Ys/75WLv/BXjb/wWE6/8FeOP/AXjf/ - v143/75dNf+9XTX/vFs1/7tbNf+6WjX/ulo0/7daNP+2WTP/tVcy/7VXMv+0VzH/s1cx/7JWMP+wVzH/ - p08q/5pfRv/Cvr3/8vLy//Pz8//y8vL/rqqq+IB5eaYAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAGMh4fLraur+uXl5f/y8vL/39/f/9G+tv/pm3z/9KyR//fBrP/oi2b/4GxA/+FxR//fcEf/ - 3nBH/95wR//db0f/3G9H/9xuRv/abkb/2W5G/9luRf/YbUX/2G1D/9dsQ//WbEP/1WxC/9VpQP/SZTz/ - z2M3/81fNP/MXTL/zGE2/81lPf/OZj7/zWU9/8xkPf/LZT3/ymI4/8ZaMf/DVyz/xVow/8VdM//FXzX/ - xWA6/8ViO//CYTr/wWA6/8FfOP/BXzj/wF43/75eNv++XTX/vl01/7xbNf+7WzX/u1s1/7paNP+5WTT/ - t1cy/7ZYMv+1VzH/tFcx/7NZM/+rUi3/nV9F/7m0sv/v7+//8PDw//Dw8P+7ubn6iIODyQAAAA0AAAAE - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwaGgejYeH3bazs/vn5+f/8PDw/97e3v/Tvrf/ - 7Jt7//Wqjv/6yrn/7JV1/+BtQf/gb0X/4HFI/+BxSP/fcEf/3nBH/91wR//cb0f/3G5G/9luRf/Zbkb/ - 2G5G/9huRf/XbUX/12xD/9VtQ//Va0L/1GtC/9NrQv/Ta0L/0mlA/89mPv/OZj7/zWU9/81lPf/NZTz/ - zGU8/8tlPv/LZT7/ymU9/8ljPf/IYzz/x2M8/8ZiO//FYjr/w2E7/8JgOv/BYDj/wWA4/8BfOP+/Xjb/ - vl42/75dNf+9XTX/vF01/7tbNf+6WzX/ulkz/7dYM/+3WDP/tVkz/65OKf+hYUf/vri2/+7u7v/v7+// - 7u7u/8TBwfyMhobbUUtLKQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - cWlpNIyGhuS7uLj86Ojo//Dw8P/e3t7/0sS+/96eiP/2pon/+8i0/+6gg//hckj/4G5D/+FySP/gcUf/ - 33BH/95wR//db0f/3W9H/9xvR//abkb/2W5F/9huRv/YbkX/2G1F/9dtQ//XbEP/1mxD/9RrQv/Ta0H/ - 02pC/9JqQP/PaUH/z2lA/85oP//OaD//zmg//8xmPv/LZT7/y2U+/8pkPf/JYz3/yWQ9/8hjPP/GYzz/ - xmI7/8VhOv/DYTr/wmA4/8FgOv/AXzj/wF82/75eNv++XTb/vl41/71bNf+8WzX/uls1/7paNP+5WjP/ - rk4o/6FuWv/AvLr/7e3t/+7u7v/t7e3/yMbG/I2Hh+ReV1c/AAAABQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqaj+LhYXlure3/Ofn5//y8vL/4ODg/8fBwf/co43/ - 76KD//m+qP/2u6T/5oRe/99sP//hcUf/4HBH/99xR//fcEf/3nBH/91vR//cb0f/2m5G/9puRv/ZbkX/ - 2G5F/9huRf/YbUP/121D/9VrQ//Va0P/1GtC/9NrQf/TakH/0mlB/9FpQP/PaT//zmk//81mPv/MZj7/ - zGY+/8tlPv/KZD3/ymQ9/8ljPP/IYzz/x2M7/8ZiO//FYjv/xWE7/8JhOv/CYDr/wV83/8BfNv+/Xjb/ - vl42/75dNv+9XTX/vF01/7lZM/+sUS7/pnlo/83Nzf/u7u7/7e3t/+vr6//HxcX8jIaG5WJbW0gAAAAF - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByamo/ - jIaG5Lazs/vk5OT/9fX1/+Tk5P/Pzs//zaqc/+6df//5uqD/+say/+2cfP/idkz/4G1B/+BxR//gcUf/ - 33FH/95wR//ecEf/3XBH/9xvR//abkb/2m5G/9luRf/YbkX/2G1F/9dtRf/XbUP/1m1D/9RsQv/VbEL/ - 1GtC/9NqQf/RaUH/0WlB/89oP//OZj//zWY//8xmPv/MZj7/y2Y+/8tkPv/KZD3/yWQ9/8djPP/HYjz/ - xmI8/8VhO//DYTv/wmE6/8FfOP/BXzf/v183/79fN/++XTb/ulYt/65WM/+qkYf/4uLi/+7u7v/s7Oz/ - 6urq/8K/v/yMhobjZF1dRwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcWlpNI2Hh9ytqqr64ODg//Pz8//o6Oj/2trb/8Kwqv/foYn/ - 9qiJ///JtP/2u6X/6Itm/+FwR//gbUH/4HFI/99xR//fcUf/33BH/91vR//db0f/3G9H/9puRv/Zbkb/ - 2W5G/9huRf/YbkX/121F/9ZsQ//VbEP/1WxC/9RrQv/Ta0H/0mpB/9FpQf/RaD//zmY//81mPv/NZj7/ - zGY+/8tlPv/LZT7/y2U9/8ljPf/IYzz/x2M8/8ZiO//GYjv/xWE6/8NgOP/CXzj/wmA4/8FbMv+3Uyr/ - rWxU/7Kmo//r6+v/7e3t/+rq6v/n5+f/t7S0+oyGhttiW1s8AAAABAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBoaB6Nh4fL - op6e+NPT0//u7u7/7+/v/97e3v/EwcH/zqaZ/+ifhf/5tJv/+cCr//Cojf/mhWD/4G5D/+BwRf/gcEf/ - 33BH/95wR//ecEf/3W9H/9xuR//abkf/2m5G/9luRf/YbkX/2G5F/9dtQ//WbEP/1mxD/9VsQv/Ua0L/ - 02tB/9JqQf/RakD/0Wk//85mP//OZj7/zmY+/8xmPv/LZj7/y2U+/8pkPf/LZD3/yWQ8/8hjPP/HYzz/ - xmI7/8ZhOv/EYDj/v1ct/7NcOf+yj4P/1NPV/+rq6v/r6+v/6Ojo/9va2v+ppaX4ioSEyFtVVSUAAAAD - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4GBppKNjfXAvr7/5+fn//f39//n5+f/1tXV/7+zsP/Zn4v/ - 8KSH//ixl//4tp3/8KSI/+aGYv/hdUv/4HBG/+BvRf/fcEb/33BH/95wR//dcEf/3G9H/9puRv/abkb/ - 2W5G/9huRf/YbkX/2G1F/9dsQ//WbEP/1WxD/9RrQv/TakH/02pA/9FpP//PaD//0Wg//85mP//NZj7/ - zGY+/8tmPv/LZT3/ymU9/8pkPv/KZDz/yWE3/8VYL/+9WTD/uH9o/762tf/o6en/6+vr/+jo6P/m5ub/ - y8rK/5eSkvaCe3ukAAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqamOOiIjs - rKmp/NrZ2f/v7+//8vLy/+Pj4//Kycz/vquk/9mfi//so4b/9aqO//m1nP/xp4v/6Ixp/+N7VP/hdUv/ - 4G9F/99vRf/ecEf/3m9H/9xvR//ab0f/2m5G/9luRv/ZbkX/2G5F/9htRf/XbUP/1mxD/9VrQv/Ua0L/ - 1GtB/9JpQP/SaUD/0Wk//89oP//OZj7/zmY//8xmPv/MaD//zWY+/8xhN//GWTD/w142/759Zf+6rKj/ - 4+Pk/+np6f/o6Oj/5eXl/93c3P+1sbH8kYuL7mtkZGkAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABxaWkpjIaGxZWQkPe9u7v/5OTk//Pz8//w8PD/4uLi/8rIyf+7rqn/ - yaKS/9+bgP/vo4X/96qN/++fgP/qjGn/5H9Y/+F2Tf/gckn/33BH/91vRv/db0f/3G5H/9puRv/Zbkb/ - 2W5F/9huRf/YbUX/2GxD/9ZsQ//WbEP/1WxC/9RqQf/TaUD/0mlA/9FoP//RaUD/0Wg//89lPf/OYDT/ - x10z/8JqRv/AkYL/vrOw/+Li4//o6Oj/6Ojo/+bm5v/j4+P/xsTE/5qUlPiJg4PDZV5eLgAAAAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqamSNh4fm - oJyc+sXExP/m5ub/9PT0//Hx8f/l5eX/1NPT/724t//Bo5n/2ZmA/+WafP/rmXn/7ZJw/+qHYf/mfVb/ - 5XhP/+N0Sv/gcUj/33BH/95vR//db0f/3G5H/9puRf/ZbkX/2W5F/9ltRf/XbUP/2GxD/9hsQf/Wa0H/ - 1Wo//9RoPf/SYzj/zGQ8/8tqRf/JgWT/w6ee/8vIyf/l5eb/6Ojo/+jo6P/l5eX/4uLi/8zKyv+loaH6 - j4qK521lZWkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABza2sMgnx8lIuFhe+jn5/7xMLC/+Tk5P/x8fH/9vb2/+zs7P/g4OD/ - zs3O/7Wuqv+2npf/w5qK/9aYgf/hjW//4Idl/92AXf/le1T/5HpS/+F3Tv/gdUv/33FJ/95wSP/dcEf/ - 3G5F/9pvRf/abkb/2W1F/9JuSP/Ubkf/0nVT/8uDZ//DlYT/vqih/8W/vv/i4uP/6enq/+vr6//o6Oj/ - 5OTk/+Dg4P/KyMj/qKSk+46IiPB9d3eUUUtLEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNrax+Ce3ub - i4WF7Z2Xl/m7ubn/29vb/+rq6v/19fX/9vb2/+3t7f/k5OT/3d3d/8G+v/++s6//uKqm/7ijnP/KnI3/ - wZOD/76PgP+9jHr/u4l4/7qId/+7iHb/u4d1/76NfP/JmIb/y6CR/7+spv/Ds7D/w7u6/9fW2P/o6ur/ - 6+vr/+/v7//u7u7/5+fn/+Li4v/Z2dn/wsDA/5+bm/qMhobufnd3mmNdXSQAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc2trFHJqaneJg4PdjYeH96mlpfzBv7//3d3d/+np6f/x8fH/ - +fn5//f39//x8fH/6+vr/+fn5//i4uL/39/f/93d3f/b29v/2dnZ/9nZ2f/c3Nz/3t7e/+Dg4P/k5OT/ - 6Ojo/+zs7P/w8PD/9fX1//b29v/v7+//6Ojo/+Pj4//a2tr/x8XF/62pqfyPiYn3ioOD3W9oaHpkXV0W - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - cmpqS3x1daGGf3/li4WF9qKdnfm3tbX+y8rK/9/f3//l5eX/6+vr//Dw8P/19fX/+Pj4//v7+//9/f3/ - ///////////9/f3/+/v7//j4+P/19fX/8fHx/+zs7P/n5+f/4uLi/9zc3P/NzMz/u7m5/qSgoPmMhob3 - h4CA5npycqJvZ2dMAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc2trRXNra4h9dXXFgXp67IaAgPSVj4/z - pKCg9rGvr/q+u7v9xsXF/s7Ozv/T09P/1tbW/9jY2P/X19f/1NTU/8/Pz//Ix8f+v729/bOwsPqloaH2 - lpGR9IeAgPSBenrse3R0xXFpaYlvZ2dHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAHNraz5yampuc2trlXJqarJyamrHc2tr2HNra+Nza2vrc2tr7nNra/Fza2vu - c2tr63Nra+Nza2vYcmpqyHJqarNxamqWcWpqbnBoaD8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAP/////////////////////4AAD///////////+AAAAP//////////gAAAAA - /////////+AAAAAAP////////4AAAAAAD////////gAAAAAAA///////+AAAAAAAAP//////4AAAAAAA - AD//////wAAAAAAAAB//////gAAAAAAAAA//////AAAAAAAAAAP////8AAAAAAAAAAH////4AAAAAAAA - AAD////wAAAAAAAAAAB////gAAAAAAAAAAA////AAAAAAAAAAAAf///AAAAAAAAAAAAP//+AAAAAAAAA - AAAP//8AAAAAAAAAAAAH//4AAAAAAAAAAAAD//wAAAAAAAAAAAAB//wAAAAAAAAAAAAB//gAAAAAAAAA - AAAA//gAAAAAAAAAAAAA//AAAAAAAAAAAAAAf/AAAAAAAAAAAAAAf+AAAAAAAAAAAAAAP+AAAAAAAAAA - AAAAP8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAA - AAAAD4AAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAA - AAAABwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA - AAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAD4AAAAAAAAAA - AAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH+AAAAAAAAAA - AAAAP+AAAAAAAAAAAAAAP/AAAAAAAAAAAAAAf/AAAAAAAAAAAAAAf/gAAAAAAAAAAAAA//gAAAAAAAAA - AAAA//wAAAAAAAAAAAAB//wAAAAAAAAAAAAB//4AAAAAAAAAAAAD//8AAAAAAAAAAAAH//+AAAAAAAAA - AAAP//+AAAAAAAAAAAAf///AAAAAAAAAAAAf///gAAAAAAAAAAA////wAAAAAAAAAAB////4AAAAAAAA - AAD////8AAAAAAAAAAH////+AAAAAAAAAAP/////gAAAAAAAAA//////wAAAAAAAAB//////4AAAAAAA - AD//////+AAAAAAAAP///////AAAAAAAA////////wAAAAAAD////////8AAAAAAP/////////gAAAAA - //////////8AAAAP///////////wAAD//////ygAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABwAAAA0AAAATAAAAGgAAAB4AAAAj - AAAAJgAAACoAAAAsAAAALQAAAC0AAAAsAAAAKgAAACYAAAAjAAAAHgAAABoAAAATAAAADQAAAAcAAAAE - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAFgAAAB4AAAAm - AAAALgAAADMAAAA2AAAAOAAAADoAAAA7AAAAPAAAAD0AAAA9AAAAPAAAADsAAAA6AAAAOAAAADYAAAAz - AAAALgAAACYAAAAeAAAAFgAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAABAAAAAb - AAAAJgAAAC8AAAA2UFBQbWlpaZ90dHTCenp62319fex+fn72f39//H9/f/5/f3/+f39//H5+fvZ9fX3s - enp623R0dMJpaWmfTU1NcAAAADwAAAA6AAAANgAAAC8AAAAmAAAAGwAAABAAAAAHAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAG - AAAADwAAABwAAAApAAAAMmBgYIZ0dHTCfHx86I+Pj/2np6f/xcXF/97e3v/s7Oz/8/Pz//X19f/39/f/ - +Pj4//j4+P/39/f/8PDw/+Xl5f/MzMz/rKys/5CQkP18fHzodHR0wl5eXokAAAA8AAAAOQAAADIAAAAp - AAAAHAAAAA8AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAMAAAALAAAAGAAAACdBQUFVcHBwrXx8fOOWlpb+vLy8/9/f3//t7e3/9PT0//b29v/19fX/ - 9PT0//Dw8P/x8fH/8fHx//Hx8f/y8vL/8vLy//j4+P/8/Pz//f39//v7+//5+fn/6+vr/8bGxv+ZmZn+ - e3t7425ubq46OjpdAAAAOgAAADIAAAAnAAAAGAAAAAsAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQAAAAYAAAARAAAAID09PUxzc3OygoKC7aampv/U1NT/5ubm//Dw8P/l5ef/ - zMzM/66rqv+elZH/hXRu/3tfVv96VEj/fVBB/39MPv+BTT7/gFBC/4FVSf+IZ13/jHdx/6WZlv+/vLv/ - 5ubm//7+/v/+/v7/9vb2/+Tk5P+urq7/gYGB7XBwcLQ1NTVXAAAAOQAAAC8AAAAgAAAAEQAAAAYAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAWAAAAJm5ubpyAgIDlpaWl/9XV1f/h4eH/ - 8fHx/8zMzP+ZlZP/gWxl/3RMPf+DRzL/lEwy/6BRN/+nVzv/rlo//7RbQf+3XEH/ultA/71ZP/+9WD7/ - vFU8/7lQNv+wTDX/n0o3/4pRQv+ZgHn/urSz//7+/v//////9fX1/+jo6P+urq7/fHx85WlpaZ8AAAA7 - AAAANQAAACYAAAAWAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAaVFRUXHx8fMqZmZn9 - ycnJ/9ra2v/u7u7/ysnJ/4p/fP9tSDr/gEEp/5JKL/+dUTT/o1Q3/6hXOv+sWjz/sVs9/7VbPv+3Wz7/ - u1s+/75aPv/AWj3/wlg8/8VVOv/GUzn/yFI3/8hRNv/HTTX/vkoz/6hHM/+GUkb/ppqW/+fn5/////// - 8/Pz/97e3v+cnJz9dnZ2y0dHR2gAAAA3AAAAKwAAABoAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAb - bW1th4ODg+Stra3/1dXV/+Li4v/9/f3/mpCM/3BEMv+EPyP/kUco/5hLK/+eUC//pFIx/6hVNv+sWDj/ - rlk6/7JbPf+2Wz7/uFs+/7xbPv++Wz7/wVk+/8NYPP/GVzr/yFQ5/8pSNv/LUDT/zU8y/81MMf/LSzD/ - x0wx/7RIMf+ITD3/r6Sg//7+/v/7+/v/8vLy/7y8vP99fX3lYmJijwAAADkAAAAuAAAAGwAAAAoAAAAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAgAAAAoAAAAbdnZ2n5CQkPS+vr7/0dHR//Pz8//EwL7/gV5P/3o3G/+LQCD/k0Uj/5lIJv+cSyr/ - oU8u/6RSMf+nVDX/q1g4/65ZOv+yWzz/tVs+/7hbPv+8Wz7/vls+/8BZPv/CWDz/xVc6/8hVOf/JUjf/ - y1E1/85PM//PTC//z0ou/85KLv/MSS7/x0sx/69JM/+HW1D/29fV///////v7+//1tbW/46OjvRra2ul - AAAAOgAAAC4AAAAbAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAae3t7qpiYmPnFxcX/z8/P//////+klpH/bTMa/4Q4F/+MPBf/ - kT8c/5ZCH/+aRyT/nUoo/6BOLf+jUTD/plQ1/6pXN/+tWTr/slo8/7VZOv+2Vzj/uFg5/75aPf/CWz// - wlk9/8NYPP/HVTn/yFQ4/8pSNv/LUDT/zk8z/89MMP/QSi7/z0ku/85JLv/LSS//wks1/5pKOP+rm5b/ - +/v7//Pz8//j4+P/l5eX+W9vb7AAAAA6AAAALgAAABoAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAWfX19qpubm/vFxcX/0tLS//79/f95XVH/ - djIV/4U2Ev+LNxP/kDoV/5M+Gf+VQh7/mUcj/5xJJ/+gTiz/olEv/6VUM/+qVzf/q1Mz/6NMLv+dVDz/ - nVxH/5tXQf+YSC//pUYr/8BYPP/FWT3/xlc6/8hVOf/IUzf/ylE2/8xQNP/OTjP/z0ww/9BLL//QSi7/ - z0ku/81KL//HTTT/rkw4/5BwZ//29fX/8/Pz/+np6f+bm5v7b29vsAAAADkAAAArAAAAFgAAAAYAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAARfX19m5mZmfnDw8P/ - 09PT//n49/+AXE3/fDUV/4UyD/+JMw3/jTYP/5A5E/+SPRn/lEEd/5hFIf+bSSb/nkwr/6FQLv+lUzP/ - pE4s/6diSP+/pJr/0sjH/9nU1P/Z09P/0MLA/6mBdv+SQCj/vVQ4/8ZZPP/HVzn/yFQ4/8lTN//LUjb/ - zFA0/85PM//OTjH/z0ww/89LL//OSzD/zUww/8hONP+3UDr/il9U//Hv7//09PT/6enp/5eXl/lra2ul - AAAANwAAACYAAAARAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAL - eXl5f5WVlfS+vr7/z8/P//r5+P99VUX/fzQU/4c0Df+KMw3/izMM/4w1Dv+POBL/kTwX/5RAHP+XQx// - mkgl/51LKP+hTy3/oUsq/6xtU//UzMr/3t7h/9rV1//Y09P/2dTV/97c3f/s7u//v6ag/5dAKP/DWTz/ - xVg8/8dVOf/IVDj/yVM3/8pRNv/LUTX/zFA0/8xPM//OTzP/zk4x/85OMf/NTzL/yFA1/7hROv+FV0r/ - 8/Hx//Pz8//j4+P/jo6O9GJiYo4AAAA1AAAAIAAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAGa2trTY6OjuS1tbX/ycnJ//79/f9xTT3/gDUV/4kyDf+LMwv/jjML/440DP+ONQ7/ - jzcR/5E8Ff+TPhr/l0Ie/5lGI/+cSSf/nksq/6NSMf/OvLb/19XY/9DKyv/PyMj/zsjI/8/Jyf/Ry8v/ - 08/P/+3v8P+peGv/sEou/8VaPv/FWDz/x1c5/8hVOf/JVDj/ylI3/8pSNv/LUjX/y1E1/8tRNP/MUDT/ - y1A0/8pRNf/GUjj/tlE6/4xjWf/39/b/8PDw/9bW1v99fX3lSEhIZwAAAC8AAAAYAAAABgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD4qKiserq6v/xMTE//39/f+DaFz/fzYV/4s1Dv+OMwv/ - jjMK/440C/+ONAz/jjUO/483EP+ROhT/kj4Z/5VBHf+YRSH/m0gm/5tGIv+ublX/0s/Q/8vGxv/IwcH/ - x8HB/8fAwP/HwcH/ysPD/8zHx//e3eD/y7Os/6VHLP/DWj7/wlk9/8VYPP/GVzr/yFU5/8lUOP/JVDf/ - yVM3/8lTNv/KUzb/ylI2/8pRNv/JUTb/yFI2/8NUOf+xUTv/k3Zt//j4+P/v7+//urq6/3Z2dssAAAA5 - AAAAJwAAAA8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4SEhJGhoaH9vr6+/+3t7f+0p6L/ - ejMV/402EP+PNA3/kDQL/480C/+QNAv/kDUO/481Dv+QNg//kTkT/5I9F/+UPxv/l0If/5lHJP+aQx7/ - rXRd/8rJy//Fv7//wry8/8G8vP/BvLv/wru7/8W+vv/IwsL/1dPV/9K+uP+nSi//wVs+/8FaPf/CWT3/ - xVg9/8ZYPP/HVzr/yFc5/8hVOf/IVTj/yFQ4/8hUOP/IVDf/yFQ3/8hTN//GVDj/wVY8/6ROOf+xpJ// - +Pj4//Ly8v+cnJz9aWlpnwAAADIAAAAcAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmlpaTGTk5Pk - tra2/9LS0v/v7ev/cDQc/484Ff+SNg//kzUM/5I0DP+SNAz/kDUM/5A1DP+QNQ//kDYP/5E4Ev+TPBX/ - lD8a/5dCHf+ZRiL/mUMe/6lnT//GwsP/wLu7/7+4uP++t7f/vre3/764uP/Bu7v/w729/9XX2P/QtKv/ - rUww/79bPv+/Wz7/wFo+/8FaPf/DWT3/xVk9/8VYPP/FWDz/x1c8/8dXOv/HVTr/x1U6/8ZVOf/GVTn/ - xlU4/8NVOf++Vj7/jEk2/+Th4f/39/f/3d3d/3x8fOU2NjZVAAAAKQAAABAAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAaLi4upp6en/8PDw//6+vr/fFlK/406GP+UOBH/lzYP/5U2Dv+UNQz/kzUM/5E1DP+RNgz/ - kTUP/5E2D/+SNxD/kzoU/5Q+GP+VQBz/mEUf/5pHI/+cSij/vaeh/8C/wf+8tbT/vLW1/7y1tf+9trb/ - vre3/8C9vf/i4+X/vH1q/7VTNv+7Wz//vVs//79bP/+/Wz7/wFo+/8JaPv/CWj3/w1k9/8NZPf/FWD3/ - xVg8/8VYPP/FWDr/xVg6/8NXOv/DVzr/v1g7/7RUPf+DXlT/9fX1//Hx8f+rq6v/cHBwswAAADIAAAAb - AAAABgAAAAAAAAAAAAAAAAAAAAF1dXU1mZmZ7Lu7u//d3d3/x7+8/4A2F/+WOhT/mDgQ/5g4D/+XNw// - lTcO/5Q2Dv+TNQ7/kjYO/5I2D/+SNhD/kjcQ/5M5E/+UPRf/lUAa/5hDHv+aRiL/mkMf/6VeQf+/r6r/ - wMDC/7y5u/+8uLj/vbm5/8PDxv/b29z/y6CR/65SNP+3Wz7/uFw//7tcP/+8Wz//vVs//79bP//AWz// - wFo+/8BaPv/BWj7/wlo+/8JaPf/CWT3/wlk9/8FZPf/BWDz/wVk8/79YO/+7WD//m0o0/8G4tf/4+Pj/ - 5ubm/4GBge09PT1ZAAAAJgAAAA0AAAABAAAAAAAAAAAAAAAEjo6OoKmpqf/Hx8f/9fT0/35TQf+TOxj/ - mjoS/5s5Ef+aORD/mTgQ/5g3D/+VNw//lTYO/5Q2Dv+TNw7/lDYQ/5I3EP+TOBH/lTwV/5U/GP+YQRz/ - mkMf/5tHJf+bRSH/o1U2/7WJef/Aq6T/wLKt/8i3sv/MrqX/vX9p/6xSM/+zWjz/tFs+/7ZbPv+3XD// - uVw//7tbP/+8XD//vlw//75bP/+/Wz//v1s+/79bPv+/Wz7/wFo+/8BaPv/AWj3/v1o9/79ZPf+/WTz/ - vFg7/7RYPv9/UUP/8fHx//Dw8P+pqan/bm5urQAAAC8AAAAWAAAABAAAAAAAAAAAAAAAB5mZmeC7u7v/ - 3t7e/8vFwv+ORij/nUEb/506Ef+dOhL/mzoR/5o5EP+ZOBD/mDgP/5c3D/+XNw//lDcP/5Q3EP+TNxD/ - lDgQ/5U5E/+VPRf/mEAa/5lCHv+aRiL/nEkm/51IJf+eRyP/o1Av/6ZVNf+pWDf/p1Ev/6lRMP+uWTn/ - r1o8/7JaPf+0Wz7/tVs+/7ZcPv+3XD//uVw//7tcP/+8XD//vFw//71bP/+9Wz//vls//75bP/+9Wz7/ - vlo+/75aPf+9Wj3/vVk8/7tZOv+4WT7/l0ky/8S8uf/29vb/3Nzc/3t7e+MAAAA2AAAAHgAAAAcAAAAA - AAAAAYyMjG6pqan+xcXF/+/v7/+JaFv/olEv/6dKJf+hPRP/njwS/548Ev+cOhL/mzkR/5o4Ef+ZOA// - mDgP/5c3D/+VOBD/lTgQ/5U4Ef+VORL/lz0V/5c/Gf+ZQRv/mkUf/5tGI/+dSSX/oUwo/6JOK/+kTyz/ - plEu/6lTM/+rVzb/rFg4/61ZOf+vWjz/sFo8/7NbPf+0Wz7/tVw+/7ZcPv+3XD//uFw//7lcP/+5XD// - u1w//7tbP/+7Wz7/u1s+/7tbPv+7Wj7/u1o9/7lZPP+5WTz/t1g9/65VO/+EYFT/8/Pz/+7u7v+YmJj+ - YGBghgAAACYAAAANAAAAAQAAAAKWlpa4srKy/9vb2//e3Nv/iUsw/6lSLv+tUCv/pUUc/6E8Ev+hPRP/ - njwS/506Ef+cOhH/mzkQ/5o5EP+ZOA//lzgQ/5g4EP+XOBH/lzkR/5c6E/+YPRf/mD8a/5pCHf+bQx// - kkAd/4U9Hv+FPSH/hj8j/4hBJf+JQyf/ikIm/6FRMf+rVzj/rVg4/65ZOv+vWjz/sFo9/7NbPf+0Wz3/ - tFs+/7ZcPv+2XD7/t1w+/7dcPv+3Wz7/uFs+/7hbPv+4Wj3/uFo9/7daPP+3Wjz/t1k8/7VYOv+yWTz/ - h0Qw/+Pg3//29vb/u7u7/3R0dMIAAAAuAAAAEwAAAAIAAAAFn5+f5sHBwf/n5+f/r6Kd/5xOLf+vUy3/ - r1Er/61PJ/+kQBj/oj0T/6E9E/+gPBP/njwS/508Ef+cORH/mjkR/5k5EP+ZORH/mDkR/5g5Ev+XOhL/ - mDwU/5k+GP+ZPxj/nUgk/7eaj/+2q6n/taek/7eqpv+5rar/wri2/62Zkf+JRSr/qlQ1/6pXN/+sVzj/ - rVk5/65ZOv+vWTz/sFo8/7JbPf+zWj3/tFo+/7RbPv+1Wz7/tVs+/7VbPv+1Wz3/tVo9/7VaPf+1Wjz/ - tVo8/7VYOv+0WDn/slc6/51MM/+snZf/8/Pz/9/f3/98fHzoAAAAMwAAABoAAAAFjIyMSqurq/3Gxsb/ - 8fHx/41sX/+qVjP/slMt/7JSLP+wUyz/rEwl/6Q/Ff+jPhT/oj4U/6E9E/+gPRL/nTwS/5w6Ef+bORH/ - mzkR/5o5Ef+ZORL/mToS/5g6Ev+ZPRX/mDoT/6BPLv/PyMf/0tDR/9LMzv/T0ND/1NHR/9vZ2//Rysr/ - iUku/6VRMP+nVDX/qVU2/6pXN/+rVzf/rFg5/61ZOf+uWjr/r1o8/7BaPP+yWjz/slo9/7JaPf+zWjz/ - s1o8/7NaPP+zWTz/s1k6/7JYOv+yWDn/slc4/7BXOP+nUzb/hGBU//Dw8P/t7e3/jo6O/VJSUmoAAAAe - AAAAB5aWlomwsLD/1dXV/+no5/+MWEL/slo1/7VVLv+0VS3/s1Qt/7JULf+sSyP/pD8U/6Q+FP+jPhT/ - oj0T/6A9E/+ePBL/nTwS/5w6Ef+bOhH/mzoS/5o6E/+aOhP/mjwT/5g5Ev+hTyv/0cbF/9PP0P/Sy8z/ - 0szM/9POzv/Z09T/0crJ/4NJMf+hTCv/pVIx/6VUM/+mVDX/p1U1/6pXNv+rWDj/rFg4/61YOf+tWTn/ - rlk5/65ZOv+vWTr/r1k6/69ZOv+vWDn/r1g4/69XOf+vVzj/r1c3/65VN/+tVDb/qVQ4/39HNP/n5eX/ - 8fHx/6Ghof9qamqdAAAAIwAAAAqcnJy2ubm5/+Li4v/Mycj/lVE2/7VaNP+3Vy//t1Uu/7VVLf+0VC3/ - s1Qu/6xLI/+mPxX/pT8U/6M/Ff+iPhP/oT0T/6A8E/+ePBL/nToR/5s8Ev+cOhP/mzwT/5o8E/+ZOBH/ - nkgj/9DBvf/V0tP/08zM/9LMzP/SzMz/1M/P/9vY2f+MZFP/kD4c/6ZSMP+kUTD/pVIx/6VTM/+mUzT/ - p1U1/6lVNv+qVTb/q1c2/6tXN/+rVzf/rFc4/6xXOP+tVzj/rVc3/61VN/+tVTf/rVU2/61VNv+sVDX/ - rFM0/6hSNP+IQij/zMfF//Dw8P+6urr/dXV1wQAAACYAAAALoaGh1cLCwv/r6+v/s6up/6FVN/+5WjP/ - uVkx/7lYMP+3VzD/tlcv/7VVL/+0Vy//rUsj/6dAFf+mQBX/pD8V/6I+FP+iPRP/oT0T/6A8Ev+dPBL/ - nToS/5w8E/+bPBP/mzoS/5o6E//Ir6b/09PU/9DKyf/Oycn/zsjI/87Ix//V0tP/uaul/3UzGP+eSif/ - pFAu/6NQL/+kUC//pFEw/6RSM/+lUzP/plM0/6dUNP+nVDX/qVQ1/6lUNf+qVDX/qlQ1/6pUNf+qVDX/ - qlM0/6pTNP+qUzT/qlIx/6lRMf+nUTH/kUUo/6+jnv/v7+//z8/P/3p6etoAAAAqAAAADaampunOzs7/ - 8PDw/6CRjP+pWzv/vFs1/7xZM/+8WTH/uVgx/7hXMP+2VzD/tlcv/7RYL/+vTiX/qUEX/6Y/FP+lQBX/ - pD4U/6M+FP+iPRT/oTwS/548E/+ePBP/nTwU/509E/+ZNQn/u458/9DQ0//KxcX/ycLC/8fBwf/HwcH/ - x8HB/9PR0/+iiX//di8R/55KJv+jTyz/ok8s/6NQLv+iUC7/o1Ev/6RRMP+kUjH/pVIx/6VSM/+lUjP/ - plIz/6ZSM/+mUjH/plIx/6ZRMf+mUTD/plAw/6ZQL/+mUC//pE8v/5ZHK/+XgXj/7Ozs/9vb2/99fX3r - AAAALAAAAA6qqqr11dXV//Ly8v+TgHn/tGA9/79cNf+/WzT/vVoz/7xZM/+7WTH/uVcw/7hXMP+2Vy// - tVcw/7BRKP+qQhn/pj8V/6ZAF/+lPxX/oz8U/6I+E/+hPRL/oD0T/6A9FP+ePRT/mzcL/6lcPf/Hw8X/ - w7+//8K8vP/Au7v/v7m5/8C5uf/CvL3/1NHT/6SKf/91LhH/m0Ui/6NOKv+hTCv/oUws/6FOLP+hTy3/ - oU8t/6FPLv+jUC7/o1Av/6NQL/+jUC//pFAv/6RQLv+kTy7/pE8t/6ROLf+kTi3/o04s/6FMLP+ZSCr/ - iGtf/+vr6//g4OD/fn5+9gAAAC0AAAAPrq6u+9fX1//z8/P/kXx0/7pjP//AXTb/wFw0/79cNP++WzT/ - vVs0/7xaM/+7WjP/uVkx/7dYMP+2WTH/tFQt/6xHHv+nQBX/p0AV/6VAFf+kPxX/oz4T/6I+FP+hPhT/ - oD4V/549FP+dOQ7/uJeK/8DAwv+8trX/vLW1/7u0tP+5tLT/u7W1/7+4uP/Y1dj/tqGZ/3QzGP+UPxv/ - okso/55LJ/+gSyj/oEsq/6BMKv+gTCv/oEwr/6BMLP+hTCz/oUwr/6FMK/+hTCz/oUwr/6FLK/+hSyr/ - oUsq/6FKKP+gSij/mkgo/4VjVv/r6+v/39/f/39/f/sAAAAtAAAAD7Gxsf7Z2dn/9vb2/494b/++ZUH/ - xF42/8JeNv/BXjX/wF01/8BdNf++XDT/vVs0/7xaM/+5WjP/uFkx/7dZMf+1VzD/r04k/6pCGP+nQBX/ - pkAX/6VAFf+kPxX/oz4U/6E/FP+hPhX/njkP/6VPLP+8sK7/ube5/7iwsv+3sLD/t7Cw/7ewsP+7tLT/ - vri4/9zb3f/Lvrj/dzkh/5E8GP+hSSb/nUkl/51JJv+eSSf/nUon/55KJ/+dSif/nUon/51KJ/+dSif/ - nkon/55JJ/+eSSf/nkkm/55IJv+eSCb/nUgm/5lGJf+BXU7/6+vr/93d3f9/f3/+AAAALAAAAA6ysrL+ - 3t7e//j4+P+Re3P/wGhD/8ZgN//GYDf/xV43/8JeNv/BXjb/wF01/79cNP++XDT/vVo0/7taM/+5WTP/ - uFgx/7dZM/+zUiz/rUgd/6lAFf+mPxX/pj8X/6U/Ff+jPxT/oz4V/6I+Ff+eNwv/q2JD/7u1tv+3tbf/ - t7Cv/7awsP+2sLD/uLOz/7+4uP/Dvr7/4uHi/9XKxv92Nx3/kzwY/55II/+cRyP/nEcj/5xHJP+cRyT/ - nEck/5tHJP+cRyT/nEck/5tHJP+bRyT/nEYk/5xGJP+cRiP/nEYj/5tHJP+WRiT/gV1P/+rq6v/a2tr/ - f39//gAAACoAAAANsrKy++Pj4//39/f/kn94/75oRv/IYjn/yGE4/8ZgN//FXjf/w142/8JeNv/AXTX/ - wF00/79cNP+9WzT/vFo0/7taM/+4WTH/t1gz/7ZYMP+yUCj/rEYb/6dAFf+mPxT/pT8V/6Q/Ff+jPxX/ - oj8V/6A3C/+sYUH/u6+t/7i2uP+3r6//t7Cw/7m0tP+/ubj/x8HB/87IyP/s7O3/z764/3MtD/+ZQBv/ - nEMf/5tFH/+bRR//mkUh/5pDIf+aQyH/mkUh/5pDIf+aQyH/mUMh/5pDIf+aRSH/m0Ui/5tFIv+aRiP/ - lUMi/4NhVf/l5eX/2NjY/39/f/sAAAAmAAAAC6+vr/Xl5eX/+vr6/5eIgv+5aEj/yWU9/8piOf/JYTn/ - x2E4/8ZgOP/FXjb/wl42/8FeNv/BXTX/wFw1/75bNP+9WzT/vFoz/7lZM/+4WTH/t1kx/7VXMP+wTyf/ - q0Yc/6dAFf+mPxT/pD8V/6NAFf+kPxf/oTYL/6lVMf+7q6b/uLe5/7iysv+8trX/wby7/8nDw//TzM7/ - 2dTU//n7/f+wlIj/eSgG/51DHf+aQh3/mkId/5pCHf+ZQh3/mkIe/5lCHv+ZQh7/mUIe/5lCHv+YQh// - mEMf/5lDIf+ZQyH/mUMi/5BAIP+Hal7/4uLi/9bW1v9+fn72AAAAIwAAAAqtra3p4eHh//r6+v+rop7/ - smVH/8xnP//MZDz/zGM8/8pjOv/IYjn/x2E5/8ZhOf/DYDf/w143/8JdNv/AXDb/v1w1/75cNf+8XDP/ - u1sz/7laM/+4WDH/t1kx/7VVMP+wUCj/rEcd/6dBF/+kPhT/pD8V/6Q/F/+hOAz/qVIt/7ysp/+8u7z/ - wLi5/8a/v//OyMj/19HR/97Z2f/n4+T/+Pf3/4ZROf+QNhD/nUIc/5pBHP+aQR3/mkId/5pCHf+ZQhz/ - mUEd/5lCHv+ZQh7/mEIe/5hCHv+YQh7/mEIe/5dDIP+KPBz/mIR8/+Xl5f/Ozs7/fX196wAAAB4AAAAH - qqqq09jY2P/5+fn/vbi3/6tmSf/Oa0T/zmU9/85lPf/MZDz/ymM6/8ljOv/IYjn/xmE5/8VhOP/FYDf/ - w143/8JdNv/AXTX/v1w1/71cNP+8WzT/u1oz/7laM/+3WTH/tlkx/7VXMP+yUiv/rUoi/6lDGv+lQBf/ - pD8V/6I2Cv+rWDf/wbm4/8XBwf/Lxcb/087O/9vV1f/j3d3/5+Li//z8/f/Js6v/fCoI/51CHP+bQRv/ - m0Eb/5pBHP+aQRz/mkEc/5lBHP+ZQRz/mUEd/5hBHf+YQR3/mEEd/5dBHf+UQR//gzcY/6memf/k5OT/ - wMDA/3t7e9oAAAAaAAAABaenp7PNzc3/+Pj4/+De3v+gZ0//z3BK/9BlPP/PZj3/zmY9/85lPf/LZDz/ - ymQ8/8ljOv/IYjn/xmE4/8NhOP/DYDf/wl43/8FdNf/AXDX/vlw1/71cM/+8WzP/uVoz/7laM/+4WTH/ - tlcz/7VXMP+0VC7/r1Ao/6tKIv+nRRz/ojYJ/7iFcf/MzM//0cvL/9nT0//h29v/5uLi/+zm5v/y7u7/ - 9vPz/4ZHLP+YOhP/nEEb/5tAG/+bQRv/m0Eb/5pAG/+ZQRz/mUEc/5lBHP+YQRz/mEEc/5dAG/+XQBz/ - k0Ae/3o3G//Au7n/4uLi/6mpqf92dna/AAAAEwAAAAKkpKSFx8fH//f39//z8vL/mnJi/9F3VP/SZjz/ - 0mY+/9BmPf/PZj3/zmY9/8xlPf/LZDz/ymQ6/8liOf/HYjn/xWE4/8NgOP/DXjb/wl43/8FcNf+/XDX/ - vlw1/7xcNP+7WzP/uVoz/7lZM/+3WDH/tlcx/7VXMP+zVTD/slQv/6xLI/+2Zkb/3tnZ/+Db2//i3Nz/ - 5eDg/+rk5P/t6en/8Ovr//////+keWb/jC8I/51BGf+cPxr/m0Aa/5tAGv+bQBr/mkAb/5k/G/+ZQBv/ - mUAb/5hAGv+XQBr/lz8a/5A+Gv96RC7/z87O/93d3f+Xl5f/b29vlgAAAA0AAAABoaGhRcDAwP329vb/ - /v7+/6aOhf/Melr/1GtB/9NpP//SZz7/0Wc9/9BmPf/OZj3/zmU9/8xkPP/LYzz/yWM6/8hiOf/HYTj/ - xWA4/8VgOP/DXTf/wlw1/8NdNf/BXTX/vVw1/7xbM/+5WzP/uVoz/7hZM/+2WDH/tVcw/7RUL/+yUiv/ - tl48/+rg3P/z8vL/8+7v//Tw8P/08PD/9fLy//Xw8P//////vqGT/4kvCf+gQhv/nUAa/5w/Gv+bQBr/ - mj8a/5o/Gv+aPxr/mUAa/5lAG/+YQBv/mEAc/5dBHv+PPRv/iGVX/9jX1//T09P/ioqK/WBgYFoAAAAH - AAAAAAAAAACvr6/k6Ojo//39/f/Gvrr/wXxh/9h2UP/VaT7/1Wk//9RnP//SZj7/0WY9/9BmPf/OZj3/ - zmU9/8xkPP/LYzr/yWI5/8hhOf/GYTj/xWA4/75ZMP+mSib/slAq/8JeNv/AXTX/vVw0/7xbNP+7WjP/ - uVoz/7dZM/+2WDD/tFIr/7dgPP/v5uT/9/X2//j19f/59/f/+/j4//z4+P/79/f//////9O+tv+TPxz/ - qVAr/6VPKv+lTij/pEwo/6NMKP+iTCj/oUso/6FLKP+gSyj/oEwo/55MKv+cTCv/jEEi/6mZk//e3t7/ - xsbG/319fecAAAAWAAAABAAAAAAAAAAAqamps9PT0//8/Pz/8fDw/7CAbf/bhmT/1Wc9/9hqQP/Vaj// - 1Gk//9NnPv/SZj7/0GY+/89mPf/OZT3/zGQ9/8tkPP/KYzr/yGI5/8ZcM//brJr/0MG7/5lgSv+aQBz/ - uFMs/8FcNf/AXTX/vlw1/7xbNP+8WzT/u1kz/7BIHv/HinP//P3+//v4+P/8+Pj//Pn5//z5+f/8+Pj/ - +/f3///////Xwbj/l0Ie/6xTLf+pUi7/qVIu/6ZRLf+lUS3/pVEs/6RRLP+jUCz/o08r/6JOK/+fTir/ - nEsp/4RHLv/Ewb//5OTk/6SkpP94eHi8AAAADQAAAAEAAAAAAAAAAKSkpGbJycn++Pj4//////+xmY// - 2Ipr/9tzSv/Ya0D/2GtA/9hrQP/VakD/1Gk//9JnP//RZz7/0GY+/89mPv/OZT3/zGQ8/8piOf/IXjX/ - 79rS///////y7+//vqKY/5pbQ/+aRSP/pkch/65MJP+yTyX/r0wj/6dHHv+2c1j/9Ozp///////9+/v/ - /fz8//78/P/9+/v//fn5//n39///////y6+j/5tCHP+tUy3/qlEs/6lRLf+nUSz/plAr/6VQK/+lTyv/ - o08q/6NPKv+iTir/oU4r/5ZGJP+Sbl//0dDQ/9HR0f+QkJD+bm5udQAAAAYAAAAAAAAAAAAAAAAAAAAA - sLCw3ubm5v//////5eHg/8SHb//gh2P/2ms//9ttQv/ZbEL/2GxC/9dqQf/VakD/1Go//9JpP//RZz// - 0Wc+/89mPf/OYzz/ymA3//Pa0f/+/////fv8///////29PT/2cnD/7+ekv+wgnD/rXpl/7WGcf/Stqv/ - +/j4/////////Pz///39///9/f/+/Pz//fv7//z4+P/59fX//////76Rf/+jQx3/rVIt/6xRLP+rUSz/ - qlEr/6dQK/+mTyr/pU8r/6VPKv+kTyj/ok4q/6BMK/+MQyT/tqyo/93d3f+7u7v/fHx84QAAABAAAAAC - AAAAAAAAAAAAAAAAAAAAAKioqJjR0dH/+vr6//7+/v+3mIz/3Yxr/952Tv/bbUP/225D/9psQv/ZbEH/ - 2GxB/9VqQf/UakD/02o//9JpP//RZz7/0GQ8/8xiN//23dT////////9/f///f3///////////////// - /////////////////////////////v7///7+///9/f///f3//vv7//35+f/79/f/+Pb2//79/f+rZUj/ - rUwl/65SLf+tUi3/rFAs/6tQK/+rUCv/qVAq/6dPKv+mTir/pU4o/6NOKf+cRiH/kmVS/8vKyv/V1dX/ - mZmZ/3Z2dqIAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAACioqIrtLS06u3t7f//////7Obk/82SfP/ji2r/ - 3W1C/9xvRf/bbkP/221D/9ptQ//YbEL/12tB/9VrQP/UaUD/0mk//9FmPf/PYzj/+ODY//////////// - /////////////////////////////////////////////////////////////v7///z8//35+f/79/f/ - 9vTz///////iysD/pUgi/7JTLP+vUy3/rlMs/61SLP+sUCv/q1Ar/6pPK/+nTyr/pk8q/6ZOKP+kTij/ - k0Qk/7muqf/a2tr/wcHB/4GBgexiYmI4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmpqaDS0tL/ - +Pj4///////ErqX/3JBy/+SBW//ebkP/3W9G/9xuQ//bbkP/221D/9psQv/YbEH/12tB/9VqQP/TZz7/ - 0WQ5//zk2v////////////////////////////////////////////////////////////////////// - //39//37+//7+Pj/9/T0//f3+P/9+/n/tmtM/7JPJv+zVS7/sFQt/69TLP+uUyz/rVIr/6xRK/+sUCr/ - q08q/6dPKv+mTyv/nkMe/553Zv/Ix8f/09PT/5ubm/95eXmoAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACioqIlsbGx4eXl5f/9/f3/+vn4/8efj//jjmz/43dO/+BvRv/eb0b/3W5F/9tuQ//bbkP/ - 221D/9lsQv/Xa0H/1WpA/9JkOf/+5dv///////////////////////////////////////////////// - //////////////////7+//78/P/7+Pj/9vT0//f5/P//////yYtx/7BMI/+2WDH/tVUw/7NVLv+yVC3/ - sFQt/69TLP+uUSv/rVEq/6xQKv+qUCr/pUol/5dSNv/Cvbv/3d3d/7i4uP+AgIDjZWVlLgAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKenp4XKysr9+Pj4///////o4Nz/1ZuD/+aNa//jdkr/ - 4XFG/+BvRv/dbkb/3G5F/9tuQ//bbUP/2m1C/9lsQv/UZDj/6aGF//////////////////////////// - //////////////////////////////////7+//78/P/7+Pn/+/v8///////98u7/zIdr/7VOJP+7WjP/ - uFkx/7ZXMf+1VzD/tFUu/7NVLv+yVC7/r1Ms/65RK/+tUSr/q08p/5tGIv+3pZ//z8/P/87Ozv+VlZX9 - enp6jAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArKysv9bW1v/39/f/ - /////9nLxP/Zl33/6Itq/+RzSP/icUf/4W9G/95vRv/dbkX/3G5F/9tuQ//bbUL/2W1C/9VkOP/egF3/ - 9cOy///38v////////////////////////////////////////////////////////////7y7f/ltaL/ - xWZC/7tTKP++XDX/vFs0/7taM/+5WTP/uFgx/7ZXL/+1Vy//tFUu/7NVLv+wUyz/rlMr/6VHH/+si33/ - xcXF/9fX1/+kpKT/f39/wwAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAKSkpDuysrLg39/f//j4+P/+/f3/2cS6/9yTdv/pi2j/5XVJ/+NxR//hcUf/4G9G/95uRv/dbkX/ - 3G5D/9ttQ//abUL/12Y6/9NhNf/Yb0f/45Jz/+63ov/3z7///eTZ///v6v//7uf//+7n//zl3P/10MH/ - 6rek/9qRdP/IZ0H/v1Qq/8JaM//CXjf/wF01/75cNP+9WzT/vFo0/7taM/+5WDH/t1cw/7ZXL/+1Vy// - s1Uu/6pHHv+ufWr/w8HB/9zc3P+0tLT/g4OD4nV1dUEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApqamb7+/v/Lq6ur/+vr6//79/f/Xv7b/3pV4/+qPbP/meEz/ - 43FG/+JxR//hcEb/3m9G/91uRv/cbkX/225F/9ttQ//abEL/2Go//9RjN//RYTT/0WA0/9FlOv/SakH/ - 0Wc//9BpP//OZDr/yFsw/8dZLf/GWi//x142/8ZhOP/FYDj/w143/8JeN//BXTX/v1w0/75cNP+9WjT/ - u1o0/7lYMf+4WDD/t1cv/7BJIP+ud2L/wr++/+Dg4P/Dw8P/kJCQ8319fXQAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiMxsbG+fDw8P/7+/v/ - +fn4/+HNxf/en4X/7JJv/+p+VP/lcUf/5HNI/+FwRv/gb0b/3m9G/91uRf/cbkX/225D/9ptQv/ZbEL/ - 2GxC/9VrQf/UaT//0mc+/9FmPf/RZjz/z2U8/85lPf/OZTz/zGQ8/8pjOv/IYzr/x2I5/8VhOP/DYDj/ - wl43/8FeNf/AXTX/wFw0/75bNP+8WjT/u1cv/7FLJP+1g3D/xMHA/9/f3//Ly8v/l5eX+YCAgJAAAAAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAKqqqprJycn77u7u//r6+v/6+vr/4dbR/96tl//slnX/7Ipj/+Z1Sf/kc0f/43NH/+FvRv/gb0b/ - 3m5G/9xuRf/cbkP/225D/9ptQv/ZbEL/12tB/9VrQP/UakD/02k//9JnP//QZj7/z2Y9/85lPf/MZT3/ - ymQ6/8ljOf/IYjr/xmE4/8VgOP/DYDf/wV42/8BeNf/AXTX/v1gt/7NTLv+3koT/xMLB/+Dg4P/Ly8v/ - m5ub+4ODg54AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqmsbGxvno6Oj/+Pj4//z8/P/r5eP/3r2t/+aaff/vk3D/ - 64FZ/+V0R//kc0f/43FH/+FwRv/eb0b/3W5F/9xuRf/bbkP/225D/9ptQv/ZbEH/12tB/9VrQf/TakD/ - 02c//9FmPv/QZj3/zmY9/85lPf/MZDz/ymM6/8liOf/IYjn/xmE4/8VgOP/FXjX/vVQp/7VmRv/Brqb/ - w8PD/+Hh4f/ExMT/nJyc+YSEhJ0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiMv7+/8t3d3f/29vb/ - //////Hv7//m1Mz/366Z/+uXdv/wj2v/7IBY/+d2Sf/kc0j/4nNH/+FwR//ecEf/3W5F/9xuRf/bbkP/ - 221D/9lsQf/Ya0H/12tB/9RqQP/TZz7/0mY+/9FmPf/PZj3/zmY9/85lPf/MZT3/y2Q8/8pjOf/FWjD/ - vFw3/7qMev/Dvbv/1tbW/93d3f+4uLj/lpaW84eHh48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAKampm+ysrLg1tbW//Pz8//8/Pz/+vr6/+vm5P/hysD/4KuU/+qZef/ukGv/7YZd/+p8Uv/mdkv/ - 43RJ/+JzSP/gcUj/3W9H/91vRf/bbkX/2m5D/9ltQ//XbEL/12tB/9VqQP/UakD/02k//9JpP//Raj// - z2Y9/8liOf+/ZD7/u4Nt/8Gzrv/Hx8f/6enp/9fX1/+wsLD/jY2N4YeHh3AAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSkO6ysrL/Kysr94eHh//b29v/+/v7/9fX1/+rl4//izsX/ - 4Lek/+Saff/pkW3/7Yli/+uCWv/pfVP/5nlP/+R3TP/idUz/4HRJ/91zSP/ecUj/3XFH/9twR//bcEb/ - 2W9I/9ZuRf/RbEL/xmhD/7xyVv+4jHv/v7Ou/8jGxv/l5eX/4ODg/8PDw/+mpqb9jY2Nv4aGhj0AAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp6enhbGxseDR0dH/ - 5ubm//b29v/+/v7/+fn5/+vp6f/k2tb/2cS7/9WtnP/Xl3//2pBy/9yIaP/ehWL/4IJe/+GAW//gf1j/ - 3X5X/9d8V//ReFb/yndV/8B2Wf+3fmj/s5CD/7qoof/Dvbr/0tLS/+3t7f/k5OT/zc3N/7Gxsf+SkpLh - jY2NhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACioqIlqampoLS0tOrQ0ND/4uLi//Ly8v/7+/v//f39//f39//l5OT/39va/9bMyP/SwLn/ - yLCn/72il/+6n5T/uZ2S/7adkv+3n5b/vKmi/76yrf/Gv7z/zMvK/9ra2v/s7Oz/8fHx/+Pj4//Kysr/ - tbW1/5mZmeqQkJChjIyMJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACioqIrp6enmK+vr97Hx8f+1NTU/+Pj4//y8vL/ - 9/f3//r6+v/4+Pj/9/f3//X19f/v7+//6urq/+Xl5f/o6Oj/6Ojo/+3t7f/u7u7/7+/v/+3t7f/o6Oj/ - 1tbW/8DAwP+vr6/+mJiY3pOTk5iPj48rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - pKSkZqioqLOurq7kv7+//crKyv/Q0ND/2tra/+Pj4//r6+v/7+/v//Ly8v/x8fH/7u7u/+fn5//b29v/ - 0tLS/8bGxv+8vLz/r6+v/Z2dneSYmJizlJSUZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoEWjo6OFpaWls6ioqNOrq6vorq6u9bCwsPuwsLD+ - r6+v/qysrPuoqKj1pKSk6KCgoNOcnJyzmZmZhZaWlkUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAA///wAAAP/////8AAAAP/////AAAAAP////wAAAAAP///8AAAAAAP///gAAAAAAf/ - /8AAAAAAA///gAAAAAAB//8AAAAAAAD//gAAAAAAAH/8AAAAAAAAP/gAAAAAAAAf+AAAAAAAAB/wAAAA - AAAAD/AAAAAAAAAP4AAAAAAAAAfgAAAAAAAAB8AAAAAAAAADwAAAAAAAAAOAAAAAAAAAAYAAAAAAAAAB - gAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAA - AAAAA8AAAAAAAAADwAAAAAAAAAfAAAAAAAAAB+AAAAAAAAAP4AAAAAAAAA/wAAAAAAAAH/gAAAAAAAAf - +AAAAAAAAD/8AAAAAAAAf/4AAAAAAAD//wAAAAAAAf//gAAAAAAD///AAAAAAAf//+AAAAAAD///8AAA - AAA////8AAAAAP////4AAAAB/////4AAAAf/////8AAAP//////+AAH///8oAAAAMAAAAGAAAAABACAA - AAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAHAAAACQAAAAoAAAAM - AAAADAAAAAwAAAAKAAAACQAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAKAAAAEAAAABYAAAAb - AAAAHwAAACIAAAAlAAAAJgAAACUAAAAjAAAAHwAAABsAAAAWAAAAEAAAAAoAAAAFAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAADQAAABYAAAAg - AAAAKwAAADQAAAA8AAAAQwAAAEgAAABMAAAATQAAAEwAAABIAAAAQwAAADwAAAA0AAAAKwAAACAAAAAW - AAAADQAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA0AAAAY - QEBBRlRUVXxdXV6mZWVmyHR0del0dHX3c3N0/3NzdP9zc3T/dHR1+XV1du1iYmPQVlZWtUVFRpcpKSlx - AAAATgAAAEIAAAA0AAAAJQAAABgAAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAI - ODg4I1paW2tnZ2i3cnJz54KChOGurrL309PT/+bm5v/19fX//v7+//7+/v/+/v7/9/f3/+bm5v/U1NT/ - vLy+/4GBk/Rvb3jxXl5gy0FBQpUUFBRgAAAARgAAADQAAAAiAAAAEwAAAAgAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAzQ0NBRgYGFncHBx0YKCgtyzs7Xr9PT1/u3t7f/o5+f/6+fl/8vCv/+1p6H/pJCJ/6GIgf+nkIr/ - taOf/8e8uv/f2dj/4uHg/+3t7f/z8/X+rKy49np6iO5paWvfQUFClgwMDFoAAABBAAAALAAAABkAAAAL - AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAEXl5fPG9vcLSEhIXZ1tbW+Pj4+P7U09P/mpWT/2NRSP9tSz7/f1FA/41VQv+ZWkb/ - oV1J/6heSv+nXUn/o1pH/51WRP+SUkT/g1FF/3haVP+knZv/19XV//b2+P/ExM35eXmI7WBgYs0rKyx6 - AAAASgAAADMAAAAdAAAADAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAANnZ2hYdnZ33Lu7u+T7+/v+397e/4qAfP9kRTj/e0k1/4xROf+XVTv/ - n1k9/6ZbP/+sXED/slxB/7dcQP+5W0H/ulpB/7xYP/+6V0D/tldB/65XQ/+dUUL/hFJH/5mIhP/X1dT/ - +vr7/6qqt/RwcHPrPDw9kQAAAFAAAAA2AAAAHgAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmtrbGyEhIXV4+Pj9Orq6v+ZlJH/Yj8w/3dCK/+HSC3/ - kk0v/5pQM/+hUzX/p1c5/6xaPP+yWz3/tlo8/7xbPf/AWz//wFk+/8JXPP/FVTr/xVQ4/8RSOf++Uzv/ - tFNA/6BSQ/+GUkj/raSi/+rq6v/Z2d/8d3d+6kVFRZ4AAABRAAAANgAAABwAAAAKAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbm5va5KSktP4+Pj82tnZ/3FjXf9sPCf/ - fj8j/4lBIv+SRST/mEop/59OLv+jUjL/qFY3/6pSM/+iTjH/n1Y9/51QOf+lSC3/v1c5/8RZPf/GVjr/ - x1M3/8lQNv/JUDX/xk82/75SO/+wU0H/lFNG/5F6df/b2tr/9PT2/n19iOpFRUWeAAAATwAAADEAAAAY - AAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwcHFpk5OU0f7+/v/Ozc3/ - YElA/3M6If+AOhv/iTsZ/48+G/+UQyD/mUgl/55NK/+iUTD/pFIy/690Xv+/p6D/zcTD/8zBv/+zk4r/ - oldC/7tSN//GWDz/x1Q5/8lTN//LUDT/y1A0/8lQNf/DUTn/t1VA/55VRf+GYVv/09HQ//39/f9+foTo - RERFmwAAAEgAAAApAAAAEQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJyc1OIiIjQ - +fn5/M/Pz/9cPjH/eDke/4Q3Fv+JNhL/jDgS/5A7Fv+UQR3/mEck/51MKf+fSSj/rW9X/9bT1P/X19r/ - 1dHR/9fT1P/g4OH/187M/6pXP//DWDv/xFc7/8dWOf/JUzj/ylE3/8pRNf/JUTX/xFI5/7pWQP+hVkX/ - hF1U/9XT0//19ff+dXV46Do6OocAAAA9AAAAHwAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - c3N0L3h4edrm5uby3t7e/2FJQP95OR7/hTcU/4o1D/+MNA//jTcQ/487Ff+TPhv/lkQh/5pJJ/+bRyX/ - v52P/87N0P/IwsL/x8HB/8jCwv/Mx8f/3Nzd/7V+bv+5TzL/w1k9/8RYPP/HVzr/yFQ5/8lTOP/JUzf/ - yFM2/8RUO/+5V0H/n1dH/4ZoYv/g397/0dHX+W5ub+gmJiZnAAAAMAAAABQAAAAFAAAAAAAAAAAAAAAA - AAAAAAAAAABzc3QJdXV2rcbGxt/y8vL/dWRd/3k5Hv+IORf/jDUP/440Df+PNQ//jjUQ/5A5E/+RPRn/ - lUIe/5hGJP+bSCX/vqWd/8TCw/+/ubn/v7m4/8C5uf/Ev7//0M3Q/7uJef+2TzH/wFs+/8FZPv/DWTz/ - xlc7/8ZXO//GVjr/x1Y6/8ZUOv/BVj3/tlpE/5hXSP+ahYD/8PDw/5qaou9aWlu4BwcHQwAAACAAAAAK - AAAAAQAAAAAAAAAAAAAAAAAAAABzc3RRioqL0v7+/v2em5n/czoi/4o8Gv+QORP/kjUQ/5E1Dv+QNQ// - jzUQ/5A4Ev+TPBb/lUEc/5dFIf+YRB//s4p6/8DAwf+8tbX/u7W1/722tv/Au7z/1dXX/79/a/+4VDf/ - vVs//79bP//AWj7/wlo9/8NZPf/DWD3/xlg8/8RXO//CWDz/vFlA/61cRv+PWkz/u7Sx//T09P50dHXq - Nzc3dwAAAC4AAAASAAAABAAAAAAAAAAAAAAAAHNzdBF1dXbF19fX6eXl5f9jQzX/iTwc/5I7FP+VOBH/ - lTcQ/5M3D/+RNw//kTcQ/5A4Ef+TOxT/lT8b/5dEH/+YRCD/oVg6/72uqv+9vL7/vby9/729vv/NzM7/ - 0a2i/7NZPP+3XD7/u1w//7xbP/++Wz//v1s//8BaPv/BWj7/wVo+/8FaPf/BWT3/vlo+/7hcQv+hWkf/ - imRZ/+Tk4/+oqK7zYWFiww0NDUAAAAAbAAAABwAAAAAAAAAAAAAAAHNzdFSMjIzR/f39/YyGhP+APyT/ - kz0X/5g8FP+ZORH/lzkR/5Y4EP+VNw//lDgQ/5Q4Ef+TORP/lT4Z/5dDHf+ZRiP/mkYj/6NaPP+vfGj/ - tIt7/7iOfv+7fmf/rVg5/7FZO/+0Wz//tlw//7hcP/+7XD//vFw//71bP/++Wz//vls//79bPv+/Wj7/ - vlo+/7pbP/+vXET/k1hI/7Glov/y8vL+dHR16Tk5OW8AAAAkAAAADAAAAAEAAAAAAAAAAHNzdKLExMTg - 5+fn/2xIOf+YSir/mz4W/508E/+bOxL/mToR/5g5Ef+WOBD/ljkQ/5U4Ef+UORL/lTwV/5dBGv+YRB// - mUYk/5tGIf+eRB//oUcj/6NJJv+nTiv/rFg5/61aPP+vWz3/s1s9/7VcPv+2XD//t1w//7hcP/+5XD// - uVw//7tbP/+7Wz7/u1s+/7paPv+yXEH/nlpF/4llW//l5eX/kpKW7VZWVqQAAAAuAAAAEgAAAAMAAAAA - c3N0Jnd3eN/39/f7uLWz/49SOP+kUC3/oUIb/589E/+fPRT/nTsT/5s6Ev+ZOhH/lzkQ/5Y5Ef+WORL/ - lTsT/5c9GP+YQRz/mkQf/5pSNP+VWD7/lllB/5lcRf+ZW0P/nlAy/6tYOf+sWTv/rlo8/7FbPf+zWz3/ - tFw//7VcP/+2XD//tlw//7dbP/+3Wz7/t1s+/7daPf+zWz7/p1tC/41XRv/Dvbv/zc3P+mtrbN4XFxdB - AAAAFwAAAAUAAAAAc3N0XpOTlNH6+vr/gHFr/6ZWNf+tUi//rE4n/6M/Fv+hPRT/oD0U/588E/+dOxP/ - mjoR/5k6Ef+XOhP/lzoT/5c7FP+XPRb/nUcl/8Ozrv/HxMb/x8PD/83Ky//Hv77/ikkx/6dTMv+pVzj/ - q1g5/61ZO/+uWjz/r1s9/7JaPf+zWz7/s1s+/7RbPv+0Wz7/tFs9/7RaPf+yWTz/q1o//5NWQv+ZhX7/ - 7u7u/3Z2d+o8PD1nAAAAHAAAAAcAAAAAc3N0h7Kys9ro6Oj/iGNU/61ZN/+yVC//slQu/6xOJv+kPxb/ - oj4V/6E+FP+fPRT/njsT/5s7Ev+aOxL/mTsU/5g7E/+YOhP/nkkm/83Cwf/SztD/0czM/9TR0f/Ry8v/ - hkwz/6FOLf+nVDT/p1Y1/6lXOP+qWDr/rFk6/61ZO/+uWjv/rlo8/69aPP+vWjv/r1k7/69ZO/+uWDr/ - q1k8/5pYQP+IZFj/8O/v/5iYmfFUVFWRAAAAIAAAAAkAAAAAc3N0r8/Pz+nQz87/m19H/7NbN/+2WDD/ - tVYv/7NWL/+tTyj/p0IY/6Q+Ff+iPhb/oD0U/548E/+dPBP/mzwU/5s8FP+ZOhL/m0Ec/8q3sv/U0dL/ - 0crK/9HLy//W1NX/m3pu/48+Hf+lUjH/o1Ix/6RTM/+lVDX/qFY3/6lXN/+qVzj/q1c4/6tXOf+rVzj/ - q1c4/6tXOP+rVjf/qVU3/55VPP+EVUb/z8zL/7W1tfZwcHG+AAAAIQAAAAoAAAAAc3N00ubm5va1r6z/ - q2NG/7hbNv+6WTP/t1gx/7ZXMf+0WDH/rk8n/6hDGf+kPxX/oz8V/6E+Ff+fPRT/njwT/548FP+bPBT/ - mTgP/76Yi//QztH/y8TE/8nDw//MyMj/ycLB/4hQOP+VQh//o1Av/6JQL/+iUTH/o1Iy/6RTM/+lUzP/ - p1M0/6dTNP+nUzT/qFM0/6hTNP+oUjP/pVIy/55TN/+GUT7/yMG+/9bW1v99fX7dAAAAIgAAAAoAAAAA - c3N07vf39/2dkIr/uGhH/7xcNv+8WjT/u1ky/7hYMv+3VzH/tVgy/7FSK/+pQxr/pT8V/6Q/Fv+iPxX/ - oT0U/589FP+ePRX/mjQK/6xuVv/Gx8n/wry8/8C5uf+/uLj/x8LD/7+0sv+CSTL/lT4b/6JOK/+hTi3/ - oU8u/6FQL/+hUC//olEw/6JRMP+jUTD/o1Ew/6NQMP+jUC//ok8w/5xRM/+HTzn/w7ey/+Tk5P9xcXLg - AAAAIQAAAAoAAAAAc3N0/v7+/v+OeXH/wmtI/75dNv++XTX/vlw0/71bM/+7WjP/uFkz/7dZMv+zVC7/ - rEgf/6hBGP+kPxb/pD8W/6E+Ff+gPhX/njsT/6JII/+8qaT/vLm8/7mzs/+4srL/uLKy/8bBw//Iv73/ - k2NP/406GP+hTCj/n0wp/59MKf+fTSr/n00r/59NK/+fTSv/oE0r/6BNK/+gTCr/oEwq/5tNLv+JSzX/ - qpqU/+fn5/9ycnPkAAAAIAAAAAkAAAAAc3N0/v7+/v+Jb2X/yHBM/8JeOP/DYDf/wV43/79dNf++XDT/ - vFs0/7laM/+4WjP/tlgy/7JQKP+rRhz/pz8W/6Q/Fv+jPxX/oT8V/6A6Ef+kUC3/t6ml/7e2uf+1rq7/ - ta+v/7iysv/Iw8T/3Nvb/593Zf+MNxL/oEgl/5tHJf+bSCX/m0gl/5tIJf+bSCb/m0gm/5tIJv+dSCX/ - m0cl/5lIKf+HSjH/nYuD/+fn5/9ycnPjAAAAHAAAAAgAAAAAc3N0/v7+/v+TenH/y3NQ/8dhOf/GYDn/ - w144/8FeN//AXTX/v100/71cNP+7WzT/uVoz/7dZNP+0VjD/rUsj/6lEGv+lPxX/pD8V/6I/Fv+fOQ7/ - ql5B/7ekn/+3tbf/tq+v/7u0tP/CvLz/0s3O/+Tg4f+OVj7/kTkT/5tFIP+aRSD/mkUh/5lEIf+ZRSH/ - mUQh/5hEIf+ZRCH/mUUi/5VHKP+ESTH/oJGK/+fn5/92dnblAAAAGAAAAAYAAAAAc3N08vn5+f2mk4v/ - yXVT/8lkPP/JYjv/x2I6/8ZgOf/DYDn/wV44/8BdN/++XDX/vVs0/7laNP+4WjP/t1kz/7RWL/+tSyP/ - qEIZ/6Q/Ff+jPxb/oTgO/6dOKP+4qaT/uba4/763t//HwMH/0svM/+bk5v/SxL//fjUW/5pBG/+aQx7/ - mEMe/5lDHv+ZQx7/mEMf/5hDH/+YQyD/l0Qh/5NGJ/+BRzD/v7Ou/93d3f5vb3DUAAAAEwAAAAMAAAAA - c3N01+np6fe8sq7/yXNR/8xpQf/MZT3/y2Q8/8ljO//GYjr/xGA5/8JgOP/BXjj/v103/75cNf+7WzT/ - uVsz/7haM/+2WTL/s1Qu/65OJv+pRR3/pEEY/6E5DP+pWDf/vre2/8TAwf/NyMj/2NPT/+Hc3f/7+/3/ - uJaI/480EP+bQhz/mUMd/5lDHf+ZQx7/mEMe/5hDHv+XQx//lkMg/5BGJv98RjD/zMXC/87OzvtsbG2/ - AAAADQAAAAEAAAAAc3N0stLS0unW09L/xHha/9BrRP/NZj3/zWU9/8tlPP/KYzz/yGM7/8ZiOf/DYTn/ - wV44/8BdN/++XDf/vVw0/7tbNP+4WzT/uFoz/7ZZM/+0VjH/rk8p/6pJIf+kPBL/uIJu/87Nzv/U0ND/ - 3tja/+fh4f/y8fL/2srE/4o4Ff+bQRr/mkEc/5lCHP+ZQhz/mUId/5hCHf+XQh3/lUIf/4xFJv93RzL/ - xcLB/7Ozs+xqamulAAAACAAAAAAAAAAAc3N0iLOzs9rs7Oz/uIVy/9h4U//RZT3/0Gc9/85mPf/MZT3/ - y2U8/8pkPP/IYjv/xGI5/8NhOf/CXjj/wV03/8BcNP++XDX/u1w0/7haM/+3WTP/tVgz/7RXMf+vUCr/ - tV48/+Tc2v/p5ub/6+fn/+/q6v/z8PH/7Ofm/4pFKP+bPRX/nUEb/5pBG/+aPxv/mUEb/5hBG/+YQRz/ - lEIf/4lGKf90Tz//4+Li/5mZmuFpaWp8AAAABAAAAAAAAAAAc3N0XZKSk9H7+/v/qZSM/+OYe//UZz7/ - 02g//9JnPv/OZj3/zWY9/8xlPf/KZDz/yWM7/8diOv/EYTr/wV43/65SL/+2Uiv/wF00/71dNP+5WzP/ - uFoz/7dZM/+zUyv/tVs4/+7l4v/39fb/9/X1//n29v/69vf/+/n7/55oUf+gRiD/pE4p/6NNKP+hTCf/ - oEwn/59MKP+eTCn/mE0t/4hNNP+EcWn/9PT0/4CAgd9lZWZJAAAAAQAAAAAAAAAAc3N0Knd3eNz6+vr8 - x8LA/+GkjP/cfVv/1Wc9/9RqP//TaD//0WY+/85mPf/NZj3/y2U9/8lkO//GWzH/04xw/9zRzP+vgG3/ - m0Uj/7NOJv+8WC7/u1gw/7hULf+uSyP/0aOR//v7/P/69/f/+/n5//v39//79/n/+vr6/6NrUv+kSyT/ - qVIv/6dSL/+kUS7/pFEt/6NRK/+gUC3/l1Ey/4FMNf+5trT/4uLi+HNzdN5YWFkaAAAAAAAAAAAAAAAA - AAAAAHNzdKrLy8vg7e3t/8mRe//lknP/1Wc9/9dsQv/Wa0L/1GpB/9JoP//QZz7/zmc+/81mPf/IWS// - 3J2D//7////3+vv/zbmz/7J/a/+0cFb/s2pM/7VtUP/Knoz//Pz9//38/f/8+vr//Pr6//z5+f/69/n/ - 8u7u/6BYO/+qTyj/qlEt/6hRLf+lUCv/pE8r/6JPK/+eUS7/lFM3/39YSP/l5eT/q6us4W5ub40AAAAC - AAAAAAAAAAAAAAAAAAAAAHNzdFuQkJDO/v7+/L20sv/npo7/3npV/9psQv/abkT/12xD/9VsQ//Ua0H/ - 0mg//9FoP//LWzH/4J6F///////+/f7////////////7+/v/+vn5//z7/P////////////78/P/9+/v/ - /Pr6//v39v/6+/z/5tTO/6dOKf+tUi3/rFIu/6tRK/+pUCv/p1Ar/6JQLP+dUzL/jVI4/56Sj//7+/v+ - goKD2W1tbkkAAAAAAAAAAAAAAAAAAAAAAAAAAHNzdBR2dnfI3Nzc6u3t7f/HopT/65h6/9ppP//bbkX/ - 2m5E/9htRP/WbEP/1WtB/9NqQf/NXDL/5KGI//////////////////////////////////////////// - //7+///9/f/9+/v/+/n5//Xz8///////0aKO/6xLI/+vUy7/rlMt/6xSLf+rUCv/qVAs/6JRL/+XVDj/ - f1RB/+Xk5P/Ozs7odHR1vWtrbA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3RdkZGRzv7+/v3Kx8b/ - 5auV/+eObf/baj//3G9G/9puRf/YbUT/12xD/9ZsQ//QYDP/56WL//////////////////////////// - //////////////////7+//78/P/79/f/9vX2//z////dtqf/sVMu/7RUL/+yVC//r1Qu/65TLf+rUSz/ - qFMu/59VNf+MUjr/samn//39/f6GhofUcnJzTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3QM - dnZ3sMrKy9329vb/xK6n/+upkP/ifVX/3WxD/91vRv/bb0X/2m5F/9htRP/VZjz/3oVj//3n3/////// - //////////////////////////////////////7////+////+vf2/+fCtP+7XTj/uFYu/7dZM/+1VzH/ - s1Yv/7BUL/+sVDD/pVU2/5VSNv+OeG//9PT0/8HBwd11dXamc3N0CAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAc3N0OHt7fNPq6urx6enp/8iupf/vrZP/43xU/95sQv/ecEb/3W9G/9tuRf/bbkT/ - 12o//9ZoP//lmXv/9cm3//vh2P//7uf///f0///59f/+8/D/+ebf//PYzv/pvq3/zXxc/75XL/++WjL/ - vVw0/7taNP+5WTT/tlgy/7FYM/+qWjj/m1c6/4ZlWf/m5uX/6Ojo8nl5ethzc3QxAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNzdFyOjo/L+vr6/Ofn5//Rqpv/8K6U/+WCXP/fbEL/ - 4HBG/95wRv/cbkX/225E/9hsQv/VZDn/02M5/9RoPv/Ta0L/03FL/9NxTP/Rb0j/zGU9/8liOf/DWjD/ - wlsy/8NeOP/BYDj/v101/75cNP+7WzX/tVo2/65bOv+gWTz/iF1L/9jY2P/5+fn8ioqKz3NzdFMAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3Rzn5+gzP7+/v/o6Oj/ - yrGq/+ysk//pkG3/321A/+BvRP/fcEb/3W9G/9tuRf/bbkT/2G1D/9drQf/UaD7/0WU8/9BlO//OZTv/ - zGQ7/8tjO//KYzz/yWM7/8ZiOv/DYTn/wWA4/75eN/+6Xzn/sV8+/6FZPP+PaFn/2dnY//7+/v+dnZ7M - c3N0cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - c3N0c56en8z6+vr87+/v/8K1sP/nsp3/7pl6/+V7VP/fbUP/4G5E/95vRv/cbkb/225F/9puRP/YbUP/ - 1mxC/9RrQv/Saj//0Wc+/85mPf/NZT3/y2U8/8ljPP/FYzv/wmM9/7tiPv+wXz//oF1D/5+IgP/n5+f/ - +vr6/J+fn8xzc3RzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAHNzdHKOjo/M6+vr8vn5+f/Oy8v/zKyh/+uslf/sknH/5H1V/99vRf/fbkT/ - 3m9G/9xuRv/bbkX/2m5E/9dtQ//Wa0L/1GpB/9FnP//PZz7/y2dA/8hnQf/CZkH/umVE/6xgQ/+bblz/ - vbi3//b29v/q6urxjo6Py3NzdHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3Rbe3t81MvLzN7+/v797u7u/8C8uv/Pp5n/ - 6aaO/+uVdP/lfFT/4HFI/91vR//bbkf/2m1F/9huRP/YbUX/1GxF/9BsQ//MaUT/x2lF/71lQ/+0ak3/ - pm5a/7Klof/p6en//v7+/crKy917e3zUc3N0XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3N0N3Z2d7CRkZHO - 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 - h4eI7OHh4f/BwL//ek47/4ozDP+POhX/lEIf/5tKKP+hUDD/plMz/7J3YP+6koX/toJy/69UPP/EVTj/ - yVQ4/8tRNf/NTzL/zksw/9FKLv+wTTb/wrKt/+Hh4f+Hh4jsamprQwAAAAAAAAAAAAAAAAAAAAAAAAAA - amprIoODg9jT09P/wMC//39OOP+LMAf/jDQN/444E/+TQB3/mUck/51KKP+4iHf/1NPU/9bW2P/Z2t3/ - w6uk/7RSOP/GVjv/yVQ4/8pSNv/MUTX/zFAz/81PM/+3TDT/w7ay/9TU1P+Dg4PYamprIgAAAAAAAAAA - AAAAAAAAAAB8fHyYt7e4/NnZ2f99VUP/jjAF/480DP+ONA3/jzcS/5E9Gf+WRCD/nU4s/8W1r//HxMb/ - w76+/8bCwv/W09T/tmhT/8JWOv/EWT3/xlY7/8lUOP/JVDf/yVM3/8pTN/+tTjb/19HP/7i4ufx8fHyY - AAAAAAAAAAAAAAAAamprQIiIifLt7e3/hnVu/5EyCf+TNg7/kTUN/5A1Df+QNg//kjsV/5RBHf+aSCT/ - uaCX/7+/wv+6trf/v7y//9HJx/+4Zkz/vlk8/8BaP//CWj7/xFk9/8VXPf/FVjv/xFY7/8VVOP+gYU// - 7Ozs/4iIifJqamtAAAAAAAAAAAB1dXaev7+//rm4uP+NRij/mTcP/5c4Ef+UNg//kjYO/5E2D/+SOBP/ - lkAb/5hCHv+jXkH/uaGY/761tP/FtrL/v4Nv/7RXOv+4XD//u1w//75cP//AWz//wFs+/8FbPv/BWj7/ - wFo9/7xQM/+5pZ//wMDA/nV1dp4AAAAAamprJXh4efLr6+v/jntz/6M/Fv+dOxL/mzsS/5g4Ef+WOA// - lDcP/5Q4Ev+WPRf/mEQf/5lEH/+bRiH/olIy/6VRMf+rUjL/sFs9/7RcP/+3XD//uVw//7pcP/+7XD// - u1s//7tbPv+7Wj3/u1k7/55bR//q6en/eXl68mpqayVqamtgn5+f+dTU1P+bYkr/rU8o/6NAGP+ePBP/ - nTwT/5o6Ef+YOhH/lzgS/5Y8FP+XPhj/nU8t/6FxXv+hc2H/o3dl/51XPf+rVjf/rlo8/7FbPf+yXD// - tVw//7ZcP/+2Wz//tls+/7ZaPf+2WTz/rFAz/83Cvv+goKD5amprYGpqa5TAwMD+pqKg/65ZN/+yVCz/ - rU8o/6NAF/+hPhT/nj0U/5s7Ev+ZOxL/mTsT/5Y2Dv+oZ0z/0M7R/9HQ0//U1Nf/oG1a/6NOK/+nVjf/ - q1k6/61aO/+uWjz/sFs9/7BbPf+wWjz/sFk7/7BXOv+wVDX/ooBz/8HBwf5qamuUamprwNra2v+ViIL/ - t1Us/7dWMP+1VjD/rlAo/6VBF/+iPhT/oD0U/508E/+bPBP/mDYO/6ZdP//Tzs7/0czM/9XT1f+oh3r/ - lEEe/6VTMv+kVDT/p1U2/6hWN/+qVjf/q1Y4/6tWOP+rVjf/q1U1/6xUNf+TWUT/2tra/2pqa8Bqamvh - 7e3t/5R2a//AWzP/u1oz/7hZMv+2VzL/sFEp/6dEGf+kPxX/oj4V/6A9FP+cOxP/oEUf/8S2sf/Gw8T/ - xL+//8S+vv+YZ1T/lkAd/6JPLP+iUTD/olEx/6NSMv+kUjL/pVIy/6VSMf+lUTH/pVAw/5NPNf/t7e3/ - ampr4Wpqa/j7+/v/mHBh/8dgNv+/XTX/vlw0/7tbM/+4WjT/tFQu/6tHH/+mQBb/oz4U/6E+Ff+dOA7/ - rXVf/7y8wP+4tLT/u7a2/8TBwf+id2X/kj4c/55KJ/+eSyr/nkwq/55MKv+eTCr/oEsq/6BLKf+eSin/ - lEsv//v7+/9qamv4ampr+Pv7+/+fdGP/zGQ7/8RfN//DXjb/wF01/75cNP+7WzT/t1kz/7JSKv+rSCD/ - pkAX/6I9FP+hPRT/rHRe/7exsf+2sbL/v7q6/9bU1v+1koX/kDwY/5xFIP+aRiL/mkUi/5lFIv+ZRiP/ - mkUi/5pGI/+QSSv/+/v7/2pqa/hqamvh7e3t/6ODdv/QZz7/ymM7/8djO//EYDj/wl83/8BdNv++XDX/ - ulw1/7dZM/+yUiv/rEkh/6VAFv+hNwz/q2hO/7q0tf/Dv8D/1tDR/+zs7f+kclz/kzgS/5lCHv+ZQh7/ - mEIe/5hCH/+XQiD/mEQh/4pHLP/t7e3/ampr4Wpqa8Da2tr/pZSO/9VuR//NZDv/zGY9/8lkPP/GYTv/ - xGA4/8JeNv+/XTb/u1w1/7pbNP+3WjP/tFQu/61MJP+lPhP/uId1/9HQ0//e2Nj/7+7v/9XCu/+ROxf/ - mj8Z/5lBHP+ZQR3/mEEd/5dBHf+WQBz/i1lE/9ra2v9qamvAamprlMDAwP6wqqj/2oJe/9RoPv/PZz3/ - zWY+/8tlPf/JYzv/xWE6/8NfOP++VzD/uVQr/7xcM/+5WzT/t1o0/7BPJ/+/eFv/6+np/+/s7f/08fL/ - 8evr/5tQMf+dQRn/nEId/5tCHv+ZQh7/mUQg/5Y9F/+jin//wcHB/mpqa5Rqamtgn5+f+dbW1v/OmIT/ - 3XVO/9RnPf/TaD//z2Y+/8xmPf/KZDz/xl82/8+Qef+4hXD/rlIt/7RQJ/+0UCb/rUgf/86ZhP/6/P3/ - +vj4//z4+f/39vX/qGVI/6ZPKP+lUSz/o1As/6JPK/+hTiv/l0ck/9LNy/+goKD5amprYGpqayV4eHny - 6+vr/7Sjnf/ojWv/12k+/9dqQf/UaUD/0Gg//85nPf/KXjT/6sS3//r////aycL/xZuL/8KNd//Rqpn/ - +PPy///9/v/9+vr//Pr6//Lq6P+qWTj/q1Aq/6hRLP+mUCz/pE8q/6BKJP+YZlD/6+vr/3h4efJqamsl - AAAAAHV1dp6/v7/+w8PD/+Gnkv/ielP/2WpA/9htRP/Wa0L/02g//85hNv/uxbb///////////////// - /////////////////vz8//r4+P/9////2biq/6xMJv+uUiz/rFEs/6hQK/+mTyr/nEIe/7+1sf+/v7/+ - dXV2ngAAAAAAAAAAamprQIiIifLt7e3/urGu/+2aev/fb0X/221E/9luRf/Xa0L/0WM3//HDsf////// - ///////////////////////////9/v///P///+3a1P+6ZkT/slIr/7BVLv+vUyz/rVEr/6VHH/+hdmX/ - 7e3t/4iIifJqamtAAAAAAAAAAAAAAAAAfHx8mLe3uPze3t7/2sC3/+yRbv/fbUL/3W5F/9tuRf/Yaj// - 3XxW//LBrv//8ev///////////////////z6//jq5//jtaP/wmhE/7lVLP+4WjP/tVcx/7RWMP+uTCT/ - pF1A/9zb2/+3t7j8fHx8mAAAAAAAAAAAAAAAAAAAAABqamsig4OD2NPT0//Ozs7/6ce6/+2ScP/icUb/ - 3m1C/91vRv/YaT//1mU4/9hwSP/bgl//35By/92Qcv/Wf17/y2pE/8JZMP/BXDP/wV42/7xcNP+6WzT/ - tVEp/65ePv/LxsX/09PT/4ODg9hqamsiAAAAAAAAAAAAAAAAAAAAAAAAAABqamtDh4eI7OHh4f/Ozs7/ - 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 - nDsS/5k6Ev+XOBH/tHhh/9nd3//MwL3/nE4u/6dUM/+qVzj/rVo7/69aPP+vWjv/rVo8/6JYPv+rjIL/ - zMzM92xrbK5sa2zY6Ojo/p+Cd/+zXDn/tVgz/65OJ/+lQRf/oT0U/508E/+ZNAr/r2ZI/9jZ3f/Tzs// - p21W/5tGIv+jUTH/pFMz/6VUNP+nVDT/plQ1/6BVOf+TZlX/6Ojo/mxrbNhsa2z1+fn5/551ZP+7YT3/ - u1w1/7laM/+0VC3/qkUc/6M+FP+eOA7/pU0q/8fCwv/Gxcb/y8bH/6h8av+bQBv/oEwq/55MKv+eTCv/ - n0wr/5tOMP+JVUH/+fn5/2xrbPVsa2z1+fn5/6V5aP/DZkH/wV83/79dNf+7XDX/tlYw/65LJP+mQhn/ - oDoO/6hNKf/Cu7n/yMbH/9jW1v+oaE3/lz4X/5lFIf+ZRSL/mEYj/5VIKf+FUz7/+fn5/2xrbPVsa2zY - 6Ojo/q6Ogv/HaEP/yGQ9/8VgOP/CXjf/v101/7pbNP+2VjD/rk4m/6Y+E/+oUS7/z8rK/+Ph4//Yy8X/ - kkEf/5k/Gf+YQR3/l0If/5JGJ/+LYE7/6Ojo/mxrbNhsa2yuzMzM97ippP/Lb0z/zGY//8tlPP/HYTv/ - w2A4/79cNP+3VCz/uVcw/7VULf+sSyP/2cO8//Dv8f/09PX/qmZJ/5k7FP+aQh3/l0Qg/5BGJ/+li4D/ - zMzM92xrbK5sa2x4o6Oj5tDNzf/NiG7/0WlB/9BoQP/NZj7/yV40/9N3VP/Qjnb/tmdI/7FWMf/Gbkz/ - 9Orn//38/f/8/f7/unph/6JHIf+jUCz/n1Iv/5BPMv/Tzcr/o6Oj5mxrbHhsa2w4eHd43ujo6v/Cp5z/ - 13tY/9VqQv/VakH/zV4y/9yGZv//////9vPz/+/k4P/69vX///////7+///y7Ov/rlo4/6tPKf+mUS7/ - nU4u/5hyZP/v7+/+eHd43mxrbDgAAAAAbGtsmLGwtO7Lysr/z5iC/9dvSP/YbET/1GQ5/9x/W//24Nf/ - //////////////////////n4+f/KiXD/sVEp/69UL/+oVDL/mFE0/87Jx/+4uLjrbGtsmAAAAAAAAAAA - bGtsPXZ1dtXW1dn7wb28/9mTev/acUn/2W1E/9ltQ//fhmT/6amQ/+y2of/psp//4qKL/8hwTf+7WDH/ - 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 - - - - Ayuda - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Aceptar + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAB3d3h3h3h3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAB3eIj//////////4iHd3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAHeIj/+PiIiIiIiIiI////+IdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAB3iP+PiIiIiPiPj4+Pj4iIj///+HcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAB4j/iIiIiPj4+IiIiIiPj///iIj///h3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB4+PiIiI+PiHd3Z3Z8d3dneHiP//iP//+HcAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAB4+IiIiPiIdnR8Z8fHx2xsfHx2d4iP//j///dwAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAB4/4iIj4h3ZHx2dnx2fHfHfHfHx8bHd4j/////93AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4+IeI/4dnRlZ2x8fHx8dsjHfHbHx8fGx3eP/////3cAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4+IiI+IZWVsfHx3x2dnx3x2fGfH58dnx8fGd4j////4cA + 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 + +I9wAAAAAAAAAAiIiHZnTGfGRlZWx0fGR0VsZHx0ZWfGVsZ0fGx2fHZ2dnx2fHx2d8dox2fIZ2x3x2fH + Z8dnd4+I9wAAAAAAAACIiPhHx2ZcZWxkbHRkZMbGRlZGR2xkdGdlbHZ2x2fHx8fHZ8dnx8dnx2fHbHyG + x2x8dsdsfHx/iPcAAAAAAAAAiIj2fGx8ZkZWVsZGR0dGVkfGVsZHR8bFbHZlx3x8dnx2fHx2fHZ8fHbH + Z8hnx3x3yGd8d8dnf4j4AAAAAAAAAIiIh8d2x0fGxsZWVsbGRkbGRsZWRsZ0dkZFRmRkZGVnx2dnx8d8 + doZ8hshsfHx2x2x8fHx2x2j4iHAAAAAAAAiIj3Z8ZWfGR0ZWRsZWR8fHR0dGR8dHRsd3d3d3d3d0Z2x8 + fHZ8dnx8dnx8d2dnyGfHfHZ+fHx3+I9wAAAAAAAHiIh8Z8bHbHRsbHR0bGRkZGRsZWRkZGVoiIiIiIj4 + hHx3x2fHZ8fHZ8fHdnx8fHbHfHZ8fHZ3R4iPgAAAAAAACIj4d8dnbHbGVlZGxlZWR0bHRkbHR8fGWIiI + iIiIiIZWx2fHZ8dnZ8dnfHx2fHZ8jHbHx2fHxnyPiIcAAAAAAAiI98Z8bHfHbGxsfGRsbGxlZMdHRsZG + dGiIiIiIiIiFZ2fGfHx2x8dsfHZ2x8dnx2fHZ2fHbHx2j4j3AAAAAAB/iId2x3x8Z8dlZkZWVlZWRsdk + bGR0dGx4iIiIiIiPhkfGfHZ2fHZ8d2fHx3Z8fHbHZ8fHbHdnZXiI9wAAAAAAiIj2fHbHZ8Z0fGVsbGxk + bHRkR0ZWRsZWSIiIiIiIiIVsdHZ8bHZ8dnx8dnx8dnZ8d8dnbHfHx8dviPgAAAAAAIiIh8fHbHx2x8ZG + x0dHRlbGVsbHTGVkbHiIiIiIiIj3R2fHx3Z8dnx2dsfHZ8fHx2x2x8dsdnx2WIiIcAAAAACIj4Z2fHZ2 + x2dnx2xsbGxkdMZWRmVsZWRoiIiIiIiIiEZWZWbHx2x2x8d2dsdnZ2fHZ3x2d8fHbHf4j3AAAAAAiIh8 + fHbHx2x8fHxlZ0dHxsZ0bHTGR0bHx4iIiIiIiIh0bHx0dnx2x3Z8bHx2x8fHZ8fHbHx2bHZniI9wAAAA + CIiPd8fHbHx2x8Z2xsbGxnR0bHRmVsbHRkiIiIiIiIiIhHR2Z8dGdWfHx3Z2fHZ8dsdsdnx2bHdld4iP + cAAAAAf4j2dnbIZ2x3Z8dndHR2TGRsdGx8ZWRkdGiIiIiIiIiIdGR8dsfGx8Z2xsfHZ8dnx8d2x2x3x8 + fGX4j3AAAAAIiIh8fHbHx2x8Z8fGxsbHZWx0bHRkZWxsbIiIiIiIiIiIdHRsdlZ2dlx2d8dsdsfHZ8Z8 + d2x2dkdmiIiAAAAACIj4Z8fl7HyGx2x2x3Z0fGxlbHRkfGx2VlaIiIiIiIiIiPdGVlZsfHxnZcZ2Vnx2 + dsdnx2x2XGVsdI9/gAAAAAiIiHx2x8dnx2fHZ8fHxsZWbGZGxkZWRsZGWIiIh4h4iIiIdGfHx2VnbHZ0 + bHxnR8dlx2R2XGdsdlaIiIcAAAAIiPhnyGx2x2x8fsdsdnx2x0fHx0fGRsdHxsiIeIiHiHh4iPdEZnRm + x0dMfHZ2Vsdkdmx8fGdsdlZ0iIj3AAAACPiIx2x3yGx+dsfHx2x2fGRsZGRsdHxkZHRmiIeHiIeIh4iP + hFZHx0dsdmdHx8dkfGx2VmdHx0fGx3+IhwAAAAiI93fIxnx3x8fHZ2yGx8dsdlbHxmxnR8bGXHiIiHh4 + h4iHiIhkdHbGVmXGfGZ0fGd0fGfGx2R2ZWSIiPcAAAAIiPfIZnx+x2x2fHx2x2x2fHxsdkdHTGR0dGZI + eHiIh4h4iIiPh0bHR8fGdGVlbGdGx2VkdWR8bHx2f4iHAAAACPiIZ8fIx2yGyMfnx3x3x8dnx0bGxmfG + xmx8ZYiHh4h4h4eIiPhkdGZkdGfGVsdHx2RsdsZ8Z0dGVniIhwAAAAiI93yG52x3x2x2x2x2x2x2x2xl + ZWXGR2XGR0bIeIeHh4iIeIiPhUZWVsfGdGdkdmR8dlZ0Z0Z8dkWIiPcAAAAI+Pdox8x3xnyGx2x2yGx+ + x2x3xsbGZWxkZ8bGZ4h4iIh4yIiIiPhkZcdmVkfGVsfHRlbGVsdMdkdmeIiHAAAACIiIyGyGyGfHx+x3 + yGx2x3x3xndnZcbHR8ZHR8TIh4d4eIiIiIiPhHZkdGVsdGx0ZHxlZWx0dkfGVIiI9wAAAAj4+Gd8d8bI + bnx3x2x2fIxnxnxsfHxnRsZHxsZGZIiIiIh4h4iIj/dEfGXGdGx2R0fGdGx2RsdGVmWIiIcAAAAIiIjI + yM53x8fHx2yGyMdnx2fHfHbHbHx2xkdlbHxnh4yIiIiIiIj/dGR2bGVnR8bGdGx2R0dkfGx0iIiAAAAA + CPj4doZ8fIbH58aMaMZ8fHbHbHbHfHZmx0fGxlZGxIiIh4h4iIiIj4ZHxHR8ZGRnR0ZWR0bGVmVnRoiI + gAAAAAiIiGfHx+fIbHx8dnx8fnbIbIbIbHbHx2xsZWxsdHxnh4iIiIiI+Pj3RmVsZ0fHRlbHZHxlZWx2 + RlaIj4AAAAAH+Ph8jnx8bIZ8hnx2fsfHbHbHbHbIZ8fHdnxlZ8ZkxniIeIiIiIj4/0VkZ0bGdGxnRsZH + bHZHTHRliIiAAAAACPiPd3x8fnfHx+x+x8d8fIbIZ8fIbHx2fHxnbGRlx2x4iIiIiI+Pj492R8ZWVkZW + VsdHbHRsZGdGV4iPcAAAAACPj3yOfsfH7IbHx3x8dsfHbHyGfHZ2x8dnx8dsdmRlxoiIiIiIiPj/hGR0 + bGVsfGRkfGVkdHx0Z0eIiIAAAAAAj49+fHx8jHfHfIxoznyGfIZ8bHbHx2dsfHZ8d8bHxmWIiIiI+PiP + j/dGxlZGx2R8dkdGRkdkbHRoiIhwAAAAAI+IjIjIZ8dsjOdnxnx2x+fHx37HZ8fHx2fGx2x3x2XGeIiI + iI+Pj4j4R0fGfHRkZ0bGR8dsZWVkd4iIAAAAAACIj4fIbIyMhmfHyGfIx+x8fOfHbIx+fH7HZ8fHbHbH + bHiIiI+I+Pj/+EZGZWRkfHRlZWZGVlbGRliIiAAAAAAAj4/3eIx+Z8jH7Hzsdnx3x2fHbIx2x8Z8fHx2 + fHbHZ8fPj4/4+Pj4iP9GXHxlbHZGxlbHR8ZGdHR4iPcAAAAAAA+I986MfHznx8hnd8jHx2yMfIbHZ8dn + x2fHbHbHZ8dmePj4+P+Pj/+PdGZGRnRsdHRsdGxlbHRneIiIAAAAAAAI+Ph3jnyGx+fHx8fsfnyGx+fH + fHx+x2x8Z8fHZ8fGx8+Pj4+P+Pj4/3R8dlxsdGxnx2R2VnRnRoiIgAAAAAAACPj4zoyGyMfH5858d8fH + x+x8fOfGZXx+dnx+fHx2d8dvj4//j4//j492Z8dndnx3x2R8fGfHx0eIiIAAAAAAAAj4j4eIyMfnyMd8 + fsdn5+x3x2fHiGRnx8fHbHbHbHx8iP/4+P/4+P//dMdsfGx2R2R8Z2dGZWZ3iI9wAAAAAAAAj4+MiHyM + fIx858d8jMfHx2fHaIj4Rnx8flbIbHbHZo+Pj/+Pj/+Pj3Z8dnZWx2x8dnxsfHZWWIeIgAAAAAAAAI+P + h8iOZ+fH58d8fsd8d+yM58j/j4dGZ8fIbHfIbHj4//j4//j4//98Z8bHx2VnZlbHZWdMdniI+AAAAAAA + AAAPj/h+jIx8jHyM58d858fHx3xoj4/4h8ZmfHbHbHaI/4+P/4+P/4+PZ8dlZ2x8fHxnZWx8dmV4h/cA + AAAAAAAACPj4d4jHyG58dnyM58fnyGx+yP/4//+IVkZHbHZ4+Pj/+Pj/+Pj4/0dkfHx2dmVnx8Z2Z0dH + iHiAAAAAAAAAAAj/j3eI5+x8fsjIZ8d8fIZ+x3iPj4+P//+Ih3h4/4//+P//j4/4//hsfHZsfGx8bHZW + x8Zsd4iPgAAAAAAAAAAA//+MiIx3yMd8fOyM58jGx3zI///4+Pj///////j/j/+Pj//4/4/3VnbHx2Vn + x2dGx2VldliHiHAAAAAAAAAAAI+P9+iHyMhnyOd8d8fnyHx36Pj4////j4+Pj4////j///j4/4+P9sfH + Z2VsfGfGfHbHbGV4iIgAAAAAAAAAAAAP//h8iOx+yOx8d858fHznx8j///j4////////j4//j4+P/4+P + j4dsdsfGdnZWfHZHbHZWiHj3AAAAAAAAAAAACP//iIh3x3x8fshnyMhox+x4+Pj///j4+Pj4///4///4 + /4+P+P98dsfHbHxsfGfHx8dHZ4iIgAAAAAAAAAAAAAD//4aIjIznyMd8jIZ87Hx3yP//+P////////j4 + //j4/4/4+Pj4bGdnbHbHfGfGZ2Z2x1iIiIAAAAAAAAAAAAAAj//4yIjnyGjOfH7HyHyGyGj4+P/4+P+P + j/j///j//4/4/4+P9lfHx8fHbHZ8dHxcZWZ4h/gAAAAAAAAAAAAAAA///3joyMfOfIbHfnx+yGx4//// + /////////4//+Pj4/4/4/3xnxnxnbHbHxnxnZ8dHiIiHAAAAAAAAAAAAAAAI//+HeIyOfIx3jHx+x3yM + 5//4+P/4/4/4/4//j////4/4j/fHxnx2fHZ8dnxnxsZ2eIh/gAAAAAAAAAAAAAAAAP//+HeIx8jIzsjI + x3yMdsiP///4////////j/+Pj4/4+P98dnx2x8Z8Z8ZWfHZ8dIiHiAAAAAAAAAAAAAAAAAAP//+OiI58 + hnyG587Ibsh8j/////+P+P+P//+P/4/4+P+Hxnx2x3x2x8dnxsdsdkeIePcAAAAAAAAAAAAAAAAACP// + h3iHyM58jHyHx8d858eP/4///////4+P/4/4///4xnbH5Wx2Z8dsfHdsdlZ4iIiAAAAAAAAAAAAAAAAA + AAD///h3iIyMjH7Ix+d8hnyMbIj///j/j////4/4//+Ixnx8hsd+x8dsdsdsdlbHiIeIAAAAAAAAAAAA + AAAAAAAAD///h+iOfOfIfOfHyMfIZ+fIaI/////4//////iHxnx2dsdsfHZ8d8dnx8bHd4h4+AAAAAAA + AAAAAAAAAAAAAAj/j/h3iMjIbIZ8jIbn7Hx8jGx8iIiPj/j4iIfHxnx2yMdnx2fHx8Z8fGdndoiHj3AA + AAAAAAAAAAAAAAAAAAAAj///h8j37IzsjIbsfHfIaM5358bGx8fHx8bH7HyGyGx8jHx8dnx2x2fHxseI + ePgAAAAAAAAAAAAAAAAAAAAAAAj/j/iOiIyHd8jHyMjI7Hx3x8fIaMhn5858jHdnx+x2fsdufHxn7HbH + bHeIiIiAAAAAAAAAAAAAAAAAAAAAAAAA//j/iMiIzsjOfnyGfHfnznyMjHx+x8d8d8fOyGx3yMdsfHbI + bHfHbHdniHiIAAAAAAAAAAAAAAAAAAAAAAAAAAj/j4iI6IfIaMfIyMjOXIyGfmfnx8jOx85+fHx+x2x8 + d8fIbHbHbIbHiIeI8AAAAAAAAAAAAAAAAAAAAAAAAAAA/4j/iHiIjHyMhnbnx358fHyMx+fHfIaMfHfI + x3x+fGfnbHbIbIbHeIiIiIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4j/iMiIjnyM7Ix3yMfn58dox8jOfH + x8fOdnxox8jHx8fIbHfHd4iHiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iPiI54h+yHyM7Ix8fHyMjI + yGfH58hufHx+x8dsfsdn7HfGfHiHiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iP+HjIiHznyHfsjn + yGfsfnzsjHyGx8fIx3yMhsd8fHfGjHiIiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iP+IiHiIyM + 7HyMfIyMd8fHd8jH7IyGjHbH5shsfsfGfGiIh4iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iI+I + joeIhoyMfnyGyM58jOyG58d2x858hsd8d8d8jHiIh4iIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + iP+I/4jI6Ih358fIznZ8hud8fHyM5358fsd8fsfsdmeHiHiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACP+Ij/iHjIiHjI58jIyMjHyOfIZ8fHx8d8hsd8d8iIiIeI+AAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACI/4iP+IjoyI6MjH7IbsjIx8jOyMjIaMfsd858h4iIeIiIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAIj4iPj4h4eMiOd3yMd8fnyGfIx+fOx8d851iIiIeIj4AAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAIj/iIj4iIeO13yOyMjsfIznyGx8d8jsd3iIiIeIiIgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiP+IiP+Ih4yOeH58h358jIyOeMhseIiIiIeIiIgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI//iIj/j4iIx3d8jHyGfnx8eOiIiIiIeIj4gAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP+IiIj/iPiIiHiIeIeIiIiIiIiHiIj4cA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI/4iIiIj4+Ij4iIiIiI+IiIiIiP + iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP/4iIiIiIiIiIiIiIiI + iI+PiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP/4+IiIiIiI + iIiIj/+IhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIj/ + ////////j4dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAACHd3d3d3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////wAAH////////////////+AAAAD/// + ////////////4AAAAAH//////////////wAAAAAAP/////////////wAAAAAAAf////////////wAAAA + AAAB////////////wAAAAAAAAH///////////wAAAAAAAAAf//////////wAAAAAAAAAB//////////w + AAAAAAAAAAP/////////4AAAAAAAAAAA/////////4AAAAAAAAAAAH////////8AAAAAAAAAAAA///// + ///+AAAAAAAAAAAAD////////AAAAAAAAAAAAAf///////AAAAAAAAAAAAAD///////gAAAAAAAAAAAA + Af//////wAAAAAAAAAAAAAD//////4AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD//////AAAAAAAA + AAAAAAAf/////gAAAAAAAAAAAAAAD/////wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAH////8AAA + AAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAP// + /8AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAA + AAA///8AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP//wAAAAAAAAA + AAAAAAAAD//8AAAAAAAAAAAAAAAAAAf/+AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAA//wAAAA + AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/ + 4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAA + AAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAA + AAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAA + AAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/ + gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAA + AAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAA + AAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAA + AAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAD/ + wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAA + AAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAA + AAAAAAAAA//4AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//8AAAA + AAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAB// + /wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAA + AAB////AAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////wAAAAAAAA + AAAAAAAD////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAA + AAAAAAAAAAAAH/////8AAAAAAAAAAAAAAD//////gAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAf/// + ///gAAAAAAAAAAAAAP//////8AAAAAAAAAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAAAAA + D////////gAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAA + AAAAAf/////////4AAAAAAAAAAf//////////AAAAAAAAAAP//////////8AAAAAAAAAP/////////// + wAAAAAAAAP////////////AAAAAAAAP////////////+AAAAAAAf/////////////4AAAAAAf/////// + ///////4AAAAA////////////////4AAAH/////////////////+AB//////////KAAAAGAAAADAAAAA + AQAEAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA + wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d3d3d3d3cA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3iIiIiIiIiId3dwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3eIiIiIiIiIiIiIiIiHd4AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAB3eIiIj4////////j4+IiIiHeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeIiI + j/+Ph3d3d3d3iIj/+IiIh4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd4iIj/+Hd2VnxsbHxsdHd3 + j/j4iIh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHiIj4+HdlZWfHZ3fHZ8fGx8Z3iPiIiHeAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAd4iPiIdlZWx8dsfMdsfHyMfHzHx3/4iIh3AAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAh4//iIjIh3zn7IyGjOfOfOyM58foiPj4iHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeP/4iI + d4h8jIzsfl58jIx8fIiI+PiIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3iP/4iH6HjOd3yMfIyGjo + iPj4+Ih4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeIj//4iIiIjIhoh4iIiI//j4iHgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeIj//4+I/4j4j4iPj/iPiHcAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACHd4iP/////////4+IiHeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + CHd3eIiIiPiIiHh3eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3d3d3d3d4AA + AAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////// + ////////////////////////////////+AAD////////////gAAAP//////////8AAAAA//////////g + AAAAAP////////+AAAAAAD////////4AAAAAAA////////gAAAAAAAP///////AAAAAAAAH//////8AA + AAAAAAB//////4AAAAAAAAA//////wAAAAAAAAAf/////gAAAAAAAAAP/////AAAAAAAAAAD////+AAA + AAAAAAAB////8AAAAAAAAAAB////4AAAAAAAAAAA////wAAAAAAAAAAAf///gAAAAAAAAAAAP///gAAA + AAAAAAAAH///AAAAAAAAAAAAH//+AAAAAAAAAAAAD//+AAAAAAAAAAAAB//8AAAAAAAAAAAAB//4AAAA + AAAAAAAAA//4AAAAAAAAAAAAA//wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/gAAAAAAAAAAAAAP/gAAAA + AAAAAAAAAP/gAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAD+AAAAA + AAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB+AAAAA + AAAAAAAAAB+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD/AAAAA + AAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAP/wAAAA + AAAAAAAAAP/wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/4AAAAAAAAAAAAA//4AAAAAAAAAAAAA//8AAAA + AAAAAAAAB//+AAAAAAAAAAAAD//+AAAAAAAAAAAAD///AAAAAAAAAAAAH///gAAAAAAAAAAAP///gAAA + AAAAAAAAP///wAAAAAAAAAAAf///4AAAAAAAAAAA////8AAAAAAAAAAB////+AAAAAAAAAAD/////AAA + AAAAAAAH/////gAAAAAAAAAP/////wAAAAAAAAAf/////4AAAAAAAAA//////+AAAAAAAAD///////AA + AAAAAAH///////wAAAAAAAf///////4AAAAAAA////////+AAAAAAD/////////wAAAAAf/////////8 + AAAAB///////////gAAAP////////////AAH//////8oAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A + /wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHd3d3d3d4AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACHd4j//////4h3eAAAAAAAAAAAAAAAAAAAAAAAAAAAd3j//4+P+P////+HeAAAAAAAAAAAAAAAAAAA + AAAAAHeP/4h3d2VnR2d4j//3eAAAAAAAAAAAAAAAAAAAAACHiPiHdlZlZ8dsfHR3j//3eAAAAAAAAAAA + AAAAAAAAB3j/h3RlZ8fHbHx8fGx0iP/3cAAAAAAAAAAAAAAAAAh4+PdkZWx8dnx8d8fHx8bHj/+HgAAA + AAAAAAAAAAAAh4j4dGVsdnbHx2jGfOfGfHxlj/h4AAAAAAAAAAAAAAh4j3RkZHbHx2x8fHzlx8fHxsdo + /4eAAAAAAAAAAAAAh4j3RkdGx0Z8dnZ2x8dsjGx8fMdv/3cAAAAAAAAAAAh4j3RkRsdGfGZ4iIiGfIxs + jOx2x8f/94AAAAAAAAAAB4j2RGRkZGxlZYj4+PjHx8fHx8fHx0/4eAAAAAAAAAB4j3RkR0R8dHx4+IiI + j3bH7Hx8fOx8dv+HAAAAAAAACIj3RGRsZGRkZs+IiIiPjHx3znznx8fHf/hwAAAAAACHj3RkZUZEfGXH + eIiIiIiGfGx8fHx8fsfI/3gAAAAAAHiPZGTGRGxkZGR4iIiIiIx8hnx2x8fHx2T/hwAAAAAIiPdGVkbG + VkVsfGiIiIiPfHbIx8jH7Hx8fH/4cAAAAAeIhGxGxHRkbGVmx4iIiIjHyGx+fHx3x+x2ePhwAAAAiI90 + ZGR0ZMZGRsdGx4eIxnZsd8fH58Z8dsfG/4cAAACIiGTHxkxkZFbHRkdGxsZ8fHfGfHx8fH7HfHaPhwAA + AHj3x2RsZGx0bGRkfGfHbHbHx2fHZ8dnx3x8fH/4gAAIiPR2xkdGVkxkRlxmxGR0fHZ8fH7HbIx8Z8dn + T/dwAAiPdsfHxGxsZGVsZkWIiIh2fHbHZWyGx2fHbHx3/3AACI92fGZGx0ZHxkZFbIiIj4R8Z2fHx8ds + fHx+x2ePcACIiHxnx8dGxGxkx8bHiPiI9GfHx2x2fHfHZ8dsfP94AIiIZ8Z8bGxlZMZGRkaPiPj3xnxs + d8fHbH7HbHfGj4cAiPjHx8dnx0xsdGx0bIiIiIhGx2fGdmx2x2x2xnSPhwCI93bHbHxmxnRsdGxkiIiI + iHR2x2x8dsdsdsd8Z3j3AIj3x2x8Z8dsbGRsZHxoiIiI90ZWx2bHfHZWfGfEf4cAiPdshsjGfHbHxsZc + ZGiIiIiIhGx2x2xnxsfHRnZ49wCI93xnxnznx2xlZGbGxYiIiIiIZGVsdHRnRmx8TH+HAIj3yM5858fG + x2xsfGVkaIeHiI+FbHRsbHxlZWZ2X4cAj/dmfHx8fHfHx2xkRsbHiIiIiPhGRlZ0ZHxsbEZ49wCI93x8 + fsdmznx8d8fGVsTIh4iIj3RsbGR8ZHR0dHj3AIj4yM7HfHx8dmfGbHxsZkaIiIj490dHRsZWxkbGf4cA + iPhnZ3xn58fHznx2fHbHxMiIiP/4RsbHRsZWx0aIhwCI/3yMaMx8fnx8fHxnx2xnZ4j4j49kdGR0dGR0 + ZY+HAIj/dsjGjH7Hznx+x8Z8dsfHj4/4/3xsfGxkbGRkiHgACP94znx+x8dsdsdsjGx8dsb/+P//dGRk + ZWx0fHePcAAI/4aMdsfIbIx8fHbH58fHbP////+Gx8fGdGxmSIhwAAiP98jIyGyMfshoh2x8fmx4///4 + /4R2Z2xnx2Vo+HAAAI/4fs58jOfHbHj/hsbHxnj/////jGx8dHxnxniHAAAAiPh3x858fIyM6P//iHd4 + //////92fHxsdsZWiIcAAACI/4eMjH7H7GfP//////////+P/2x8Z2fGfGWPeAAAAAj/iM52yMjHfH// + ///////////4x8Z8xnxnSPhwAAAACI/4jIyM587Iz///////////+PdsdsdsdHx4iHAAAAAAj/9+fOfI + yGbo//////////j/fGfHbHbGx4+HAAAAAACI/4h4yM58jHj///////////fGx2x2x2dIiHgAAAAAAAiP + +H7Ix8jIzHj////////4xnx8dsfGxoiIcAAAAAAAAIj/iHaM585+xsiIj/+Ih8Z8fsfHxnx3iIcAAAAA + AAAACP/4d8jIx8d37Gx8bHxsfOfHbH58Z8j4cAAAAAAAAAAIj/+I52fnfOx3yOyM58hnx8Z2x8fIj4eA + AAAAAAAAAACI//iIyMfnyMjGfH5WfOx858jGxoiIiAAAAAAAAAAAAAiI/4iOfHyM52jIx8jHyMfHxnyI + j4hwAAAAAAAAAAAAAIj//4iHfsjIx+yOx+yG58hseIiIeAAAAAAAAAAAAAAAAIj/+Ih4dozsfHyMdsfH + 7HiI+IcAAAAAAAAAAAAAAAAACIj/+Ih353jI5853dox4iIiIgAAAAAAAAAAAAAAAAAAAiI//+IiHd+fI + d8jIeIiPiIgAAAAAAAAAAAAAAAAAAAAAiIj//4iIiIeIiIiP+IiIAAAAAAAAAAAAAAAAAAAAAAAAiIj/ + ///4+Ij4//iIiAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIj4///4iIeIAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIiIiHh4iIgAAAAAAAAAAAAAAAAA/////////////////////////wAD///////wAAA//////8AA + AA//////AAAAA/////wAAAAA////+AAAAAB////gAAAAAB///8AAAAAAD///gAAAAAAH//8AAAAAAAP/ + /gAAAAAAAf/+AAAAAAAA//wAAAAAAAD/+AAAAAAAAH/wAAAAAAAAP/AAAAAAAAA/4AAAAAAAAB/gAAAA + AAAAH8AAAAAAAAAPwAAAAAAAAA/AAAAAAAAAB4AAAAAAAAAHgAAAAAAAAAeAAAAAAAAABwAAAAAAAAAD + AAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAA + AAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAOAAAAAAAAAB4AAAAAAAAAH + gAAAAAAAAAfAAAAAAAAAD8AAAAAAAAAPwAAAAAAAAA/gAAAAAAAAH+AAAAAAAAAf8AAAAAAAAD/wAAAA + AAAAP/gAAAAAAAB//AAAAAAAAP/+AAAAAAAB//4AAAAAAAH//wAAAAAAA///gAAAAAAH///AAAAAAA// + //AAAAAAP///+AAAAAB////8AAAAAP////8AAAAD/////8AAAA//////+AAAf///////AAP///8oAAAA + MAAAAGAAAAABAAQAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAA + gIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + B3d3d3d3cAAAAAAAAAAAAAAAAAAAAAB3eI////iId3cAAAAAAAAAAAAAAAAAAHeP//h3d4j//4d3AAAA + AAAAAAAAAAAAeI+IR0dnx2VlZ4+HcAAAAAAAAAAAAAAHj/dlZ2XHbHx2V3ePh3AAAAAAAAAAAAB/90dG + VsdsjHbHxsdoj3cAAAAAAAAAAAj4dGR0Z2x3ZsjHx8fHePdwAAAAAAAAAI+GR0ZHxleIiHx858fHx493 + AAAAAAAAB/hHRkZGfHiIiIbHx8Z8dnj3gAAAAAAAf4dGRGVsZoiIj4jHbIx8fHf4cAAAAAAIj3RkZUZH + RYiIiIhsjHznx8d/dwAAAAAH90ZFZGxkbHiIiIfHZ8fHx2x49wAAAAB/9lZGRkR8dmiIiIx8fH5efHZ2 + +HAAAACPdGRsZGxkbFZ3fHZ8fsfHx8fHf3AAAAiIdGx0R8ZHRmzGx2x+V8dsdnx2eIcAAAf4ZWRsZEdE + bFZ3Z8fHxnx3x8fHyIcAAAj3RsfGVsZGx2iIiGdnbHbHZ+dnd/cAAIiHZ8ZGxkbHRGiI+Fxsd8d8fHzH + x/eAAHiHx8fHRsdEbHiIiHZ8fHbHbHZ8dohwAH+Gx2dsbHRsZMiIiIxnZsdsdsfGdIiAAH93x8bHfGxk + dkeIiIhUx2x2x2dlZ49wAH98fnx8Z8ZcbGyIiIiHbHbHZcbGxn9wAH93x8fnxnxmxlZIiIiIdkdkdmVn + R39wAH92fOXGfHbHRsbHeIiI9GxWxsbHxn9wAH93x8dsfGfHx0ZMaIiI+EZsdHR0ZYhwAH+M52fIZ8fs + dsdsbIiI/4RWRsZGVoiAAHj3fHzsfIx2x2x2VniPj4bGx0fGZYhwAIj3yOd8hsbHx8fHxs/4/4RlZGRl + ZvgAAAj3jMx+x+fIbIbHZ8////fGfHx8dfcAAAf4jn7Hx8fIiGx+xo//j/dsdmZnSPcAAAiPd8d8jIzo + /4dneP////R8bHxWeIgAAAB/iHyM58fI/////////4xnZWZ8f3AAAACI+OyGyOx+///////4/4bHxsfH + +HAAAAAI+IjIx8jI////////+Mdsdnx39wAAAAAHj3jOfsfnj///////jGx2x8d/iAAAAAAAf/iMfIx8 + eIj/+PiMZ2fHx2ePcAAAAAAAB/iI58jOzOx8fHxnx8fHZ2j3AAAAAAAAAI/4h+yHd8jOfOfH7H5sfP+A + AAAAAAAAAAj4iHfOyM58d8dsd8fHj/gAAAAAAAAAAAB/+IiMjIx3znyMfHZ4+IAAAAAAAAAAAAAHj4iI + 587Ix8hn53j/hwAAAAAAAAAAAAAAh/+IiId+d+yMiI+IcAAAAAAAAAAAAAAAAHiP+IiHd4iP/4hwAAAA + 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 + wPEbmP0G/n+7sMqt4AflUwAAAABJRU5ErkJggigAAACAAAAAAAEAAAEACAAAAAAAAEAAAAAAAAAAAAAA + AAEAAAABAAAAAAAAXCQMAF8qFABmJw0AYysUAHMtEQBpMhsAdzcbAGk6JwB3OyQAbUAtAHdBKwBrRzcA + d0k2AH1RPgBxT0EAeVVGAH5dUQB8Y1kAfGpkAH19fgCLOxgAkz0ZAIM9IgCNQB4AmUEdAKBFHgCLQyUA + lUcnAIVLNACYTjAAilE6AJxSNACiSCMAplAtAKZPOQC4TzgAp1c3ALZbOgC7YT0AxE00AMFTOQDEYzwA + iFhGAJlYRQCFXlEAml1RAKpbQgC2W0IAoF5SAJVhSwCJZFYAk2ZTAJpkVACWZ1oAm2RYAJVqWwCbalwA + pmNHALxkQgCma1YAtG5TAKdyXQC7c1cAiWxjAJNuYQCebmIAjXNoAJRyZQCYcGQAknVrAJJ4bwCaeWwA + hnl3AJR7cgCcfHAApG1iAKRxZQCpdmIAoHNoAKhyaAChe20ArXxqALV7ZgCpe3EAyGlEANFuSQDLcE0A + 1XBKAMJvUADGdlcA1nhVAMJ7YADRf2AAnIN6ALiCbACphXgAuIl3ANuBXwDNg2YA2YdnAMmMdgDUjXEA + 2pN4AOKLawDgj3AA45Z5AH9+gACAf4AAg4ODAIuDgwCHiIgAi4uLAJmNjACdk44Ajo6QAJOPkACTk5MA + mpSTAJeXmACXmJgAmpqbAKSKgACrjYMAtI6CAKuSiAC1lYkAppuZALSclAC5m5MAsp6ZAKqgnAC5oJUA + taOdALukmwCfn6AAoJ6gAKSiowCrpKQArKmmAKumqACuqakAtKWgALumoACyq6YAuqqlALKsrAC9raoA + urSsAK6usACzrrAAtbGxALq0tAC+uLYAtrW4ALq2uAC9ubkAx5iHANibgwDHnpMA5J2CAN2ijADCo5oA + 2amXAOajiQDlqpQA5LCcAMSspQDFua0Aw7WxAMy3sADCu7QAy7q0AMK8vADKv7sA0ry1AOm6qQDHwK4A + xsG0AMnCtQDEwLsAy8O8AM3KvADTwrsA1si/AO3ArwDsw7QA8cu9ALy9wgDCvsAAv8DAAMXBwQDJxMQA + zcjEAMnGyADNysoA08bAANLMxADdysEA0czNANrOyQDU0cUA1NLKANvTzADMztAA0s7QAM7Q0QDV0tIA + 2dTUANbY1gDc2dUA2dbYANfY2ADd2toA78zAAPDOwQDl1swA8tLGAODW0gDi29QA6dzUAOHd3QDz29IA + 5eLUAOji1gDk4dwA6uTcAOvo3gDy4doA39/gAOLf4ADl4+MA6eXlAOfo5QDs6uMA5uboAOjn6ADn6ewA + 7OrqAPPm4gDx6+QA8O7tAPLw5gD08uwA+PTuAPn47gDt7vAA8e7wAO3x8gD08vIA+PX0APv59QD09vgA + +fb4APb4+gD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + b29wdXV3d3h4eHh4dXV1cG8UbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAb3Bwib/O3fn7+/v7+/v7+/v7+/v799XOlXVwFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAHBweL3R8fr56N3Sx8K/v729vb+/wsLOzdXn8f37+/v2zolwFAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAcHCVx/b66N3CmZiYmL3Cx9HR3d3d5t3d3d3Rz8fOws3R5vn7+/v2mnBsAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAcInH8fHdwpeWl67N3ebj8NvLyMbExMSvxMTIyNji8PDw8efRzc/V9vv7 + +/eVb28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdZzn8dW9lpCZy+fw4tjEhoF7UUVFNjc1NTc1NzZMT1R+gaev + 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 + KSkpKVkpKSkpKVkpKTApKTApMDFF2Pu/zfuXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeMe9itLx + QQsXFRYVFRUVFRUVFRUVFRUVFRgYGBgYHBwbHhweHh5gtpqUl5iYl5iXmJiYmJiYmb2u7H4dMDAwMDBZ + MDAwMClZKTApMFkpKSkwKSkwKSkpMCkpKTAwMCxK8ey95vtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACXt469+34LFxUVFhUVFRUVFRUVFRUVFRUVFRgYGBwbHBwbHh4eG2C2l5qclJeXl5iUlpeYmJiZvb33 + fB4wMDAwMDAwKVkpMCkwMDApKTAwKVkpMCkwMDApMDApKSkwMTGA+8+9/tUUAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAg82XlvS3DhsVFRUVFhUVFRUVFRUVFRUVFRUWGBgYGBwbHhseHh4bPpyalJSWlJaWlpaW + l5eYmJiYvfZMIzAwMDAwMDAwKTEpMDAwKVkwKTAwKSkwWSkpMCkwKTApMDApLDO3+7/H+4wAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAC9v4rP9DMLFRYVGRkVFhYVFhUWFRUVFRUWFRUWGBgcGxscGx4bHh4gkJqU + lZaWlpaWlpaXl5eYmJjV0SAvMDEwMDAwMDAwWSkwWSkwMDAwKTAwWSkpKTAwKTBZKTApMDAwLkfx7L3m + +W8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAiceWnPuBCxsWFhkVFhYVFhYVFhUVFhUVFRUWFRUYGBgYHBwb + HBweGx5StJWWlpaWkJaQlpaXl5iYvflgIzowMDAwMD0wMDAwMSkwMDAwMDAwKTApMDAwMFkpMCkwMDAp + MDAsLn37x739lwAAAAAAAAAAAAAAAAAAAAAAAAAAAADCmYro4BAbGBYWFRkVFhYVFhUWFRYVFhUWFRYV + GBgYGBgcHBwbHhweHh5+mpSWkJaWkJaWlpeXl5nrqiMvMDowMDEwMDA9KTAwMDAwWSkwKVkwMDAwMDAp + KTEpMDAwMCkwMDAxNtL0vdH5bwAAAAAAAAAAAAAAAAAAAAAAAAAAiceWvftgCxgYGRkVGRYWFhYWFhYV + FhUWFRUVFRUVGBkYHBgcHBwbHhweHiB+mpSWkJaQlpCQlpfC56ovLy8wOjA6MDAwMDAxMDAwMDAwMDAw + MDAwMDAwMDAwKTAwMDAwMDAwMCwsXvrNvfqcbwAAAAAAAAAAAAAAAAAAAAAAAADCmZbixQ4bGBkZGRkZ + FhYWFhYVFhYWFRYVFhUWFRUZGBgYGBwbHBwcHhweHiBgl5yal5eUmJy/z8udLy8vLy8wLzAwMTAwMDAw + MDAwMDAwWTAwMDAwWSkwMDAwMDAwMCkwKTAwMDEtt/u90flvAAAAAAAAAAAAAAAAAAAAAAAAiceWrvVg + DRgZGRkVGRUZFhYWFhYWFRYWFRYVFhUZFRUZGBwcGRwcHBweHB4eHhwvUoSXmZm9rqd8OiUsLy8vLy86 + MDowMDEwMDA9MDAwPTAwMDBZMDAwMDAwMDAwMDAwMDAwMDAwLyte9ce9+pcAAAAAAAAAAAAAAAAAAAAA + AAC/vZDoxS0gGRkZGRkZGRYWFhYWFhYWFhUWFhYWFRUZFRUZFhkYGxwcHB4bHh4eHh4cJS8vJS86LyUl + Ly8lLy8vLzAvMDowMDA8MDAwPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAvMS23+pjS9m8AAAAAAAAA + AAAAAAAAAAAAg8eWvfV7HyAiGRkZGRkWGRYZFhYWFhYWFhYWFRYWFRUZFRgYGBgcGRseHB4eHB4eICAe + Hh4sICAgLyUlJS8vLy8vLy86MDo6MDAwMDAwMDEwMTAwMSkxMDBZMDEpMDAwMDAwMDAwMC8vK176x736 + eAAAAAAAAAAAAAAAAAAAAACWwpDd2zMsIiIaGRkZGRkZGRkWFhYWFhYWFhYWFhYWGRUZFhkYHBkbHBwc + HBweHB4eICAgJSAlJSUsJSwlLC8sLy8vLy8vMDowOjEwMTAwMDAwMDAwMDAwMSkxKT0wPTAwMDAwMTAw + JC8sM9j2l+jRbwAAAAAAAAAAAAAAAAAAiceYmPSBDiUiICIZGRkZGRkZGRkZFhYWFhYWFhYVFhUWFRkV + GBkYHBkcHBwcHh4eHh4eICAgICAsHiUlJSwvJSUvLy8vLy8vLzowMDowMDEwMDA9MDEwMDAwMDAwMDAw + MDAwMTAwJC8vLzErffW9wvpwAAAAAAAAAAAAAAAAAACMypbH9kEsICAiIiEZGhkZGRkZFhkZFhYWFhYW + FhYWFhkVGRYWGBwZGBkcHBwcHB4cHh4eICAgICAgLCAsJSwlLywvLy8vOi8vLy86MDowMDEwMDAwMDA9 + MDEwMDAwMDEwMDAwMC8vMC8kMSxA8NKY+ZcAAAAAAAAAAAAAAAAAAJzCluKuKyUgIiUiIhoZGhkZGRkZ + FhkWGRYWFhYWFhYWFhkVGRYWFhgcGBscHBweHBUHBwcHBgYJCQkHCQsgJSwlJTolLy8vLy8vLzAvOi86 + MDEwMTAwMTAwMDAwMTAxMDAxMC8vMC8wLy8vLCuu8ZjV3W8AAAAAAAAAAAAAAACJx5i99HsfLyIlJSIl + IhkZGhkZGRkZGRkZGRYWFhYWFhYWFhkVFhgYGRgcGRwcHBkgSENDQ0NKSkpKSl5KDgkgLCUsJSwlLywv + Ly8vLy8vMDowMDowMTAwMTAxMDEwMDAvMC8vMC8vMC8jMC8jK171wr36cAAAAAAAAAAAAAAAAJXHlsro + QSUlJSUlJSIiIhkaGhkZGRkZGRYaGRoWFhYWFhYZFRkZFhkZGRgZGBwcHoa2tr6+w7a+wMPDytGUCB8l + IDolJTogJywlLy8vLy8vLy86Ly8wOi8wLzAvMC8vLy8vMC8vLzAsMC8vLy8sM+jbl/mWAAAAAAAAAAAA + AAAAl8WX4sIrOiUiJSIlJSIiGhoZGhkZGhkaGRYZFhYaFhYWGRYZFRkWGBYYHBkcGRwesb6+tr60vr6/ + tMDAwsANHiUgIC8gLyAsJTovLy8vLy8vLy8vLy86Ly8vLy8vLy8vMC8vLy8vLyQvLyMjLywQrvCX3c9v + AAAAAAAAAAAAAADCvZzwhCsvIiYiJiIlIiUiGhoaGhkZGhkaGhkZFhYaFhYWGRkZFRkWGBkZGBkYGB6x + vr6+tL6+v7+0wMDMvwocLCAvIDogOiUvIC8gLywvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8jMC8l + LB9y9ZzC9m8AAAAAAAAAAAAAeNiYzuhRLC8mJiYiJiUiJiIiGhoaGhkaGRkZGhYaFhYaFhkWFhkZFhwZ + GRkbGRsZHrK+tr6+v7+/v8DAwMyuDR0gICAgICwlICwlLDolJSwlLy8vLy8vLy8vLzovLy8vLy8vLyMv + Iy8vIy8lIy8lK0DwxZj6dQAAAAAAAAAAAACVzZjR20EvJSYgJiYiJiImIiYiGRoaGhkaGhYaGhkaGRYa + FhoWGRkWGRYZGBkZHBketMC+wL+/v7/AwMDBw8EQFyAgIC8gIDogJTolIC8sJS8sJSUlLC8vLy8vLy8v + Ly8jLy8vLy8vLyUvJS8vJSwfLcvVlvGWAAAAAAAAAAAAAJzHmOS9KzolJiYiJiImIiYlICIiGhoaGhka + GhkaGRoWGhYaFhkZGRUZFhkZGBkYGRyxwMDAwL/Cwr/AwMHBz0gGHiAgICAlICAgICA6IDolIC8sLywl + LyUlLC8lLyUvLy8lLyMvJS8lLyUvJSUlJSwOmOKW3cdwAAAAAAAAAAAAv8KY8I8yOyUmJiYlJSYiJSYi + JiIiGhoaGhoaGhkaFhoWGhYaFhkZGRkWGRkYGRgZG4/MtMDAv7+uv7/Av8DMgwYdJSAgLCAsJTogICAl + ICwlJSAlLyAvJSwvLywlLCUvLCUvLCUvIC8gLyAlIC8gIA599JjH5m8AAAAAAAAAAADHrr/jeiw6JiYm + JSYiJiUmIiUmJiAhGhoaGhoaGhoaGhoZGRkZGRkZGRYYGRkZGRgZfsPAwMC/v7+/v7+/v8LOEAYeICUg + ICAgICAvICwlIDogOiAvICwvJSUlJS8lLCUlLCUlJS8jLCUjJSwjJSMsH0fwvb30cAAAAAAAAAAAiN2Y + zt9GOjslJiYiJiYlJiYmJiUiJiYiGhoaGhoaGhYaGRoZGhkWGRkZGRkZGRgZGRVfw7TAvr+9v729mb+9 + vcGFBgkeICAgICAgICAgICAgICAgLCUgJSAsJSUsIC8lLCUlJSwjLCUlLCUgJSMsIh4rEtLBmPl1AAAA + AAAAAAB43ZjP5kU6OiYmJSYlJyYmIiYiJSUmJSIiGhoaGhoaGhoaGRoZGRoZGRkZFhkZGRkZFjrDtr6+ + nJm9mZm9nJm9vcpeAgseICAgICAgICA6ICAsJSAlIDogLCUgLCUlLCAlLCUsJSAlICIlICUgJR4lIB8t + 28qW+XgAAAAAAAAAAJbPm9vKNDo7JicnJiYmJiYmIiclJiYlJSYiGhoaGhoaGhoaGRoZGRkZGRkZGRkZ + GBkZHpS+nJy9nJycnJeZmZycvcxDAgscICAgICAgICAgICAgICAgICAlICAlIB4vICUgJR4lICAlLB4l + ICAgJR4gHw7B0ZbolwAAAAAAAAAAnNGZ25w0OjsmJiUmJiYmIiclJyYmJSYiJSYiIRoaGhoaGhoaGRoa + GRkZGRkZGRkZGRkWfLaanJiXl5eXmZeYl5icv8pGBBceHh4gICAgICAgICA6ICAgICAgLCUgJR4gICAg + JR4lLB4lHiAjIB4eIx4fDZjbkN2/AAAAAAAAAAC9z5zmkzo9JyYnJyYlJyYlJyYiJSYiJSYmIiYmIRoa + GhoaGhoaGRoZGRkaGRkZGRkZGRY6nJqUmJiXqZeXl5eXl5eXwtJGAhceHh4eHiAgICAgICAgICAgICAl + ICAgICUgICAgLB4iHiIsHiAiLCIeHh8NituW3cdwAAAAAAAAAL3RmeKQMj0nJicmJicmJiciJycmJiYm + JiYlJiImISEaGhoaGhoaGhoaGRoZGRkaGRkZGRl+nJqUlJSWlpeTlpaTlJeXv+FeAgYeHh4eHh4eICAg + ICAgICAlICAgICAgHiAgIB4iHh4sHiIeHh4eHh4iHw2D35bPz3AAAAAAAAAAv9GZ4o46PScnJyYmJyYm + JicnJSYlJiUmIiciJSYmIiEaGhoaGhoZGhoaGhkZGRkZGRkZFjqUlJWWlpaQlpCWkJWWlpeXv+uFCAYb + Hh4eHh4eHh4eHiAgIB0gIB0gICAeHiAgHh4sIh4eHiIeHiIeHh4eDX/blsjTbwAAAAAAAAC9z73jgyw/ + JycmJycnJicnJScmJyYmJiYlJyUnJSYmIiIaGhoaGhoaGhoZGhoZGhkaGRkaFmCalpaMlpCWjJCMkJaQ + lpeYv+uzCgYbIR4hHh4eHh4eHh4eHh4eHh4eHiAeHiAeHh4eHh4eHh4eHh4eHhwLf+CWx89vAAAAAAAA + AL/RmfCAOj8nJycnJicnJiYnJiYlJSclJyYlJyYiJSYmJSIaGhoaGhoaGhoaGRkaGRkcGhkZGoCVlZCW + io6VjJaKkJaWl5SYv+nSDgIbHh4cHiEeHh4cHh4eHh4eHh4cIB4eHh4eHh4hHh4hHh4hHiEeHAty35bH + 0WwAAAAAAAAAv9Gu8H86WicnJycnJicnJSclJycnJSclJyYlJiclJiInJyIiGhoaGhoaGhoaGhkaGhkZ + GRoZIJSVjIyQlY6MkJWKlpCWlpicv+nfDgMbHBweHB4cHB4cHh4cHiEeHhwcHh4cHh4aHh4hHh4eIR4c + HhwfC3LmkMfRbwAAAAAAAADC0b3wfTpcJzsnJyonJycnJycnJSonJyUnJiYlJyYmJSYiJyYiIRoaGhoa + GhoZGhoaGRoZGRkZL5SMkJWKlYyMkJCMlpaXmL29v+nhDAYbHBwcHhwhHhweHBweHB4cHh4cHB4cHh4e + HB4bHBwcHhweHh0Lct+Qx9FsAAAAAAAAAL/YveODOlxVJyo7JycnJycnJycnJyUnJyUnJiYmIiclJiYm + IicmISEaGhoaGhoaGRoaGRoaHBkWL5CUipaKkJaKloyWkJiYnJm/wvHSCAUbIRweHBwcHBweHBwcHBwe + HBweHBwcHB4bHB4eHB4cHhwcHAty25bH0W8AAAAAAAAAv9W98IMvXFU7OyonJyonJycnJycnJycnJyYl + JScnJyUlJiYmIiYlJiEhGhoaGhoaGhoZGhkaGhkWIISVlZCKkIqWkJaXl5i9v67BzvmzBAcbHBwcHBwe + HBwcHBwcHBwcHBwcHhseGB4cHBweHBweHB4fC3fYkMfPbwAAAAAAAADC1b/jjjpcWSo7KjsnJyonJycn + JyUnJScnJycnJiUmJyYlJSYmJiYlJiIiGhoaGhoaGhoZGhoZGhoZIn2XlZCVipaQlpeXmZm/v8630vuA + AhgcHBwcHBwcHBwcHBwcHBweGxwcHBweGB4cHBwcHBweHB0LiNKQ0c1wAAAAAAAAAL/dwuKTOlxZKjsq + OyonKicnJycnJycqJycnJycmJScmJyYmJSUlJiYmJSciIhoaGhoaGhoZGhocGhwZHH6XlY6WlpaQl5iZ + vb/CwcfP5/4zAxscHBwcHBwcHBwcHBwcGxwcHBwcHBwcHhgeHBweHBwcHQyDyorRxwAAAAAAAAAAvd2/ + 5qg6XFwqVTsqKioqOyonJycnJyclJyUnJyUqJScmJiYnJiUmIiYmIiYmJSIhIRoaGhoaGRoaGRoZGnyX + lZaQlpeYmb29rsHOx8/P+d8GBxkcHBwcHBwcHBwcHBwcHBwcHBwcHBwYHhwbHhscHB0dDJbIjt2/AAAA + AAAAAACV3a7mzDpcXSo7KlU7Oyo7Kic7KicnKicqJycnJycnJSclJyYnJyUmJSYmJiYiJyIiIRoaGhoa + GhoaGRoZGnyXlpaWmJiZvb/CwsfH0dHV+30CGBwcGRwcHBwcHBwcHBwcHBscHBwbHBwcHBwcHB4cHBsM + vcGM6JYAAAAAAAAAAHjxwubfPD9jVVU7VVUqOyo7Ozs7KicnJycnJyclJycnJyUnJiUmJyUmJSYmJSYm + JiYmJSEhGhoaGhohHBoZGYGXlJiYmL29rsHHx8vR0dX29ggHGRkcHBwaHBwcGRwcGRscHBwcHBwcGxwe + GxwbHBsdCxHBworxeAAAAAAAAAAAivHB0uZOWWZVVVU7O1U7OztVKjs7Oyo7JycnJyonJyUqJyUnJyYm + JyclJiUmJiUlJSIlJiUiIRoaGhoaGhoZIZCYmJy9va7BzrfPz9HV1d37fgEbHBwcGRwZHBkbHBwcHBwZ + GxwcGxwcGxwcGB4bGBwLEsWZlvl1AAAAAAAAAAAA58fK8GA7ZVlVKlVVKlVVVSo7Ozs7OyonJycnJycn + JycnJyclJyUnJicmJyUlJiUmJSYmJSUlJh4iGhwaGhoZPZycvb29wsLHx8/V2NXV3fnbBhUcGRwcHBwZ + HBwcHBwcGRwcHBkcHBwcGxwYGB4cGwtJyZiY8XUAAAAAAAAAAADK5s70gTpkY1VVKlU7VSoqO1VVOyo7 + KjsqJycnJycnJycnJycnJyYmJSYmJicmJSYmJiIlJiIlJSYiIiEhGhkhor69va7BxcfR0dHV1dXd6PtA + BRwZGRwZHBwcHBwaGBwcHBwYHBscHBwYHBwcGB4dCHLSkMLRcAAAAAAAAAAAAL/owvCcO1xnVVVVVVU7 + VVkqKjtVOypVJzs7KicnJycnJycnJSclJyUnJScmJSYnJiInJSclJiUmJSYmJSUgIhlfzr3CwcfHys/P + 1dXV5uTl+4QDGxwcGRwZHBkcGRwcHBwYHBwcHBwYHBwYHBwYGx0Kla6M0scAAAAAAAAAAAAAlejC8Mo9 + XKFXVVVVVVUqKllVVTtVO1UqVScnOycnJycnJycnJycnJycnJScmJiUnJSclJyUlJiYlJSUmJSYiIj3P + 0cvPx9HP0dXV1d3d5ub50QcVGhwZHBwZHBwcGBwaHBkZGxwZHBwcHBgcHBwbCw+0torolQAAAAAAAAAA + AACK+cfV8E5Znl1VVVVVVVUqVSo7VTtVKic7VSdVJzsnOycnJycnJycnJScnJSclJScnJSciJyUmIiUm + JSUiJiUiL8vd1d3d3d3k1d3d3d3m5vHwCBUcHBoZGRwZHBkcGhgcHBwcGRsZGBgcHBgYHBsJE7aYlvF1 + AAAAAAAAAAAAAADn3c/1fVdnnlVVVVUqVVVVO1VVO1U7VVUnVSdVJzsnJycnJycnJycnJycnJycnJSUn + JyUnJyUnJSYlIiUiJiUlyefn3ejo5uzm7+jo6Obm7PorBxwZHBwcGRwaGBkYHBkYHBkcHBgcHBkcHBwc + HQp0yZa98HUAAAAAAAAAAAAAAM72zvSZWV2wVVZVVVVVVVVVVVU7VTs7VSo7VSdVJyo7JycnJycnJycl + JyUnJScnJyYlJyUnJScmIiUmJSUmJSbL5+fn5+jo6Ozs7Ojv9+/s+1EXIiAeISAcHhweHB4cHhwcHB4c + HhweHh4gIB4dD4y2itLNAAAAAAAAAAAAAAAAnPHH6OZZWrBmVVZVVVVVVVVVVVVVVSpVVTtVJ1U7VScn + OzsnJycnJSEeJScnJyUnJSclJyYmJSclJyYlJiImOtjr5+fo7Ojs7O/u9+zs7Pn7ehcgICYgJSUlICIl + JSUeJSUeJR4lHiUeHh4eHR0Ss7+K8ZcAAAAAAAAAAAAAAACX+dLR9XtXoaZWVVZVVVVVVVVVVVU7VTtV + VSdVJyc7VSo7Jyc7JydhfisHHiUnJycnJScmJSYmJSciJyUmJSFf7uno9uj26PHs9uzs7+7s7Pt7FyAm + ICAgICAlICUeICUgICAgICAeHh4eIB4gDW+2lJj5dQAAAAAAAAAAAAAAAADS9sf7mVln3ltVVVZVVlVV + VVVVVVVVVSpVO1VVVSdVOypVJycnZePy330LGB4lJycnJSclJyYlJyciJyUmJbby8Ovo8Pbo9uzv9+zu + 7uz5+3sYJSAgJSUiJSAgICUeHiAeICAgHiAgICAeHh8Pi7OKz9V3AAAAAAAAAAAAAAAAAJz9x/DwPlu5 + pVVWVVZVVVVVVVVVVVVVO1UqVSdVO1UnOztVJyej6enp6bY0CxgeJSUqJyclJyUnJScnIh6d8vbp9vbo + 9vD29uz27Ozs7Oz7URsgIiUlICUlICUeJR4lICAgHiAeJR4gIB4eDhKztIz2lwAAAAAAAAAAAAAAAAAA + APvnz/uEWp7ZWFVWVVZVVlVWVVVVVVVVVVVVVVU7VVUqOyonJ6Pp6enp6emxRAsYHB4lJSUnJSclJR4e + fvLu7vD28Pbw9ujx7O/27/bs+f4rHiIlJSAlHiUgICAgICAgICAiIiAeHiAeIB4MdbOVnPF1AAAAAAAA + AAAAAAAAAAAA0/nP+89aZNekVVZWVVZVVlVWVVVVVVVVVTtVVVUnVTtVVScno+np6enp6fPpyYA0HRsb + GBgcGBwdPrH17u7x8fb28Pb29u/27Oz26Ozx7x0iJSAmICIiJSUgIiAiICIgIiAgICAgICAgHxGUs4nS + zAAAAAAAAAAAAAAAAAAAAACX++f2+3xioddYVVZWVlZVVlZVVVVVVVVVVVU7VVVVVSdVKieh+PP46fPp + 8/jy8+nftoV9enp9hsny9e7u8/Hx9vb29ujx9ujx7Ojs6P7IHSIlICAiJSIlHiIlICAiIiIgICAgICIi + Hh8Nb7GUlfCHAAAAAAAAAAAAAAAAAAAAAAD5/ef7wV1k16FYVVhWVlZVVlZWVVZVVVVVVVVVVTtVVSdV + J6H48/ju8fjp8fj4+Pjz8/X19fX19fP48fPx8fH28fD28fbo8ezx6Ojo+4EVJSUiJiUlIiIiJSAiIiIg + ICIgIiAgIB4eHxCUsovA5ngAAAAAAAAAAAAAAAAAAAAAAJz7+fv7e2ak11tYVVhWVlZVVlVWVVZVVVVV + VVVVVVVVVSono/jz8fHx8fHx8e7u8/P48fHx8fH48fPx8/jx8fHx9vHw9ujx6Ojo6Pb7NyIlJSIgJiAi + JSUlICUiJSAgIiAgIiAhIB4ObbGUi+OVAAAAAAAAAAAAAAAAAAAAAAAAAPv7+fvBXWm6pVhYVVZWVlZW + VlVWVVVVV1VVVVVVO1VVKiqj/vjx8fHx8fHx9fHz8fH48/j1+PT48fj48fj09vbx9uz26Pbo6Ojm+8ge + IiUlJSImJSUlICIiJSAiIiAgIiAgICAeHw6UsYu26XgAAAAAAAAAAAAAAAAAAAAAAAAAwvv7+/uBZ2rk + ZFhYVlZWVlVWVlZWVVVWVVVVVVVVVVVVJ6P+8fj5+Pn4+fj4+Pj49fj1+Pn4+Pn5+fn49Pbx8fbw9ujw + 6Ojo5/b7Uh4lIiUlIiUlJSIiJSUgICIiICIgIiAhICAOb7GUi+maAAAAAAAAAAAAAAAAAAAAAAAAAAAA + +/v7+9Ffaqa5WFdWVlZWVlZWVVVVWFZVVlVVVVVVVVUqpvX1+Pn5+fn5+fn1+fX49fj5+fn5+fn49PH4 + 8fH28Pbo8ezo6Ofd+8YeIiYlIiYiJh4lIiIlICIlIiUgIiAiICIgHxKxsYm26XUAAAAAAAAAAAAAAAAA + AAAAAAAAAADC+/v7+5dnadekVlZYVlZWVlZVWFVVVVZVVVVVVVVVVSej/v759fn59fn1+fn5/vj5+fX5 + +fn5+fn4+fHx8fH26Pbo6Ojn3f7xLyIlJiUiJSImJSIlIiUiJSAlICIiIiAgICAOcrGLi+mVAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD7+/v78nxqpN5kVlhYVlZWVlVVW1hVWFdXV1dVVVVVKqb++fn++f75+f75 + /vn5+f75/vn5+fn5+fT28fHx9uj26Ojo5935+18iLyYlJiUmJSUlIiYiJSIlIiUiIiAiJSAgHUOxsYnJ + 5XgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL/7+/v7ymVqpblYWFhYVlZYWFhVWFVYVlZVVlVVV1Uqpf71 + +fn5+f75+f759f75+fn5+fn1+Pn4+fHx8fbw9ujo6Ofn+PthIiYlJiImIiYlIiIlIiUlJSIlIiIlIiAi + IB4Ri7GLlemLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOv7+/v7mWppuaZYWFhWVlVYVVhVWFhVV1VX + V1dVVipk9f7++f71/v359f7++f75/vn++f74+fnx+fH29ujo6Ojn5/v5ZSImJSYlJiUmJiUmJSYiJSUl + IiUiIiIlIiAgDnKxlIvfzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7+/v0gZ5q16BYWFhYWFhY + WFhVWFdXWFhVVlVWVVWe9fv7/v75+v3++f75/vn5/vn5+fn59/n29ujw9ujo6Pn75D8iJiYmJiYlJiUm + JSIlJiInIiUlJSIlIiUgIB9tsbGJvul4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwvv7+/vpnaBq + 5GlYWFhYWFhYVVtWVldYVVhVVlVWVVVduvn7+/v++f75+f35+/n5+fn5+Pn29vHx9ujo9vn7+aMvJSYm + Ji8mJiYmJiUmJSYiJyUlJSUiJSUiJSAeE7GxiZTplQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 6/v7+/vPnaSg2WhYWFhYWFhYVVhYVlVYVlZWVlVWVSoqXabv+/v7+/v9+f35/vn5+fn59vHx9vD2+fv7 + 76M6JiYnJyYmJiYlJiUnJiYiJSclIiYlIiciIiUlHhKQsYuL384AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA+/v7+/vHZ2qk12JYWFhYVlhYWFZYWFZWVlZWVlVWVlVVKlVksNz6+/v7+/v7/vv+/v77 + /vv7+/3vsGUwJiYqJicmJiYnJScnJSclJSYlJiInJSUlIiclJSAri7GUi8nlhwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAC++/v5+/vEaqCku2RYWFhYWFhVWFZWV1ZWVlZVVlZWVVVWVSoqKldnprC6 + 4vHw8PDv8OTYsKadWTsmJicnJycnJycmJycnJiYnJiYmJScmIiciJSclIiUgH3KxlIey+IcAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADM+/v3+/uqpGqlu2RYWFhYWFhYWFhYVlZWVlZVVlVWVVZV + VlVWKlUqJioqVlZZVllVVVUmJikqJzsnJycnJycnJyYnJiYnJiYmJSYmJSciJyUmJSclJR9ysbGLlOmV + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV+/7n+/WopGqk2WpYWFhYWFhYWFhXWFZW + VlZWVlZWVVZVVlVWVSoqVlVVVSpVJlUnKioqKjsqKlUnJycnJycnJzsnJSclJiYnJiYnJSciJyUlJSUf + crGxiZTpvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2+/fl+/SopKCg3qRYWFhY + WFhYWFhYVlZWVldWVlZWVVZVVVZWVlZVVVVVVVVVVVU7VVU7VTs7JzsqJzsnJyY7JicnJycmJiclJyUn + JiciJiUlIHKxsYmV39EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr++vV+fnE + nqRq2aZYWFtYWFhYWFhWWFZWVlZWVVZWVVZWVVVZKlZVVVVVVVVVVVU7VTsqVVVVJztVJycnOycnJycn + JicmJycmJyYmIiclJTSDsbGJld/RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD2++XP9PXMnaRqubtoWFhYWFhYWFhYWFhWV1hYVlZYVVZXVlVWKlZVVVVVVVVVVVVVVTtVJztVJyc7 + VSc7OycnJycmJycnJyUnJiclJyU0i7GxiZXf0YcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAADr+9XO9vvSn6Vppd6kWFhYWFhYWFhYV1hYVlZWVlZYVVZWVVZWVVVVVVVVVVU7VSdV + VSdVVSdVOyonOycqOycnJycmJycnJyYmJyU6SouxlImV386HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAADV++fB5vvjlKSkaru7aFhYWFhYWFhYWFhXWFZVVlZYVVZWVVZWVVZV + VVVVVVVVVVU7VVUnVVUnVTsqOzs7JzsnJycnJycmJyUlOnCxsZSJlOnJAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV+/bB1Pvus56laqXepWJYWFhYWFhYWFhYWFhWVlZY + VVZWVVZWVlZVVlVVVVVVVVUnVVUnVTsqVScqOyo7JycqJycnJyclJz6HsZSVibLpvgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC++/nOx/T10YakpKC5u6BYWFhYWFhY + WFhXWFhWVlhWVlZYVVZVVlVVVVVVVVVVVVVVKlVVVTtVVTsqOyo7JycnJycnIjpyi7GUi4u2+JUAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc+fnPwOX16bKEpKCg + ublqWFhbWFhYWFhYWFZWVlhVWFVYV1VWVlZVVlVVVVVVVVVVO1U7VSdVKjsqOyoqKicnJSdLi7GxlIuU + 0emLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/z/vn + wszx89GnnqSgpLC5amJYWFhYWFhYWFhWWFhWWFVYV1VWVlZZVVVVVVVVVVVVKlVVKjtVVTsqOyo7KiU/ + g5SxlIuLvunKhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAwvv5yr/V9fLJkZ6kpGqkuaRoWFhYWFhYWFZWWFZWV1ZWVlVWVVVWVlVVVVVVVVVVKlVVVTtV + VVU7Oyc9g5SUsZWLlcrplAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAl9X79r/A4fPptqedpKSkoKSkaWJYWFhYWFhWWFhWVlZWWFVYVlVWVlVWVVVV + VVVVVVUqVVUnKiZShpeUsb6Li7bpyocAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJzr+9W/wOnu48mUfmakpGpqaWliW1tYWFhYVlhWVlZWWFVY + VlVYVVVWVVVVVVVVVVUqJj18lL6UspyLi7Tf6ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL/O9fnRv7Tp6fLftoZlampqamliYltbWFZY + WFhWVlZWV1ZWVlVWVlVWV1hWVSo7VWGPnJqxtJyVibTf676JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVzvv50r+2zunp8tG2i2Fh + ZmloaWhoYmJbW1tbW1hYWFtYW1tbWFhVVVVSnZacnLG/v5eMi7Tf8cKHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl8z5+eHA + nLbR3/Lj38myi51hTlxiXV1aXVlZWllZWVlXVz9gYZ+Umr6atLO2nJCMlMHw8MKHAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAJea6fjxyr6+vsnR6ePf38nOtpSLg3l/eYODeIOIkJeYv76cv7PBxa6cloqWv9v28LyHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAlczx+O7KvrKcvrbR39Hp39HfycnKycnJycnBycnKxcXCmZSVjJjC5vT5z4kA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqaw/j1+OnKvr6XlZSytr7Dw7bDwcHCrr+cmJaWkJScwt3w + +vnPlYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIuazOn+8fHu6cy/v7ScnJSamJicvb/B + 0d3o9vrxz5uJlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWVmszM4fj1/vv1 + 9fn6+vv5+ezVx5iVgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAlYl4eHV1dXV3eImVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////wAAH////////////////+AAAAD///////////////4AAAAAH///////////// + /wAAAAAAP/////////////wAAAAAAAf////////////wAAAAAAAB////////////wAAAAAAAAH////// + /////wAAAAAAAAAf//////////wAAAAAAAAAB//////////wAAAAAAAAAAP/////////4AAAAAAAAAAA + /////////4AAAAAAAAAAAH////////8AAAAAAAAAAAA////////+AAAAAAAAAAAAD////////AAAAAAA + AAAAAAf///////AAAAAAAAAAAAAD///////gAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAD//////4AA + AAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAD/// + //wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAH////8AAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAA + AAH////gAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAB///+AAAAAAAAA + AAAAAAAAf///gAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAA///8AAAAAAAAAAAAAAAAAH//+AAAA + AAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAAf/ + +AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAA + AAAD//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAA + AAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAA + AAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/ + gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAA + AAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAA + AAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAA + AAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/ + gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAA + AAAAf8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAA + AAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAA + AAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAA//4AAAAAAAAAAAAAAAAAAP/ + +AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAA + AAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAAf//8AAAAAAAAA + AAAAAAAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAA////4AAA + AAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAA/// + //gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAH/////8AAAAAAAAAAAAA + AD//////gAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAf//////gAAAAAAAAAAAAAP//////8AAAAAAA + AAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAAAAAD////////gAAAAAAAAAAAB////////8A + AAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAAAAAAAf/////////4AAAAAAAAAAf///// + /////AAAAAAAAAAP//////////8AAAAAAAAAP///////////wAAAAAAAAP////////////AAAAAAAAP/ + ///////////+AAAAAAAf/////////////4AAAAAAf//////////////4AAAAA////////////////4AA + AH/////////////////+AB//////////KAAAAGAAAADAAAAAAQAIAAAAAAAAJAAAAAAAAAAAAAAAAQAA + AAEAAAAAAABqJQcAdSgHAHEuEgBpNB0AejQXAG44JABxPCYAe0IpAHxKNQB6UD4Ae1VEAHxfUgB+ZFkA + dm5uAHdwcAB6c3MAf3h4AIQuCwCMNA4AkjUOAIo4FACXOxQAoDoPAKE+FQCGPCEAkj0lAJdBHQCkQRgA + iUUpAJpIJgCfUS8Aik00AJVNMgCIUToAm1Q3AKVNKgCwTigAqVItALNULQCiTjAAsU4yAKhVNgC3WTcA + u2A7AMxJLgDEVy0Ay00yAMRXOQDIYzwA02Y8AIFWRACMVkMAhFlHAI9aRQCEWkkAjFxNAJJaQwCcW0QA + k11LAJxcSwCIX1AAol1DAK1cRACjXUsAq11KALVWQwC8VkEAtVxAALpbQACxXkoAmmBJAIdiUQCMYlMA + hGZZAItmXACBaF0AjGlcAJNjUwCbYVMAl2hVAJ1qVgCSa1sAmmtZAKhiSAC1ZEQAu2hGALFgSAC3akkA + vGtLAKdqUwC4blIAr3VeALl2WwCCbGIAi21iAIBvaACVbmIAjXBlAIVzawCTcWUAlnVqAJx0agCUeW4A + mnlsAIp4cACDfHwAk3tzAJt8cgCid2cAt3tkAKR/dwDAW0AAy2pDANdsQwDKck4A3XBHAMt2VQDUeFQA + 4G1CAOBySADkfFQAjoB7AJuDeQCxgG0ApYN2AK2DcwCghX0Aq4V4AKKIfQCriXwAuIh3ANyAXQDkgl0A + yoJlANmFZADLj3oA3Jd8AOWIZQDrkW8A6JZ3APCcewCGgIAAi4SEAI6JiQCVhoEAmIeBAJOLhwCbioMA + kYyMAJqRjACWkZEAmZSUAJ2ZmQCoioEAt4+BAKeQhwCqkYcApZGKAKuSigC4looArJeRAKOZlACinZwA + qp2YALickwCsop0At6KbAKWhoQCppaUArampALWmoAC3qqYAvKqkALOurQC7rakAvLGuALWxsQC6tLQA + vbi2ALu3uQC8uroAxZaGANqbhQDBn5IA6Z6BANihiwDGpZkA66SIAPOnigDjr5kA86yRAO2xmwD2s5sA + xayjAMOyrADctaUAw7SxAMW5tQDLurMAwry8ANK+tgDtvKkA9rulAMrAvgDUwboA+MCrAOnBsgD4ybYA + vr7AAMC/wQDEw8MAysTEAMfFyADKxsgAzMrKANLFwgDRyMYA2MnDANLMzADc0s4Azs7RANPP0QDO0dQA + 1NPTANnU1ADX1tgA29vbAODMxQD22MwA4tvaAPjf1QDl4N4A6eHeAPng1gDe3uAA4d/gAOTj4wDp5OMA + 5uXoAOjn6ADl6eoA6+rqAPTt7AD58OwA7+/wAO/x8wD08vMA+PX1AP749gD39/gA+ff4APf4+gD9/f0A + AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + FhUeFh4bHh4jrbWztK+0tLS0tLTe6UZCREVFRUNwcHBwQzBwMHAwcHAwQ0NDMEMwMENDRkni49e0lQAA + AAAAAAAAAAAAAAAAqa74/e1JHRYWFhQWFBYUFhQWFBYTFhUWFRYbGxseHh4eVMW1tLSur6+0tN/ugylE + RERERUVFcENwcHBDQ3BDMENwMENwQzBDQ0MwQ1Sa9tTXo5kAAAAAAAAAAAAAAAAAl+L995YiFhYWFhcW + FhYUFBQUFBUWExYVFhYVHRsbHh4eHj64s7XT0tPW4c1dKUREREREV0VFRXBwQ0NwcHBDcHBDcDBwQ3Aw + QzBDQ1c43uzXtJAAAAAAAAAAAAAAAACqqv398k0eFhgYFhYWFxYXGxQWFhQWFBYVFhYbGxsbHh4eHh4e + WoOgoLu2bkQkREQqRERERERXRUVFcHBDQ3BwcHBwcHBDMENwQ0NDK0VUe/bX15ijAAAAAAAAAAAAAACY + 4f39ozkfGBYYFhcWFhYUFhQWFBYTFhUUFhYVFhsbGx4eHh8eHiQfJB8kJB9EH0REPitERERERVdFRUJW + cENDQ0NDQ0NDcHBDQ0VFRUNXONzs17GYAAAAAAAAAAAAAACY9v39YiomHBgYGBYYFhYWFhYWFBYUFhYW + FRYWGxsbGx4bHh4fHx8fHx8fRB9EPj4qRERERERERERXRVVFRUJwQnBwcHBCcENFRUMrQytEVJb219OV + qgAAAAAAAAAAAKPI/f20OSomJhgWGBgWFxYXFhYXFhYUFhQWFhYWFRsbGxseHh4eHyQfHyoqH0QfKipE + H0Q+KkREREREREVXRVVFVkJCRUVFRUVFREIrRCtCP0nx4tepmAAAAAAAAAAAAJft/f17OiYmJiYYGBgY + FhgWFxYWFxQWFhYWFhUWFhsbGxseHhsVFQUVGRkZGRkhKipEPipERCpERERERERERERXRVdFV0VXRURC + K0RCK0IrRDav8d20lQAAAAAAAAAAAJf9/fZJRCYlJSYcGBgYGBYcFhYWFhYWFxQWFBYWFhYbGxsbG1po + Z2dnZ2x7e2cIIR8qKkQqKkQqRCpEREREREREREREREREQitERCtEKyorKlRs9tfXla4AAAAAAAAAqa79 + /bRHKicnJycmHBwYHBgXFxwWFxYXFhYWFhYWFhYbFhsbHsff193d3d3i4uxhHSoqKio+Kj4qRD4qRCpE + KkRERERCK0REK0QqRCsqQkQrKj438eLdo6MAAAAAAAAAl979/ZQ+KicnJiYnJhgYHBwcHBgYGBYYFhcW + GBYWFhYWGxsWH8zX19fX1NfX3uJoGR8qKioqKioqKkQqRCpERCpEKkQqREQqREQqRCpEKisqQio5tObd + sZUAAAAAAAAAkO79/WI/JycnJycnJyYcHBwWHBgYFhgWFBgWFhYWFhsWFhsWH8zX1NTU19nZ3uZoGR8f + Kh8qKipEKio+Kj4qRCpEPipEKkQqRCpEKkIqQiorKkIjlPLd05AAAAAAAAAAlf384lMsKycrJycnJyck + GBwcGBgYGBgYGBYWFhcWFhYWGxYWH8zg29vb29ng2eycBR8fHyoqKiMqKioqKioqPioqRCpEPipEH0Qq + RCoqKioqKiojYvLg3ZAAAAAAAAAAo/b9tEcsJysnKycnKicnJRgcHBwYFhgYGBgWFxsWFxsWFhsWHsfg + 2tfZ29nZ3uLGBhoqHx8qKioqIyoqKioqKioqKj4qKkQfRCoqKiorKiorKioqC+Li4JejAAAAAACprvb2 + pFQsKycrJysnJycnJyYcHBwcGBgWGBYYFxYYFhgWGBYXG7vg19vX19fX1NfhTQMfHx8fHx8fKiojKioq + KioqKioqKh9EH0QfKioqKiooKiYqNNPj4KOYAAAAAACV0/b4e1QsJywrJysnLCcrJycmHBwcHBwYGBgY + GxcYFhcYFhYWFpvg19TU1NTM1MzgxgcVHx8fHx8fKh8qHyoqKioqKioqKioqHyoqKioqKiopHyofIqfs + 3a6QAAAAAACQ1vf2Z1csLC4sKysrJycrJycnJhwcHBwcGBgYGBgWGBsXGxgYFFvX18zMzMzMzNPG4qsE + BR8fHx8fHx8fKh8jHyojHyoqKiofKh8qKh8qJB8fJigfI5Ps3bWOAAAAAAAR4vPyYlYsLisrKysrKycr + JysnJyccHBwcHBwYGBgYGBgYGBsXFh7D17W1tbW1tbW10+KrBAUeJCQkHx8fHx8fHx8fKh8fHx8fKh8f + KiQoKCgoKCkoIWni4tNqAAAAAAAR7fL2TXEsLCsuKy4rKysrJysnKycnJRwcHBwcGBgYFhgbFhgbFxd+ + 17W1xsbGscazs7XiwwYFHiQhHh8hHx8fHx8fHx8fHx8fHyokJCgoJCgkJCEkIGDs4tcRAAAAAAAQ7fby + UnEsLiwsLC4uLi4sLCcrJywnJyUcHBwcHBwcGBgYGBsXGBYmsLXGsbGxsbGxxbOz7MkJAhokHh4kHh8k + Hx8eHx8hHyQoJCQoISQhJCQhJB4kIUzi4uAQAAAAAAAQ8vLyYXEsLCwsLiwsLCwnLiwnLCcrJycnHBwc + HBwcHBgYGBgYGxgUXLWxsbGxsbGxsbSzs+ziSAEbHx4eJB4eHiEeHx4eJCEkISEeJCEeJCEeHiQeIQzs + 4uIPAAAAAAAQ8vLyU3MxLDIuMS4sLiwuLCwsJywnLCcsJyUcHBwcHBwcGBgYGBgYGJu1sbGxsbGxrq60 + s9Hm8lIBGx4eHh4eHh4eHh4kHh4eHh4eHh4eHh4eHh4eGkzi4+IPAAAAAAAQ7fLyU3UxMSwsLDEsLCwu + LCwnLiwnLCcnLCcnHBwcHBwcHBgYHBgcFhyltbGwsK6wsLGxs8jT5vZSARseHh4eHh4eHh4eHh4eHh4e + Hh4eHh4eHh4eIUrs4uIQAAAAAAAQ7fLyUXUxMTEyLCwsLiwsLiwuLCwsJywnJycsJyccHBwcHBwcHBwY + HBYeoLWxrq6usbGxs9PM1PH3MwIeHB4cHh4eHh4eHh4eHh4eHh4eHh4eHh4eGkzj4+IQAAAAAAAR4vLx + U3VxMTEuMTIuMTEsLCwsLiwnLiwsLCcnLCcnJxwcHBwcHBgcHBwXHH61sa6xsbHFtdPU29v36QcFGxse + GxweHB4bGxweGxweGx4cHhweHB4eIUzs490RAAAAAACQ3vLxbXVxMTExLDIuLCwuMSwsLCwuLC4sJywn + LCcsJycnHBwcHBwcHBwcGBh8tbGxsbG1xtPU2+Hh/ccBFRwbHhsbGxseGx4bHhobHB4eHh4eHh4eHWPi + 7NcRAAAAAACQ0/HmbXV2MTExMSxxMTExLC4xLC4sLiwsLiwuLCcnLCcnLiUlHBwcHBwcHBYYXLWxxsW1 + 08zb3uHi7v1sAhsbGxseGxsbGxsbGxseGxsbGxobGx4aGXrs7LWOAAAAAACYs/Lye3N2MTEyMTIsMTEx + MSwsLiwxLC4sLCwsJywsJywnLCcnJRwcHBwcHBwYF3y1tbW109Te3ubm5v3pBhMbHB4bGxweGxseGxsb + HhsaGxsbGhseHZjs7LGQAAAAAACpqe3xnXOEMTJxMXExcSwxMTExMSwsMSwuLiwsLiwnLCcsJycnLCcn + JhwcHBwcGBib09PTzNne4ebm7u79fQIbGxscGxsbGxwbGx4bGxsbHhsbGxsdCa7s7KiYAAAAAAAAme3x + r1aHcjFxMTIxMTIxMTEsMS4xLCwsLC4sLCwsJy4sJywnJycnJycmJhwcHBcfw9PU2eDh5ubt7u793AUW + GxsbGxscHhsbGxsbGx4bGxsbGhsbCtXs7ZepAAAAAAAAkO3tzFuKdjIyMTJxcTIxMTExMTEsMSwxLCwu + LiwsLCcsLCcsJywsJywnJycmHxwcg+DX3uHi5ubu7vL3+DMSHB4bHBsbGxsbGxsbGxsbGxsbGxsZDOPt + 7Y4AAAAAAAAAkN7y5lyLhzEycjExMXExMTExMTExMS4xLDEsLiwsLCwsJywsJywnJywmJycnJyclXePm + 4+bm5vHu8vLz/YICGxwbHBsbHBsbHB4bGxsbGxsbGxsZYPHt4I4AAAAAAAAAmNHx7X6EiXIycTIycTEx + cTExMjExMTExLC4sLDEsLiwuLCcsLCcsJywnLCYqJycmWOny8vLy8vLy8vPu/cICHBsbGxwbGxwbGxsb + GxsbGxsbHRsIl/Lx05AAAAAAAAAArqnt8adzvHYyMnJxMjJxMjEyMTExMTExMTExLC4sLiwuLCwsJywn + LCcsJywnJycmWOnz8vT39/T49Pj2/doZGx4cHhweGx4bHB4cGxweHh4eGyEL1/LyqZkAAAAAAAAAAJDm + 8dtzvIwycjIyMnJxMTJxMnEyMTExMTExMSwxJxweLC4sLCwsLCcnLCcsKicnVvL09PT09/f4+Pj4/eYg + HicqHycfJx8fHx8fHx8kIR4fHyFK8vbykwAAAAAAAAAAAJXX8u18jMpycnJyMnEyMnFxMTExMjExMTEx + MSwxusJQFSYsLiwsJywsJywnLCcliPf39/f3+Pj4+Pj2/eYdJiYnHyofHx8nHx8fHyQkHx4fHiKT9Prg + kAAAAAAAAAAAAKmq8fGndtCHMnJycjJyMjIycTEycTFxMTExMS519PfyoB0WJicsLiwsLCwnLCUs6f33 + 9/33/fj4+Pj4/dwhJCYfJx8nHx8fJyQmJB8eHyQfHwve9/axmQAAAAAAAAAAAACV4vfiXb/BcnJycnJy + cnEyMjJxMjExMTExMS6G8/f39+CbIhUcHicnJScmHD7k/Pf9+Pj9+Pj4+Pf2/c0bJiYnHx8nHycfHyQk + JB8kJCEeIWP49/SXAAAAAAAAAAAAAACY0/LyoIrQhzJycjJycjJycTJxcXEycTFxMS6H8/j3+P338sOb + UCMgIB9RuPL4/fj4/fj4/fj4+Pj3/bsbJiYmJx8nHx8mHyYfJCQeHyYkIrP9/eCXAAAAAAAAAAAAAAAA + o+331ITBwHJycnRycnJyMnIyMjJxMjJxcS6H9P34+P33+P349PLc5unz+P34/f34/fj9+Pj49/j3/Xwb + JyYnHycfJiYmJSQkJB8kJB4hTPf9/KmqAAAAAAAAAAAAAAAAldT28ZuL0IpydHJ0cnJycnJycTIycXEy + Mi6H9P39/fj9/fj9/fj9+Pj9+P39+P39+P34+P33+PT98yMlJiomJx8nJx8lHyYmJCQkJB4grv395pcA + AAAAAAAAAAAAAAAArqny9taHwc50cnJ0cnJycnJyMnJyMnEycTKE+P39/f39/f39/f39/f39/f39/fj9 + +P34+Pj39/b9whwrJicnHycfJx8mJSYeHyUfHx5i9/39tKMAAAAAAAAAAAAAAAAAAJXU9vKni9C5cnRy + dHRycnJycnJxcnJxMi6H+P39/f39/f39/f39/f39/f39/f34/fj4+Pf39vj0VSYnJyYqJycfJiYmHyUf + JR4mJCC1/f3tlwAAAAAAAAAAAAAAAAAAALGp8ffiiLzOhXJ0cnR0cnJycnJycXIycjGH+P39/f39/f39 + /f39/f39/f39/f39+Pj4+Pf39/22HCsmKycnJycnJyQmJR8lHyUfHnr9/f2uqQAAAAAAAAAAAAAAAAAA + AACX0fbys4zLwXR0dHJ0dHRycnJycnJxcjKH+P39/f39/f39/f39/f39/f39+P34+P339/f2+MQmJysn + JyonHycfJx8mJSYmJiYeSO39/eKZAAAAAAAAAAAAAAAAAAAAAAAAmOL47buLzrlydHR0dHNycnJycnJy + cjF49P39/f39/f39/f39/f39/f39/fj9+Pj39/f9xCcnKycrJysnKycnJyYmJiUmJiQgq/j99qMAAAAA + AAAAAAAAAAAAAAAAAAAAqa7y9uK4jdCLcnh0dHR0dHJycnJycnIyjPT9/f39/f39/f39/f39/f39/fj4 + +Pb4/fi6Jy4rKysnKycqJyonJycmJicmJh579/3906MAAAAAAAAAAAAAAAAAAAAAAAAAAJfT8vLet73Q + i3J3dHR0dHRycnhycnIycXnK9P39/f39/f39/f39/f39+P39/f34z3MnLissLisrKysnKycqJycnJicf + HmT09/3imQAAAAAAAAAAAAAAAAAAAAAAAAAAAACX3/jtzLm9zoV3eHR0dHR0dHJyeHJyMnEydLnQ9P39 + /f39/f39/f39/f395751Ky4sLCsrKysrKysnKycnKycnJycmUOD39/aZAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACuqeb37cmMv86Fd3h0dHR0dHJyeHJycnIyMjEycoq+wNDq6urq6uXPwIl1MS4uLCwuLC4sLi4u + LCcsJywnJyonJx9HzPb0+qqpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo67x9+bJub3Oind4eHR0dHhy + cnhycnJyMnIyMjEuMTEyMjIxMTIuLi4uMTExLCwxLCwsLiwsJywrKysnKycsHz6x9Pb2taMAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJmx8fbsyY290Ix3d3h0dHh4dHJycnhydDJycjJ0MjIyMTFxMjIxMjEx + MTExLDEsMTEuLC4sLiwrLisrKywlPrX08fTTmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYs/H3 + 49q6vdCNeHh4dHh4dHh4cnJ0dHRycnJyMnJxcnEycTFxMXEyMTExMiwxMS4xLCwuLC4uLC4sJyVRtfTx + 9tOYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl7Px9+zMvLzOy4V3eHR4eHh0dHR0cXR0cnJy + cnFycnEyMXExMTExMTIxMTExLCwsLCwxLiwsLCwnJ23X9vTx15cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJeu7fTx3buNy9CNeHh4dHh0dHR0dHRzMnRycnJyMnJycjJyMXIxcTExMjEsMjExMSws + MS4sLicnnfL08fHTlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZru328uPDub3Qy4p4 + eHh4eHR0dHJ0dHR0dHJycnJxcnFyMXExMXEyMTIyMTExMTIsLDEuJ1yr8fHx8bGZAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo6Pd9PTj07u8wc69hXh4eHhydHR0dHRzMnR0cXJycjJycjIy + MjFxMTExMTIsMS4xLC4nneDx9PHjq6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AK6X0fH68uDDur2/wb2FeHh4eHR0dHRydHRzcnRycnJxcnEycTIxcTIxMjExMTEuLnyz8fTx8deYqgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl6rj9Pbt18K6vL3BvYp5eHh4dHR0 + dHJ0MnRycnJyMnJyMnJxMjFxMTExMS6GrPLx8fHgsZYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAKiXte309u3Xrbu5vL+Ni3l4dHR0dHR0dHR0cnJycnJxcjEycnEyMTExtrDt + 8vLt7cyZqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl6jT8vb2 + 8tuzu4m5jIuKhXh4dHR0dHR0dHJycnIycnIyMjJxhrvU8fHt8uPXppgAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALGVo9Py9Pb049esp7aJi4qHeXl5dHR0dHR0cnRz + cnaGtqfT5vL28e3s16aXsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAsZOZtePx9vf28uPTsavCtrabg4Obm4ODtrvDw8ji8fL29vHm4tOZla4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl5Om0+Px9Pr09vTx + 7e3j7ePg4+Pt7fLy9/b49vLm4tSulZcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqlZOosdfr8fH29vf4/f39+P339/Tx8ubs1tGjl5WpAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACxmY6Ql6ixtdfd4OLi4uLe17WxqZmQjpmuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqZk45qEBAQEBFqjpOY + qgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////// + ////////////////////////////////////////////////////////////////+AAD//////////// + gAAAP//////////8AAAAA//////////gAAAAAP////////+AAAAAAD////////4AAAAAAA////////gA + AAAAAAP///////AAAAAAAAH//////8AAAAAAAAB//////4AAAAAAAAA//////wAAAAAAAAAf/////gAA + AAAAAAAP/////AAAAAAAAAAD////+AAAAAAAAAAB////8AAAAAAAAAAB////4AAAAAAAAAAA////wAAA + AAAAAAAAf///gAAAAAAAAAAAP///gAAAAAAAAAAAH///AAAAAAAAAAAAH//+AAAAAAAAAAAAD//+AAAA + AAAAAAAAB//8AAAAAAAAAAAAB//4AAAAAAAAAAAAA//4AAAAAAAAAAAAA//wAAAAAAAAAAAAAf/wAAAA + AAAAAAAAAf/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAA + AAAAAAAAAH/AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAA + AAAAAAAAAD+AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB+AAAAAAAAAAAAAAB+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAA + AAAAAAAAAD+AAAAAAAAAAAAAAD/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/gAAAA + AAAAAAAAAP/gAAAAAAAAAAAAAP/wAAAAAAAAAAAAAP/wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/4AAAA + AAAAAAAAA//4AAAAAAAAAAAAA//8AAAAAAAAAAAAB//+AAAAAAAAAAAAD//+AAAAAAAAAAAAD///AAAA + AAAAAAAAH///gAAAAAAAAAAAP///gAAAAAAAAAAAP///wAAAAAAAAAAAf///4AAAAAAAAAAA////8AAA + AAAAAAAB////+AAAAAAAAAAD/////AAAAAAAAAAH/////gAAAAAAAAAP/////wAAAAAAAAAf/////4AA + AAAAAAA//////+AAAAAAAAD///////AAAAAAAAH///////wAAAAAAAf///////4AAAAAAA////////+A + AAAAAD/////////wAAAAAf/////////8AAAAB///////////gAAAP////////////AAH//////8oAAAA + QAAAAIAAAAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAHgqCQB1LhEAbTMaAHYyFQB9NBQA + czQaAHo3GwB3OSEAekQuAG1IOgBwRDIAf0c0AHJMPQB/TD4AfVJCAHpUSAB8WUoAel5TAH9/fwCKLwgA + hjMOAIwzDACUNg0AgTUUAI02EQCEOBcAjjkUAIM3GACFPR4AjDsaAJI2EACTORMAmzoRAJM+GQCZPhkA + oTYKAKI+FACFPiIAlUEdAJlBHACnQhgAsEgeAIpBJACDRSsAikQoAIlJLgCUQyIAmkUiAJxJJgCTQygA + kkovAJtKKgCeUC8AhUUxAINJMQCKSjMAgU0+AIhMPQCVSjIAnUo0AJpKOACGUTkAllE2AJ1RNACdVDwA + pkchAKRJJACtSyMApUYrAKJNKgCqTyoAsUwlAKRQLQCsUSsAtFQtAKhHMwCuSjEApE45AK5MOACySjMA + vkozAKVSMgCqVDUAqlg3AKdXOwCsVjgArVk5ALVWMAC4VTEAtlgxALtaMwCzVDkAu1Q7ALRaPAC7Wj0A + uWE9AM1JLgDQSi4AxlkuAMZMMwDNTTEAyVE1AMFdNQDIXDIAxVU5AMhUOADCWTwAyWI6ANJmPQCDUUQA + ilFCAIxYQgCDVkkAgF1OAJtXQQCbW0UAhVxSAIpfVAClXkEAtVtBALpbQACZYEoAhGFUAIpkVQCKZVsA + hWldAIpqXQCSaVgAq2FCAKNkSwCqZkoAuGdGAK1tVACtdF0AuXJXAIFsZQCFdG4Aj3hvAJBwZwCcdGQA + k3ZtAIx3cQCKf3wAkXx1AKp5ZgC6fmkAxmhCANlsQgDPcEoA3HFIAMd3WADWeVQA4G9GAONzSADnfVQA + wXxhAJWAeACYgnoAtYFtAKmBdgCjiX8ArIt9ALaHdQC+kX8A3oBdAOeBWgDIh20A24hnAMiKcgDNknwA + 2pN3AOeLZwDwj2sA65FtAOiWdwCDg4MAioqKAJeIggCakIwAk5OTAJuVkgCbm5sApo6FAKCRjAC0lYkA + pJaRAKWZlgCrmpQAqZ6ZALmekwCtop0AvaGVALSjnQC+o5kApKSkAK+koACrq6sAuaqmALyxrgCzsrIA + u7S0AL24twC4trgAu7q6AMefjwDZnYQAy6CRANutmQDpoYUA4KuUAMatpADFsqsA1berAMO8ugDUvrYA + 57ajAMTAvgDUwboA9sm4AMC/wQDEwsMAycTEAM7IxwDMy8sA0MTCANPJxgDZysMA0svLANLP0ADT09MA + 2dTUANbW2ADY1dgA3NvbAOHLwgDm1MwA9dDBAOPa2AD029IA5+DdAPvj2gDe3eAA4+PjAOvl5ADp6OcA + 6+vrAPXt6wD98u0A7e/wAPPz8wD69vYA+fj3APf3+AD3+fwA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAw7SxsbETExOxE7GxtMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAxbSxscPe8vX5+vr9+vr68+DFtLG0xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC2sbTc8vn6/fr6+vr6+vr6+v39/f313raxtgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAALaxw+jz+vPgxbqJEhAPDg4PcX+Qvdn1/f3988WxtgAAAAAAAAAAAAAAAAAA + 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 + oUolAKxMJACiTSoArE8oALNOJgCnUS0AtFQtAKJOMAC3TzEApFIyAKlUNACrWDcAp1c5AKpXOAChWTwA + rVk7ALVWMAC5UzcAtVgyALtbMwC+VDoAtFs9ALtbPgC7Yj4AyFkvAMZPNgDHUzcAyVE1AMFcNADMWzEA + xFU6AMhTOADCWjsAyGM7ANNnPQCDUkYAjVZEAIZSSACLW0sAk1NEAJ1URACWWUEAmltEAJhXSACTWEgA + hF1UAKFVQwCuV0MAoltEAKxcQgCkXUkAqF5KALRUQAC5VkAAtFtBALlaQQCTY08AiGNUAIZjWgCJZFkA + j2hZAJxrVgCrYUQAt2dHAKhtVgC1bVAAr3ReALhxVQCHa2MAhnNrAJ14aQCOeXEAknpzAK98aAC2fWkA + x2hCANltQwDIcEwA2XBIAMl1UwDaeFMA4G5EAOBwRwDjfFQAioB8AJmFfgCvgG0AuIJuAKaIfgC2iXkA + 3YBeAOWCXADehWMA1YxwAMmRewDnjm0A6ZBtAOiWdwB+foAAg4OEAIyGhACEhIkAioqLAJqFgACciYIA + nZGMAIWFkgCPj5AAkpKTAJmUkgCXl5gAm5ucAKWLgwCrkIcApJGKAKmUjACzk4oAuJaIAL6ajQCqmpQA + pJ2bALOflwC2o58Au6ScAKOjpACtpKIArq6vALKloQC8p6AAtKmmALqppAC1rq4Ava6qAL2yrgCsrLEA + ra26ALKyswC6tLMAvbi3ALe2uQC5trgAvLq7AMibiQDcnYMA4J6FANGijgDLpJYA0aaWAOWkiwDqq5MA + 8K6UAOeynQDIraQA0a2iAMayrADdtqcAwraxAMq3sgDDurYAzbmzAMK8uwDIv70A6b6tAMXBvwDKwb4A + 0sS/AOfCtAD1ybcAv7/AAMXBwgDKw8MAzMjHAMXGywDNy8sA0svLANzRzADOzdAA0M3QANTS0wDY1NQA + 19faANva2gDm1M4A89jOAOHd3AD75NwA5OTkAOrm5QDr6+sA9e7sAPT09AD79vUA//n1APb2+AD69/kA + 9/r7AP39/QD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + lkAbAJNAHQCVQB0AmUIdAKVAFgCjRBsAq0cfAK1IHwCGQSMAi0YqAJZEIQCZRSEAnEklAJJKLQCdSyoA + jk82AJNPNQCbUDEAnVc9AKBKJACsSiMAok0qAK1PKACwTycApFAsAKxRKwC0UCYAslMrALlTKgCtTjYA + s0w1AL1LNACiUTEApVExAKJTNACmVTUAq1Q1AK5ZNwCsVTkApl0/AKpZOQCtWTkArlo8AK5ePgCzVTEA + u1MyALdZMwC7WzQAslU5ALBZOwCwWj0Atlo9ALJcPwC1XD8Au1s+AMlFKwDRSi0AzU0xAMxQMwDKUjYA + zVA0AMlUNwDCXDQAyl40AMRVOgDJVDgAw184AMBaPQDEWT0Ax2A2AM1hNgDFYTkAy2Q8ANFjNwDTZTsA + 2Gc7ANNoPgDZaj8Aj1VDAItZRACJXEwAlFVDAJNZRACUWEcAnltHAKNeQQCkXUAAoFhHAKJfTwC6XEAA + m2JKAIFhVACBaF0AiGleAJhmUgCWZlkAoGFPAKhmSgCraE4AumZEALhmTACgbVoAtmhTAKJxXQCsdF4A + s3BVAL94WwCGdW4Am3JiAJR2awCOe3MAoXVkALJ3YADAXEAAwmhEAMtqRADVakEA221DANpySwDMdVMA + 3XxWANZ/XgDgbUEA4nFGAOV2TADielMA6HxTAL+DbwCigXQApIZ+AKiHegCjin8AtoJyALiGcgC4iHcA + vol4ANqCXgDCjXcAwI59AM+QeQDekHIA6Y1qAOyRbgDtknAA7Zp6AH9/gACOjo8AlYiCAJ2OiACPj5AA + lZWVAKWUjgC1koUAuZOFAL+YigC5oJcAtKOdALmjmwChoaEApqKgAKioqQC6p6IAsKqoALSvrQC6sa4A + sLCwALaxsQC7tbQAt7e4ALi4uAC/uroAv76/AM6YhADFmYkA756BAMqnmgDRqpkA362bAOGnkgDEqqIA + w7OuANm4qgDDtrIAw76+AOO1owDptaEAwcC/AM7CvgDawLcA1cK7AN/IvwDywa4A7MS2AOnHugDxw7EA + vb3BAMO/wADAwMAAxcHBAMbDxADHxMYAy8XEAMvIxwDMzMwA0cnGANrJwgDSzcsA0c3NANfRzwDQztEA + 0tLTANbQ0QDV09QA1NTVANjS0ADW1tgA2dnZAN3Z2QDZ2t0A3d3dAO3a1ADh4eEA6urqAO3s7QD46ucA + 8erpAP/x6wD18/MA+PPyAPr6+gD8+fkA//z6APr9/gD+/v4AAAAAAP///wAAAAAAAAAAAAAAAAC0pgQD + AwSmtAAAAAAAAAAAAAAAAAAAAAAAAAAAALQEstns8/n58+zZsgS0AAAAAAAAAAAAAAAAAAAAALmm2fPj + qHFkYmVnc5Xg89mmuQAAAAAAAAAAAAAAAACqvPO3byM2PUhthVhVUDNrtfO8qgAAAAAAAAAAAAAAqebs + cBwWIjY6OTFBWFRQTkxLbOrmqQAAAAAAAAAAAKnxzgEHDRYiNjaErZg6VFVQTk5MMsjxqQAAAAAAAACq + 5s4BBwcNFh8gmubq7sdEVFVQTk5OMsrmqgAAAAAAubzsAgYHBwwQHyLK3NjZ63pUWFRVUFVQMeq9uQAA + AACm838ICAgICA0WIK/YvdjgeFdYWFhYVFhUdPOmAAAAtL29HQsJCAgMDhYWa6+7ypNEV0lthYVYWFdB + sdm0AACl84IYDw8PDAgODh8fHzY5LT1JSW1XSW1XSFdo86UAALLmbioYDw8PDw4OESJ7e4MmOj1JP0lJ + SEhXRDnPsgC02bI5LyoYEw8PDw8Kdebm5nksPD09PUlIPT1EOZTYtKbspzBCLy8YExMPDwtq4+Pmlh82 + Njw8Njo6OjkxZeymBPOBUkJCMS8aExMPDxnK2dzLchAsNDQ2NjY2LCwk8wQD+YBZUlJSQi8aGBgTD3zX + u7vZgxAiIiwgLCcsIiH5AwP5g1xSUlJSQkIvKBMTE3y5u8vmrBAXFxcXIhYXJPkDBPOUYFxcXFJSUjlC + LygYEna72Ofzew4XFx8WFxcd8wSm7KuKXFxcW1tSUlJCQi8oE5nn7PPREBEXFxcfFmTsprTZtpxgXFyG + XFxbQjBCQkIvfvPz9/M0HxEXFxcQl9m0ALLmwIpgYFxcXFKfmi8vMBrA+fn6+HQoLCwsLBfjsgAApfOw + omCJYGBcWtT54cGdxPj5+fnzOSoqNiwgcvOlAAC0vdnGkWGJYGBa1Pn5+fn5+fn5+ckrKioqLB/KvbQA + AACq87ikiYmKYGDW+fn5+fn5+fnwhi85Kiong/OqAAAAALS98dCjiY+JYYzW9vn5+fn2zIYwOUI5K2rs + u7kAAAAAAKrm5dWjj4mJiV+KnKCgnIdSUlJCUi5I3OaqAAAAAAAAAKnx5dLCko6JiYlhX19cXFxcXFIw + fd7xqQAAAAAAAAAAAKnm8d7NopCOiYlgYGBfXFpSUq3s5qkAAAAAAAAAAAAAAKq589/RxaGQjo6JX19c + i67c872qAAAAAAAAAAAAAAAAALmpvfPszsjDnpvBx8rs886puQAAAAAAAAAAAAAAAAAAAAC0pbLZ7PP5 + +fPs2bIEtAAAAAAAAAAAAAAAAAAAAAAAAAAAALSpBAMDBKa0AAAAAAAAAAAAAAAA//AP//+AAf/+AAB/ + /AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAAABgAAAAYAAAAHAAAADwAAAA+AAAAfwAAAP+AAAH/wAAD/+AAB//4AB///wD/8oAAAA + GAAAADAAAAABAAgAAAAAAEACAAAAAAAAAAAAAAABAAAAAQAAAAAAAHs/JABxcHEAkjYOAJk0CgCWOA8A + njgOAI83EACJORYAjToVAI46GACQNxMAlTkSAJM8FgCXPhcAmToSAJw7EgCdPBMAmTsUAJI8GACXPxkA + mT8ZAKA6DgCmPhMAoj4UAIE9IACSQR8AlkEeAJtAGwCZQR0AnUIdAKVBFwCmQhkAqkUcAIlBIQCBRSsA + k0UkAJlFIgCVSCkAnkwqAJ1NLgCfUi8Aik40AJBPMgCbTjAAhVM+AJ1SMgCYUTQAmVU7AJ1WOgCZWDwA + okchAKxLIwCuSyQArk4mAKJMKgCpTikApFAtAKxRKwCoUS4Ar1QvALRTKwCqTzIAvU8xALJOOgCjUTEA + pFMzAKJUMwCnVDMAoVU2AKZUNACoVDIAqlc1AKBVOQChVj0Ap1Q9AKlVOACsVzgAolg+AK5aOgCuWjwA + tFYwALlXMAC4UTQAtVgzALFaNQC7WzQAtFI4ALFRPQC7VD4As1w5ALZbPgCyXD4Atlw/ALhdOAC9Wj8A + ulw/AL5cPwC/YjsAu2E9AMJeNgDKXTMAwVA6AMVTOQDCVDsAxVQ5AMFXPQDCWT0AxWA5AMtkPADSZDkA + 1mg+AIlVQQCkXEAArF9AALNaQgCyXEEAullBALxYQACLYE4AgmJUAJFgUQCWYFEAk2ZVAJJtXwCrY0cA + oWFJAKpmSQCvZkgAqGhNALZnSAC7a0wAomtUAKdtVgClZlkAoGxfAItsYACbbWAAmHJkAJ51ZACleWgA + qHxqALR4YQC6emEAw2ZBAMdoQwDMaUIAxm5MAMtvTADTakIA2WxEANdvSADIcE0A13BJANpxSQDTd1QA + 2XlVANd7WADcf1sAn4J3ALOGdQC6hXEAvYp3AM2IbgDdhmUAyolwAMGLfQDTjnUA2ZN6AIKBggCJiIkA + jIuMAJ2PigCdlZIAmpqaAKWLgACrjIIAro6CAKKPiAC9locAsZCIAKuemAC2mJAAt5+YALKhmwC/opgA + o6OkAKSjpACnpqcArKysALippAC2tbkAv7y7ALu7vAC+vr4AxpCAAMSYhwDPmIIA1pqDAMCdkQDCp5wA + yqmfAOKiiwDpqZAA6bKfAMKrowDIrqcAwbWxAMK7uQDBvbwAxL+8AOy2oQDGwL0AysG/AMzAvQDZw7wA + xsPEAMrGxgDOyccAy8rKAM3KyQDNzcwA0MbDANXIxADYy8UA0MvJANPNygDWzcoA0c3OANjOywDa0M4A + 09LSANbS0gDY1tYA1tXZANjZ3QDZ3d8A3NzdAPbg1wDe3uAA4+HjAOTk5ADv5OAA6OjoAOnp7ADv7+8A + 9OrnAPLs6wDu7vAA8O/xAPHx8QD28/MA9PT1APr29QD4+PgA////AAAAAAAAAAAAAK6pAgKprgAAAAAA + AAAAAAAAAAAAALyqvd3z/v7z3b2qvAAAAAAAAAAAAAAAqsLz4rJ8eXmHtOb6wqoAAAAAAAAAAAC879R4 + KjBKTD52WUCG3/G8AAAAAAAAALzzrAEiJih9zslXaWlpQLb+vAAAAAAAqu+tGQgKGkXe7/qmP2lpaVi3 + 8aoAAAC8wsIjCAcHFC7V3ejDU2traXZK5cK8AACq9IgUDAMHDBtxucRMW3Z2dnZzifqqAAC93TAdEBAQ + DBQwhH5IUFtdXVtzceK9AK7dtUg6GBAQDBCO79UoRUhQUFBQcbDdrqnzn1tRNiAYEASA6+KFJUVFRUhF + RXnzqQL+i2NWVj0hGAY32MLijRw3Nyg3LHD+AgL+jJBkVlZRNSAWNtHZ6YAMJR0aJi3+AqnzsJFtbGxW + VlE1GEjZ8d8aHR0lGnfzqa7dvpRtbWxsVlJWPTXX+fp/EB0aJq/drgC94qWVlW1lm6ddUZP2/v6PNzk5 + KuK9AACq9MidlZVlpP7+8v7+/vpbNTkpi/iqAAC8v93Fl5Zunu7+/v7+/qU9Okgv2sK8AAAAqurRqJqW + lqTL09PLmFZRWym476oAAAAAALzz1MaclpZub21lZWNjcrj4vAAAAAAAAAC86t3Op5yalZWRkIOg2u+8 + AAAAAAAAAAAAqr/z6M/HoqGzzujzwqoAAAAAAAAAAAAAALyqvd3z/v7z3b2qvAAAAAAAAAAAAAAAAAAA + AK6pAgKprgAAAAAAAAAAAP+B/wD8AD8A+AAfAPAADwDgAAcAwAADAIAAAQCAAAEAgAABAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAQCAAAEAgAABAMAAAwDgAAcA8AAPAPgAHwD8AD8A/4H/ACgAAAAQAAAA + IAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAenl6AJsyBwCQNA0AljcOAJk4DwCPOhYA + kDUQAJM4EACVPBUAnjsRAJg8FgCWPxoAoTwSAKZBFwCsQhYApkUdAJpFIgCaRyQAnkooAJ1QMACgRyEA + pEkiAKxJIACiTy0AsU8oAKJQLwCtUSsAq1IvALVSKgCpVjYArFU2AKRaPAChXT8Arlo8ALdXMAC+VDcA + u1s0AL5dNgCwWjsAu1s/AMZOMgDAXjYAxFo9AMRgOQDKYjoA1GM3ANFmOwDZaT0Atl1AALpdQACaYksA + nWRMAK5hQwClYEgArWJMAKdoTgCzYkEAvGZDALhnRgC+Y0sApmpTALxuVgCqc18ArXNcALV0WgC+eFsA + rH1rALV3YQC/c2EAtnpiALB7ZADBZ0MAzGlDANBpQgDUakIA1nBKAMd9XwDKeFkAwnZjAMd0YQDKhWoA + zohtANiCZADZjG8A145zAOSZfACLiYkAkJCQAJuXlwC6k4IAuZ6TAL2glAC8pp4ApaGgAKSkpACxsLEA + vrm3AMCajQDLnIkAy5yRAMOjlwDWq5oA4aiTAMSupwDUr6EAx7GpAMK3swDMtrAAxLi1AMa7uADFvboA + x7+9ANHAuwDSwrwA78S1APDDsgDNxsMA0MnIANfNyQDf09AA0dbaANLY3gDf3N4A5cvCAOHZ1gD67+sA + +PPyAPn4+QD5/P0A/v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + vLd9JGbdee98htjClwGvE1L+KZ+BXZ0BFEIppRAzBcAFWzDlQCUc4IM1ILgTCOAkC4EAVgTrXErseXs9 + v2t/x/4u/4P/ZSDnPfBeYstudD4GO5+n/FM+A+Uz8DnPQKwUbI4B7gMC4Ew5YHERAAkwTQCqKQyURk1i + r4t/l79lfxdrzv8ykPP/DeiWniuD/XN+yeVfK5+Bz3sGigoCMJqiAKCIKYzdHe31MbDt79n/+bzvs/x7 + 5TNQPgPlM1A+A+UzUD4D5TNQPgPlM1A+A+UzUD4D5TNQPgPlM1A+A1/SGfj/BBff+U1oCsQAAAAASUVO + RK5CYIIAAAAoAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAB + AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB + AAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAC + AAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAwAAAAUAAAAHAAAACgAAAA4AAAAOAAAAEAAAABIAAAAT + AAAAEwAAABMAAAATAAAAEwAAABEAAAAQAAAADgAAAAwAAAAJAAAACAAAAAUAAAAEAAAABAAAAAMAAAAD + AAAAAgAAAAIAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAYAAAAKAAAADQAAABIAAAAX + AAAAGwAAAB4AAAAiAAAAJAAAACcAAAAnAAAAKAAAACoAAAArAAAALAAAAC0AAAAtAAAAKgAAACsAAAAp + AAAAKAAAACYAAAAgAAAAGgAAABgAAAASAAAADAAAAAkAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAAB + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAF + AAAACgAAAA4AAAAUAAAAGQAAAB0AAAAkAAAALAAAADMAAAA7AAAARwAAAFAAAABWAAAAXQAAAGIAAABk + AAAAZgAAAGcAAABnAAAAZQAAAGIAAABdAAAAWAAAAFIAAABJAAAAQwAAAD8AAAA3AAAAMwAAADEAAAAq + AAAAJQAAAB0AAAAUAAAADQAAAAkAAAAGAAAABAAAAAMAAAACAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAQAAAAQAAAAJAAAAEgAAABYAAAAbAAAAJQAAAC8AAABBAAAAUgkICWYdHR19 + JyYnjTk6OqBdXV2zb25vwHl5e8uCgYHShISF14iIiNqJionciYiL3IiHh9qEhYbXgYOC1Hp6fM5ycnLD + X2BhuD8/P6coKCiWHx8fiAsLC3gAAABkAAAAWAAAAEoAAABBAAAAOQAAADMAAAAtAAAAJAAAABoAAAAP + AAAACgAAAAYAAAAEAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAgAAAAPAAAAEwAAABoAAAAo + AAAAPAAAAFYZGBl1LCwsk1taW7N0c3TMmJaX4MC+vvPRz9D/4+Lh//Xy8v//+vr///7+//////////// + ///////////////////////////////////////////+/v//7+3u/9vZ2//LysvzpaWn5Hp7etFiYmK7 + Li4vnhsbG4UAAABtAAAAWQAAAEsAAAA/AAAAOAAAADEAAAAlAAAAGQAAAA4AAAAIAAAABgAAAAQAAAAD + AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + AAAABQAAAAsAAAAQAAAAFgAAACQAAAA+DAwMYyorK4xdXF22ioiJ1ry6vPHZ2Nf/8O3t//f09P/y7+// + 6ubm/+Xf3//c2Nf/0MvL/8nDw//Evr7/wr29/8C7u//Au7v/wby8/8K9vf/Evr7/xcDA/8nEw//MyMj/ + 083N/9nX1v/o5OT/8+/v//v4+v/////////////////q6uv/zs7P9JSTldtlZWbALi4ung0ODnsAAABf + AAAATQAAAEAAAAA6AAAALgAAACAAAAAVAAAACwAAAAYAAAAEAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAsAAAARAAAAFwAAADAHBwdaKysrimNiYrqioaHj + 0tDQ/+3q6v/28fH/6+Xm/9/Z2P/Mx8b/v7m5/7q0tP+6tLX/u7a2/8K7vP/JxcX/0c3N/9jU0f/d19b/ + 39vZ/+Le2//i3dz/4+Dd/+Pf3f/i393/4d7b/9/b2v/c2Nf/1dLT/8/LzP/MyMj/zMnJ/9DLy//V0dH/ + 4d7f//Ty8//////////////////n5un/sbK05m1sbcUwLzGdCAgIdwAAAFkAAABGAAAAPQAAADMAAAAl + AAAAFgAAAA0AAAAHAAAABAAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAP + AAAAGgAAADsWFhZtTU1Np5eVltzRz8//8O7u//Ht7f/g3Nz/ysTE/7i0tP+1r6//ubSz/8XAv//Vz9D/ + 4dzZ/+bj2//r6OH/7+rj/+Tc1f/d1M7/2s7I/9fKxP/UxsD/1MS+/9LBu//SwLr/08K9/9bHwP/XysT/ + 3NDK/+HX0f/p4dn/9PDn//Px6P/x7uf/8Ozo/+Xj4f/b19b/0c7O/9HNzf/a1dX/7Orq//////////// + /////+np6/+mpqfiV1dYtxsbHIkAAABlAAAATQAAAEIAAAA2AAAAJgAAABYAAAALAAAABwAAAAQAAAAD + AAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAGAAAAD4mJSZ/cXBxw7i4uPHm5eT/8Orr/97Y2P/Ev7// + tK2t/7OsrP/Aubr/1tLR/+Xj4P/x7un/6uXd/9/Wzv/Swbr/u6Wc/7WakP+sjoP/nXxw/5dyZv+XbmH/ + l2pc/5dnWf+YZlj/mGVX/5plVv+aZlj/m2ha/5xrXv+ebmL/oHNo/6Z+dP+0j4X/vZuT/8Onn//Vwrv/ + 5NnS//Hr4f/49u//9vTv//Dt6//n4+T/4+Li/+vp5//6+fn/////////////////z8/Q9X5+gM8uLi+b + AAAAbAAAAE4AAABCAAAAOAAAACUAAAAWAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAJAAAAFAAAADooKSl/ + eXh5x8bExPvs6Oj/6OPj/83IyP+1r6//r6mq/724uP/Z1NT/7url//Dr5P/j2tL/x7St/7edkv+ggXb/ + lG9i/4xiUv+IWEb/i1ZD/45UQP+TVUH/mFdC/51ZQ/+hWkT/o1pE/6ZaRP+nWkT/qFpD/6lZRP+oWUP/ + qFhD/6ZXQ/+jV0P/oVVC/55VQ/+cV0b/m1pL/59kWP+lcWb/r4R7/8Gelv/Ot7D/6N7V//Xw6//8+/r/ + ///8//f19f/19fX//f38/////////////////+Pj5P6Li47TLy8wmgAAAGoAAABOAAAAQgAAADQAAAAg + AAAAEAAAAAgAAAAFAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAQAAAAGAAAACgAAACwfHx9xcnFyw8rHx/vt6ur/4t3d/8O7u/+tqKj/s62s/83Iyf/r6OT/ + 9PHq/+LWzv/DrKP/p4uA/5FuYP+FWkn/hFI//4lQO/+TVT3/mlg//55ZQP+hW0H/plxC/6dcQv+pXEP/ + rF1D/65eRP+wXUT/sl1E/7NdRP+0XUP/tlxD/7ZcQv+2W0P/t1pC/7ZaQv+3WUH/t1hB/7ZXQP+0VkD/ + r1U//6pTP/+kUkH/oFZF/6BgUv+ncmf/t46E/8qupv/p3NT/+PTx//39/f////////////////////// + ///////////k5OX8hISH0CcnKJYAAABhAAAASQAAAEAAAAAuAAAAGAAAAAoAAAAHAAAABAAAAAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABgAAABgPDg9YZmVmtsG/v/bp5+f/ + 3dnZ/763t/+upqT/ubGy/9jV1v/38+//7ubf/8izq/+nin7/i2ZX/4BTQf+CTDf/jFA4/5ZUOv+aVjz/ + n1c8/6FZPv+lWz//pltA/6lcQf+qXEL/q11C/61dQ/+vXUP/r11D/7FdRP+zXUT/tF1E/7VcQ/+3XEP/ + uFxD/7lbQv+5W0H/u1lA/7xZQP+9WD//vVc+/75WPf++VT3/vVU9/7tUPf+6Uz3/s1I9/6xRPv+kUkL/ + n1pL/6VtYv+2joX/z7ex//Dp4v/7+vn/////////////////////////////////39/g/HR0d8gVExWE + AAAAVwAAAEcAAAA6AAAAJAAAABEAAAAIAAAABQAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD + AAAABAAAAAcAAAAzQD8/kKakpObk4OH/4tvb/7+6uv+tpaX/trGx/9vY1//28ez/5drS/7yjmf+TcmT/ + f1NB/35JM/+KTDT/klA2/5hTOP+cVTj/n1c6/6BYO/+jWTz/pFo+/6ZbP/+nW0D/qVxB/6pcQv+rXUL/ + rl1D/65dQ/+vXUP/sV1D/7JdQ/+0XUP/tVxD/7dcQ/+4XEP/uVtC/7pbQv+6WUD/vFlA/71YP/++Vz7/ + vlY+/8BVPP/BVDz/wlM6/8FSO//BUjn/wFE5/7xROv+3UDv/rU88/6NSQf+hXlH/rHtx/8ann//q3tX/ + +vj3/////////////v3//////////////////8HCwuxLS0yuAAAAagAAAEwAAABCAAAALgAAABcAAAAL + AAAABgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAARFRQVWnd1dcLV0ND/6OPj/8fCwv+tpaX/ + samq/9jT0//38+3/5trS/7GXjP+KZlb/eks2/4BHL/+MSzD/k04y/5dQM/+ZUjT/nVQ2/55UN/+fVjn/ + oVc7/6NZPP+kWj7/pVo//6dbP/+oXEH/qVxC/6tdQv+tXUL/rl1D/69dQ/+xXUP/sl1D/7RdQ/+1XUP/ + tlxD/7dcQv+4W0L/uVtB/7paQf+8WUD/vVg//75XPv++Vz7/v1Y8/8BVPP/CVDv/wlM6/8NSOP/EUDf/ + w1A3/8NPNv/BTjf/u084/7RPOv+oUD7/oVhK/6hyaP/DoZn/6t7U//r49////////Pv7//v6+f////// + //////v7/v+Hh4nRFxgYiQAAAFQAAABHAAAANwAAAB8AAAAMAAAABwAAAAQAAAACAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAD + AAAAIzs8PIqvrK3r5uHi/9TOz/+zraz/q6Wj/8vGx//69/T/7OLb/7OZjf+FYFD/eEcx/4BEKv+KSSz/ + kUot/5VNLv+YTzD/mVAy/5pSNP+cVDX/nVQ3/59WOf+hVzv/olg8/6RZPf+lWj7/p1tA/6hcQf+pXEH/ + q11B/61dQv+uXUP/r11D/7FdQ/+yXUP/s11D/7VdQ/+1XEP/t1xD/7hcQv+5W0L/ulpB/7tZQP+9WUD/ + vlc//75XPv+/Vj3/wFU8/8FUO//CUzr/w1I4/8RROP/EUDf/xU42/8VNNf/ETTX/w001/8BON/+4Tzn/ + rFA8/6FWSP+mcWb/waCY/+7l3P/8+/r///////X19P/39vb////////////LzM3xRERGqwAAAGYAAABH + AAAAPgAAACUAAAASAAAACAAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAQEBDtjYWGtzszM/+Lf3//Cu7v/qaOi/7izs//q5uf/ + 8+zp/8WupP+LZ1j/dkUw/35BJ/+IRSj/j0gp/5JJKf+VSyz/lk0u/5hPL/+ZUDL/mlE0/5xTNf+eVTj/ + n1Y5/6BXOv+iWDz/pFk9/6VaPv+mWz//qFtB/6lcQf+rXUL/rV1C/61dQ/+vXUP/sF1D/7JdQ/+zXUP/ + tF1D/7VcQ/+3XEP/uFtC/7lbQv+6WkH/u1pA/7xZQP+9WD//vlc+/79WPf/AVTz/wVQ7/8JTO//DUjn/ + w1I4/8RQN//ETzb/xU41/8VNNP/GTDT/xUwz/8RMNP/ATjb/uU84/6tQPf+gWEv/q3lw/8+1rv/17+v/ + /v7+//Pz9P/t7Ov/+fn5///////39/n/dHN0xwEAAXMAAABNAAAAQwAAACoAAAATAAAACQAAAAUAAAAD + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAUSERFT + ioqKzt7a2v/Y0tL/tK+t/6qjo//Oysv/+ff0/+HTyf+aemz/d0k0/3o+Jf+FQST/jEQk/49GJv+SSCj/ + k0kp/5VLLP+WTS7/l04v/5lQMv+ZUTT/nFM1/51UN/+fVjn/oFY6/6JYPP+jWT3/pVo+/6ZbP/+nW0D/ + qVxB/6tdQf+sXUL/rV1D/69dQ/+wXUP/sV1D/7NdQ/+0XUP/tVxD/7dcQ/+4W0L/uFtC/7paQf+6WUH/ + vFlA/71YP/++Vz7/vlc9/79WPf/AVDv/wVQ7/8JSOv/DUjj/xFE3/8RQNv/FTzX/xU41/8VNNP/FTTT/ + xksz/8VLM//ESzP/wE42/7dPOv+oUUD/oF9T/7WLgv/m2M7/+/n4//n4+f/n5eb/7Orq//////////// + nJye2xUVFIgAAABPAAAARQAAAC8AAAAXAAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAIAAAALJCQkaqOhoeLj39//y8XF/6ylpf+zrK3/5eLi//Tt6v+5oJX/ + fVVD/3Q9Jf+BPSD/iEAg/4xBIP+PRCP/kEUl/5FGJ/+TSSn/lEor/5ZMLf+XTjD/mE8x/5pRM/+bUjX/ + nVQ3/55VOP+gVjr/oVg8/6NZPf+kWT3/pls//6dbQP+oXEH/qlxB/6tdQv+uXUL/rl1D/69dQ/+xXUP/ + sl1D/7NdQ/+1XEP/tlxD/7dcQ/+4W0L/uVpC/7paQf+8WUH/vVlA/75YPv++Vz7/v1Y9/79VO//BVDv/ + wVM7/8NSOv/DUjj/xFA4/8RQN//FUDb/xU41/8VONP/FTDT/xUwz/8ZMM//FSzP/w001/75POP+yUDz/ + olRF/6RuY//Gq6T/9e/t//7+/f/l4uP/4d7c//b09f//////wMHC7CgoKJgAAABUAAAARwAAADUAAAAY + AAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAADzw8PIG2tbXy + 39nZ/8C6uv+ooqD/vLe5//v59v/o3db/mnpt/3RFL/95OyD/hDsc/4k+Hv+MQB7/jUEg/49DI/+PRST/ + kUcn/5JIKf+USSv/lUwt/5dOL/+YTjD/mlAy/5tSNf+cVDb/nlU4/59WOv+gVzv/olg8/6RZPf+lWj7/ + p1tA/6hcQf+pXEH/q11C/61dQ/+vXkP/sF5D/7JeRP+zXkT/tF1D/7VdQ/+2XEP/t1xD/7hbQv+4W0L/ + ulpB/7tZQf+8WUD/vVg+/75XPv+/Vj7/v1Y8/8BUO//BVDv/wlI6/8JSOf/EUjn/xFA3/8RQNv/FTzX/ + xU40/8VNNf/FTTT/xkwz/8VMM//FSzL/xEwz/8FNNv+4UDv/qVJA/59eUv+0joX/7OHY//z8+//k4uX/ + 2NTT/+jm5f//////2dfZ9zw7PacAAABcAAAARwAAADYAAAAXAAAACgAAAAYAAAADAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAQAAABBFREWKx8TE+97a2v+5tLT/p6Ch/8rGyP/49vL/1cK4/4ZgUP9yPCT/ + fzob/4U7Gv+JOxr/iz4c/4w/Hv+NQSD/jkIi/49FJP+RRib/kkgo/5RKKv+VTC3/lkwu/5hPMP+ZUDL/ + mlI0/5xTNf+dVDf/n1Y5/6BXO/+iWDz/pFk9/6VaPv+nW0D/qFtA/6lcQf+qXEH/qFpA/6VXPv+iVDz/ + o1U8/6VVPf+qWD//r1tC/7RcQv+3XEP/uFxC/7hbQv+5W0L/u1pB/7xZQP+8WUD/vlg+/75XPv+/Vj3/ + v1U8/8FUO//BUzv/wlM6/8NSOf/DUTj/w1A3/8RQN//FTzb/xU41/8VONf/FTTX/xU00/8VNNP/FTDP/ + xEw0/8JNNf+9UDn/sVI//59XSP+penD/3crB//r49//n5ef/z8zM/97b2///////6Ojp/U1MTrIAAABf + AAAARwAAADUAAAAYAAAACgAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAQT05Ok8vGx//X0tH/ + tq+u/6mhov/Y09b/9/Lx/7qhlv93Tjz/djsh/4E5Gv+GOhj/iDsY/4k8Gf+LPRz/jD8e/41BH/+OQiH/ + j0Qj/5BGJv+SSCj/k0oq/5VLLP+WTC7/mE4w/5lQMf+aUTT/nFM1/51UN/+eVjj/oFc6/6JYPP+jWT3/ + pVo+/6ZbP/+kWT7/m1A2/41HL/+ISTP/hko2/4NKOP+BSDX/gEMw/4A9KP+JQiz/m003/6pWPv+1W0L/ + uFtC/7lbQv+6WkH/u1lB/7xZQP+9WD//vlc+/75XPv++VTz/v1U8/8FUPP/CUzr/wlM6/8JSOf/DUTj/ + xFA4/8RQN//EUDb/xU82/8VPNv/FTjX/xU40/8VONf/FTjT/xU40/8NONf/AUDj/t1M+/6RWRf+faV7/ + yK6n//j18//s6uv/zsvL/9nV1P///v7/8PDy/1hYWbkAAABeAAAARwAAADMAAAAXAAAACgAAAAUAAAAC + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAACkxNTZDKx8b/1tHR/7KsrP+spaX/3dra//Tt6v+tkYT/dUg0/3s9IP+COBj/ + hjgY/4g6F/+IOhf/iTsY/4o8G/+MPx7/jEAf/45BIP+PRCP/kEYl/5FHKP+TSSn/lEsr/5ZMLf+XTi// + mFAx/5pRM/+bUjX/nFM2/55VOP+gVjr/oVg7/6NZPP+kWT3/nFE2/5BONf+XaVj/p4yC/7ekoP/Dt7T/ + yL+9/8e8uf++ran/rZOM/5NtYf95QDD/fzso/5xOOP+wWED/uVtC/7lbQf+6WkH/vFlA/71ZQP++WD7/ + vlc+/75WPf+/VTz/wFU8/8FUPP/BVDr/wlM6/8NTOf/DUTn/xFE4/8RQN//EUDf/xE82/8RPNv/FTzb/ + xU82/8VPNf/ETzX/xE81/8NPNv/AUDj/uVM9/6hVQ/+dY1j/v6GZ//bw7P/y8PD/0MvM/9bS0f/++vv/ + 8fHy/1FRUrQAAABeAAAARgAAADAAAAAUAAAACQAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANBQUF+yMPD/9bR0P+yrKz/ + rKem/+Tf3//y6uf/oIJ0/3JDLv98Ox7/hDkY/4Y4F/+HOBf/iDkX/4g6F/+JOxj/ijwa/4s+HP+MQB7/ + jUEg/49DI/+PRST/kUYn/5JIKP+USir/lUwt/5dNLv+YTzH/mVAy/5pSNP+cUzb/nlU4/59WOf+hVzv/ + oVc7/5hOMv+calj/va2n/9LPz//Y19j/19TV/9XS0//V0dH/1tLT/9nX2P/f3+D/4uDg/8/Ewv+Vb2T/ + dDYk/5FHMv+uVj//uVtC/7pbQf+6WUD/vFlA/71ZP/++WD7/vlc+/79WPv+/Vjz/wFU8/8FUPP/CVDr/ + wlM6/8JSOv/DUjn/w1I4/8NROP/EUTf/xFA3/8RQN//ETzb/xE82/8RPNv/ETzb/xE82/8JQN//BUDj/ + vFM9/6tWQ/+cYFP/uJmR//Ps5v/19PL/z8rK/9TQ0P/9+/z/6uvs/0ZGRq0AAABZAAAARAAAACwAAAAS + AAAACAAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAADMTAwab28vPnW0tL/tK2s/6ynpf/l4uL/8Ojh/5h5bP9xPyn/fjod/4U4F/+HORX/ + iDgX/4g5F/+IORf/iDoX/4k7GP+KPBn/iz0c/4s/Hf+NQR//jkMi/49FJP+RRib/kkco/5NKKv+VSyz/ + lkwu/5dOMP+ZUDH/mlE0/5xTNf+dVDf/n1Y5/59WOf+ZUDT/rIV3/9DLzP/U0tP/0MzM/87Jyf/Oycn/ + zsnJ/87Jyf/Oycn/zsrK/8/Ly//Szc7/393e/+rp6v+0nJX/dDop/5JHMv+yWD//ultC/7paQf+7WUH/ + vFlA/71ZQP++Vz7/vlc+/79WPv+/VTz/wFU8/8FUPP/BVDv/wlM6/8JTOf/DUzr/w1I5/8NSOP/DUjj/ + w1E4/8NROP/EUDf/xFA3/8NQN//EUDf/w1A3/8NQN//BUTn/vFM9/61WQ/+aXFD/r42F//Hq4v/18/L/ + zcnK/9XQ0P///v7/4+Pk/TMzM6AAAABQAAAAQgAAACgAAAAQAAAABwAAAAMAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh0bHFKopKXp2NPS/7Wvr/+rpKT/ + 4N3d//Hp5P+YeGr/c0Aq/4A5HP+GOBf/iDkV/4k5Fv+JORb/iDkX/4g4F/+JORf/iTsX/4k7Gf+LPRv/ + jD8d/41AH/+OQSH/j0Qk/5BFJf+RRyj/k0kp/5RLK/+WTC7/l04v/5hPMf+aUTP/m1I1/51TNv+eVTj/ + mlAy/6+Ief/Qz9D/z8zM/8zHx//Lx8f/ysbG/8rFxf/KxcX/ysXF/8vGxv/Lxsb/zMfH/83IyP/NyMj/ + 1dHS//Hy8/+1nZb/djYk/59OOf+3W0L/uVtC/7paQf+7WUH/vFlA/7xYP/++Vz7/vlc+/75XPv+/Vjz/ + v1U8/8FUPP/BVDv/wVQ7/8FUO//CUzr/wlI6/8JTOf/DUjn/w1I5/8NSOP/DUjj/wlE4/8NROP/DUTj/ + w1E4/8JROP/AUjn/u1Q9/65XRP+ZW07/rYyE//Lr5f/z7+7/y8bH/9bT0v//////ysnL8hoZGo0AAABN + AAAAPwAAACEAAAAMAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEPDg41l5WX19jT0/+7tLT/qKCh/9nV1//17uv/nH1w/3NAKv+BPR//hzgX/4k4Ff+JORX/ + iTkV/4k5Fv+IORf/iTkX/4k6GP+JOxf/ijsZ/4o8G/+MPh3/jEAe/41BIP+PQyP/j0Uk/5FHJ/+SSCj/ + lEoq/5VMLf+WTS7/mE4w/5lQMv+aUjT/nFM2/5pPMP+ncl7/zcrK/8zIyf/JxMT/ycTE/8fCwv/HwsL/ + xsHB/8bBwf/GwcH/x8LC/8fCwv/Iw8P/ysXF/8vGxv/Lxsb/1tLT//Dw8P+VbmP/hT0p/69XP/+6W0L/ + ulpC/7paQf+8WkD/vFlA/71ZP/++WD7/vlg+/79XPv+/Vj3/wFY9/8BVPP/AVDz/wVQ8/8FUO//BVDv/ + wlQ6/8JTOv/CUjr/wlM6/8JTOf/CUjn/wlI5/8JSOf/BUjn/wlI5/8JSOf/AUzr/ulU+/61XQ/+aXVD/ + spOL//Tu6P/s6+v/yMTD/9jV1f//////r66v5gwMDH8AAABHAAAAOAAAABgAAAAKAAAABQAAAAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFnNxcbPY09P/wbu6/6qiov/SztH/ + +PTy/6iLf/9zQSz/gT0f/4c5GP+JOBX/ijgV/4k5Ff+JORX/ijoW/4o6Fv+JORf/ijoY/4o6GP+KOxj/ + ijwa/4s+HP+MQB7/jUEg/45CIv+PRCT/kUYm/5JIKP+TSSr/lEss/5ZMLv+XTjD/mE8x/5pRNP+bUTT/ + nFI1/8CrpP/Lysv/x8LC/8bBwf/FwMD/xL+//8O+vv/Dvb3/wr29/8K9vf/Dvr7/w76+/8XAwP/GwcH/ + yMPD/8rFxf/JxMT/5eXl/9TIxf97PSz/o1E6/7hbQv+5W0L/uVtC/7paQf+7WkH/vFlA/71ZQP++WD// + vlc+/79XPv++Vz7/wFY9/8BWPP/AVTz/wFQ8/8FVPP/BVTz/wVQ7/8FUOv/BVDv/wVQ7/8JUO//CUzr/ + wVM6/8FTOv/BUzr/wVM6/8BTOv++VDv/ulY//6tYRf+YX1L/uZ2W//j19P/l4uP/x8HB/+Dd3f////// + h4eH0wAAAGkAAABFAAAAMAAAABMAAAAIAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAJSUFOMysTF/8jCwv+spKT/xL2///v49/+3npP/dUUw/4E+IP+IORf/ijkW/4s4Ff+KOBX/ + ijkV/4o5Fv+KORb/ijoW/4o5F/+KOhj/ijoY/4o7GP+LPBr/jD0c/40/Hv+NQR//jkIh/49EJP+QRSb/ + kUco/5NJKf+USiv/lkwt/5dOL/+YTzH/mlEz/5hNL/+nbFX/yMPC/8bBwv/Dvr7/wr29/8G8vP/Au7v/ + v7q6/8C6uv+/urr/v7m5/7+6uv/Au7v/wby8/8O9vf/Ev7//x8LC/8jDw//Szs7/7uzs/41cT/+XSDP/ + tltC/7hcQv+5W0L/uVpC/7taQf+7WkD/vFlA/7xZQP+9WD//vlg+/75YPv++Vz7/v1c9/79WPf+/Vj3/ + v1U8/8BVPP/AVTz/wFQ7/8BVO//BVTv/wVQ7/8FUO//BVDv/wVM7/8BTO//AUzv/wFQ7/8BUOv+9VTv/ + uFY//6hYRv+YY1f/xK2m//v5+P/a1tn/xsLC/+zp6P/19Pb/WltbuQAAAFkAAABBAAAAJwAAAA8AAAAH + AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKCopWLSxsvbSy8z/r6in/7iys//8+/b/ + yriv/3dKN/+BPiH/ijoY/4s6Fv+MOhb/jDkW/4s5Ff+KORX/ijkW/4o6Fv+LOhf/ijoX/4o6F/+KOxj/ + ijsY/4s8Gf+LPRv/jD8d/41BH/+NQiD/j0Mj/5BFJf+RRib/kkgo/5RJKv+VSy3/lk0u/5hPMP+ZUDL/ + l0kq/7GGdf/Ixsf/wr29/8G7u/+/urr/vri4/723t/+8t7f/vLe3/7y3t/+9t7f/vLe3/724uP++ubn/ + wLq6/8K8vP/Dv7//xsHB/8nExP/u7/D/rIqA/49BLP+0W0L/uFxD/7hbQv+5W0L/ulpC/7pbQv+7WkH/ + u1pB/71ZQP++WD//vlg//75YPv++Vz7/v1c+/75XPv+/Vj7/v1Y9/79WPf+/Vj3/wFY9/8BWPP/AVTz/ + wFU8/8BVPP/AVTz/v1U8/79VPP+/VTz/v1U8/79VPP+9Vj3/tlhB/6RZR/+WZ1z/08O7//38+//QzM7/ + ysXE//r4+f/d3N38JSUllwAAAE0AAAA8AAAAHQAAAAsAAAAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQYGBiOOi4rO1c7O/7exsf+vp6b/8e7r/+nc1P+AWEf/fT8j/4k8Gv+MOxf/jToW/406Fv+NOhb/ + jDoW/4s5Fv+KORb/ijoW/4s6F/+LOhf/ijoY/4s7Gf+LOxj/izwZ/4s9Gv+MPh3/jkAe/45BH/+OQiH/ + kEQk/5BFJv+RRyf/k0kq/5RKLP+WTC7/l04v/5hPMf+WSSn/r4l6/8TExv+/urr/vri4/7y3t/+7trb/ + urW1/7m0tP+5tLT/ubS0/7q0tP+6tLT/u7W1/7y2tv+9uLj/wLq6/8G7u//Dvr7/xcDA/+nr7P+ylIv/ + jEAq/7RcQv+3XEP/t1xD/7hcQv+4W0L/uVtC/7paQv+7WkH/vFlB/7xZQf+9WUD/vVhA/75ZP/++WD// + vlc+/75YPv+/Vz7/v1c9/75XPv++Vz7/vlY9/75WPf++Vj3/v1Y9/79WPf++Vj3/vlY9/75VPf+/Vjz/ + v1U8/75VPP+8Vj3/tFhC/59ZSP+YcGX/49nQ//78+P/Fw8P/087O//////+ko6ThBQUFdgAAAEQAAAAw + AAAAEwAAAAgAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWVlZks7Hx//CvLv/q6Wl/9vZ2f/07+r/ + km9g/3c+Jv+JPh//jjsY/487F/+NOxf/jToX/406F/+MORb/jDoW/4s6Fv+LOhb/jDoX/4w7F/+MOhj/ + izsY/4s7GP+LOxj/jD0a/40+HP+NQB7/jkEf/49CIP+PQyL/kEUl/5FGJ/+SSCj/k0kr/5VMLf+WTS7/ + mE8w/5ZJKP+thnj/wcHD/7y3t/+7tbX/ubS0/7m0tP+5s7P/uLKy/7eysv+3srL/t7Ky/7eysv+5s7P/ + ubS0/7u2tv+9uLj/v7m5/8K9vf/Dvr7/6Onq/7OVjP+PQyv/s1xC/7ZdQ/+3XEP/t1xD/7hcQv+5W0L/ + uFtC/7pbQv+7W0L/u1pB/7tZQf+8WkD/vFlA/71ZQP++WUD/vlg//75YP/++WD//vlc+/75YPv++Vz7/ + vlc+/75XPv++Vz3/vlc9/75XPf++Vz3/vlc9/71WPf+9Vj3/vlY9/71WPf+6Vz//sFpE/5dYSf+ce3H/ + 8u7m/+vo6P/Dvrz/4N3d//z6+/9naGjBAAAAXwAAAD8AAAAlAAAADgAAAAYAAAADAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAASgpKVGxrq72zsfH/6+mpv/Bu73/+/n3/6+UiP91QSv/hz4g/448Gf+PPBj/jzsX/487F/+OOhf/ + jToX/446F/+NOhf/jDoW/4w6F/+MOxf/jDsX/4w7F/+LOxj/izsZ/4w8GP+MPBr/jT4c/40/Hf+OQB7/ + j0Ig/49DIv+QRST/kkYm/5JIKP+TSSn/lEss/5ZMLv+XTi//lUgn/62Edf/AvsD/urW1/7qzs/+4s7P/ + t7Gx/7axsf+3sbH/trGx/7axsf+2sbD/trGx/7exsv+4srL/urOz/7q2tv+9uLj/wLu7/8O9vf/s7e7/ + s5GH/5ZHLv+0XUP/tV1D/7ZcQ/+2XEP/t1xD/7hcQ/+4XEP/uVtC/7pbQv+6W0L/u1tB/7taQf+7WkH/ + vFpB/7xaQP+8WUD/vVlA/71ZQP++WUD/vlg//75YP/+9WD//vlc+/71XP/+9Vz//vlc+/71XPv+9Vz7/ + vVc//71XPv+9Vz7/vVc+/7tXP/+3WED/qVlG/5FcT/+2nZX/+/r5/9TR0v/Dv7//9vP0/9rY2v4nJyiZ + AAAASgAAADgAAAAZAAAACgAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMXfnx8vNPNzf+3sbH/squs//Xz8P/WyL// + e047/4RAI/+PPRr/kDwY/5A8GP+QPBj/kDsX/487F/+OOhf/jjoX/446F/+NOxf/jToX/4w7F/+MOxf/ + jDsY/4w7GP+MOxn/jTwZ/4w8Gf+NPRr/jj4d/45AHv+PQSD/kEMi/5BFI/+QRiX/kkgn/5NJKf+USyr/ + lUwt/5ZNLv+VSSr/qHJd/725uf+4tLT/t7Ky/7awsP+2sLD/ta+v/7Wvr/+0rq7/tK+v/7Svr/+1r6// + trCw/7exsf+4srL/urS0/7y3t/+9uLj/xsLC/+3t7f+hcGH/o1E4/7RdRP+zXUP/tV1D/7ZdQ/+2XUP/ + t1xD/7hcQ/+3XEL/uFxC/7hbQv+6W0L/ultC/7tbQv+7W0L/u1pB/7taQf+7WkH/vFlA/71ZQf+9WUH/ + vVlA/7xZQP+9WUD/vVlA/71YQP+9WED/vFg//7xYP/+8WD//vFg//7tYPv+8Vz7/u1g+/7pXP/+0WUP/ + olpI/45jWP/Sxr7//v76/8XCwv/Qy8v///7//5mYmdoAAABsAAAAQQAAACsAAAAQAAAABwAAAAMAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAUZFRXbDv7//xcDA/6ylpf/Z1dX/8+7m/4xoWP99PyX/jT8d/5E9Gf+SPRn/kT0Y/5E8GP+QPBj/ + kDwY/487GP+POxf/jjsX/447F/+OOhf/jTsX/4w7F/+NOxj/jTsY/407Gf+NOxn/jDwZ/409Gv+OPhz/ + jj8e/49BH/+PQiH/kEQj/5FFJf+SRif/k0ko/5RKKv+VSyz/lk0t/5ZNLv+aUzb/uaml/7i1tv+1sLD/ + ta+v/7Wvr/+0rq7/s66u/7Ourv+zra3/tK6u/7Surv+1r6//trCw/7exsf+5s7P/u7a2/7u1tf/Z2dn/ + 4NbT/5dSPP+tWkD/sl1E/7JdRP+zXUP/tF1D/7VdRP+2XUP/t11D/7dcQ/+3XEP/uFxD/7hbQv+5W0L/ + uVtC/7pbQv+6W0L/u1tC/7tbQv+6WkL/vFpB/7xaQf+8WUH/u1lB/7tZQP+7WUD/u1lA/7tZQP+7WUD/ + vFhA/7xZQP+7WUD/u1k//7pZP/+7WD//ulg//7hYQP+uWkT/l1hJ/5d1a//w6+L/6+jo/7+6uv/l4OD/ + 8O/w/0dGR6sAAABRAAAAOQAAABkAAAAKAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDgwllJGR1NLKy/+xrKz/vre5//z79v+1nZP/ + dkIr/4tAIv+SPhv/kz0Z/5I9Gf+SPRn/kjwY/5E8Gf+QPBj/kDwY/5A7F/+POxf/jzsX/447F/+NOxf/ + jTsX/408F/+NPBj/jTsZ/407Gf+NPBn/jTwZ/44+G/+PPx7/j0Ef/5BCIP+QQyL/kUQk/5JGJf+SSCf/ + lEkp/5RLKv+VTC3/lk0u/5VJKf+rfWv/u7q8/7Wvr/+0rq7/tK2t/7Otrf+zra3/s62t/7Otrf+zra3/ + s66u/7Surv+1sLD/trGx/7izs/+4s7P/w7+//+7w8f+ziHr/oE82/7BeRP+xXkT/sV1E/7JdRP+zXUP/ + tF1E/7VdRP+2XUT/tl1D/7ZdQ/+2XEP/uFxD/7hcQ/+5XEL/uVxD/7lcQv+6W0L/ultC/7pbQv+6W0L/ + ulpC/7pbQv+7WkH/u1pB/7taQf+6WkH/u1lA/7paQf+7WkD/ulpA/7lZQP+6WUD/ullA/7pZQP+5WT// + uFlA/7VaQv+oW0b/jFpM/6+bk//7+/n/z8vM/8TAv//8+fr/ra2u5wsLC3sAAABBAAAAKwAAAA8AAAAH + AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAUpJSn3Iw8P/wrq6/66nqf/q5uX/6eDW/4JZR/+GQSX/kUAd/5Q+Gv+UPhr/kz4Z/5I+Gf+SPRn/ + kjwZ/5E9Gf+RPBj/kDwX/5A8GP+PPBj/jzsX/447F/+OPBf/jjwY/448Gf+OPBn/jTwZ/408Gv+NPRn/ + jj0b/48/HP+PQB//kEIf/5BDIf+RRCP/kkYl/5JHJv+TSSj/lEoq/5VLLP+WTC7/lkwt/5lPMf+0mI7/ + urm7/7Ourv+zraz/s62t/7Otrf+zra3/s62t/7Otrf+zra3/tK+v/7WwsP+2sbH/trCw/7+7u//k5+n/ + zrWu/55SOv+tXEL/r15E/69eRP+wXUT/sV5D/7JdRP+zXUT/s11E/7RdRP+1XUT/tl1E/7ZdRP+3XUP/ + t11D/7hcQ/+3XEP/uFxD/7hcQ/+4W0L/uVxC/7lbQv+5XEL/ulxC/7pbQv+6W0L/uVtC/7lbQf+6W0H/ + uVpB/7laQf+5WkH/uVpB/7lZQP+5WUD/uVpA/7laQP+4WT//t1lA/7FaQ/+cWUj/jmhd/+LZzv/28u// + v7q6/9vX1//18vb/VlZWtQAAAFMAAAA4AAAAGwAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREsl5SW2NDKyv+yq6n/xsDB//n48v+jhXj/ + eUAo/49CIv+VPxz/lT8b/5U/Gv+UPhn/lD4Z/5M+Gf+SPRn/kj0Z/5E9Gf+RPRj/kTwY/5A8GP+QPBj/ + jzsX/488GP+OPBj/jjwZ/448Gf+OPBn/jTwa/449Gv+OPhr/jz4c/49AHv+QQR//kEMg/5FEIv+SRST/ + kkcm/5NIJ/+USSn/lUor/5ZLLf+XTS//lkss/5tSNP+0mI7/u7m7/7aysv+yra3/sqys/7GsrP+yraz/ + s62t/7Otrf+zrq3/s66u/7eysv/HxMX/4uTl/9C4sf+iW0L/qVk+/65eQ/+uXUP/rl1D/69dRP+wXkP/ + sV5E/7JdRP+zXUT/s11E/7NeRP+1XUT/tV1E/7ZdRP+2XUT/t11E/7ddQ/+3XEP/t1xD/7hcQ/+3XEP/ + uFxD/7hcQ/+4XEP/uFxC/7lcQv+5W0L/uFtC/7lbQv+4W0L/uFtC/7hbQv+4W0L/uFtB/7hbQf+4WkH/ + t1pB/7haQP+3WT//tFpB/6pbRv+OWEn/oIZ9//n38f/V0tL/v7u7//r39/+4uLjsERERgAAAAEEAAAAr + AAAADgAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAUxMTX7JxMX/wLq6/7Gqq//t6eX/1svD/31RPv+JQiT/lEAd/5dAG/+XPxv/lj8b/5U+Gv+VPhr/ + lD4Z/5Q9Gf+TPhn/kz4Z/5I9Gf+SPBj/kTwY/5E8GP+QOxj/kDsY/448GP+OPBj/jz0Z/489Gf+OPBr/ + jzwa/449Gv+PPRv/kD8d/5BAH/+QQh//kUMh/5FEI/+SRiX/k0cm/5RIKP+VSSr/lksr/5dNLv+XTi// + l0wt/5pQMf+ugnD/u6+t/7u7vf+4t7j/trKz/7Wxsf+1sLH/t7O0/7y4uf/Fxcb/1NXX/9nRz/+/l4n/ + olg9/6hZPf+rXUL/rF1C/61dQ/+tXUP/rl1D/69dRP+wXkT/sF5E/7FeRP+yXkT/s15E/7NdRP+0XUT/ + tF5E/7VeRP+2XUT/tl1E/7ZdRP+2XUP/t11E/7ddQ/+3XUP/t1xD/7dcQ/+3XEP/t1xD/7hcQ/+3XEL/ + uFxC/7hbQv+4W0L/uFtC/7dbQv+3W0H/t1tB/7dbQf+3W0H/t1pB/7daQf+1WkD/sFtD/55aR/+IYFT/ + 0ce///n38v/Au7r/2tXV//Xz8/9ZWFm3AAAAVAAAADUAAAAZAAAACgAAAAQAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAkko+Q0NHLy/+zra3/x8PD//f17f+hhHf/ + gUky/5NDI/+XQBz/mEAb/5dAG/+WQBv/lj8b/5U/G/+VPxr/lT4a/5Q+Gv+UPhn/kz0Z/5I9Gf+RPRn/ + kT0Z/5E8GP+ROxj/kDwY/489GP+QPBn/kD0Z/488Gv+PPRr/jj0a/489Gv+QPhz/kEAe/5FBH/+RQyD/ + kUQi/5JFJP+TRib/lEgn/5RJKf+VSiv/lkws/5dNLf+YTjD/mE4v/5hLK/+fXED/roFw/7idlP/As6// + v7a0/8C4tv/Fvbv/y7+7/8eupv+7j4D/qWZN/6JTN/+nWj7/qVxB/6pcQf+rXUL/rF1C/6xdQ/+tXUP/ + rl1D/69eQ/+vXkT/sF5E/7FeRP+xXkT/sl1E/7NdRP+zXkT/tF5E/7ReRP+0XUT/tV1E/7VdRP+2XUT/ + tl1E/7ZdQ/+2XUP/tl1D/7ZdQ/+2XEP/t11D/7ZcQ/+2XEP/t1xD/7dcQv+3XEL/t1xC/7ZcQv+2W0L/ + tltC/7ZbQf+1W0H/tVpB/7ZaQP+0WkH/qltF/49XSP+dgnn/+Pbu/9bR0/++ubn/+PT2/6+vr+gKCgp2 + AAAAPgAAACcAAAAOAAAABgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAERERW7FwL//xL2+/7Crq//p5uP/183H/4heTP+TUTT/mUYi/5lAG/+ZQRz/mEAc/5dAG/+XQBv/ + l0Ab/5Y/G/+VPxr/lT4a/5Q+Gf+UPhr/kz4Z/5I9Gf+SPRj/kT0Z/5E8GP+RPBj/kD0Z/5A9Gf+RPRn/ + kDwa/488Gv+PPRr/jz4a/5A+G/+QQB3/kUAf/5FCIP+RQyH/kkUj/5NGJf+URyf/lUko/5VKKv+VSiv/ + lkwt/5hNL/+ZTzD/mVAx/5lOMP+ZSyv/nVI0/6BaPv+hXED/oVxB/6NeQ/+kXUL/olc6/59RM/+jVzr/ + plo//6ZbP/+nW0D/qFxB/6lcQf+qXUL/q11D/6xdQ/+tXUP/rl5D/65eRP+vXkP/r15D/7BeRP+xXkT/ + sV5E/7JeRP+zXkT/s15E/7NeRP+zXkT/tF1E/7ReRP+0XUT/tV1E/7VdRP+1XUT/tV1D/7ZdQ/+2XUP/ + tVxD/7VcQ/+1XEP/tVxD/7ZcQ/+2XEL/tVxC/7VcQv+1W0L/tVtC/7VbQf+0W0D/tVtA/7NaQP+uW0P/ + nlpG/4dfU//Qx8D/9vPu/723t//b2Nb/7Ovt/0NDQ6kAAABMAAAAMgAAABUAAAAIAAAAAwAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBAMNfXl7t9TOzf+1rq3/xL+///r37/+ojYP/ + ilI8/59VNv+eSyr/mkId/5lBHP+ZQRz/mUAc/5hAHP+XQBv/lkAb/5Y/G/+VPxr/lT8a/5Q+Gv+UPhn/ + kz4a/5M9Gf+SPRn/kj0Z/5I8GP+QPRn/kD0Z/5E9Gf+QPRr/jz0a/5A9Gv+PPhr/kD4b/5E/HP+RQB7/ + kUEf/5JDIP+SQyL/k0Yk/5RGJv+USCf/lEko/5VKKv+WSyz/l00t/5hNLv+ZTzD/mlAy/5pRNP+bUTT/ + m1Ez/51SNP+eUzX/nlQ3/6BVOP+hVzr/olg8/6NZPf+lWj7/plo//6dbP/+nW0D/qFxB/6lcQf+qXEL/ + q11C/6tdQ/+sXUP/rV1D/65eQ/+uXkP/r15E/7BeRP+wXkT/sV5E/7FeRP+yXkT/sl5E/7NeRP+zXkT/ + s15E/7NdRP+0XkT/tF1E/7RdQ/+0XUT/tF1E/7RdRP+0XUT/tF1D/7RdQ/+0XEP/tFxD/7RcQv+0XEL/ + tFxC/7RcQv+0W0L/tFtB/7NbQf+zW0D/s1pA/7FaQf+nWkT/jFZH/5+Gff/6+e//z8vL/8K8u//6+Pj/ + jY2O1gABAmkAAAA4AAAAIQAAAAsAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAACgnKEe0r6/5y8TE/7Cqqv/j4N7/493X/41kU/+WVDn/o1Qz/6NRL/+dRyL/mkEc/5pCHP+aQhz/ + mUEc/5hBHP+YQBz/l0Ab/5ZAGv+WPxv/lT4a/5U+Gv+UPhr/lD4a/5M9Gf+TPhn/kj0Z/5I9GP+RPRn/ + kT0Z/5I+Gf+RPRr/kT0a/5A+G/+QPhv/kT4b/5FAHf+RQR//kUIg/5JDIf+TRSP/lEYk/5RHJv+USCf/ + lUop/5ZKK/+WTCz/mE0t/5hPL/+ZUDH/mlEy/5tSNP+cUjX/nFQ2/51VNv+eVTj/n1Y5/6BXOv+hVzv/ + olk8/6NZPf+lWT7/pVs+/6ZbQP+nXED/qFtA/6lcQf+qXEL/ql1B/6tdQv+sXUP/rV1D/61eQ/+uXkP/ + r15E/69eRP+vXkT/sF5E/7BeRP+xXkT/sV5E/7JeRP+yXkT/sl5E/7JeRP+zXUT/s11E/7NdRP+zXUT/ + s11D/7NdQ/+zXUP/s11D/7NcQ/+zXEP/s1xD/7NcQ/+zXEL/s1xC/7JbQf+yW0H/sltB/7JbQf+xWkD/ + sVpA/6tbQ/+YWEX/imRY/9/Y0f/t6uf/ubSy/+Xi4v/V1db+KSoqlAAAAEMAAAArAAAAEAAAAAcAAAAC + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXFtbjdHNzf+8t7b/ura2//Py6/+ynpb/ + iFQ+/59XOP+kUzH/pVIw/6JNK/+cQx//m0Ic/5pCHf+ZQR3/mUEc/5lAHP+YQRz/l0Ac/5ZAG/+WQBv/ + lj8b/5U+Gv+VPhr/lD4Z/5M+Gf+TPhr/kz0Y/5I9Gf+RPhn/kT4a/5I+Gv+RPRv/kT4b/5E+G/+RPhv/ + kT8c/5JBHv+SQiD/kkMh/5JEI/+TRSP/lEYl/5VIJ/+VSCn/lUoq/5ZLK/+XTC3/mE4u/5pPL/+bUTL/ + m1Ez/5xSNP+dUzX/nlQ2/55UN/+fVTj/oFc6/6FXO/+iWDv/olg8/6RZPf+kWT7/pVo+/6ZbP/+mW0D/ + p1xB/6hcQf+pXEH/qlxB/6tdQv+rXUP/rF1D/61eQ/+tXkP/rl5D/65eQ/+vXkT/r15E/69eRP+wXkT/ + sF5E/7FeRP+xXkT/sV5E/7FeRP+xXkT/sV1E/7FdRP+yXUT/sl1D/7JdQ/+yXUP/sl1D/7JdQ/+yXUP/ + slxD/7JcQv+xXEL/sVxC/7FbQf+xW0H/sVtB/7FbQf+wWkD/rVpB/6JbRP+HVkj/qZaP//n47v/Fv8D/ + ycTE//r3+P9paGjBAAAAVwAAADMAAAAYAAAACQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABARER+UkpLN083N/7KsrP/Szs//7+3m/5ZzZP+SVDr/pVY1/6ZTMP+mUjD/pVIw/59IJf+bQhz/ + m0Id/5tCHf+aQh3/mkIc/5lBHP+ZQBz/mEAb/5dAG/+XQBv/lj8b/5U+Gv+VPhr/lT4a/5Q+Gv+UPhn/ + kz0Z/5I+Gf+SPhr/kj4a/5E+Gv+SPhv/kj4b/5E/G/+RPxv/kkAd/5JBH/+SQiD/k0Mh/5NEI/+URiT/ + lUcm/5VIJ/+WSSj/lkoq/5dMLP+YTC3/l00u/5dOL/+XTzD/l1Ay/5lQM/+aUTT/mlI1/5tTNv+cVDf/ + nVU5/51VOf+fVzr/olg8/6NZPf+kWT3/pVo+/6ZbP/+nW0D/p1xA/6hcQf+oXEH/qVxB/6pdQv+rXUL/ + q11D/6xdQ/+tXUP/rV1D/61eRP+uXkP/rl5D/69eRP+vXUT/r15E/69eRP+wXkT/sF5E/7BeRP+wXkT/ + sF1E/7FdRP+xXUP/sV1D/7FdQ/+xXUP/sV1C/7FdQv+xXEL/sVxC/7BcQv+wXEL/sFtB/7BbQf+wW0H/ + sFtB/69aQP+uWkD/qFtC/5JXRf+NbmP/8O7j/97a2f+5srL/9PHx/62uruYPDw93AAAAOAAAACEAAAAM + AAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAxUry4uP/LxMT/tK6u/+vm4f/Nwr3/ + iVtI/59XOv+lVTP/p1Mx/6dUMf+mUzH/o1Au/55FIP+cQh3/nEIe/5tCHf+bQh3/mUIc/5lBHP+ZQBz/ + mEEb/5dAG/+XPxv/l0Aa/5Y/Gv+VPxv/lT8a/5U+Gf+TPRn/kz4Z/5I+Gv+TPhr/kz4a/5I+G/+SPhv/ + kz8c/5E/G/+SQBz/kkAd/5JBH/+TQyD/k0Mi/5NFJP+URiT/lUcm/5VIJ/+WSSr/k0Ym/4Q8Hf93Nhr/ + czUa/3Q1HP90Nh3/dTcd/3U4Hv92OCD/dzkg/3c6If93OSH/eDoi/4JELP+UUDb/oFc7/6NYPf+jWT3/ + pFk9/6VbPv+mWz//p1tA/6dcQf+oXEH/qVxB/6lcQv+qXUL/q11C/6tdQv+rXUL/rF1D/61dQ/+tXkP/ + rV5D/65dQ/+uXkP/rl5D/69eQ/+vXkT/r11D/69eQ/+vXUP/r11D/69dQ/+vXUP/r11D/69dQ/+vXEL/ + r1xC/69cQv+vXEL/r1xB/69cQf+vW0H/r1tB/69bQP+vWkD/rlo//65aP/+rWUD/nFlE/4NZTP/Kv7n/ + 9PDq/7iztP/e2dn/3t/f/zY2Np0AAABFAAAAKwAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAFgX1+R1c/P/7u1tf/BvL3/8e/p/6iPhP+NVT7/pVk6/6hVMf+oVDL/qFQx/6dTMf+nUzH/ + o00q/51EHv+cQx7/nEMe/5tCHf+aQhz/m0Ed/5pBHf+ZQRz/mUAb/5lBHP+XQBv/l0Ab/5Y/G/+WPxv/ + lT8a/5U+Gv+UPhr/lD4a/5M/Gv+TPhv/kz4b/5I/G/+SPxz/kj8c/5I/G/+SPx3/k0Ee/5NCIP+TQyH/ + lEQi/5RFJP+VRiX/lUgn/5VGJf+ZWT7/m3hr/5B1a/+OdGr/j3Rr/491a/+Rdmz/kXdu/5J4b/+UenD/ + lnxz/5iAdv+XfXL/dkw8/3g/KP+YUzj/olg8/6NZPf+jWT3/pFk9/6VaPv+mWz//pltA/6ZcP/+nXED/ + qFtB/6hcQf+qXUL/ql1C/6pdQv+rXUL/q11D/6xdQ/+sXUP/rV1D/61dQ/+tXkP/rV5D/61dQ/+uXUP/ + rl1D/65dQ/+uXUP/rl1D/65dQ/+uXUL/rl1C/65cQv+uXEL/rlxC/65cQv+uXEH/rlxB/65bQf+uW0H/ + rltA/61aP/+tWj//rVo//6tZQP+jWUL/h1ND/6CJgP/49uv/yMPD/8S/v//69vj/bm5uxQAAAFcAAAAw + AAAAFgAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQHZKPkMfUz8//ta6u/9bS0f/p5+L/ + lG5f/5hZP/+pWTf/qlUz/6lVMv+pVDL/qFQy/6dTMf+nVDH/oUom/51CHf+dQx7/nEIe/5xDHv+bQh3/ + m0Id/5pBHf+aQR3/mUEc/5hBHP+YQBv/mEAb/5c/G/+WPxv/lT8b/5U/Gv+VPhn/lD8b/5M/Gv+UPxv/ + kz4b/5M/HP+TQBz/kj8b/5JAHP+TQB3/k0Ef/5NDIP+UQyH/lEQi/5VGJP+URiT/l0op/7qknf/Fxcf/ + xMLE/8TCxP/Fw8T/xcPE/8bExf/Hxcf/yMbI/8vJyv/NzM7/0M/Q/9bV1/+4q6f/cD4q/5FNM/+hVzv/ + oVg7/6JZPP+iWT3/o1k9/6RZPv+lWj7/pls//6ZbP/+nW0D/p1xA/6hbQP+oXEH/qVxB/6ldQf+pXEL/ + ql1C/6tcQv+rXEL/q11D/6xdQ/+sXUP/rF1D/61dQ/+tXUP/rV1D/61dQ/+tXUL/rV1D/61dQv+tXUL/ + rVxC/61cQv+tXEL/rVxB/61cQf+tW0H/rVtA/61aQP+sWj//rFo//6xaP/+sWT7/q1k+/6ZZQP+RVkP/ + i2ld/+nm3f/f2tj/uLKx//Lu7/+opqjlCwwMcQAAADUAAAAdAAAACgAAAAQAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAhICBBtbGy9NDKyv+2sK//6OPf/87Hwv+LXUr/ol1A/6lXNf+rVjP/q1Uy/6pUMv+pVDL/ + qFQy/6hUMf+mUjD/oEgj/55DHv+dQx7/nUMe/5xDHf+bQh7/m0Id/5tCHf+aQh3/mkEc/5lBHP+YQRz/ + l0Ac/5c/G/+WQBv/lj8a/5U+G/+VPxv/lD8b/5U/G/+UPhz/kz8c/5Q/HP+UQBz/k0Ac/5NAHf+TQB3/ + k0If/5RDIP+URCL/lEQj/5REIv+ZTi//wLi2/8K/v//BvLz/wbu7/8G7u//CvLz/wr29/8O+vf/Ev7// + xcDA/8fCwv/Iw8P/zcnJ/8vFxP91RDH/j0sx/6BWOf+gVjr/oVc7/6JYPP+iWDz/o1k9/6NZPf+kWT7/ + pVo+/6VaPv+mW0D/p1tA/6dbQP+nXED/qFxB/6hcQP+pXEH/qVxB/6pcQf+qXEL/qlxC/6tdQv+rXUL/ + q1xC/6tdQv+rXUL/rF1C/6xdQf+sXEH/rFxC/6xcQv+sXEL/rFxB/6xcQP+sW0H/rFtB/6tbQP+rW0D/ + q1pA/6taP/+rWj//q1k+/6tZPv+rWT7/p1g9/5hXQf+BV0n/x765//Dt5v+2sbH/49/e/9TS0/0jIyOM + AAAAPQAAACUAAAANAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAExMTXbLx8j/w76+/724uf/w8Of/ + sp2V/49YQf+pXkD/q1c1/6tXM/+rVzP/q1Yz/6pWM/+qVjL/qVUy/6hVMv+lUi//n0Yh/55DHv+dRB// + nUQe/5xDHv+cQx7/m0Id/5tCHf+bQh3/mkIc/5lBHP+YQRz/mEAc/5dAG/+XQBv/lz8b/5Y/Gv+VPxv/ + lUAb/5U/G/+UPhv/lD8c/5RAHP+UQBz/k0Ab/5RAHf+TQR7/lEMg/5RDIf+URCL/lEIh/5hNLv/CuLf/ + xcHC/8S/v//Dvr7/xL6+/8S/v//EwMD/xcDA/8bBwf/Hw8L/yMTE/8vFxf/Oysr/ycLC/3JCL/+OSy// + oFY4/59WOf+gVjr/oFc7/6FYO/+hWDz/olg8/6NZPf+kWT3/pFk9/6VaPv+lWz//pls//6ZbP/+nXED/ + p1xA/6hcQP+oXED/qFxB/6lbQP+pXEH/qVxB/6lcQf+pXEH/qlxC/6pcQv+qXEH/qlxB/6pcQf+qXEH/ + q1xB/6tcQf+qW0H/qltA/6pbQP+rW0D/qlo//6paQP+qWj//qlo//6pZPv+qWT7/qVk9/6lYPf+nWD3/ + nlhA/4FRQP+mk4v/9vXq/765uv/KxsX/7u7u/1NTU68AAABMAAAAKgAAABEAAAAHAAAAAgAAAAAAAAAA + AAAAAAAAAAAkJSYEY2JiodzW1f+6s7P/zsjI/+ro4/+bfG//mVxD/61fPv+uWDX/rVg0/61YNP+sVzT/ + q1c0/6tXNP+qVjP/qVYz/6lWNP+mUC3/oEUg/59EHv+eRB//nkQe/51DHv+cQx7/nEId/5tCHf+aQhz/ + mkEc/5lBHP+ZQRz/mEEc/5hAG/+XQBv/lj8b/5ZAG/+VQBv/lT8b/5U/HP+VPxz/lEAd/5VAHP+UQBv/ + lEEd/5RAHf+UQh//lEIg/5REIf+UQh//mU0t/8W7uf/Hw8T/xsHB/8bAwf/GwcH/xsDB/8bBwf/GwcH/ + x8HC/8jDw//JxMX/y8bG/8/Ky//Kw8P/ckQy/4hGLP+eVDf/nlU4/59VOP+fVjn/oFY6/6BXO/+hVzv/ + oVg8/6JYPP+jWTz/o1k9/6RaPv+kWj7/pVs//6VaP/+mWz//pls//6dbQP+nW0D/p1tA/6hcQP+oW0D/ + qFxB/6hcQf+oXEH/qVxB/6lcQf+pXEH/qVtA/6lbQP+pW0D/qVtA/6lbQP+pWj//qVo//6laP/+pWj// + qVk//6lZP/+pWT7/qVk9/6hZPf+oWDz/qFg8/6dYPP+hVz7/i1NA/4xxZv/t7OD/zsvK/7u1tf/69vf/ + dnV2ywAAAFwAAAAtAAAAFwAAAAgAAAADAAAAAQAAAAAAAAAAAAAAABITExmVlJTM19DQ/7ixsf/e19b/ + 4N3Y/5NqWP+iYEX/sFw8/69ZNv+uWDX/rlg1/61YNf+sWDT/q1c0/6tXNP+rVjT/qlYz/6lWM/+lTyv/ + oEUf/59EH/+fRB//nkMe/51EHv+dQx3/nEIe/5xCHf+bQh3/mkId/5pCHf+aQRz/mUEc/5hBHP+YQBv/ + lz8b/5ZAG/+WQBv/lkAc/5Y/HP+VQBz/lUAd/5VBHf+VQRz/lUEd/5VBHv+UQh//lUMh/5RBHv+ZTCz/ + xry6/8nFxv/HwsP/x8LC/8fCwv/IwsL/x8LC/8fDwv/Hw8P/yMPE/8rFxf/Lxsb/zsnJ/87IyP98VUX/ + fT4l/5tSNf+eVDf/nlU3/59VOP+fVjn/n1c5/6BXOv+gVzr/oFc7/6FYO/+iWDz/o1k8/6NZPf+kWj7/ + pFk+/6VaPv+lWj7/pVo+/6ZbP/+mWz//pls//6dbQP+nWz//p1s//6dbQP+nW0D/p1tA/6dbQP+nWz// + qFs//6haP/+oWj//qFo//6haPv+oWT7/qFo//6hZPv+nWT7/p1k+/6dZPf+nWTz/p1c8/6dYPP+nVzv/ + p1c8/6FWPf+RVED/g15Q/9vX0P/f29f/ta6u//Ds7f+qqanlERAQcgAAADEAAAAZAAAACgAAAAMAAAAB + AAAAAAAAAAAAAAAAGxwcNbe0tO7Szc3/uLOz/+Xi2//Fvbn/jl5K/6plSP+vWjn/sFk2/69ZNv+uWDb/ + rlg1/65YNf+tVzT/rFc0/6xXNP+rVzT/qlYz/6lWM/+kTir/n0Qf/59EH/+gRR//n0Qf/55EHv+dRB7/ + nEMe/5xDHv+bQx3/m0Id/5tBHf+aQRz/mUEc/5lBHP+YQBz/l0Ab/5dAHP+WQBz/lkAc/5Y/HP+VQB3/ + lkAd/5ZAHP+VQR3/lUEe/5VBHv+UQh//lEEe/5hKKP/FtrH/ysjJ/8jExP/Iw8P/yMPD/8jCwv/HwsL/ + yMPD/8jDw//Iw8P/ycTE/8rFxf/Lxsb/1NHS/5J2a/9tMxz/lE4y/55UNv+dVDb/nlQ3/55VN/+fVjj/ + n1Y5/59WOf+fVzr/oFc7/6FXO/+hWDv/olg8/6JZPP+jWTz/o1k9/6NZPf+kWT3/pFk9/6VaPv+lWj7/ + pVo//6VaPv+lWj7/plo//6ZaPv+mWj//plo//6daP/+nWj//p1o//6daPv+nWj3/p1k+/6dZPv+nWT7/ + plk+/6dZPP+nWTz/plg8/6ZXPP+mVzv/plc7/6ZXOv+lVjn/o1Y7/5ZUPv97UUL/vLOv/+jk3f+1r6// + 4d3d/8/OzvsjJSWIAAAAOAAAACAAAAALAAAABAAAAAEAAAAAAAAAAAAAAAAwLy9TwsDA/8/IyP+8tbb/ + 8fDn/7ypof+QW0X/r2VH/69bOP+wWjf/r1o2/69ZNv+vWTX/rlg1/65YNf+tWDT/rFc0/6xXNP+sVzT/ + q1Y0/6pWNP+lTir/oEUg/6BFH/+gRR//n0Qf/55EH/+dRB7/nUMe/5xDHf+bQh3/m0Id/5tCHf+aQR3/ + mUEd/5lBHP+ZQRv/l0Ab/5dBHP+WQRz/l0Ac/5dAHf+WQR3/lkEd/5ZBHf+VQR3/lUEe/5VBHv+UQR7/ + l0Uj/8Cpof/Lycv/yMPD/8jDw//Iw8P/x8LC/8fBwv/HwcH/x8LC/8jBwv/HwsP/yMPD/8jDw//Qzc7/ + s6Sf/2YzHv+GRSv/m1Iz/51TNf+dUzb/nVQ2/55UN/+eVTj/n1U4/59WOP+fVjn/n1Y6/59WO/+hVzr/ + oVc7/6FYO/+iWDz/olg8/6NYPP+jWDz/o1k9/6RYPP+kWT3/pFk9/6RZPf+lWT3/pVk+/6VZPv+lWT3/ + pVk+/6VZPv+lWT3/pVk9/6VZPf+lWD3/pVg9/6VYPP+lWDz/pVg8/6VYPP+lVzv/pVc7/6VXOv+lVjr/ + pVU6/6VWOf+iVDn/mlQ8/31OPf+smpP/8/Dl/7mztP/Tz8//397e/zc3OJ4AAABAAAAAJAAAAA0AAAAF + AAAAAQAAAAAAAAAAAAAAAFVUVHfVz8//xb29/8bBwP/q6eD/o4l//5ldRf+xZEX/sFs3/7FbN/+xWzf/ + sFo3/7BZNv+wWTb/r1k2/65ZNv+tWTX/rVg1/61YNf+sWDX/q1g1/6pXNf+mTir/oEUg/6BFH/+gRSD/ + n0Uf/55EHv+eRB//nUMe/5xDHf+bQx7/m0Md/5tCHf+bQh3/mkEd/5lBHf+ZQBz/mEAc/5dBHP+XQRz/ + mEAc/5dBHf+WQR3/lkEd/5ZCHf+WQh7/lkEe/5VBHv+TPxv/uJaK/8vLzf/Hw8P/x8LC/8fCwf/GwcD/ + xsDA/8XAwP/FwMD/xb/A/8XAwP/FwMD/xsHB/8jDxP/Oysr/e1ZI/240HP+SSy//nVI0/5xSNP+dUzT/ + nVM1/55UNv+eVDf/nlQ3/55UN/+eVTf/nlU4/55WOf+fVjr/n1c6/6BXOv+hVzv/oVc7/6JYO/+iWDv/ + olg8/6JYO/+iWDz/o1g8/6NYPP+jWTz/o1g8/6RYPP+kWDz/pFg8/6RYPP+kWDz/pFg8/6RYPP+kVzv/ + pFc7/6RXO/+kVzv/pFc7/6RXOv+kVjr/pFY5/6NVOf+kVTn/o1Q4/6JUN/+cVDr/gk47/5J7cv/r6d// + w76+/8O8u//z8vL/YWFktgAAAEwAAAAmAAAADwAAAAYAAAACAAAAAAAAAAAeHh8EYV9fmOHc3P+8t7b/ + z8vJ/+Lh2v+Wdmr/omFJ/7NjQ/+zWzj/sls4/7NbOP+yWzj/sVo3/7FaN/+wWjf/r1k3/69ZN/+uWTb/ + rVk2/61YNv+sWDb/q1g1/6tXNf+mTyr/oUYg/6FFH/+gRR//oEUf/6BFH/+eRB//nkQe/51DHv+cQx7/ + nEId/5tCHf+bQh3/mkId/5pBHf+YQRz/mEEc/5hBHP+YQBz/mEAd/5dAHf+WQR7/l0Ed/5ZBHf+WQR7/ + lkEe/5I5FP+vgnD/zMvN/8bBwv/FwMD/xMDA/8S+vv/Dvr7/wr6+/8K9vv/Cvbz/wr28/8O9vf/Dvr7/ + xL6+/83LzP+1p6L/YzId/3o9JP+VTjD/nFIz/5xSM/+cUjT/nVI0/51TNf+dUzb/nlM2/55UN/+eVTf/ + nlQ4/55VOP+eVTn/nlY5/59WOf+gVjr/oFc6/6BXOv+hVzr/oVc6/6FXO/+iVzv/olc7/6JXO/+iVzv/ + olc7/6JXO/+iVzv/o1c7/6NXOv+jVzv/o1c7/6NWOv+jVjr/o1Y6/6NWOf+jVTn/olU5/6JVOP+iVTj/ + olQ4/6JUOP+iVDf/oVM2/5xTOP+JUDv/g2hd/+Hf1v/Nx8b/urOy//j19f93d3bKAAAAVQAAACgAAAAS + AAAABwAAAAIAAAAAAAAAADc4OBFvbW2039vb/7u1tf/Y1NP/5ePc/5hvXv+lZUv/s2ND/7RcOv+0XDn/ + s1s5/7NbOf+yWzj/sVs4/7FaN/+wWjf/r1k3/69ZN/+uWTb/rVk2/61ZNv+tWDX/rFg1/6pYNf+nUCz/ + okYg/6FFH/+hRSD/oEUf/6BFH/+fRB//nkQe/51DHv+dQx7/nUMe/5xDHf+bQh3/m0Id/5pCHf+aQRz/ + mEEd/5hBHf+ZQR3/mEAd/5hBHf+XQR7/l0Id/5dCHf+WQh7/lDwX/6dpT//Hw8P/xcDA/8O9vv/Bvr7/ + wby8/8G7u//Bu7v/wLu6/7+6uv+/ubr/v7u7/8C7u//Au7v/wr29/9HOz/+dhnz/YCwW/39AJv+WTTD/ + nFAy/5xRMv+bUjP/m1I0/5xTNP+dUzX/nVM1/51UNv+dVDf/nVQ2/51UNv+eVDf/nlU4/59VOP+fVTj/ + n1Y5/6BWOf+gVjn/oFY5/59WOv+gVjr/oFY6/6FWOf+hVjr/oVY6/6FWOv+hVjr/oVY5/6FWOf+hVTn/ + oVY5/6FVOf+hVTn/oVU4/6FUOP+hVDj/oVQ3/6FUN/+hVDf/oVM2/6FTNv+hUzX/nFI3/4tQO/+AXk// + 4d/V/9fS0P+yq6v/8/Hx/4iIidkAAQFhAAAAKgAAABYAAAAIAAAAAgAAAAAAAAAAExQUHJyamsnY09T/ + vre3/97a1v/Szsv/k2ZT/6tnS/+2YkL/tV06/7VdOv+zXDr/s1s5/7NbOP+zWzj/slo4/7FaOP+xWjj/ + sFk3/7BZN/+uWTf/r1k2/65ZNv+tWTX/rFk2/6xYNf+oUS7/o0ci/6FGH/+hRR//oEUf/59FH/+fRR// + n0Qe/55EHv+dQx7/nUMe/5xCHv+cQh3/m0Id/5pBHP+aQR3/mUId/5lBHf+ZQh3/mUEd/5dCHv+YQh7/ + mEId/5hDHv+WQRz/m0oq/8G0sP/Cv7//wLu7/8C6uv+/urr/vri4/723t/+9uLf/vLe3/7y3t/+9t7f/ + vbe3/724uP+9uLj/wr6+/9HOz/+NcWX/YCsV/39BJv+WTS7/m1Ax/5tRMv+bUTL/m1Iy/5xSM/+cUjP/ + nFI0/5xTNf+dUzX/nFM2/51UNv+dVDb/nlQ3/55UN/+eVDf/nlU3/55UN/+eVTj/n1U4/59VOP+fVTj/ + n1U4/59VOP+gVTn/n1U4/6BVOP+gVTj/oFU4/6BVOP+gVTj/oFQ3/6BUN/+gVDf/oFQ3/6BTNv+gUzb/ + oFM2/6BTNv+fUjX/n1I1/59SNP+bUTb/jVA5/3lTRP/NycP/3dfT/7Kqq//q5+f/q6qs5xISEnEAAAAt + AAAAGQAAAAgAAAADAAAAAAAAAAAbHBwosK6v29jR0f+9t7j/4N3X/7+5tv+TYUz/r2pN/7ZhP/+2Xjr/ + tl46/7VdOv+0XTr/tFw5/7NcOf+zWzn/sls4/7JaOP+xWjj/sFk4/7BZN/+wWTf/rlk3/65ZNv+tWTb/ + rVk2/6xZN/+pUzD/pEok/6JFH/+hRSD/oUUg/6BFIP+fRR//n0Qf/55EH/+dRB//nUMe/5xDHv+bQx3/ + m0Id/5tCHf+aQhz/mUId/5pCHf+ZQR7/mUIe/5hBHv+YQh7/mEIe/5hCHv+WPhn/tJGD/8HAw/+9uLj/ + vLe3/7y3t/+7tbX/urS0/7q0tP+5tLP/ubS0/7mzs/+5s7P/urS0/7u1tf+7trX/xMDA/9XS0v+Qc2f/ + YCsU/39AJf+VTC7/m08w/5tPMf+bUDH/m1Ay/5tRMv+cUTP/nFIz/5xRNP+cUjT/nFI1/5xTNf+cUzX/ + nFM1/5xTNf+cUzX/nVM2/51TNv+eVDb/nlQ2/55UN/+eVDf/nlM3/55UNv+eVDf/n1Q3/59UN/+fVDb/ + nlM2/55TNv+eUzb/n1M2/55TNf+eUjX/nlI1/55SNf+eUjX/nlI0/59RNP+eUTP/nlEz/5tQNP+QUDf/ + dk08/7iyrv/e2tH/squr/+Tf3v/Cw8LyHyAgfAAAADAAAAAZAAAACQAAAAMAAAAAAAAAAB8fHzS8urrr + 2NLS/764uf/k4dn/uLCt/5dgSf+0bE//uGA9/7deOv+3Xjr/tl46/7ZdOv+0XTr/tFw5/7NcOf+zWzn/ + sls4/7JbOP+xWjj/sVk3/7FZN/+vWTf/r1k3/65ZNv+tWTb/rVk2/61ZNv+qVjL/pUsn/6JGIP+hRSD/ + oUYg/6FGH/+gRSD/n0Uf/59EH/+fRB7/nkQe/5xDHv+dQh3/nEMd/5tCHP+aQh3/mkId/5lCHf+aQR7/ + mUIe/5hCHv+YQh7/mUIe/5Y9F/+kY0j/vrm6/7q2tv+5tbX/ubOz/7izs/+3srL/t7Kx/7exsf+2sLD/ + tbCw/7WwsP+2sLD/uLKx/7mys/+5s7P/xcDB/9rX2P+Tdmr/XyoU/3s8I/+TSy3/mk8w/5tPMP+bTzD/ + mk8x/5pPMv+bUDL/m1Ey/5tQMv+bUjP/nFEz/5tSNP+bUjT/nFI0/5tSNP+bUjX/nFI0/5xTNf+cUzX/ + nVI1/51TNf+dUzX/nVM1/51TNf+dUjX/nVM1/51TNf+eUjX/nlI1/55SNf+eUjT/nlI0/55RNP+eUTT/ + nlE0/55RM/+eUTP/nVAz/51QMv+dUDL/m08y/5BPNv93Sjj/raaj/+Ld0/+zra7/3tja/8/NzvsmJiaG + AAAAMQAAABkAAAAKAAAAAwAAAAEAAAAAISEhQMG/v/rY09P/v7q6/+nl3f+yqab/m2BI/7dvUv+5YD7/ + uV87/7heOv+3Xjr/t106/7VdOv+1XTr/tFw5/7NcOv+zXDn/s1w5/7NbOP+yWzj/sls4/7FbOP+wWjj/ + r1k4/69ZN/+uWTb/rVk2/61ZNv+sVzb/p08q/6NHIf+iRiD/oUYg/6FFIP+gRSD/oEUf/59FH/+fRB7/ + nkQe/55DHv+dQx7/nEMd/5xCHf+bQh7/mkMd/5pDHv+aQh7/mUIf/5lDHv+ZQx7/mUId/5hAGv+0l4z/ + ubi6/7exsf+2sbH/tbCw/7Wvr/+0r6//tK6u/7Strf+0rq7/tK6u/7Ourv+0rq7/ta+w/7eysv+3sbL/ + xcHC/+De3/+iiYH/YCwW/3Q3Hv+PSCv/mU0u/5pOL/+ZTzD/mk8w/5lPMP+aUDD/mlAy/5tQMv+aUDL/ + m1Ay/5tRMv+bUTL/mlEz/5tRM/+bUDP/m1Ez/5tRNP+bUTP/m1E0/5xRNP+cUTT/nFEz/5xRM/+cUTT/ + nFE0/5xRNP+cUTP/nFEz/5xQM/+cUDP/nFAz/5xQMv+cUDL/nFAy/5xPMv+cTzH/nE8w/5xPMP+bTjH/ + kU41/3dHNP+ooJ3/4+DV/7Otrf/a09P/1NLS/yorKo4AAAAyAAAAGwAAAAoAAAADAAAAAQAAAAAjIyNJ + w8HB/9fS0v/Aurn/6+je/6+koP+eX0b/unBS/7lhPP+6Xzv/uF87/7hfO/+3Xjr/t146/7ZeOv+2Xjr/ + tV06/7VdOv+1XTr/tF06/7NcOf+yXDn/slw5/7FcOf+xWzj/sFs4/69aOP+uWjj/rlk3/65ZN/+tWTf/ + qVMw/6RJJP+iRSD/okUg/6JGIP+hRSD/n0Ug/59EH/+fRB//nkQf/55DHv+dQx7/nUMe/5xDHf+bQx7/ + mkMe/5tDHv+bQh//mkMe/5lCH/+ZQx//lz0X/6RgRP+4s7P/ta+w/7Surv+zrq7/s62t/7Ksrf+yraz/ + sqys/7GsrP+xrKz/says/7GsrP+zrKz/tK+v/7exsf+3sbH/xMDB/+bl5/+3pZ3/YzMf/24yGv+MRin/ + mEwt/5pNLv+aTi7/mU4v/5lOL/+aTy//mk8w/5pPMf+aTzD/mk8w/5pPMf+aUDH/mk8y/5pPMv+aUDL/ + mlAy/5pQMv+aTzH/mlAy/5pQMv+aUDL/mlAy/5tQMv+bUDH/m1Ay/5tQMv+bUDL/m1Ay/5tPMf+bTzH/ + m08x/5tPMf+bTzH/m04w/5tOMP+bTjD/m00v/5pOMP+RTTP/eEQw/6Oalv/m4tb/s62t/9bP0f/W1Nb/ + LS4ulAAAADQAAAAaAAAACgAAAAMAAAABAAAAACMjI07FwcH/2NLS/8C7vP/t6uD/raCb/6BfRf+9c1X/ + umI+/7tgO/+6YDv/uWA8/7hgO/+4Xzv/t187/7dfO/+3Xjv/t146/7ZdOv+1Xjr/tF06/7NdOv+zXDr/ + slw5/7JbOf+wWzn/sFs5/7BaOP+vWjj/rlo3/65ZN/+uWjj/q1Yz/6ZMJ/+jRiD/okYg/6JGIP+hRiD/ + oEUg/6BEIP+fRR//n0Qe/55EH/+dQx7/nUMe/51DHv+cQx7/m0Qe/5tCH/+bQh//mkMf/5pCH/+aQx3/ + mT4X/6+HeP+1tLf/sqys/7KsrP+xrKz/saur/7Gqqv+wq6v/sKqq/6+qqv+vqqr/sKqq/7Grq/+zrKz/ + tK+v/7exsf+3srL/w76//+nq6//Lv7v/bD8t/2kuFf+JRCf/l0ss/5pNLf+ZTS3/mU0u/5lOLv+ZTi7/ + mU4v/5lOL/+ZTi//mU4w/5lOMP+ZTy//mU8w/5lPMP+ZTzD/mE4w/5lOMP+ZTjD/mU4w/5lPMP+ZTzD/ + mU4x/5pPMP+aTzD/mk8x/5pOMP+aTjD/mk4v/5pOL/+aTjD/mk0v/5pNL/+aTS//mk0v/5pNL/+aTC7/ + mEwu/5FMMP92Qy//oZeT/+jk1v+0rK7/083N/9jX1/8uMDCXAAAANAAAABoAAAAKAAAAAwAAAAEAAAAA + IyMjUcXBwf/Y09L/wby8/+/s4f+rnZf/omBF/791V/+8Yj7/vGE9/7tgPf+7YD3/uWA8/7lgPP+4YDv/ + t187/7dfO/+3Xzv/t187/7ZeOv+1Xjr/tV06/7RdOv+zXTr/s1w5/7JcOf+xXDn/sVs4/7BaOP+vWjf/ + r1o4/65ZN/+uWTf/rVg2/6hRLf+kSCP/o0Uf/6NGIP+iRiD/oUYg/6BFIP+fRSD/n0Uf/59EH/+eRB// + nkMe/5xCHv+bRB7/m0Qe/5xDHv+bQx//m0Mf/5pDIP+ZQRv/nEck/7Gbk/+ysLL/sKur/7Crq/+wqqr/ + r6mq/6+pqf+wqan/r6mp/6+pqf+vqan/sKqq/7Grq/+zra3/tbCw/7izs/+6tbX/wr29/+jo6v/c1dL/ + dk08/2YrE/+IQyb/l0sr/5lMLP+YSyz/mEwt/5hMLf+YTC3/mE0u/5lNLv+ZTS3/mE0u/5hNLv+ZTS7/ + mU0v/5hNLv+YTi7/mE4u/5hNLv+YTS7/mE0u/5hNLv+YTS7/mE0v/5lNLv+YTS7/mE0v/5lNL/+ZTS7/ + mU0u/5hNLv+ZTC7/mUwu/5hMLf+YSy3/mEst/5hLLf+XSy3/kUsw/3ZCLP+elI//5+TV/7Osrf/Rysz/ + 2dbX/zAwMZkAAAA0AAAAGgAAAAoAAAADAAAAAQAAAAAjIyNSxcLC/9nU1P/Cvb7/7+zh/6qblf+kYEX/ + wHda/75iPv+8YT7/vGE+/7xhPf+6YDz/umA8/7pgPP+5YDz/uGA7/7dfO/+3Xzv/t187/7deOv+2Xjr/ + tV06/7RdOv+0XTr/tF05/7JcOf+yWzn/sVs4/7FbOP+wWzj/r1o3/65aN/+vWTf/rlo4/6tVM/+mTCf/ + o0Yg/6NGIP+iRiD/oUYg/6BFIP+gRR//oEUf/59EH/+fRB//nkQe/51EHv+cRB7/nEQe/5xDHv+cQx// + m0Mf/5tEIP+ZPxn/olY3/7Wppv+wrrD/r6mp/6+pqf+vqan/r6mp/6+pqf+uqan/rqmp/6+pqf+vqan/ + saqr/7KsrP+0rq7/t7Gx/7u2tv++uLn/w76+/+jn6P/j3tv/dk09/2YrEv+KQyb/l0oq/5hLKv+XSyv/ + mEsr/5hLLP+YTCv/l0ws/5dMLP+XTCz/mEwu/5hMLf+XTC3/l0wt/5hMLf+XTC3/l0wt/5dMLf+XSy3/ + l0wt/5dMLf+XTC3/l0wt/5dMLf+XTC3/l0wt/5hLLf+YSy3/mEst/5hLLP+YSyz/mEss/5dLLP+YSyz/ + mEst/5dLLP+RSzD/dUEs/52Tj//n49b/s66s/9DJyv/Y1tj/MDAxmQAAADMAAAAaAAAACgAAAAMAAAAA + AAAAACQjI1HGw8P/2tXU/8O+vv/u7eH/q5uV/6VhRv/CeFv/v2RB/75iPv+9Yj7/vWI+/7xhPf+7YT3/ + u2A9/7pgPf+5YDz/uGA8/7hgPP+3YDv/t147/7deO/+2Xjr/tl46/7RdOv+0XTr/tFw6/7NcOv+yXDr/ + sVs5/7FbOf+wWjj/sFo4/69aOP+uWTf/rlk4/61ZNv+pUi7/pUkk/6NFH/+iRiD/okUg/6FFIP+gRR// + oEUg/6BFH/+eRB//nkQe/51EHv+dRB//nEMf/51DH/+cQx//nEMg/5tEH/+ZPhf/pWFE/7Wrqf+wrrD/ + r6io/6+pqf+vqan/r6mp/66pqf+uqKj/rqmp/6+pqf+vqqr/says/7Surv+3sbH/u7W2/7+6uf/Cvb3/ + xsHA/+np6v/l4N7/dEs5/2gsE/+LRCb/l0op/5hKKf+XSir/mEsq/5dKKv+XSir/l0or/5dLK/+WSyz/ + lksr/5ZLK/+WSyv/l0sr/5dLLP+WSyv/lkss/5dLLP+XSyz/lkor/5ZLLP+WSiz/lkss/5ZLLP+WSyv/ + lkor/5ZKK/+WSir/lkor/5ZKK/+WSiv/l0or/5dLLP+XSyv/lksr/49LL/90QCv/nJKO/+Xh0v+yq6v/ + 0cvL/9jW1v8wMDCYAAAAMgAAABoAAAAKAAAAAwAAAAAAAAAAJCMkTMbDxP/c1tX/w76//+7s4v+tnZj/ + pmJH/8J6Xv/AZ0T/v2I//75iP/++Yj7/vWI+/7xhPf+7YT3/u2A9/7pgPf+6YDz/uWA8/7hgPP+4Xzv/ + t187/7dfO/+3Xzr/tl46/7VdOv+1XTr/s1w6/7NdOv+zXDr/sls5/7JbOf+xWzj/sFs4/69aOP+uWTf/ + rlk3/65aOP+sVzX/qE8s/6RII/+iRh//okYg/6JGIP+hRSD/oEUf/6BFH/+fRB//n0Qf/55EHv+dRB// + nUMf/5xDH/+dQx//nEMf/5tEIP+ZPBb/pWBD/7appv+ysLL/r6mp/6+pqf+vqan/rqmp/6+pqf+vqan/ + r6mp/6+qqv+yrKz/tK6u/7eysv+7tbX/v7m5/8O+vv/GwcH/ysXF//Dw8f/d1NH/ajso/28wFv+ORSX/ + l0ko/5dJKP+XSSj/lkkp/5ZJKf+XSSn/lkkp/5ZJKf+WSir/lkoq/5ZJKv+WSir/lUkq/5ZJKf+WSir/ + lkoq/5VJKv+VSSr/lUkq/5VJKf+VSSr/lUkq/5ZJKv+WSSr/lkkq/5ZKKv+WSir/lkor/5ZKK/+WSiv/ + lkor/5ZKK/+WSiv/jkou/3NBLf+elZH/5N7R/7KrrP/Sy8z/1tXW/y8vL5UAAAAxAAAAGQAAAAkAAAAD + AAAAAAAAAAAjIiNGx8TE/93X1//EwMD/7uvh/66fm/+nY0n/wntf/8JrSP/AY0D/v2I//79jP/++Yj7/ + vmE+/7xhPf+8YT3/vGA9/7tgPP+6YDz/umA8/7lgPP+4YDz/t187/7dfO/+3Xzr/tl46/7ZdOv+1Xjr/ + tF06/7RdOv+zXDr/s1w5/7JcOf+xWzn/sFs4/7BaOP+vWjj/rlo3/65aOP+tWTj/q1Yz/6dOKv+jSCL/ + okYg/6JGIP+hRiD/oEUf/6BFH/+fRB//n0Qe/55EHv+dRR//nUUf/51DH/+cRB//nEQg/5xEIP+aPhf/ + pFc3/7Oel/+zs7X/rqmp/6+pqf+vqan/r6mp/6+pqf+vqan/saur/7OtrP+1sLD/uLKy/7y2tv+/urr/ + w7+//8jDw//Lxsb/0MvL//f4+f/OwLv/YCwW/3c3G/+SRiX/l0gn/5ZIJ/+WSCf/lkgn/5ZJKP+WSSj/ + lkgo/5ZJKP+VSCj/lUgp/5VJKf+VSCj/lUgo/5VIKP+VSCj/lEgp/5VJKf+VSCj/lUgp/5RIKf+USCn/ + lEgp/5VIKf+VSCn/lUgp/5ZJKv+WSSr/lkkq/5ZJKv+WSir/lkor/5VKK/+NSi//ckIv/6CYlv/g3M3/ + sqqq/9TNz//U1NX/LC0tjwAAAC8AAAAYAAAACQAAAAMAAAAAAAAAACIiIjzGxMT43tra/8TAwP/t6d// + saSg/6dkSv/Ce2D/xG5N/8BkQP/AZD//wGM//79iP/+/Yj7/vmI+/71iPv+8YT3/u2E+/7tgPf+7YDz/ + umA8/7lgPP+4Xzv/t187/7dfO/+3Xzv/t186/7ZeOv+2XTr/tV06/7RdOv+zXDn/s1w6/7NcOf+yWzn/ + sFs4/7BbOP+vWzj/r1o3/65aN/+uWTf/rlk3/6tVMv+mTir/o0ci/6JFH/+hRR//oUYg/6FFH/+gRB// + n0Qf/59FH/+eRR//nUUf/55FIP+dRCD/nEQg/5xEIP+aPhj/oE0q/7KWi/+0tLf/r6mq/6+pqf+vqan/ + r6qq/7Crq/+xrKz/s66t/7awsP+5s7P/vLe3/8C7u//EwL//ycTE/83IyP/Pysv/19PT//7///+xmpH/ + XCQM/4I9IP+VRib/lkcm/5VHJv+VRyb/lkcm/5VIJ/+VRyf/lkgn/5VHJ/+URyf/lUcn/5VHJ/+VRyj/ + lUcn/5RHJ/+USCj/lEgn/5RIKP+VSCj/lEgo/5RIKP+USCj/lEgp/5RIKf+VSCn/lEgp/5VIKf+VSCn/ + lUgp/5ZJKv+WSSr/lEkr/4tJL/9wQzH/pJ2b/9vXzP+vqar/19HR/9PR0/8pKSuHAAAAKgAAABcAAAAI + AAAAAgAAAAAAAAAAHx8fMcK/wOnf29v/x8HB/+nm3v+6rKf/p2VL/8F5Xf/FclL/wWVA/8BlQP/AZD// + wGM//79jP/+/Yj//vmI+/71iPv+9Yj7/vGA9/7xgPf+7YDz/umA8/7lgPf+5YDz/uWA8/7hgPP+4Xzv/ + t187/7deO/+2XTr/tV47/7VdOv+0XTr/tFw6/7NcOf+yXDn/sVs5/7FbOP+wWzj/r1o3/69aOP+uWjj/ + rlk4/61ZN/+rVTL/pk4q/6NHIv+iRR//okUf/6FFIP+gRSD/n0Qf/59EH/+eRR//nkUf/55EIP+eRCD/ + nUQg/5xEIP+bQBr/nkgi/7OTh/+1s7X/r6qq/6+qqf+xq6v/squs/7Osrf+0r67/t7Kx/7q1tf++uLn/ + wry9/8XAwP/KxMX/zcnJ/9LNzf/Tz8//4t/f//v6+v+HY1T/ZykP/4xBIv+XRyT/lUcl/5VGJv+VRiX/ + lUcm/5VHJf+VRyb/lUcm/5RHJv+URib/lUcn/5VHJ/+VRyf/lEcn/5RHJ/+URyf/lEcn/5NHKP+USCf/ + lEcn/5RHKP+TSCf/k0go/5RIKf+USCj/lEgp/5RIKf+VSCn/lEgp/5VIKf+TSCr/iEgv/29EM/+po6H/ + 1tLJ/6+pqf/b1df/zcvM+yUmJn4AAAAmAAAAFAAAAAcAAAACAAAAAAAAAAAdHR0jtLO02eHd3f/HwsL/ + 5+Td/8O3s/+lZUv/wHhc/8h4WP/DZUH/wmVB/8FlQP/BZED/wWRA/8BjQP/AY0D/v2M//75jP/+9Yj// + vWI//7xiP/+7YT7/u2E+/7phPf+6YD3/umA9/7pfPf+5Xzz/uF88/7dfPP+2Xjv/tl47/7VeOv+1Xjr/ + s145/7NdOv+yXDn/slw5/7FcOf+wWzj/sFo4/69aOP+uWTf/rlk3/61aOP+tWTf/q1Uz/6dOK/+kSSP/ + oUYf/6FFH/+gRSD/oEUf/59EH/+eRSD/nkUf/55FIP+eRCD/nkQg/51FIf+bQhz/nkQe/7KOfv+0tLb/ + sKur/7KsrP+zra3/tK6v/7ewsf+6s7T/u7a2/7+7uv/Ev7//yMLD/8vHx//Pysr/087O/9bS0v/X0tL/ + 8fHy/+Lb1/9nNiD/eDYZ/5NFJP+WRiT/lkYk/5ZHJf+VRib/lUcm/5VHJv+VRyX/lEcm/5VGJv+VRyb/ + lEcm/5VHJv+URyb/lEcn/5RHJ/+URyf/lEcn/5RHJ/+URyf/lEcn/5NGJ/+TRyj/lEco/5RIKP+TSCj/ + lEgo/5RIKP+USCj/lEgp/5FIKv+FSC7/a0U1/7Svq//Vzsf/rqio/9/b2//CwcLxHR4dcwAAACMAAAAR + AAAABgAAAAEAAAAAAAAAAG9wcRqRkZLF49/f/8fCwv/l49//zczI/59mUf+/dVj/y31f/8RmQf/DZkL/ + w2ZB/8NlQf/CZUH/wWVB/8FlQP/AZUD/v2Q//75kQP++Yz//vWM//71iP/+8Yj7/u2I+/7phPf+6YD3/ + umA9/7pgPf+5Xzz/uF88/7dfPP+2Xjz/tl47/7ZeO/+1Xjv/tF46/7ReOf+zXTn/sl05/7FcOf+xXDn/ + sVs5/7BaOP+vWjf/rlo3/65ZN/+uWTj/rVk4/6tXNP+oUC3/pEol/6JGIP+hRR7/oEQf/59EH/+fRSD/ + nkUg/59FIP+eRCD/nkQg/51FIf+bQhz/nkMd/7KPgv+2tbj/sq2t/7Our/+1sbH/uLKz/7y2tf++ubn/ + wby8/8XAwP/KxcX/zcjI/9DLy//U0ND/2NPT/9nV1f/e2tr//////6mQhv9iJg3/iUAh/5ZGJf+WRiT/ + lkYk/5ZGJf+VRiX/lUYm/5VGJv+VRyb/lUcm/5VHJv+URyX/lEYl/5RHJv+URyb/lEYm/5RGJv+USCf/ + lEcn/5RHJ/+TRyb/k0cn/5NHJ/+TRyf/k0Ym/5NHJ/+TRyf/k0cn/5RIJ/+USCj/kEgq/4JGLf9pSjz/ + wsG7/9DLxv+spqb/6OPk/6inqeQQERFkAAAAHgAAAA4AAAAGAAAAAQAAAAAAAAAAMzMzD3Rzc67t6Oj/ + yMLC/+Pg3//f3tf/p25Y/75xUv/NhGf/xWdC/8NnQv/DZ0L/w2ZC/8NmQv/DZkL/wmVB/8FlQf+/ZUD/ + wGRA/79jQP+/Yz//vWM//71iP/+8Yj//vGI+/7thPv+6YD3/umA9/7pgPP+5Xz3/uF88/7hfPP+4Xjz/ + tl47/7ZeO/+1Xjv/tV46/7ReOf+zXTn/s105/7JcOf+xXDn/sVs5/7BbOf+wWzj/r1o3/65aN/+tWTf/ + rVk3/61ZN/+sVzX/qVMw/6VNKP+iRyL/oUQe/6BEHv+fRR//n0Ug/55FIP+fRSD/nkQg/55FIf+cQRz/ + n0Yi/7OWi/+2trj/trCw/7izs/+7tbX/vbi4/8C7u//Ev7//yMPD/8vGxv/Pysr/087O/9bR0f/Y1NT/ + 3NfX/9zX1//t6+v/7+vq/3BALf94NBj/lEUk/5dGJf+WRiT/lkYk/5ZGJP+WRST/lUYl/5VGJf+VRyb/ + lUYm/5VGJf+VRyb/lEcl/5RHJf+URib/lEYm/5RGJv+URyb/lEcm/5RHJv+TRyf/k0cn/5NHJ/+TRyb/ + k0cm/5JGJv+SRib/kkYn/5JGJ/+PRyn/fkUt/3RYTP/QzsX/ycTC/62npv/x7e3/hoWG1AAAAFMAAAAb + AAAADAAAAAQAAAABAAAAAAAAAAAdHh4BZWNjkvHs7P/Nycn/2tfV/+Pi2f+vdV7/umxP/9KMcf/Ia0f/ + xWdC/8RnQv/DZ0L/w2dC/8NmQv/DZUH/wmVB/8JlQf/BZED/wGRA/8BkQP++Yz//vmM//71iP/+8Yj// + vGI+/7xiPv+7YT3/umE9/7phPf+6YDz/uWA9/7lgPP+3Xjv/t187/7deO/+1Xjv/tV47/7ReOv+0Xjr/ + s106/7JdOf+xXTn/slw5/7FcOf+wWzn/sFs4/69aN/+tWjf/rVk3/61ZN/+tWTf/rFg2/6pVM/+nUC3/ + o0om/6FGIP+gRR//n0Uf/59FIP+fRSD/nkQg/55FIP+cQBr/oU4t/7ippf+6t7j/urW1/724uP/Aurv/ + w76+/8fCwv/Lxsb/zsnJ/9HMzP/V0ND/19PT/9rV1f/d2Nj/3tra/+Dc3P//////qpCG/2YmDP+NQSH/ + l0Yk/5ZGJP+WRyT/lkYk/5ZFJP+VRiT/lkYk/5VGJf+VRiX/lUYl/5VGJv+VRiX/lUcl/5RGJf+URiX/ + lEYl/5RGJv+TRib/k0cm/5NGJv+TRib/k0Ym/5NHJv+SRiX/k0Ym/5JGJv+SRib/kUYm/4xGKP94Qyz/ + fWVa/9DNwv/Burr/tKyu//Tw8P91dXXEAAAARAAAABcAAAALAAAABAAAAAAAAAAAAAAAAAAAAABaWVpu + 5uLi/9XQ0P/Uz8//7+7l/6mCdP+5aUr/0Ipw/8t1VP/GZ0P/xWdC/8RnQv/EZ0L/w2dC/8NmQv/DZkL/ + w2VB/8JmQf/BZUD/wGRB/8BkQP+/ZED/v2NA/75jP/+9Yz7/vWM+/7xhPv+7Yj7/umE+/7phPf+6YD3/ + umA9/7lgPf+4Xzz/t147/7deO/+2Xjv/tV46/7VeO/+0Xjr/tF06/7JeOf+zXTn/sVw5/7FcOf+xWzn/ + sVw5/7BbOP+vWjj/rlo4/65ZN/+tWDf/rFg2/6xZN/+rVzX/qVQy/6ZPK/+jSib/oEYh/59FH/+fRB// + n0Qg/55FIP+cPhf/rG1W/767vP++ubn/wbu7/8O+vv/GwcH/ycTE/83IyP/Qy8z/1M/P/9bS0v/Z1dX/ + 29fX/97a2f/g29v/39vb//Hw8f/j3Nr/aDMc/4I6HP+XRST/l0Yj/5ZFJP+WRiT/lkYk/5VGJP+WRiT/ + lUYk/5VFJP+URiT/lUYk/5RGJf+VRiX/lEYl/5RGJf+URiX/lEYl/5RGJf+TRiX/k0Ym/5NGJf+TRib/ + kkUl/5NFJf+SRSX/kkYm/5JGJf+RRib/ikYp/3E/Kv+GeHP/19PF/7mysv+7t7b/7uvr/19eXq0AAAA4 + AAAAEwAAAAkAAAADAAAAAAAAAAAAAAAAAAAAADIyMkvT0ND/4t7e/83IyP/39uz/tJ6W/7poSf/Nhmv/ + z4Fj/8dnQ//GZ0L/xmdC/8VnQv/FZ0L/xGdC/8NnQv/DZkL/w2ZC/8JmQf/CZUH/wWVA/8BlQf/AZED/ + v2Q//75jP/++Yz//vWM//7xiPv+7Yj7/umI+/7pgPf+6YT3/umA9/7lgPf+5Xzz/uF87/7dfO/+3Xjv/ + tl47/7VeO/+1Xjr/tF45/7RdOf+yXTn/sl05/7FcOf+xXDn/sVw5/7BbOf+vWjj/r1o4/65ZOP+tWTb/ + rVg2/61XNv+sWDb/rFg2/6pXNf+oVDL/pVEu/6JMKP+gSCT/n0Ug/55DHv+gRSH/u6Sc/8G/wf/Dvr7/ + xsHB/8nFxP/NyMj/0MvL/9POzv/W0dH/2NPT/9rX1//c2dn/39rb/+Hd3f/h3d3/5uPj//39/f+NaFn/ + cy0R/5VEIv+YRiT/l0Uj/5dFJP+XRSP/lkUk/5ZGJP+WRiT/lUYk/5ZGJP+VRST/lUUk/5RGJP+VRiX/ + lEYl/5RGJf+URSX/lEUl/5NGJf+TRiX/k0Yk/5NGJf+TRST/k0Uk/5JFJf+SRSX/kkUk/5BFJv+HRSr/ + bUAs/5yVk//Z1cj/r6mq/8vGxv/a2dn/NDQ0kQAAACgAAAATAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAA + MzU1K8G+v+rp5OT/y8fH//Ht5//AtbL/sWZJ/8yBZP/WkXb/yGhD/8hoQ//HZ0P/xmdC/8ZnQ//FZ0L/ + xGdC/8NnQv/DZ0L/w2ZC/8NmQv/CZUH/wWVB/8FlQP/AZUD/wGQ//79jQP+9Y0D/vmI+/71iPv+7Yj7/ + u2E+/7phPv+6YT3/umE9/7pgPf+5Xzz/uF88/7hfPP+3Xjv/t147/7VeOv+1Xjr/tF46/7ReOv+zXTr/ + sl05/7FdOf+xXDn/sVs5/7BcOf+wWzn/sFo4/69aOP+tWTf/rlg3/6xYNv+sWDb/rFg2/6tXNv+rWDb/ + qVc2/6hWM/+lUi//pE4r/55BHP+0gGz/ysnL/8fCwv/JxMT/y8bH/8/Kyv/Szc3/1NDQ/9fT0//a1tb/ + 3djY/97a2v/g3Nz/4t7e/+Pf3//i3t7//f///7aflv9pKA3/kEEg/5hFI/+XRSP/l0Uj/5dFI/+XRSP/ + lkUj/5ZFI/+WRiT/lkYk/5VGJP+VRSP/lUUk/5VGJP+URST/lEUk/5RGJf+URiT/lEUl/5RFJf+TRSX/ + k0Uk/5NFJP+SRSX/kkUk/5JFJP+SRST/jkUm/4JEKv9nRDT/rKmn/8/Jw/+spqX/3NbW/8vJyvkiIiN3 + AAAAHgAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAABoZ2gXlZOUxO7p6f/Lx8f/7Ojm/9bV0P+ybFD/ + yHhY/92jjf/Lbkv/yWlD/8hpQ//HaEP/x2dD/8ZnQv/FZ0L/xWdC/8RnQv/EZ0L/w2dC/8NmQv/CZkL/ + wmZB/8FlQf/BZUD/wGVA/79kQP+/Yz//vmM//71jP/+9Yj//vGE+/7tiPv+6YT7/umA9/7pgPf+5YD3/ + uV88/7hfPP+4Xjv/t147/7ZeO/+1Xjv/tV46/7ReOv+zXjn/s106/7JdOf+xXTn/sVw5/7FcOf+xWzn/ + sFs4/69bOP+vWjj/rlk3/61ZN/+tWDb/q1c2/6tXNv+rVzX/qlc2/6lYNv+pWDb/p1Iw/7NuVP/Y09P/ + 2NXV/9bT0//V0ND/1dDQ/9XQ0P/X0tL/2dXV/9vX1//e2dn/39vb/+Hd3f/i3t7/49/f/+Pe3v/z8/T/ + 3NLO/200HP+LPh3/mUYj/5dFI/+XRSP/l0Uj/5dFI/+WRSP/lkUj/5ZFI/+WRSP/lkUj/5ZFI/+VRiT/ + lUYk/5REJP+URCP/lEUk/5RFI/+URST/lEUj/5NFJP+TRST/kkUk/5JFJf+SRST/kkQk/5JFJP+MRCb/ + fEMq/3FTR//Ewbn/ycO//6ukpP/o5OX/paSl4A0NDlsAAAAXAAAADAAAAAQAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAABtbWyY9fLy/9HOzv/f29z/6urh/6l2Yv/HcE//256H/9OBYv/KaUT/yWlE/8lpRP/IaEP/ + x2hD/8ZoQ//FaEL/xWdC/8VnQv/EZ0L/w2ZC/8NmQv/DZkL/wmVB/8FlQf/BZUH/wGVA/8BkQP+/Y0D/ + vmM//71jP/+9Yz//vGI//7tiPv+7YT3/umE9/7phPf+6YD3/uV89/7lfPP+4Xzz/t148/7deO/+2Xjr/ + tl47/7ReOv+0Xjr/s145/7JdOv+yXTn/sVw5/7FcOf+xXDn/sFs5/7BbOf+vWjj/rlo4/61ZN/+sWDb/ + rFg2/6xXNv+rVzX/qlc2/6pXNv+pVTP/rF4+/9jOy//f3t7/4N3d/+Hd3f/i3t7/4t7e/+He3v/h3d3/ + 4Nzc/+Hd3f/h3d3/4t7e/+Pf3//k39//5N/f/+3q6//w7Or/cDsk/4U6Gv+YRSL/mUUi/5hFIv+XRSP/ + l0Qj/5ZEI/+XRSL/lkUj/5ZFI/+WRCP/lkQi/5ZFI/+VRSP/lUUj/5VFI/+URSP/k0Uj/5NEI/+TRCP/ + k0Qj/5JEI/+TRCP/kkUj/5JEI/+SRCP/kEMi/4pEJ/90Pyn/fWxm/8/Nvv+8tbT/ta2t//Pv8P9yc3TE + AAAAPwAAABQAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNTVWbl4uP/39vb/9PQ0P/5+O3/ + sZWL/8ZtS//Xk3n/2pl//8tqRf/KakX/yWlE/8hpRP/IaUP/x2hD/8doQ//GaEL/xWdC/8VnQv/DZ0L/ + w2dC/8NnQv/DZkL/w2VC/8JlQf/CZUH/wGRB/8BkQP/AY0D/vmRA/75jP/++Yj//vWI+/7xiPv+7YT7/ + u2E+/7thPv+6YT3/umA9/7lfPP+4Xzz/uV88/7hfO/+3Xjv/tl47/7VeO/+0Xjr/tF46/7NdOf+yXTn/ + sV05/7FcOf+xWzn/sVw5/7BbOf+vWjn/r1o4/65ZN/+tWDb/rVg2/6xXNf+rVzX/q1c1/6pVM/+sXT3/ + 2c3I/+Lh4v/i39//4+Dg/+Xi4v/m4+P/5+Tk/+jl5f/p5eX/6ebm/+nm5v/o5eX/6OTk/+fk5P/n4uL/ + 6ebm//f29v+EV0T/gDYX/5lFI/+ZRSP/mEUi/5hFIv+YRSL/l0Qi/5ZEIv+WRCL/lkQi/5ZDIv+VQyL/ + lUQi/5VEIv+VRCL/lUQi/5REIf+URCL/lEQj/5NEI/+TRCP/kkQk/5JFJP+TRCX/k0Ul/5NGJ/+RRyj/ + iUgu/25BLv+TjIv/08/C/7Grq//Evr//6ujq/1FRUZ4AAAAsAAAAEQAAAAgAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAISEhNMzKye7v7Oz/z8rL//Xy7v/IvLf/vGtM/9GGaf/ltaP/zW1I/8xqRf/LakX/ + ympE/8lpQ//JaUP/yWhD/8hoQ//HaEP/xmdD/8VnQv/FZ0L/xGdC/8RnQv/DZkL/w2ZC/8NmQf/CZUH/ + wWVB/8FkQf/AZED/v2M//79kP/++Yz//vWM//7xiP/+8YT7/u2E+/7phPf+6YD3/umA9/7pgPP+3Xzz/ + tl47/7hfO/+3Xjv/tl47/7VeO/+1Xjr/tF46/7NeOf+zXTn/sl05/7FcOf+xXDn/sVw5/7BbOf+wWzn/ + r1s4/65aN/+tWTf/rVk2/6xYNv+sVzX/q1Uz/61cO//bzsv/5eTl/+Ti4v/l4uL/5+Tk/+jl5f/o5eX/ + 6Obm/+rn5//q6Oj/6+jo/+vo6P/r6Oj/6+jo/+vo6P/s6en//P39/558bv+CPSD/n1Ex/59QMP+eTy// + nU8t/5xNLP+bTSz/m0wq/5tMKv+aSyr/mUsq/5lLKv+YSir/mUsq/5hKKv+YSir/mEsr/5hLLP+YTCz/ + mEwt/5hNLv+YTi7/mE8v/5lPMP+ZTzH/mFAx/5VQM/+GTTT/bk0//6+tqf/NyMH/q6Sk/97Z2v/S0NL9 + ICEgdQAAABoAAAAOAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkWpaOkvvXx8f/Szcz/ + 6+fn/+Pi3P+8b1P/zHZV/+W5p//XjG//zGpF/8xqRf/LakX/ympF/8ppRP/JaET/yWhE/8hpQ//HaEP/ + xmhD/8ZnQv/GZ0L/xGdC/8RnQv/DZ0L/w2ZC/8NmQv/CZUH/wmVB/8FkQf/AZEH/wGRA/79jP/++Yz// + vmM//71jP/+8Yj7/u2I+/7tiPv+6YDz/r1Ux/5pIKP+XSiz/plU2/7NcOv+3Xzv/t147/7ZeO/+2Xjv/ + tV46/7NeOv+zXjr/s106/7JcOf+xXDn/sVw5/7FcOf+xWzn/r1o5/69aOP+uWjj/rlk3/6xYNv+rVTL/ + rmFC/+DY1v/n5uf/5uPj/+fl5f/p5ub/6efn/+rn5//q6Oj/6ujo/+vp6f/r6en/7Onp/+vo6P/r6Oj/ + 6+jo/+zp6f/8/v//p4h7/4M+If+iVTX/o1Y1/6JVNf+iVTX/olU1/6FVNf+hVTT/oFQ0/6BUNP+gVDT/ + n1Q0/59UNP+dVDP/nVM0/51TNP+dUzT/nVM0/5xTM/+cUjL/nFIz/5tSMv+bUjL/mlAy/5lQMf+YUTH/ + k1A0/4FNOP98ZFn/xsG4/8K7uf+tpqb/7+rs/6imqN4JCQlUAAAAFgAAAAsAAAAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABlZWWB9vT0/9vZ1//a1tf/+fnv/6uKf//NdFL/36ON/+Sxnv/Ma0b/ + zGtF/8xqRf/MakX/y2pF/8pqRf/JaUT/yWlE/8hoRP/IaEP/x2hD/8dnQ//FZ0P/xWdC/8RnQv/EZ0L/ + w2ZC/8NmQf/DZUH/wmVB/8FlQf/AZUH/wGRA/8BkQP++Y0D/vmM//71jP/+9Yj//vGI9/7phP/+9iXT/ + spGD/4taR/98PCL/lUsu/6xaOP+2Xjv/uF88/7deO/+2Xjv/tV47/7ReOv+0Xjr/s1w6/7JcOf+xXDn/ + sVw5/7FcOf+wWzn/sFo5/69aOf+vWjj/rlo4/6lPK/+7hG7/6enq/+nm5v/p5ub/6ufn/+ro6P/r6Oj/ + 6+np/+zp6f/s6en/7Onp/+zp6f/s6en/7Orq/+vp6f/r6Oj/7Onp//z+//+nh3n/hD4h/6NUNP+kVTX/ + olU0/6FVNP+hVTT/oVU0/6FUNf+gUzT/n1Qz/59UM/+fVDP/n1Mz/55UM/+eVDL/nVMz/51SMv+dUjL/ + nFIy/5xRMf+cUTL/m1Ey/5tRMf+aUDH/mlAx/5hQMv+RUDX/d0o2/42FhP/Oyb3/tK2t/7y0tv/18vP/ + bGxttwAAADIAAAASAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OEHY19f8 + 7+vr/9HMzv/59/L/v7q4/8JvUP/XjXD/8trR/9J8Wv/MbEb/zGtG/8xqRv/MakX/zGpF/8pqRP/KakT/ + ymlE/8loRP/HaET/x2dD/8dnQ//GZ0P/xWdD/8VnQv/EZ0L/w2dC/8NmQv/DZkL/wmZC/8JmQf/BZUH/ + wWRA/8BkQP+/Yz//v2NA/71iP/+7XDb/y494/+fp7P/q7e7/3djX/62SiP93Pij/gz4j/55RMv+vWzn/ + tl87/7hfPP+2Xjv/tl47/7VeOv+0Xjr/s106/7JdOv+yXTn/sVw5/7FcOf+xWzn/sFs5/7BbOf+vWDb/ + pVMy/9W+tv/t7u//6ufn/+vp6f/r6Oj/7Orq/+zq6v/s6ur/7erq/+zq6v/s6en/7erq/+zp6f/s6en/ + 7Onp/+vo6P/s6en//f///6mIev+GQCH/o1Y1/6RVNf+iVDP/o1U0/6JVNP+iVTT/oVU0/6BUNP+fVDP/ + n1Mz/59TM/+fUzP/n1My/55UMv+eUzL/nVMy/51TMv+dUjL/nFEx/5xRMf+bUTH/m1Ex/5pRMf+aUDH/ + l1Az/4pPN/9xT0H/rKum/8rEvv+qpKT/2NTU/93c3f80NTWEAAAAHAAAAA4AAAAGAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmFaenqcD89/f/1M/P/+vn5//n59//snVd/9Z/XP/pvq7/ + 4qeR/85sRv/Oa0f/zGtG/8xrRf/MakX/y2pF/8tqRf/LakT/yWlE/8loRP/JaEP/yGhD/8doQ//GZ0P/ + xmdC/8VnQv/FZ0L/xGdC/8NnQv/DZkL/wmZC/8JmQf/BZUH/wWVA/8BkQf+/Y0D/v2RA/7taM//TpZT/ + 6u7x/+Xj4//n5+f/6urs/87Cvv+Ua1z/eDsj/4U/I/+cTzD/q1g4/7NdOv+2Xjv/tl86/7VfO/+1Xjv/ + tV46/7RdOv+zXTr/sl05/7JcOf+yXDr/rlg1/55KKP++l4f/7vDx/+zp6f/s6ur/7Orq/+zq6v/t6ur/ + 7evr/+3r6//t6+v/7evr/+3q6v/t6ur/7Onp/+zp6f/r6en/6+jo/+zp6v/7/P3/n3lp/41FJf+kVjT/ + pFY0/6NVM/+jVDP/olQz/6JUNP+iVDT/oVQ0/6BTM/+fUzP/n1Mz/59TM/+fUzP/n1Iy/55TMf+eUzH/ + nVMy/51TMf+dUjH/nFEx/5xRMf+cUTH/m1Ex/5lQMf+TTzP/gUw2/3xpYv/Hwbf/v7m3/62lpf/u6uv/ + rKqq3w0NDVUAAAAVAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + YmBifPr4+f/i39//2dbW//779P+snJf/zHhX/+CehP/x08j/0HBL/85sR//NbEb/zWtG/8xrRv/Ma0b/ + zGtF/8trRf/La0T/ympF/8lqRf/JaUT/yGlE/8doQ//HaET/xmhD/8VnQ//FZ0P/xWdC/8RnQ//DZkL/ + wmZC/8NlQf/CZUH/wWVB/8BkQP/AZED/vFs0/9SmlP/s8fL/6Obm/+fl5f/o5eX/6+vs/+no6P/GtbD/ + mXFj/31DLf9/OyD/jkQn/55PMf+nVTX/rVk3/7BcOf+yXDn/s105/7JdOf+vWzj/q1g1/59NK/+VSy3/ + uZOE/+zr6//u7e3/7erq/+3r6//t6+v/7evr/+3r6//t7Oz/7uzs/+7r6//t6+v/7erq/+3q6v/s6ur/ + 7Onp/+ro6P/p5+f/7evr//f29v+OXEj/lkoq/6dWNP+lVjT/pFY0/6NUM/+jVDP/olQz/6JUNP+iVDT/ + olQz/6BTMv+fUzP/n1My/59TMv+fUjL/n1Iy/55SMf+eUjH/nVIx/51SMf+cUTH/nFAx/5xRMf+cUDH/ + mVEy/49QNf90Szr/k4+Q/8zGu/+xq6r/vLW4//Lu8P9mZmewAAAALAAAABEAAAAIAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvMS811dPU8ff09P/X0tH/+/n4/9bV0f/EclT/ + 2IRl/+7Lv//gn4b/z25I/85tR//ObEf/zm1H/81sRv/NbEb/zGxG/8xsRv/La0b/ymtG/8pqRf/KakX/ + yWpF/8hpRP/IaUT/x2hE/8ZoRP/GaEP/xmhD/8VnQ//FZ0P/xGZC/8NmQv/DZUL/wmVB/8FlQf+9WzT/ + 16eV/+/z9f/r6Oj/6ujo/+ro6P/p5+f/6ujo/+/v8P/s7O3/183K/7GXjf+WbFz/gEgy/4JEK/+EQCT/ + hj0g/4pBI/+NQiP/jEEi/41EJ/+NSzD/oHBc/8+9t//x8vP/7+7v/+7s7P/u7Oz/7uzs/+7s7P/u7Oz/ + 7+zs/+/s7P/u7Oz/7uzs/+7r6//t6ur/7erq/+zp6f/r6en/6ufn/+jm5v/x7/D/8Ozr/4VJMf+dTy// + p1Y0/6VVNP+kVTT/pVUy/6RUMv+jVDP/o1Qz/6JUM/+iVDP/oVMy/6BTMf+gUjL/n1Ix/59SMv+fUjL/ + nlIx/55SMf+dUjH/nVIx/5xSMf+dUDH/nFAx/5tQMf+WUDT/iFA5/3lbT/+5tq3/xb66/6miov/b1Nb/ + 0M/P/SYnJ3UAAAAXAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAA4ODwSNjY2o/////+Th3//s6ur//f32/7OOgv/YgmL/4aWN//DPwv/Qb0r/z25I/89uSP/Pbkj/ + z21I/85tSP/NbEf/zWxH/8xsR//La0b/y2pF/8tqRf/KakX/yWpE/8lqRf/IaUT/x2lE/8ZoRP/GaET/ + xmhD/8ZoQ//EZ0L/xGZC/8RmQv/DZUL/wmVC/75bNf/YqJf/8fX4/+3r6//t6+v/7Orq/+zq6v/s6ur/ + 7Onp/+zq6v/v7+//8vT1/+3r7P/f2dj/z8G8/7ukm/+ukIX/qop+/6uJff+tjoL/v6ed/9rPzP/u7u7/ + 9PT2/+/t7f/v7Oz/7+3t/+/t7f/v7e3/7+3t/+/t7f/v7e3/7+3t/+7s7P/u7Oz/7evr/+3q6v/s6ur/ + 6+np/+vn5//q5+f/5+Tk//f4+f/c0Mv/ikgs/6NSMf+nVTX/pVU0/6VVNP+lVTT/pVQz/6VUMv+kVDL/ + o1Qy/6NUMv+iVDL/oVMy/6BSMf+gUjH/n1Ix/59SMv+fUjL/n1Iw/55SMf+dUjD/nVIx/5xRMf+cUDD/ + mlAy/5JRNv98TDn/jIOB/8vFt/+0rq//sqqr/+7q6/+Hh4nKAAAAPgAAABMAAAAJAAAAAwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFQUVvv7e//+vj4/+Xj4v////// + zMjE/8l2V//cimr/78zA/+GhiP/Qbkn/z25J/89uSP/Pbkj/z25I/85tR//ObUf/zmxH/8xrRv/MbEb/ + y2xG/8trRv/La0b/yWpF/8lqRP/IakT/yGlE/8dpRP/GaUT/xmhD/8ZoQ//FZ0L/xWZC/8NnQv/DZkL/ + v1s2/9mqmP/z9/r/7+3t/+7s7P/u6+v/7uzs/+7s7P/u7Oz/7uzs/+7r6//u7Oz/7u3t//Dw8P/z8/T/ + 9ff4//b4+v/19vf/9Pb3//b4+v/3+Pn/8/P0//Hv8P/w7u7/8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/ + 8O3t/+/t7f/v7e3/7uzs/+7s7P/t6+v/7erq/+zp6f/r6Oj/6ufn/+jm5v/n5OT//////7qbjv+NQCD/ + qFU0/6hVNP+nVTT/plU0/6VVNP+lVTT/pVQz/6VTM/+kVDL/pFQy/6NUMf+jVDL/oVMx/6BSMf+gUjH/ + oFIx/6BSMf+fUTD/n1Ew/55RMP+eUTD/nVEw/5tQMP+YUTP/jFI5/3dXSP+wrab/yMC7/6qkpP/Lxsf/ + 4t/g/0FAQI0AAAAZAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAKSgpFKqrqsD/////7uzs//r5+f/8/fb/sIt+/96MbP/io4v/8dPH/9R2Uv/Qbkn/ + 0G5I/9BuSf/Pbkj/z21I/89tR//ObEf/zWxH/81sRv/MbEb/zGxG/8trRv/Kakb/ympF/8lqRf/JakT/ + yGlE/8hpRP/GaET/xmhD/8ZoQ//GZ0P/xWdC/8RnQv/AXTb/26uZ//T4+//w7u7/8O7u//Du7v/w7u7/ + 8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/8e/v//Hv7//x7+//8e/v//Hv7//x7+// + 8e/v//Hv7//x7+//8e/v//Hv7//x7+//8e7u//Du7v/w7u7/8O3t/+7s7P/u7Oz/7uvr/+3q6v/s6ur/ + 6+jo/+rn5//p5ub/5uPj/+zq6v/7+/v/m2dS/5xNKv+pVzT/qFY0/6dVNP+nVTT/p1U0/6ZVNP+lVDP/ + pVMz/6RTM/+kVDP/pFMy/6RTMf+jUzH/olMx/6FSMf+gUjH/oFIx/59RMf+fUTH/n1Ew/59RMP+eUTD/ + m1Ax/5RSNf9/TDb/in9+/8fEtv+3sbH/rqen/+nl4/+mpqbeBwcHSgAAABQAAAAKAAAAAwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcZ/z9/v////// + 8O/v///////LxsT/0X9g/9+Ob//swrP/5auV/9JvSv/Sbkn/0W5J/9BuSf/Pbkj/z25I/89tSP/ObUj/ + zm1H/81sRv/MbEf/zGxH/8trRv/La0b/ympF/8pqRf/JakX/yWlE/8dpRP/HaUT/xmhE/8ZoRP/GZ0P/ + xmhC/8FdNv/crJr/9fr9//Hv7//x7+//8e/v//Hv7//x7+//8e/v//Hv7//x7+//8e/v//Hw8P/x8PD/ + 8u/v//Lv7//y8PD/8vDw//Lw8P/y8PD/8vDw//Lw8P/y8PD/8vDw//Lw8P/y8PD/8fDw//Hv7//x7u7/ + 8O7u/+/t7f/v7e3/7+zs/+7s7P/s6+v/7Orq/+vp6f/q5+f/6efn/+jl5f/l4uH/+fr7/93Oyf+QRyn/ + p1Uy/6lXNP+pVjT/qFY0/6hWM/+nVjT/p1U0/6ZVM/+lVDL/pVMy/6VUM/+kUzP/o1Mz/6RTMv+jUzH/ + oVIx/6BSMf+gUjH/oFIx/6BSMP+fUTD/n1Ew/51RMP+aUjP/jlE3/3pWR/+wrKb/xb+7/6ulpf/IwsL/ + 5+Xm/1JSVJ0AAAAcAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDIYtLS2yf/////5+Pj///////399/+tl5H/3JF1/+GZfv/14Nf/ + 2odo/9JuSv/Sbkn/0W5J/9FuSP/Qbkn/z25I/89tSP/PbUj/zm1I/85tSP/ObEf/zWxG/8xsRv/La0b/ + ymtG/8prRf/JakX/yWpF/8hqRf/IaUT/x2hE/8ZoRP/GaEP/wl02/92um//3+/7/8vDw//Lx8f/y8fH/ + 8vDw//Lx8f/y8fH/8vHx//Lx8f/y8fH/8/Hx//Px8f/z8vL/8/Ly//Px8f/z8fH/8/Hx//Px8f/y8vL/ + 8/Hx//Px8f/z8fH/8vHx//Lw8P/x8PD/8e/v//Hv7//w7u7/7+3t/+/t7f/u7Oz/7evr/+zq6v/r6en/ + 6ujo/+nm5v/n5OT/5eLi/+ro6P/+////rX5r/55KKP+rVzX/qVY0/6lWNP+pVjT/qFY0/6dWM/+nVjP/ + p1Uz/6ZVM/+lVDL/pVMy/6VTMv+kUzL/o1My/6NSMv+iUjH/oVIx/6BSMf+gUjH/oFIx/59RMP+gUS// + nVEw/5ZTNv9+TDb/jIWG/8nCtf+3sLD/rqam/+nj4/+vrrHjDA0NUAAAABMAAAAKAAAAAwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcXF1l + ///////////6/Pv//////9fX0/++hG7/5pd5/+ewnP/svq3/029K/9JvSv/Sb0r/0W9J/9FuSf/Qbkn/ + z21J/89uSP/Pbkj/z21I/85tSP/ObEf/zWxH/81sR//Ma0b/y2tG/8prRv/KakX/yWpF/8hqRf/IaUT/ + x2lE/8dpRP/DXjf/3q+d//j9///z8vL/8/Ly//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/ + 9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/z8vL/8/Ly//Px8f/y8fH/8vDw//Lw8P/x7+// + 8e/v//Du7v/v7e3/7+zs/+3r6//s6ur/7Onp/+ro6P/p5ub/5+Xl/+Xj4//j4OD//P3+/9fCuf+YSir/ + rFY0/6xYNv+qVzT/qVY0/6lWM/+pVjP/qVYz/6hWM/+mVjP/p1Y0/6VVMv+lVDL/pVMy/6VTMv+kUzL/ + pFIy/6NSMv+iUjH/oVIx/6BSMf+hUjH/oFEx/59RMf+aUjT/jE80/3xhWP+5tav/wru6/6qjpP/HwsH/ + 5eTk/05PTpgAAAAYAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4uLxC1tLXF/////////////////////7qqpf/Yj3T/ + 4JFz//DNwP/joYj/029K/9NvSv/Sb0r/0m5J/9FuSf/Rbkn/0G5I/89uSP/Pbkj/z21I/89tSP/ObEf/ + zWxG/81sRv/Ma0b/y2xG/8trRv/Ka0b/yWpF/8lqRf/IaUX/x2lE/8NfN//fr53/+f7///Tz8//08/P/ + 9PPz//Tz8//18/P/9fPz//Xz8//18/P/9fPz//Xz8//18/P/9PPz//Xz8//08/P/9PPz//Tz8//08/P/ + 9PLy//Ty8v/08vL/8/Hx//Px8f/y8PD/8vDw//Hv7//w7u7/8O7u/+/t7f/t7Oz/7Orq/+vp6f/q6Oj/ + 6efn/+fl5f/l4+P/4t/f//T09f/y7ez/o2FG/6dRL/+tWDf/rVg2/6xYNv+qWDT/qlc0/6lWNP+pVjT/ + qVYz/6lWM/+oVjP/plUz/6ZVMv+lVDL/pFQy/6VUMf+lUzH/pFMy/6NSMf+jUjH/olIx/6FSMf+gUjH/ + nVEy/5VSNv9+Tjr/mpaV/8nDtv+xrK3/r6qq/+rk5f+lo6TdCAcHSAAAABIAAAAJAAAAAwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAF9eX17/////////////////////7O7n/7KOgv/pnYH/4puA//Ta0P/bhmb/1G9K/9RvSv/Tb0r/ + 0m9K/9JvSf/Rbkn/0W5I/89uSP/Pbkj/z25I/89tSP/ObUj/zm1H/81sR//NbEb/y2xH/8trRv/Ka0b/ + ympG/8pqRf/IaUX/xV84/+Gwnv/6////9fPz//Xz8//19PT/9fT0//X09P/19PT/9vPz//b09P/19PT/ + 9fT0//X09P/19PT/9fT0//X09P/18/P/9fPz//Tz8//08/P/9PLy//Ty8v/z8vL/8/Hx//Lw8P/y7+// + 8e/v//Du7v/v7e3/7evr/+3q6v/s6ur/6ujo/+nn5//n5eX/5eLi/+Lf3//v7u///Pv7/7WAa/+kTSr/ + r1o4/61ZN/+tWTf/rVg3/6xYNf+rWDT/qlc0/6lWNP+pVjT/qVY0/6lWM/+oVjP/p1Uy/6ZUMv+mVDL/ + pVQy/6VUMf+lVDH/pFMx/6NSMf+iUjH/olIx/6BRMf+bUzb/iEoy/4R1dP/CvrD/vLa1/6mjo//Qycr/ + 4+Dh/0BBQokAAAAXAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fBJ6goKf///////////////////// + z83K/8WLd//nm37/562W/+3Csv/VcUr/1XBK/9RvSv/Tb0r/029K/9JuSv/Sb0n/0W5J/9BuSf/Qbkj/ + z25I/89uSP/PbUj/zm1I/85sR//NbEf/zWxG/8xrRv/Ka0b/y2tG/8pqRf/GYDn/4KuW//v////18/P/ + 9fPz//b09P/29PT/9vT0//b19f/29fX/9vT0//b09P/29fX/9fX1//X09P/19PT/9fT0//X09P/19PT/ + 9fPz//Tz8//08/P/9PLy//Py8v/y8fH/8vDw//Hv7//w7u7/7+3t/+7s7P/t6+v/7Orq/+ro6P/p5+f/ + 6OXl/+Xj4//j4eH/8fLz//z7+/++jHf/pU8r/7FbOP+wWjf/rlo4/65aN/+uWDf/rVg2/61YNv+rWDX/ + qlc0/6pXNP+pVzT/qVY0/6lWNP+oVjL/p1Qy/6dTMv+mVDH/pVQx/6VUMf+lUzH/pFMx/6JSMf+hUjL/ + nlM1/5NQNf9+XVH/sa6n/8a/uv+rpab/t7Ky/+/r6/+Ojo/IAAAAMAAAABAAAAAIAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAANDQ0NOHh4e7/////////////////////v7Cr/92UeP/hj3H/7cCv/+iumP/VcUr/ + 1HBK/9RwSv/TcEr/0nBK/9NvSv/Sbkr/0W5J/9BuSf/Pbkj/z25I/89uSP/Pbkj/z21H/85sR//ObEf/ + zWxG/8xsR//Ma0b/y2tF/8lmP//Thmf/+PLv//r8/v/29PT/9vT0//b19f/29fX/9vX1//b19f/29fX/ + 9vX1//b19f/29fX/9vX1//b19f/29PT/9fT0//X09P/18/P/9PPz//Tz8//z8vL/8/Hx//Lx8f/y8PD/ + 8e/v//Dt7f/u7e3/7evr/+zq6v/r6en/6efn/+jl5f/k4uL/5+Xl//j7/P/38vH/v4hx/6hQLP+yWzj/ + sVs4/7FbOP+wWzj/r1o4/65aN/+tWTf/rVk3/6xYNv+sWDX/rFg1/6pYNP+qVjX/qVY0/6lWNP+oVTL/ + qFQy/6dUMv+mVDH/pVMx/6VTMf+lUzH/o1Iw/6BTMv+YUzf/gk45/5uVlP/IwrX/sqyu/6ulpf/f2tr/ + zMvL+SMjJGkAAAAUAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4eJev////////// + ///////////w8ez/sp6Z/+GehP/hkXP/8tLF/+Oeg//VcUr/1XFK/9VwSv/UcEr/1G9K/9JvSv/Sbkr/ + 0m5K/9BuSf/Qbkn/z25I/89uSP/Pbkj/z21H/85tSP/ObUf/zWxH/81sR//La0b/y2tG/8pnQf/bmoH/ + +fLw//3////5+vv/9vX1//b19f/29fX/9/X1//f19f/29fX/9vX1//b19f/29fX/9vX1//b09P/29PT/ + 9fT0//Xz8//08/P/9PLy//Py8v/z8fH/8vDw//Hv7//w7u7/7+3t/+7r6//s6ur/6+np/+nn5//n5OT/ + 6OXl//Dx8v/9////6tnR/7p3XP+sUSz/tF05/7RcOv+yXDn/sVw5/7FbOP+wWzn/r1s3/69aOP+tWTf/ + rVg3/61ZNf+sWDX/q1g1/6tYNf+rVzX/qlc0/6lWNP+oVTP/p1Uy/6dUMv+nVDH/plQx/6VUMf+jUzL/ + nVQ3/4lNNP+KgIH/wr+v/721tP+po6P/xsLC/+rn5/9gYGCiAAAAGgAAAA4AAAAGAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA6OjsNra2vwP///////////fz7///////k5OD/xpSB/+ijiP/imHv/ + 9d3U/+CRc//WcUv/1XFK/9VwSv/UcEr/1G9K/9NvSv/Sbkr/0m9J/9FvSf/Rbkn/0G5J/9BuSf/Pbkj/ + z21I/89tSP/ObEf/zmxH/8xsR//MbEf/y2tF/8llPv/RfVz/6MCx//n08//+////+/3///j4+P/39vb/ + 9/X1//b19f/39fX/9vX1//b19f/29fX/9vX1//X09P/19PT/9fPz//Tz8//z8vL/8vLy//Lw8P/x8PD/ + 8O7u/+/t7f/u7Oz/7Orq/+ro6P/p5+f/6+nq//P09f/9////9e3q/9Kkkv+yXTv/slcy/7VeO/+1XTr/ + tFw6/7NcOv+yXDr/sVw5/7FbOf+xWzn/sFo4/69aN/+uWjf/rlk2/61ZNv+tWTb/rFg1/6tYNf+rVzX/ + qlc0/6pXNP+pVTP/qFUy/6dVMv+nVDL/pVQz/6BVN/+RTjL/hmtk/7m2rP/Dvbj/q6Wl/7ewsP/r6Oj/ + np2e0wQEBDoAAAAQAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NTU4 + 5OTk7f/////+/f3//fv8///////R0M//xZWF/+Wghf/jnoP/89PH/92IaP/WcUv/1nFK/9VxSv/VcEr/ + 1G9K/9NvSv/Tb0r/0m9K/9FuSf/Rbkn/0G5J/9BuSf/Pbkj/z25I/89uSP/PbUf/zm1H/81sR//NbEf/ + zGtG/8lmQP/IYz3/0Hxb/+Gumv/z4dr//Pr5///////8////+fr7//j3+P/39fX/9vX1//b09P/19PT/ + 9fT0//X09P/08/P/9PHx//Px8f/y8PD/8e/v//Du7v/v7e3/7uzs/+7t7f/w7/D/9PX2//r////8/f7/ + 8eTf/9SmlP+7a0z/tFUx/7ddOf+3Xzz/tl87/7ZeOv+1Xjr/tF06/7RdOv+zXDr/sls5/7JbOf+xWzn/ + sVs5/7BaOP+vWTf/rlk3/65ZNv+tWTX/rFk1/6xXNf+rWDX/q1g0/6pWNP+pVjP/qFYy/6dVM/+jVjb/ + l1M2/4NiV/+sqqT/x8G4/6+pqv+upaf/4t3d/9DOz/ghIiFiAAAAEwAAAAoAAAAEAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+fn9s+fn5///////29fb//Pv8///////Oycj/ + 25J3/+Wafv/lo4r/8cy+/9yCYf/Xckv/1nFL/9VwSv/VcEr/1G9K/9RvSv/Tb0r/029J/9JuSv/Sbkn/ + 0W5J/9BuSP/Qbkj/0G5I/89uSP/Pbkf/zm1H/81sR//NbEf/zGxH/8xrRv/KZ0H/x2I6/8pqRf/Thmj/ + 4rGe/+/Yz//48u///Pz8//7////+/////f////r9/v/5+/z/+Pr7//j6+v/4+fr/9/n6//f4+f/3+fr/ + +Pz9//v////8////+/7///n19P/y5eH/4Lqs/8uMc/+6Y0H/tVYx/7ldOf+6YD3/uV88/7hfPP+4Xzz/ + t187/7ZeOv+1XTr/tF06/7RcOv+zXTr/s1w5/7JcOf+yWzn/sVs4/7BbOP+wWTf/r1k2/65ZNv+tWTX/ + rVk2/6xYNf+sWDX/q1c0/6pWNP+pVjX/pVc3/5tVN/+LV0H/o6Cg/8fBs/+0rq//q6Sk/9LMzf/i4eL/ + U1RUlAAAABUAAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACMjI2Y///////////w7+3//v3+/////P/Rvrj/4Jh8/+SZfP/mp47/78i5/9yDYf/Xckv/ + 1nFL/9ZxS//WcEr/1HBK/9RwSv/Ub0r/029K/9JuSv/Sbkr/0m9J/9BuSf/Qbkn/0G5I/89uSP/PbUj/ + z21I/85tR//NbEf/zWxH/8xsR//Ma0b/y2lE/8llP//GYDj/yGpF/8txT//UjnP/3quX/+GwnP/ow7X/ + 8N3V//To4//05+P/8+fi//Pn4v/z5+L/9Ojj//Hh2//r0cj/4LOi/9ytmv/UmYP/w3JR/75mQ/+5WjX/ + uVs1/7tgO/+7YT3/umE9/7phPf+6YDz/ul89/7lfPP+4Xzz/t187/7deOv+2Xjr/tV06/7VdOv+0XTr/ + s1w6/7NcOf+yXDn/sVw5/7FbOP+vWTf/r1k3/69ZN/+tWTb/rlk2/6xZNv+sWDX/qlc1/6ZXOP+fVzn/ + jVQ9/52Vlf/JwrP/uLKx/6miov/CvLz/8u/v/39/f7oAAAAhAAAADgAAAAYAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTFBO7u7zC//////v6+//r6er/ + /vz9//v79P/KuLL/4p6E/+SZff/np47/8cy+/92JaP/Xckv/13FL/9dxS//WcEv/1XBK/9RwSv/UcEr/ + 1HBK/9NvSv/Sb0r/0m5J/9FvSf/Qbkn/0G5J/9BuSP/PbUj/z21I/89tR//ObEf/zWxH/81rR//MbEb/ + zGtG/8trRf/KaUT/yGhC/8ZkPv/FYDn/xF03/8RjPP/Gakb/yG5K/8htSv/HbEn/xmxJ/8ZrSf/FbEn/ + w2lF/8FkQP+9WzT/vFoz/71cNv++YTv/vmI9/75jPv+9Yj//vWI//7xiPv+7YT7/umE+/7pgPf+6YD3/ + umA9/7lfPP+4YDz/t187/7deOv+3Xjr/tl06/7RdOv+0XTr/tF06/7NcOv+yXDn/sVs5/7FaOP+xWTf/ + sFo3/69ZNv+uWTb/rVk2/6xZN/+oWTj/oVc5/5FVPP+ZkZD/xb6v/7u1tP+ro6P/urS0/+vm5/+gn5/U + CQoJPAAAAA8AAAAHAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACcnKCfQ0NDX//////Px8v/n5OP//Pz8//T07//Jt7D/4p6E/+Sbfv/lpIr/ + 89PH/+CSc//XcUv/13JL/9dxS//WcEv/1XFK/9VwSv/UcEr/1HBK/9NvSv/Sb0r/0m9K/9JuSv/Rbkn/ + 0G5J/89uSP/Pbkn/z25I/89tR//ObUf/zWxH/81sRv/NbEf/zGxH/8trRv/La0X/ymtF/8lqRf/JakX/ + yGhD/8dnQv/GZkH/xmZB/8VlQP/FZUD/xGVA/8RlP//DZT//wmVA/8NlQv/CZUH/wWVB/8FlQP/AZED/ + v2Q//79jQP++Yj//vWM//7xiPv+7YT7/u2E+/7phPf+6YT3/umA9/7lgPf+4YDz/t147/7deO/+2Xzr/ + tl46/7VdOv+0XTr/tFw6/7RcOv+zXDr/sls4/7FaN/+wWjj/sFo3/69ZNv+uWTf/qlo6/6JYOv+TVT3/ + l46O/8O8rP+9t7X/q6Wl/7ewsP/o5OT/u7q66BcWFlAAAAARAAAACQAAAAMAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5NTkHm5ufv + /////+zq6v/g3t///fz6//Ly7f/MubP/5J6E/+megf/knoP/9t3U/+Sfg//Yckv/13JL/9dyS//XcUv/ + 1nFL/9ZwS//VcEr/1XBK/9RwSv/Tb0r/0m9K/9JuSf/Rbkn/0W5I/9BuSf/Pbkn/z25I/89tSP/PbUj/ + zmxH/81tR//MbEf/zWtG/8trRv/La0b/ympG/8pqRf/JakX/yWlF/8hpRP/HaUT/xmhD/8ZoQ//GaEP/ + xmhD/8VnQv/DZkL/w2ZC/8NlQv/CZkH/wmVB/8FkQf/AZEH/wGRA/75jP/++Yz//vWM+/71jP/+8Yj// + u2E9/7phPf+6YT3/umE9/7pgPf+4Xzv/t187/7dfO/+3Xjr/t146/7ZeOv+1XTr/tF06/7NdOv+zXDn/ + sls4/7JaOP+xWjj/r1o4/6xbO/+lVzj/lVY8/5qRkf/BvKv/v7i2/6ulpf+yqqv/5eHh/9TS0vguLi9r + AAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRiY1fn5uf5/////+bk4//b2Nn/9/X1//b18f/Rwbz/ + zZ2M/+mghf/jlnn/89LG/+mvmf/Xckv/13JL/9dyTP/Xckv/13FL/9ZxSv/VcEr/1HBK/9RwSv/Tb0r/ + 029K/9JvSf/Sb0r/0W5J/9BuSP/Qbkj/z25J/89uSP/PbUj/zm1H/85tR//ObEf/zWxH/8xsRv/La0b/ + ymtF/8pqRv/KakX/yWlE/8dpRf/HaUT/x2lD/8ZoQ//GaEP/xmdD/8VnQ//EZ0L/w2ZC/8NmQv/DZkH/ + wmVB/8FkQf/BZUH/wGRA/8BkQP++ZED/vmM//71jP/+9Yj7/vGI+/7thPf+6YT7/umE9/7lgPf+5YDv/ + uGA7/7dfO/+3Xjv/t186/7ZeOv+2XTr/tV06/7RdOv+zWzn/s1s4/7FbOf+uXDz/pVY3/5JjT/+impr/ + w72s/763tv+spab/squr/+Da2v/Z19f8Q0JDfAAAABIAAAAKAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGhnaGno6On7/////+De3f/U0dD/8O7t//z79f/Pzs7/y52L/+yliv/jknP/7sCw/+7Ds//eiWj/ + 13JM/9dyS//Xckv/13FL/9ZwSv/VcEr/1XFK/9VwSv/UcEr/029K/9NvSv/Sb0r/0W5J/9FuSf/Rbkn/ + z25I/89uSP/Pbkj/z25I/89tR//ObUf/zWxH/8xrR//Ma0f/y2tG/8prRf/Ka0X/yWlF/8hpRf/IaUT/ + yGlE/8dpQ//GaUP/xmhD/8VnQv/EZ0L/w2dC/8NmQv/DZkL/wmVB/8JlQf/BZUH/wGRA/79kQP+/Yz// + v2NA/75jP/+9Yz//vGI//7thPv+7Yj7/u2E+/7pgPP+5YDv/uGA7/7dfO/+3Xzr/t186/7deO/+2Xjr/ + tV46/7NdOv+yXTr/r109/6VUNP+Valr/pqam/8fArv+9tbT/rKWm/7KrrP/f2tn/3Nvb/0pKS4UAAAAT + AAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhoaWvl5Ob5/////93a2P/Py8v/ + 7err////+//X1NL/wKCV/+Gqlf/kkXH/6ayV//Xb0f/lo4n/13JM/9dyS//Xckv/13FL/9ZxS//VcUv/ + 1nFK/9VwSv/Ub0r/029K/9NvSv/Sb0r/0m5K/9JuSf/Rbkn/0G5J/9BuSP/Pbkj/z25I/89tR//ObUf/ + zWxH/81sR//MbEb/y2tG/8prRv/La0X/ympF/8lqRf/JaUX/yGlE/8dpRP/HaUT/xmdD/8VnQv/FZ0L/ + xGdC/8NmQv/DZkL/w2ZC/8JmQf/CZUH/wWVA/8BlQP+/ZED/vmRA/75jP/++Yz//vWI+/7xiPv+7Yj7/ + umE9/7pgPP+6YDz/uWA8/7hgPP+3Xzv/t187/7deO/+2Xjr/tF88/69cPP+fVzv/lXpz/6yqpv/HwbL/ + u7S0/6ujo/+0rq3/497e/9jV1f9MTEyKAAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAGBeXl7Z1tny/////+Lg4P/Nysn/49/h//v69//i5OL/wa6p/96hif/ooYb/ + 5Jt///LNv//tvq3/3opp/9dyS//Xckv/13JL/9dyS//WcUr/1XFK/9VxSv/Ub0r/1HBK/9RwSv/Tb0r/ + 0m9K/9FuSf/Rbkn/0W5J/9BuSP/Pbkj/z21I/89tSP/ObUj/zm1G/81tR//MbEf/zGxG/8xsRv/La0b/ + ymtF/8pqRf/IaUX/yGlF/8dpRP/HaEP/xmdD/8ZnQ//EZ0L/xGdC/8RnQv/DZ0L/w2ZB/8NlQv/CZUH/ + wWVB/8FlQP/AZED/v2NA/75jQP++Yz//vWI//71iP/+8Yj7/u2E9/7pgPf+6YDz/uWA8/7hgPP+4Xzv/ + tl88/7VgPf+uXDr/oFo+/5uOjf+4tq3/xb6z/7evsP+po6P/urKy/+fi4v/Mycr4UVBSfQAAABEAAAAK + AAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNjZFDV1dbh + /////+fl5f/Oysn/2NXX//z7+v/u7un/w7++/8mdjf/nqZH/5ZZ3/+mwmv/13dP/56qS/9p6VP/Xckz/ + 13JL/9dxSv/WcUv/1nFK/9VxSv/VcUr/1XBK/9RvSv/TcEr/029K/9JvSv/Rbkn/0W5J/9BuSf/Qbkn/ + z25I/89uSP/Pbkj/zm1I/85tR//NbEf/zGxH/8xsRv/La0b/y2tG/8prRf/JakX/yGpE/8hpRf/IaEP/ + xmdD/8ZnQ//FZ0L/xWdC/8RnQv/DZ0L/w2ZC/8NmQv/DZkH/wmVB/8FkQf/AZED/v2RA/79kQP++Yz// + vmM//71iPv+8YT7/vGE9/7tgPf+7YDz/uWA8/7dhPv+1YD3/qVc3/6FuXP+loaX/vLms/8a+t/+yrK3/ + qqSk/8K8vP/o5OT/v7297Dw8O2sAAAAQAAAACQAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElKSjSqq6vL//////Du7v/Rzs7/0MzN//Du7f/4+PT/ + 09PR/7iknv/fpI7/7KSJ/+Wafv/tvqz/8Mq8/+Obgf/YdE3/13JL/9dxS//Xckv/1nFL/9ZxSv/VcEr/ + 1HBK/9RwSv/TcEr/029K/9JuSv/Sbkr/0W5K/9FuSf/Qbkn/z25I/89uSP/Pbkj/z21I/85tR//NbEf/ + zWxH/8xrRv/LbEb/y2tG/8prRf/Ka0X/yWpF/8hpRP/IaUP/x2hD/8ZnQ//GZ0L/xWdC/8RnQv/EZ0L/ + w2dC/8NmQv/DZkH/wmVB/8JlQP/BZUD/wGRA/79kQP+/ZED/vmM//71hPv+9YT3/vGE9/7phPv+6YT3/ + tFs3/6hbPf+fjYr/r66t/8W9rP+/ubb/rqep/62mpv/Mxsb/7uvr/6elpdogISFTAAAADgAAAAgAAAAD + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABYWFh6ZmJmr8/Hy//n39//Y1NP/ycbG/+Dd3v/59/X/5+jl/8G7uf+3mY//4qiS/+qegf/ln4T/ + 7b6s/+29q//hl3r/2XRO/9dyTP/Xckv/13FL/9ZxS//WcUr/1XBK/9VwSv/Ub0r/029K/9NvSv/Sb0r/ + 0W9J/9FuSf/Rbkn/0G5J/89uSP/Pbkj/z25I/85tR//ObEf/zWxG/81sRv/Ma0b/y2tG/8trRv/Ka0X/ + yWtF/8lpRP/IaUP/x2hD/8ZoQ//HZ0P/xmdC/8VnQv/EZ0L/w2dC/8NmQv/DZkL/w2VC/8FlQf/BZUH/ + wWRB/8BkQP+/ZD//vmM+/71iQP+8ZED/ul45/6xaOf+ifG//qaWo/7y5rf/Hv7X/uLKy/6qjpP+1rq7/ + 29bW/+fk5P+Mioy9Cw0NOwAAAAwAAAAGAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRUVQmHhYaB09HQ+P/+/v/k4eL/ + y8bG/9HOzf/v7ez/9fXw/9bY1v++rKj/zpqJ/+eokf/pnH//5p+E/+u2ov/ruab/4pl+/9p9Wf/Xckv/ + 13JL/9dxS//WcUv/1XFK/9VwSv/UcEr/1HBK/9NwSv/Tb0r/0m5J/9FuSf/Rbkn/0G5J/89uSP/Pbkj/ + z25I/89tSP/ObUj/zmxH/81sR//MbEf/y2tH/8trRv/KakX/ympE/8lpRP/IaUP/yGhD/8hoQ//HaEL/ + xmdD/8VnQv/FZ0L/xGdC/8NnQv/DZkH/wmZB/8JlQf/CZUH/wWVA/8BlQf+/ZUL/vmA7/7RZNf+tb1b/ + q56c/7W2sv/Dvaz/wbq3/7Cqq/+rpKT/w729/+rl5f/W09P/XVtbmAEBAiEAAAAKAAAABQAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABVVVVRurm51Pr3+P/08fD/1dDQ/8jCw//d2Nj/9vbz/+7u6f/NzMv/ + t6Wf/8uXhP/mpo3/7KCD/+Wdgv/nqZH/7Lyq/+WiiP/eiWj/13RO/9dyS//WcUv/1nBK/9ZwSv/VcEr/ + 1HBK/9RvSv/Tb0r/0m9K/9FvSv/Sbkn/0G5J/9BuSf/Qbkj/z25I/89tSP/PbUj/zm1H/81sR//Na0f/ + zGtG/8trRv/La0b/ympE/8lpRP/JaUT/yGlD/8hoQ//HaEP/xmdC/8ZnQ//FZ0L/xGdC/8RnQv/DZkL/ + w2ZC/8NnQ//CZkL/wWA6/7hbNv+wb1b/rJuY/7Ozs//Bu6v/xsC4/7ewsf+qpKT/tK6u/9bPz//s6Oj/ + rKqr30VGRWwAAAAOAAAACAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDQkMi + gH5/ltva2////f3/6OXl/8vGxf/Iw8T/4d7e//Px7v/o5+X/zMvK/72nn/+5lIb/2KCL/+ujhv/onYD/ + 5Z6D/+amjf/lpYz/35Fz/9yBX//XdE//1nBK/9VwSv/VcEr/1XBK/9RwSv/Tb0r/029K/9JuSv/Rbkn/ + 0W5J/9BuSf/Pbkj/0G5I/89uSP/PbUj/z2xH/85tR//NbEf/zWxH/8xsRv/La0b/y2pE/8ppRP/JaUT/ + yWhE/8hoQ//HaEP/x2dD/8ZnQv/FZ0L/xWhD/8VoQ//FZUD/wV44/7VgQP+ve2n/s6Cb/7W2tv+9uav/ + xsC2/721s/+spKX/raen/8nExP/r5ub/19TU/2tqaqcPEBA1AAAACwAAAAYAAAADAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZWZmV6Wkpcjp5+n/+PX1/9/a2f/HwcH/ + ysXG/+Pg3//y8O3/6erj/9PU0/+3r67/tZOG/8KVhP/knoT/66CE/+WZe//ilHb/4I9w/96Mbf/bgV// + 2XpW/9h1UP/Vckz/1XBK/9RwSv/UcEr/029K/9JvSv/Sb0r/0W5J/9FuSf/Qbkj/0G5I/89uSP/PbUj/ + z21I/85tSP/NbUf/zWxG/8xrRv/La0X/ymlE/8ppRP/KaUT/yGlE/8lqRv/Ia0b/yWpG/8hpRP/HYjr/ + v144/7JuVf+1joD/tK+w/7i6uv++uav/x8G1/7+5t/+uqKn/rKam/8G8uv/i3t7/6ebn/6SlpNZKSUlu + BAQEDwAAAAgAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAX15fHI2MjYPJx8jm+ff3//Xy8v/Y1dX/xcHB/8nExP/f29v/8e/s/+7u6v/b29r/ + xMPE/7yjm/+9jn3/2JJ2/9iXfv/mmXv/6Jh7/+CNbP/fhWP/2n1b/9h4Vf/YdU//1XBL/9VwSv/Ub0n/ + 029J/9NvSv/Sb0r/0W9K/9FtSf/QbUj/z21I/89tR//PbEf/z2xH/85sRv/Oa0b/zWxG/81tSP/Nbkn/ + zW9K/85wS//Nb0r/zmtE/8lkPf++Y0D/wWhG/72Hcv+7pqD/uLm8/7m4tv/Ev6//ycS6/763tv+vqKn/ + rKWl/8C5uP/g29z/7uvs/8XDxPBfXl+SDQ4OMAAAAAoAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQTB1dXWS + zs3O7/v5+v/28/T/29fW/8bAwP/Dvb3/1NHQ/+jl4v/u7er/6unl/9fY2P/Iw8L/raSi/7uQgf+sg3T/ + 04tv/9SOc//gi2z/5Y9v/+aObv/ghmX/24Ff/9p+W//Ze1f/2HhU/9d3Uv/WdVH/1nVR/9Z0UP/VdVD/ + 1XRP/9R1UP/TdlL/1HdT/9N4Vv/VdlP/1XRO/9FwSf/MaEL/wmhF/8NqSP+wfGn/wZSE/7aur/+8ubv/ + uru6/8K+sf/LxLr/x8C8/7mzsv+spqX/rqin/8O+v//i3d7/8e3t/8rIyfRsamukKSorRAAAAAoAAAAG + AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU08fn1+mcrJyuz08/L/9/T0/+He3//KxsX/ + wLu7/8fCwf/Z1dX/6eXh/+zs5f/p6uL/2drZ/83P0P+/urn/raSj/8eZif+1hnX/oXts/7t7Y//Xf17/ + zn5f/8t7Xv/Ke13/yHhZ/8Z1V//FdFX/xHJU/8RxUv/Db0//wm1N/8VvTv/JcVD/zXBM/7x1W/+tgHD/ + vYp4/82fkP+2r7D/uri5/7y9wf+7urn/xsK1/8zIuv/Lxbz/wLm3/7Grq/+rpaX/ta+v/87Jyf/o5eb/ + 7uvr/8rIyPNxcHCnMjIySwMDAwsAAAAHAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAASklKOHl6eZCwra/c5eTl//f09P/t7Ov/19PR/8TAwP+/ubn/xL6//9TPz//g3dn/ + 6ufh/+no4P/l5N7/4eHc/87Q0f/LzdD/yMbI/7u1tv+vqaj/pp+f/6Kcm/+impn/oZua/6Kbmv+jm5r/ + opua/6Sdnf+knp7/raeo/7WwsP+6tLb/wL/C/7y+w/+6urv/xMK8/8rGuf/QzMH/08zC/8jDvv+/uLf/ + sqqr/62mpv+zra3/xr/A/+Hb2//v7Oz/6+jp/728veRoaGidMTExSgkJCQ0AAAAGAAAAAwAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx7fCZqaWpo + kJCQuMvJyvfv7O3/9vPz/+/r6//Z1dX/xsLC/765uf+9trf/w768/83Jx//W0tD/3NjT/+Dd1v/n5Nz/ + 4uDY/+Hd1v/b2tH/1tTL/9bUzP/U0sn/09HI/9PQx//S0MX/0s/F/9HPxf/QzcP/0c7D/9bSxv/Y1cr/ + 1M/G/9DKw//LxcL/wLq5/7WvsP+vqan/r6mp/7u0tP/Mxsb/5ODh//Tx8v/29PX/0tHS+4yLjMFGRkh3 + GRkZMgAAAAgAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUVFQUT05OQHBvcICbmpvBycfH+uvp6f/39vb/ + 8O3t/+nk5f/V0dH/ycTE/7+5uf+7tbT/t7Ky/7q0s//Burn/xL69/8jDwv/NxsX/zsjF/83Ixv/OyMb/ + zMfE/83GxP/Kw8P/ycHA/8W/vv/Au7n/u7S0/7OsrP+wqqr/says/7Wvrv++ubn/ysXG/+Db3P/t6Or/ + 9/T3//Lx8v/V09X9mZiZyl1eXo42NTVOPz9AHQAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAGRkZhpNTU5Ba2treIGAgK6vrq7c0c/Q/+Xl5v/8+fr/8e3w/+7r7P/s6Oj/ + 4Nza/9TO0P/LxcX/xcC//8C8vP++ubf/vLa1/7u0tP+5tLT/ubS0/7y1tf+9uLj/wbu7/8XAwf/MyMj/ + 2tPU/+Xg4P/p5eb/7+zr//r29//y7/D/19XW/6+tr+KAf4C0WVtbgjU0N05QT1AiAAAABgAAAAQAAAAD + AAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + MjIyC4B/fyVBQUFFent8dHJxcpuWlZjAsK+x3s7NzvvRz8//39ze//Tx8v/59vj/+/r5//v4+P/69/f/ + +fX2//j19v/59fb/+fb3//n49//49ff/9PHy/+nn6P/b2dz/zczN/a+truCTk5TEa2prolhXV3s0MzNP + cG9wLCIhIhIAAAAFAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABISAhBVpbWhiGhYcq + HBwcPFlYWlV1dHZsYGFgg2NiZJZmZmamZ2ZmrmdnZ7RnZme2Z2ZntmdmZ7RnZmevZmVmp2NiYpleXV6G + U1NTcDw8PVscGx1BeXd5Lk1MTB0ODw8KAAAABAAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAP///////////////////////////////////////////////////8AB//////////////////AA + AAf///////////////8AAAAAf//////////////4AAAAAA//////////////wAAAAAAB//////////// + /gAAAAAAAH////////////gAAAAAAAAf///////////gAAAAAAAAB///////////gAAAAAAAAAH///// + /////wAAAAAAAAAAf/////////wAAAAAAAAAAD/////////4AAAAAAAAAAAP////////4AAAAAAAAAAA + B////////8AAAAAAAAAAAAH///////8AAAAAAAAAAAAA///////+AAAAAAAAAAAAAH///////AAAAAAA + AAAAAAA///////gAAAAAAAAAAAAAH//////gAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAH/////4AA + AAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAH////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAH// + //wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAA + AAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD//+AAAAAAAAA + AAAAAAAAA///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAA + AAAAAAAAAAAAAAD//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAA/ + +AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAA + AAAAH/AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAA + AAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAfAAAAA + AAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAD + gAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAA + AAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAD + AAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAA + AAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAA/AAAAA + AAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf + 4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAA + AAAAP/AAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAA//wAAAAAAAAA + AAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAA + AAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAA// + /8AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAA + AAB////4AAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAH/////AAAAAAAA + AAAAAAAD/////4AAAAAAAAAAAAAAB//////AAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAf//////AA + AAAAAAAAAAAAP//////4AAAAAAAAAAAAAH///////AAAAAAAAAAAAAD///////4AAAAAAAAAAAAD//// + ////gAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAAAAAAA + f/////////4AAAAAAAAAAf//////////gAAAAAAAAAf//////////+AAAAAAAAAf///////////4AAAA + AAAAf////////////gAAAAAAAf/////////////AAAAAAAf/////////////+AAAAAA///////////// + //8AAAAD////////KAAAAGAAAADAAAAAAQAgAAAAAACAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAE + AAAABQAAAAYAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAGAAAABgAAAAUAAAAEAAAAAwAAAAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAD + AAAABQAAAAcAAAAJAAAADAAAAA4AAAARAAAAEwAAABUAAAAWAAAAFwAAABgAAAAYAAAAGAAAABcAAAAW + AAAAFQAAABMAAAARAAAADwAAAAwAAAAKAAAABwAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAIAAAAEAAAABwAAAAoAAAAPAAAAEwAAABcAAAAcAAAAIAAAACQAAAAnAAAAKwAAAC4AAAAx + AAAAMgAAADMAAAA0AAAAMwAAADIAAAAxAAAALgAAACsAAAAoAAAAJAAAACAAAAAcAAAAGAAAABMAAAAP + AAAACwAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAAsAAAARAAAAFwAAAB0AAAAkAAAAKwAAADEAAAA1 + AAAAOQAAADwAAAA/AAAAQgAAAEUAAABHAAAASQAAAEoAAABKAAAASgAAAEkAAABIAAAARQAAAEMAAABA + AAAAPAAAADkAAAA2AAAAMQAAACsAAAAkAAAAHgAAABcAAAARAAAADAAAAAcAAAADAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAkAAAAPAAAAFgAAAB4AAAAn + AAAALwAAADYAAAA9AAAAQz05OXRTTU2XX1hYtGVeXslqYmLYbGVl5G9nZ+xwaGjxcGlp9HFpafVwaWn0 + cGho8W5nZ+xsZWXkaWJi2WVeXspeV1e2UkxMmjs3N3gAAABLAAAASAAAAEMAAAA9AAAANwAAADAAAAAn + AAAAHwAAABcAAAAPAAAACQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAJ + AAAAEQAAABkAAAAjAAAALgAAADcAAAA/Qj09eFtVVaptZWXTeHBw7n53d/WKhIT0mZSU96impvq0s7P9 + vby8/sTDw//IyMj/y8vL/87Ozv/Ozs7/zMzM/8nJyf/Ew8P+vry8/bOysvynpKT4mJSU9YuFhfaDfHzw + dW9v111WVq8+Ojp/AAAASwAAAEYAAABAAAAAOAAAAC4AAAAkAAAAGgAAABEAAAAKAAAABQAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEAAAAEAAAACQAAABAAAAAbAAAAJgAAADEAAAA8RUFBemVeXrp6dHTpg31995mVlfuvrKz+ + vr29/8rKyv/MzMz/zc3N/83Nzf/MzMz/y8vL/8nJyf/IyMj/yMjI/8fHx//FxcX/xcXF/8XFxf/ExMT/ + xcXF/8bGxv/Hx8f/x8fH/8jIyP/Av7//trS0/qekpPuSjY34iYSE7XFsbMJAPDyDAAAATAAAAEUAAAA8 + AAAAMgAAACcAAAAcAAAAEQAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAcAAAAOAAAAGQAAACUAAAAyHhwcTFdRUZx7dXXi + hoCA+KKfn/24t7f/ycjI/8zMzP/Ozs7/z8/P/9fX1//e3t7/5OTk/+vr6//x8fH/9fX1//r6+v/9/f3/ + ///////////9/f3/+fn5//X19f/w8PD/6enp/+Li4v/Z2dn/0NDQ/8fHx//Dw8P/w8PD/8TExP/ExMT/ + uLe3/6uoqPyZlJT5joqK52tnZ60ZFxdcAAAASAAAAD4AAAAzAAAAJgAAABkAAAAPAAAABwAAAAMAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACwAAABUAAAAi + AAAALysoKFNnYWGxgnt775eSkvu1srL/x8fH/87Ozv/Ozs7/2NjY/+Pj4//s7Oz/9vb2/+3r6v/a1dP/ + wrq2/66hnP+ei4P/k3tz/4xwZv+JaF7/imZc/4xnXP+Oal//j25k/5Z3bv+ghX3/rJeR/72vq//Tycf/ + 6OPh//Px8f/r6+v/3t7e/9DQ0P/Dw8P/w8PD/8PDw//CwsL/tLGx/6SgoPuWkZHzfXl5wDAuLmgAAABI + AAAAPQAAADAAAAAiAAAAFQAAAAsAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAgAAAAcAAAAPAAAAHAAAACoUExNCZ2Bgq4R+fvGempr8u7q6/87Ozv/Pz8//2NjY/+Li4v/s7Oz/ + 6+nq/83Hxf+qnZj/kHpy/4ZnWv+LYFD/k19L/5leSv+dYEr/o19J/6lfSf+sX0j/r19I/7FfR/+yX0j/ + sWBI/7FeSf+vXkr/rF9M/6leS/+gXUz/lWBS/5pyaf+rkov/xrm0/+Xg3v/t7e3/4eHh/9DQ0P/Dw8P/ + w8PD/8PDw/+3tbX/paGh+5eSkvR7d3e8IB8fWgAAAEUAAAA5AAAAKgAAABwAAAAPAAAABwAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACQAAABMAAAAiAAAAMVNNTYuEfX3qnJiY+728vP/Pz8// + 0dHR/9ra2v/j4+P/5+fn/8O/vf+ai4T/g2VY/4lgUP+PWkX/l1g//55YQP+kWj//p1o//61bP/+wWz// + s1s//7ZdQP+3W0D/ultA/7xbP/++Wj//v1o+/79YPf/AWD7/wFg9/8JWPf/BVz7/v1hA/7pXQv+zWET/ + p1tM/5piVf+kf3f/wbGs/+fk4v/q6ur/2NjY/8XFxf/Dw8P/w8PD/7W0tP+hnJz7koyM7WhkZKAAAABL + AAAAQAAAADEAAAAiAAAAEwAAAAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALAAAAFgAAACY2MTFW + enR0zZGMjPm5t7f/0dHR/9PT0//Z2dn/4ODg/9fW1/+nn5v/gWpg/4RaSf+MV0D/klM5/5tTNv+iVTb/ + pVY2/6lXOP+rWTv/rlk8/7BaPv+xWz7/tFs//7VbP/+3W0D/ultA/7xaP/++Wj//v1o//8FZPv/CVzz/ + w1c8/8ZVOv/GVDj/yFM3/8lRNv/IUDf/xFE5/8BSPP+3VkP/qlpK/5tjV/+sk4z/19HO/+vr6//a2tr/ + xsbG/8PDw//Dw8P/sa+v/5WQkPmDfn7UQD09cgAAAEUAAAA2AAAAJgAAABYAAAALAAAABAAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + AAAABQAAAA0AAAAZAAAAKlROToaHgYHvqqen/czMzP/S0tL/19fX/9zc3P/Q0NL/m5GM/3xgU/+CUTz/ + jE81/5NMMP+aTC//nlEw/6NSMv+kVDT/plY2/6lYOP+qWDv/rFk8/69aPv+xWz7/s1s+/7VbP/+3Wz// + uls//7xbP/+9Wj//vlo+/8BZPf/BWD3/w1c8/8ZVOv/GVTr/x1Q3/8lSNv/KUTX/y04z/8tNMf/LTDL/ + xk01/8FTPf+1WEX/nVtN/6eIgP/Sysj/6+vq/9fX1//Dw8P/w8PD/729vf+joKD8jIWF8F1XV5oAAABI + AAAAOgAAACoAAAAZAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADgAAABwAAAAtcWtrtI+Kive+vLz/1NTU/9bW1v/Z2dn/ + 29ra/56Wk/98X1P/f044/4pILP+SSCf/mEgn/5tLKf+dTSz/nk8v/6JSMf+kVDT/plU2/6hXOP+qWDr/ + rFk8/69aPf+xWz3/s1s+/7VbP/+3Wz//uVs//7tbP/+8Wj//vlo//8BZPv/BWD3/w1c8/8ZWO//GVTr/ + x1Q4/8lSNv/KUTX/y08z/8xNMv/NSzH/zUow/81JL//KSzD/xFA3/7dVQf+fXE3/qYyE/9nT0f/n5+f/ + 0NDQ/8PDw//Dw8P/sbCw/42Hh/Vwamq8FBQUTgAAAD0AAAAtAAAAHAAAAA4AAAAFAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAOAAAAHS8sLEd+eHjR + n5ub+czLy//V1dX/2dnZ/9vb2/+3tbT/f2lf/3xNOP+ERCn/jUIh/5NDIf+XRiP/mUgm/5pLKP+cTSv/ + nk4v/6JSMv+kUzT/plU2/6hXOP+qWDr/q1k7/65aPf+xWz7/s1s+/7RbP/+2Wz//uVs//7tbP/+8Wj// + vlo//79ZPv/BWD3/wlc9/8VWO//GVTr/xlU4/8lSNv/KUjb/y080/8xOMv/MTTH/zUww/81JL//NSi7/ + zUkv/8pJL//DUDj/s1dG/5thVP+1o57/7evr/9zc3P/ExMT/w8PD/7u6uv+Xk5P3fXd31Tg1NWcAAABA + AAAALwAAAB0AAAAOAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + AAAABQAAAA4AAAAdQj4+WYN+fuGtqan71tbW/9jY2P/b29v/3Nzc/5OHgv96V0f/f0Qp/4k+Hf+OPRn/ + kkAc/5NCH/+VRSP/mEcl/5tKKf+cTCv/nk4u/6BRMf+jUzP/pVQ1/6dXOP+pVzj/q1k7/65aPf+wWj3/ + sls+/7VbP/+2XT//uV1A/7tbP/+8Wj//vVo//79ZPv/AWD7/wlg9/8VXPP/GVjr/xlU6/8dTN//JUjb/ + ylE2/8tPM//MTTP/zE0x/81MMP/NSi//zUkv/85ILP/NSS3/yEsx/8BTPv+qW0r/n3lw/9DIxf/m5ub/ + zMzM/8TExP/CwsL/oZ2d+oF6euFHRER3AAAAQQAAAC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADQAAABxJRERhhYCA6Lazs/zY2Nj/2tra/93d3f/Hxsf/ + gm5m/3tJM/+DPB7/ijgU/446Ff+QPRn/kj8c/5NCHv+VRSP/mEcl/5pKKP+cSyr/nk0u/6BRMf+jUzP/ + pFQ1/6ZWN/+pVzj/q1g7/65aPf+wWz7/s10//7RbP/+0Wj3/tlo+/7pbP/+9XUD/vltA/79ZPv+/WT7/ + wVg9/8NXPP/FVjv/xlU6/8dUOP/IUjb/yVE2/8pPNP/MTzT/zE0y/81MMf/NSzD/zUow/85JL//NSS7/ + zUku/8tJLf/ETzf/t1hG/5phVP+5q6b/6unp/9PT0//ExMT/xMTE/6elpfuDfX3nVVFRggAAAEEAAAAv + AAAAHAAAAA0AAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAGUpFRWCGgIDp + u7i4/dra2v/c3Nz/39/f/7Svrv98X1L/fEIp/4U4F/+LNRD/jDcR/446Ff+QPBn/kT4a/5JBHf+URSH/ + l0cl/5pIJ/+cSyr/nU4s/59PMP+iUjL/o1Qz/6ZWNv+pVzj/q1g7/6xYOP+lTzL/mkks/5VIL/+QRi// + j0Ur/5FAJ/+bRSn/r1E1/75aPv/AWj//wVk+/8JXPf/DVzz/xVY7/8ZVOv/GUzf/yFM3/8pRNv/KUTX/ + yk80/8xNM//MTTL/zEww/81LMf/NSzD/zUsv/81KL//MSjD/x000/75VQP+jXk//qJCJ/+jl5P/Z2dn/ + xMTE/8TExP+sqan8g3x86VhUVIIAAABAAAAALQAAABoAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAgAAAAkAAAAXRUBAVYeAgOi9urr929vb/9/f3//h4eH/rKaj/3tXR/9/QSX/hzUT/4k0D/+LNQ// + jDYQ/444FP+PPBj/kT4a/5JBHf+UQyD/l0Yj/5lJJv+bSyn/nE0r/59PL/+gUTH/o1Mz/6ZVNv+oVzf/ + pU8w/5tOMv+falb/rIyB/7ujnf/Br6n/vqij/7GTi/+bb2L/hUEv/5I9Jf+1VDr/wls//8FYPf/DVzz/ + xVc7/8ZVOv/GVDj/x1M3/8lSN//JUjX/ylE1/8tPNP/MTjP/zE0y/8xMMf/MTDH/zUwx/81MMP/MTDD/ + zEww/8lMMv/AUz3/q15O/518c//e29n/3Nzc/8XFxf/ExMT/qqio/IR/f+hUUVF6AAAAPgAAACoAAAAX + AAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAABM1MTE/hoCA4bi2tvzc3Nz/4ODg/+Pj4/+nn5v/ + elE+/4E+IP+INRH/iTMO/4kzD/+LNQ//jDYQ/404E/+POxX/kD0Z/5JAHP+TQh//lUUh/5lIJv+bSij/ + nEwr/51OLv+gUTH/o1Mz/6VVNf+iTS7/pGJK/8CooP/Z1tb/4ODh/+Df4P/g39//4t/h/+Tl5v/p6On/ + 0sXC/5RoWv+GNyH/s1M4/8FZPv/BVzz/w1c8/8ZWO//GVTr/x1Q4/8hTN//JUjf/ylI2/8pPNf/LTzT/ + y080/8xOMv/MTjL/zE0y/8xMMf/MTDH/zEwx/8tNMf/JTTL/wlM7/7FdTP+Xcmj/2NPS/9zc3P/FxcX/ + xcXF/6impvuEf3/jSkhIbAAAADsAAAAnAAAAFAAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADwAAACKDfHzR + sK2t+97e3v/i4uL/5eXl/6ujn/98UkD/gz0f/4o0EP+MMw3/jDQO/4szD/+MNA//jDYP/403Ev+POxX/ + kDwY/5E/G/+UQR7/lEMh/5hHJP+aSSf/m0sq/55NLP+fTzD/o1Mz/59MK/+oalH/zsPA/97e4P/Y1dX/ + 1c/P/9XPz//Vz8//1c/P/9bR0f/Y09P/5uXo/+3r7P+ed2v/izcg/7xXPf/CWT7/wVg9/8NXPP/FVjv/ + xlU6/8ZUOv/HVDf/yFM3/8lSNv/JUjX/ylI2/8pPNP/KUTT/y080/8tOM//LTjP/yk4z/8tOM//LTjP/ + yU80/8JTO/+wXk3/lG5k/9jU0//c3Nz/xcXF/8XFxf+hn5/6hYGB1jAwMFUAAAA3AAAAIgAAABAAAAAF + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAIAAAALAAAAHHdxcbKkoKD53t7e/+Tk5P/n5+f/tq+t/4BVQ/+EPyH/izQP/40zDf+MNA3/ + jDQO/4s0D/+MNRD/jDYP/402Ev+OOhT/jzwX/5E+Gv+SQR3/lEMg/5dGI/+ZSSb/mkop/51MK/+eTy// + n0wr/6RZPf/Lu7X/2Nnd/9LMzP/Pysr/z8rK/87Jyf/Oycn/z8rK/9HLy//Tzc3/0szL/+Ti4//q5uT/ + jlZH/6NHLv/DWj//wVg+/8JYPP/DVzz/xVc7/8ZWOv/HVTr/x1Q4/8hTN//IUjf/yVI3/8lSNv/KUjX/ + yk81/8pRNf/KUTT/yk80/8pPNP/JTzT/yk80/8lPNf/AVDv/sF9N/5VwZv/e3Nv/2dnZ/8bGxv/ExMT/ + l5SU93x3d8IhISFNAAAAMgAAABwAAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAVW1VVfJSPj/fV1dX/5OTk/+rq6v/Dvr7/ + h2JR/4RAIP+MNhD/jTMN/40zDf+MNA3/jTUO/401Dv+NNRD/jTUQ/402Ef+OOhT/jzwX/5A9Gv+SQB3/ + lEIf/5dGI/+YSCb/mkoo/5xMK/+eTSz/nUkn/7mLev/V1df/zsrK/8zHx//Lxsb/ysXF/8nDw//Jw8P/ + ysXF/8vGxv/NyMj/0cvL/9HLy//v8fP/waef/448Jf+9WD3/wVk+/8FYPf/CWD3/w1c8/8VWO//GVTr/ + xlU6/8dUOP/IVDf/yFM3/8hTN//JUzf/yVI2/8lSNv/JUjb/ylI2/8lRNf/JUTX/yVE1/8hRNf/HUTb/ + wFU9/61eTf+afnX/6uno/9XV1f/Gxsb/vby8/42IiPVtaWmgAAAAQAAAACsAAAAWAAAACAAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA9DPz9F + joiI78jGxv/k5OT/6+vr/9XU1v+QcWP/gz8i/443Ef+PNA3/jzQO/440Df+NNA7/jTUO/441D/+NNQ// + jTYQ/402EP+OOBP/jzsV/5A+GP+RPxv/k0Ee/5RDIf+YRiT/mUgn/5tLKf+cSij/n1Ex/8Wro//PztH/ + ycLC/8fBwf/GwMD/xb+//8W/v//Gv7//xb+//8fBwf/JwsL/y8bG/83IyP/f3+D/3tPP/5RMOv+1Ujb/ + wFtA/8BZPv/BWD7/wVk9/8JYPf/FVzz/xlY7/8ZWOv/GVTr/x1U6/8dUOP/HVDj/x1M4/8hUN//IVDf/ + yFM3/8hTN//IUjf/x1I3/8dTN//HUzb/xlI3/71YP/+lYFH/ppGK/+vr6//Pz8//xsbG/7Oxsf+KhYXv + VVNTdgAAADkAAAAjAAAADwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAACAAAACQAAABmFf3/MtbGx/OXl5f/r6+v/6urq/5+Kgv+ERiz/jjkU/5A1Dv+QNQ7/ + kDUO/481Dv+NNA7/jTUO/441D/+NNRD/jjYR/442EP+OOBL/jzoV/5E9F/+RPhr/k0Ad/5NCH/+XRiP/ + mUcn/5tKKf+aSCX/n1Q1/8Wzrv/Kycv/xb6+/8K9vf/BvLz/wLu7/8C7u//Bu7v/wbu7/8O9vf/Fv7// + yMHB/8nDw//X1db/493a/5tZR/+yTjL/wFtA/79aPv+/WT7/wFk+/8JYPf/DVz3/w1c9/8VWPP/GVzv/ + xlY7/8ZWOv/HVTr/x1U4/8ZVOv/GVDj/xlQ4/8dUOP/HVDj/xlQ4/8ZTOP/HVDf/x1M3/8VUOP+6WkT/ + nWFS/7erp//n5+f/x8fH/8fHx/+koKD8h4KC1S0tLU8AAAAwAAAAGgAAAAkAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEV1XV3ublZX54eDg/+zs7P/t7e3/ + pJmU/4dQOP+MPRn/kjYP/5E2D/+QNQ//kDUP/5A0Dv+ONQ7/jjUO/481D/+PNRD/jjYQ/442EP+PNxH/ + kDoU/5A8F/+SPhn/kj8c/5NCH/+VQyH/l0cl/5pKKP+aRyT/n1Mz/8Cvqf/Gxcf/wbu7/7+6uv+/ubn/ + v7m5/765uf++ubf/vrm5/8C6uv/BvLz/xb6+/8fAwP/V0tP/49zZ/55dSP+xTzL/v11A/75aP/+/Wj7/ + wFk+/8BZPv/CWT7/wlg9/8NYPP/DVzz/xVc8/8VWO//GVjv/xlY7/8ZWOv/GVTr/xlU6/8ZVOv/GVTr/ + xlU4/8ZVOP/FVDr/xlQ4/8VUOP/CVTr/tl1I/5JjVf/Qysj/3t7e/8fHx//BwcH/kYuL93FsbKIAAAA9 + AAAAJgAAABEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAK + JSIiJZCKiurPzc3/7u7u//Ly8v/FwsL/j2VT/4w+Hv+TNxH/kzcQ/5M3EP+SNg//kTUP/5E1D/+QNg// + kDUP/482D/+PNhD/jzYQ/482Ef+PNxH/kDgT/5E7Ff+SPRn/kz8b/5NCHf+VRSD/l0cj/5lJJv+ZRiX/ + nU4v/76lnf/DwsX/vrm5/723t/+8trb/vba2/7y2tv+8trX/vLa2/763t/+/ubn/wry8/8K9vf/W1tf/ + 4dTR/6JWPv+1VTj/vFs//71bP/+9Wz//vlo//79aPv/AWj7/wFk+/8FZPv/CWT7/wlk+/8JYPf/DWD3/ + w1c8/8ZXPP/GVzz/w1c7/8VWPP/FVjz/xVY7/8NWO//DVjv/w1Y7/8NVOv/CVjr/vlc+/61gTf+WeXD/ + 8O/v/9PT0//IyMj/srCw/4uGhupCQUFeAAAAMwAAABwAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAUAAAARdnBwoKynp/vw8PD/8/Pz//Dw8P+SeW//jEUo/5Q7FP+VOBD/ + lDgQ/5Q3EP+TNxD/kjYQ/5I2D/+RNg//kTUP/482D/+QNhD/kDYQ/5A2Ef+PNxH/kDgS/5E6Ff+SPBj/ + kj4a/5NBHf+VQiD/l0Yh/5lIJf+aSSb/mUUj/7GDcf/CwsP/vLe3/7y1tf+7tLT/urS0/7qzs/+7tLT/ + u7S0/722tv++t7f/wbu7/8C7u//l6er/zKui/6RLMP+6W0D/ultA/7tbP/+8W0D/vVs//75aP/++Wj// + v1o//8BZPv/AWT7/wVk+/8JZPv/CWT7/wlg+/8NYPf/DVz3/wlc9/8JXPP/CVzz/wlc8/8NWPP/DVzz/ + wlc8/8FXO//CVjv/wFU7/7paQv+fYVD/saOe/+np6f/IyMj/yMjI/5qVlfp9eHi5CAgIQAAAACcAAAAR + AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAlDPj41kYuL8trZ2f/09PT/ + 9fX1/6WcmP+LUTj/kz4a/5g6Ev+VOBH/lTgR/5U3EP+TNxD/kzcQ/5M2D/+SNg//kTYP/5A2D/+QNw// + kDcQ/5A2Ef+QNxH/kDcR/5I6FP+SPRj/kz4Z/5M/HP+VQh7/l0Ug/5hHJP+ZSSf/mUYj/6BWN/++q6f/ + vr7A/7qysv+6s7P/urOz/7qzs/+6s7P/urS0/7y1tf+8trb/vLW1/9LS0//o397/rmVP/7FVN/+3XkH/ + t1tA/7pbP/+7W0D/u1tA/71bP/+9Wz//vlo//79aP//AWj7/v1o//8BZPv/AWT7/wVk+/8FZPv/BWT7/ + wlg9/8FYPf/BWD3/wlg8/8FYPP/BWDz/wFc8/8FXPP/BVzz/wFc7/75YPP+zXkn/j2JU/9vX1f/b29v/ + ycnJ/7i2tv+KhYXyUE5OawAAADIAAAAbAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAwAAAA95cnKls6+v/Pf39//4+Pj/4+Hk/4tmVv+QRCX/mTsV/5k7E/+YOhH/lzoR/5c6Ef+VOBH/ + lDgR/5Q4EP+TNxD/kzcQ/5I2D/+RNxD/kTcR/5E3Ef+QNxL/kTgS/5E6E/+SOxf/kz0Y/5NAGv+VQR3/ + lUMf/5hGIf+ZRyX/mkko/5lFIf+nZkv/v7Gu/7++wP+7tbb/ubOz/7ezsv+6s7P/ubOz/7q0tf+9urv/ + 0tPV/+bh4f+8g3D/qlEy/7VdQP+0Wz//tVtA/7ddQP+5W0D/ultA/7tdQP+8W0D/vFtA/71bQP++W0D/ + vls//75aP/+/Wj//v1o//79aP//AWj//wFo+/8BZPv+/WT7/wFk+/79ZPv+/WT7/v1g+/79YPf+/WD3/ + v1g8/75XO/+5WT//pWBO/6GKgf/u7u7/zMzM/8nJyf+dmZn7fHd3vQgICD4AAAAkAAAADwAAAAQAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABzk0NCiRjIzw3t3d//n5+f/5+fn/nJCL/4xOM/+WPhn/ + mzwT/5s7E/+ZOhL/mToS/5g6Ef+XOhH/lzoR/5U4Ef+UNxD/lDcQ/5M2EP+SNxD/kTcQ/5I4Ef+RNxL/ + kjcS/5E4Ev+TOhX/kzwY/5M/Gf+UQBz/lUIe/5hFIP+ZRiT/mkgm/5tKKP+aRSD/pmBD/7qbkP/Bu7r/ + wL/B/7+/wP/Av8H/w8PG/8vLzP/X1dX/18C5/7l4Yf+pUTH/slo9/7NbP/+zWz//tFs//7ZdQP+2XUD/ + t11A/7pdQP+6W0D/u1tA/7xdQP+9W0D/vVtA/71bP/++W0D/vls//75aP/++Wj//vlo//79aP/++Wj7/ + v1o+/79ZPv+/WT7/vlk+/75ZPf++WT3/vlg9/75YPf+8WD3/s11G/5FfT//Tzsv/3t7e/8rKyv+4t7f/ + ioWF8ERDQ2AAAAAuAAAAFwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADGVeXoerp6f6 + +/v7//z8/P/o5+j/jGhZ/5dLKf+cPBT/nDwT/5s8E/+aOxP/mjsT/5k7Ev+YOhL/mDoR/5c4Ef+UOBH/ + lDgR/5Q3EP+TNxD/kjgQ/5M3Ef+SNxL/kjgS/5E4Ev+TOhP/kzwX/5Q+GP+UQBv/lUEd/5hDIP+YRiP/ + mUcl/5pJJ/+cSin/m0ck/55MKf+qaU7/toh4/7yYjP+8mY7/wZ+S/8OYh/+3eWL/qlg6/6hRMf+uWTz/ + r1o9/7FbPv+yWz//s1s//7VdP/+1XUD/tl1A/7ddQP+5W0D/uVtA/7tdQP+7XUD/u1tA/7xbQP+8W0D/ + vFtA/71bP/+9Wz//vVo//75bP/+9Wj//vVo//71aPv++Wj7/vlo+/71ZPv+9WT7/vFk9/7xYPf+9WDz/ + uFk//6ZeSv+ehn3/8O/v/83Nzf/Kysr/mJSU+XRubqoAAAA4AAAAHwAAAAwAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAEAAAAEY6Hh+HY1dX//f39//z8/P+lnJn/lFlB/6JOKv+fPxj/nT0T/509FP+cPBT/ + mzwT/5o8E/+ZOxL/mTsS/5g6Ev+XOhL/lzgR/5U4Ef+VNxD/kzgR/5M4Ef+TOBL/kjgS/5I4Ev+TOhP/ + lDsU/5Q8GP+VPhn/lUAb/5hCHv+YRSD/mEYj/5pIJf+bSSj/nEwp/51MKv+cSCb/nkko/6BMKf+iTSv/ + o04u/6RNLP+kTi7/qVY2/6tZO/+sWTv/rFk8/69aPf+wWj7/sVs+/7NbP/+zWz//tF0//7VdQP+2XUD/ + tl1A/7ldQP+5XUD/uV1A/7pdQP+6XUD/ultA/7tbQP+7Wz//u1tA/7xbQP+7W0D/u1s//7taP/+8Wj// + vFo+/7taPv+7Wj7/u1k+/7pZPf+7WTz/uVg9/7JdRf+MXE3/2tbU/97e3v/Ly8v/tLKy/4mEhOQqKipI + AAAAKAAAABEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHXlhYWpeRkfj39/f//v7+//z8/P+NcGP/ + oVg4/6lRK/+kRyD/nj0U/54+FP+dPRT/nD0U/5w8FP+aPBL/mjsT/5k6Ev+YOhL/mDoS/5c4Ef+VOBH/ + lTgQ/5Q4Ef+UOhH/lDgS/5M4E/+TOhP/lDoT/5Q9F/+UPhn/lT8a/5hCHf+YQx//mEYg/5pHJP+aSCb/ + nEsn/51NKv+fTy7/n08v/6BPMP+iUjD/o1Iy/6VVNf+nVjf/qFc3/6lXOv+qWTr/q1o8/65ZPP+vWj3/ + sFo+/7FbPv+yWz//s1s//7RdP/+1XUD/tV1A/7ZdQP+2XUD/t11A/7ldQP+5XUD/uV1A/7pbQP+6W0D/ + ultA/7pbP/+6Wz//uls//7paP/+6Wj//ulo//7paPv+6Wj7/uVk9/7lZPf+5WT3/t1g8/7VaP/+hXkn/ + pZKL/+3t7f/MzMz/x8fH/46Hh/dkYGCJAAAAMAAAABgAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAL + dm9vqr+7u/3//////////7u2tf+RXEX/qVYz/6pRKv+pTSj/o0Ib/54+FP+ePRX/nT0U/509FP+cPBT/ + mzwT/5o8E/+ZOhL/mToS/5g6Ef+XOhL/lzgQ/5U4Ef+UOhL/lToS/5Q4E/+UOhP/lDoT/5U8Ff+VPhn/ + lT8a/5VAHP+YQh7/mUUg/5lGI/+aSCX/m0on/55MKP+gTiv/n04u/6JRMP+kUjH/o1Iy/6ZUNP+nVTb/ + qFY2/6lXOP+pVzr/qlg6/6tZPP+sWj3/rlo9/69aPf+wWz7/sVs//7JdP/+zXT//tF0//7RdQP+1XUD/ + tV1A/7ZdQP+2XUD/tl1A/7ddQP+3XUD/t1tA/7lbQP+5Wz//uVs//7lbP/+5Wz//uVs//7laPv+3Wj7/ + t1k9/7dZPf+3WT3/tlg8/7RYPf+sXkf/i2JU/+ro6P/X19f/zMzM/6Whofx+d3fCAAAANwAAAB4AAAAM + AAAAAgAAAAAAAAAAAAAAAAAAAAMAAAAPjIWF6OHg4P///////////5SCev+fWz//rVQv/6xRK/+sUiv/ + p0ok/6A/Ff+gPhX/nz4V/54+Ff+dPRT/nTwU/5w9E/+bOxP/mjsS/5o7Ev+ZOxL/mToR/5c4Ef+VOhL/ + lzoS/5U6Ev+VOhP/lTsU/5Q8E/+VPBf/lT0Y/5c/Gv+XQR3/mEIe/5pFIP+bRiT/lD8c/4Y3F/9/NRX/ + gDYY/4E3Gv+COBv/gjoc/4Q8Hv+DOx7/hj0g/5dMLv+nVjf/qFc4/6pYOv+rWTv/q1k7/6xaPf+uWj3/ + r1o9/7BbPv+xWz7/sls+/7JbP/+zWz//s10//7RbP/+0XT//tF0//7VdQP+1Wz//tV0//7ZbP/+2Wz// + tls//7ZbP/+2Wj7/tlo+/7ZaPv+1Wj3/tVk9/7VZPf+1WTz/tFg7/7RYO/+vWkH/lVtJ/72zr//l5eX/ + zc3N/7q4uP+LhYXsMTExSAAAACUAAAAPAAAAAwAAAAAAAAAAAAAAAAAAAAVfWFhTlI6O9/v7+/////// + 8fDx/41mVv+oWjv/r1Ms/65SK/+uUiv/rFEr/6ZHHv+gPxX/oD8X/58+Ff+fPRX/nj0V/509E/+dPRT/ + mzwT/5s8E/+aOxP/mTsS/5k6Ev+YOhL/lzsS/5c6E/+VOxP/lTsU/5U7E/+VOxT/lz0Y/5c/Gv+YQBv/ + mEEd/5lDHv+aQyD/o2lR/5x/cv+UeW7/lXlv/5d7b/+YfHL/mn10/5yBd/+iiH3/lXdq/3lCLP+XSy7/ + qVc4/6hXOP+pVzj/qlg6/6tZPP+rWjv/rFo8/65aPf+wWz7/sFs+/7FbPv+xWz//sls//7NbP/+zWz// + s10//7NbP/+0Wz//tFs//7RbP/+0Wz//tFs//7RbPv+0Wj7/tFo+/7RaPv+0Wj3/tFk9/7RZPf+0WTz/ + s1g7/7NYO/+xWDz/oVtE/5d9c//x8fH/zs7O/8zLy/+Nh4f4ZmFhgwAAACwAAAAUAAAABQAAAAAAAAAA + AAAAAAAAAAdqY2OSs6+v+v7+/v/+/v7/uLOx/5hgSf+uWjb/sFMu/7BSLP+uUiz/rlIs/6tRKf+kQhv/ + oj4V/6A+F/+fPhX/nz4V/549Ff+dPRT/nT0U/5w8E/+bOxP/mjsT/5k7E/+ZOhL/mDsS/5g7Ev+XOhP/ + lzsU/5c8E/+VPBT/lzwV/5c+GP+YPxr/mEAc/5c/Gf+dTiv/x7m1/87R1P/Ny83/zczN/87Nzv/PztH/ + 0tHS/9XU1f/a2t3/3t7f/5JvYf+JPiH/p1U1/6dWN/+nVzj/qFc4/6lYOv+qWDv/q1k7/6xaPP+uWTz/ + rlo9/69bPf+vWj3/sFs+/7FaPv+xWz//sVs//7JbP/+yWz//sls//7NbP/+zWz7/s1s+/7NbPv+zWj7/ + s1o9/7NaPf+zWj3/slk9/7JYPP+yWDv/slg7/7JXOv+xVzr/p1k//4hfUP/n5eT/2dnZ/8/Pz/+fm5v5 + d3FxtQAAADIAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAp7dHTL0s/P/v39/f/9/f3/mYqE/6JdQf+xWTX/ + sVUu/7FULv+wUy7/r1Ms/69TLP+qTij/pEEZ/6I/F/+iQBf/oD8X/6A/F/+fPhX/nz4V/54+FP+cPRT/ + nDwU/5s8E/+aOxP/mjsS/5k8E/+ZOxP/mDoT/5g8FP+YPBT/lzwU/5c8F/+YPxn/mEAa/5c8F/+fUTH/ + ysC+/8zJyf/KxcX/y8XF/8vHx//Mx8b/zcnI/87Kyv/Tzcz/3drd/5p4bP+HPR//plQz/6VUNf+mVTb/ + plY2/6dWN/+oVzj/qVc4/6pYOv+rWTv/q1k7/6xaPP+sWjz/rlo8/69aPf+vWT3/r1o9/7BaPf+wWj3/ + sFo+/7FaPf+xWj3/sVo9/7FaPf+xWj3/sVk9/7FZPP+xWTz/sFg8/7BYO/+wWDv/sFc6/7BXOP+wVjj/ + qlg7/49XRP++t7T/4uLi/8/Pz/+zsbH+gnx82AoKCjgAAAAdAAAACgAAAAEAAAAAAAAAAAAAAAyFfn7u + 6Ofn//v7+//8/Pz/j3Jn/61ePv+1WDL/s1Yv/7NWL/+xVS//sVUv/7BULv+vVC//qk0m/6RBGP+jQBf/ + o0AX/6I/F/+gPhX/nz4V/54+FP+dPRT/nT0U/5w9FP+bPBP/mjsT/5k8E/+ZOxP/mTsU/5g8Ff+ZPBT/ + mDwU/5g8Ff+YPRj/mD8Z/5c8FP+fUS//zMLA/8/Mzf/OyMn/zsnJ/87Jyf/Oycn/z8rK/9HMzP/Vz8// + 3trd/5h4bP+COhz/pFIy/6RTM/+kVDT/pVQ1/6ZVNv+mVjf/p1Y3/6hXOP+pWDr/qVk6/6pYO/+rWTv/ + q1k7/6xZPP+sWTz/rlo8/65aPf+uWj3/rlo9/69aPf+vWj3/r1k8/69ZPP+vWTz/r1k8/69YO/+vWDv/ + r1c7/69XO/+vVzr/rlc4/65WN/+uVjf/rFY5/5hUPf+ci4T/6Ojo/9DQ0P/DwsL/hX9/8CAgID8AAAAg + AAAADQAAAAIAAAAAAAAAAGFbW0mMhob1+fn5//r6+v/g39//k2dW/7VhQP+2WDL/tVYw/7RWMP+zVi// + slUv/7FVL/+xVS//sFUv/6pLJP+kQRj/pEAX/6RAF/+iPxX/oD8X/6A+Ff+ePhX/nj4V/589FP+cPRT/ + nDwT/5o7E/+aPBP/mjwU/5o7FP+ZPBX/mT0V/5k9FP+ZPRf/mD0Y/5c7E/+fTiz/zsK//9LP0f/Ry8v/ + 0cvL/8/Kyv/Ry8v/0cvL/9LMzf/Tzc3/3tzd/6eQh/93NBr/nk0u/6NTMv+kUzP/pFQz/6VVNf+kVTX/ + pFU2/6dWN/+nVzf/qFc4/6lXOP+pWDr/qVg6/6pYOv+rWTv/q1k8/6tZO/+rWTv/rFk8/6xZPP+sWTz/ + rFk7/65YO/+uWDv/rlg4/65XOv+uWDv/rFc6/6xXOP+sVzj/rFY3/6xWN/+sVTb/qlU3/55VPP+KbWL/ + 6unp/9LS0v/R0dH/hoCA9VZRUXEAAAAkAAAADwAAAAMAAAAAAAAAAGliYneemZn19vb2//f39/+7tbP/ + mWBJ/7diPv+2WDH/tVgx/7VXMf+0VjD/tFYw/7NWL/+yVS//sVUv/7BUL/+qSyT/pUAY/6VBGP+kQBj/ + o0AY/6JAF/+gPxX/nz4V/58+Ff+ePRX/nT0V/5w9E/+cPBP/mz0U/5o8FP+aPBX/mj0V/5o9Ff+ZPRX/ + mT0X/5c6E/+dSSX/y7qz/9TS1P/Ry8r/0cvL/8/Jyv/Rysr/0crK/9HLy//Ry8v/2NXW/8O3tP9wOiT/ + kUMk/6RTMf+iUTH/olIx/6NTM/+kUzP/pFQ0/6VUNf+kVTb/plU2/6dWNv+nVjf/p1Y3/6hWN/+pVzj/ + qVc4/6lXOP+pVzj/qlc6/6pXOv+qVzr/q1c6/6tXOv+rVzj/q1c4/6tWOP+rVjj/qlY3/6tWN/+qVTb/ + qlU1/6pUNf+qVDX/qlM0/6JVOv+DWEj/3NrZ/9fX1//S0tL/kYuL82dhYZcAAAAoAAAAEQAAAAQAAAAA + AAAAAG1lZZyxra339PT0//X19f+jmZX/pV9E/7pgPP+3WDH/t1ky/7ZYMv+2VzH/tVcx/7RXMf+zVjD/ + s1Yw/7JWMf+xVjD/qksk/6VBGP+lQRj/pEEY/6NAF/+iPxf/oD8V/58/F/+fPhX/nz4V/549Ff+dPBT/ + nDwU/5s9FP+cPBT/mz0V/5o9Ff+aPhX/mj4X/5k7E/+ZPhj/w6ed/9TU1v/Pysn/z8rJ/87IyP/NyMj/ + zcjI/83HyP/NyMj/zsnJ/9jV1v+Mal3/ci4R/59OLv+iUS//olEv/6NSMf+jUjL/o1Iy/6NTMv+jUzP/ + o1Q0/6RVNf+lVTX/plU2/6dWNv+nVjb/p1Y2/6dWN/+oVjf/qFc3/6hWN/+pVjf/qVY3/6lWN/+pVjf/ + qVY3/6lVNv+pVTb/qVU2/6lVNv+pVTX/qVQ0/6hTNP+pUzT/qFIy/6RUNv+IUz7/xsG//9vb2//T09P/ + n5ub9mtlZbQAAAArAAAAEwAAAAUAAAAAAAAAAG9nZ7jBvr768vLy//Pz8/+XhoD/q2FE/71fPf+6WTP/ + ulkz/7pZNP+3WTP/tlgy/7VXMv+0VzL/s1cx/7NWMf+zVjH/sVYx/6tNJf+nQhn/pUAY/6ZBGf+lQBj/ + pEAX/6I/F/+gPhX/oD4V/58/Ff+ePRX/nT0U/5w9FP+cPBT/nTwV/5s8F/+bPRX/mj0V/5k8FP+XNg3/ + u5CA/9PT1v/Mx8f/y8bG/8rFxf/KxcX/ycPD/8nCwv/Jw8P/ysPD/9LOz//GvLn/cEAr/381GP+gTy7/ + ok8u/6BPL/+gUTD/olEw/6NSMf+jUzL/o1Iz/6NTM/+jUzP/pFQ0/6VUNP+lVTX/plU1/6ZVNf+mVTb/ + plU2/6dVNf+nVTb/p1U2/6dVNv+nVTX/p1Q1/6dUNf+nVDX/p1Q0/6dSNP+nUzT/p1Mz/6dSM/+nUjL/ + p1Ex/6VUNf+LTzj/rqWh/9zc3P/T09P/rqqq+m9pacoAAAAuAAAAFQAAAAYAAAAAAAAAAHBoaMvOzMz9 + 7+/v//Dw8P+TeW//s2VG/71gO/+8WzX/ulo1/7pZNP+5WTP/uVgz/7dYM/+2VzL/tVcy/7RXMv+0VzH/ + s1cw/7FXMf+uTif/p0Ia/6ZBGP+lQRj/pEEY/6NBGP+jQBf/oj8X/6A+F/+gPhX/nz4V/549FP+dPhX/ + nT0V/509Ff+cPhf/nD4X/5s+Ff+YNg3/rm5V/83MzP/JxcX/yMLC/8fAwP/Gv7//xsC//8W+v//Fv7// + xr+//8W/v//U09T/tqag/2k0Hv+ANhf/n00r/6BPLP+fTi7/n08s/6BPLv+gUTD/oFEw/6BRMf+iUjH/ + olIy/6NSMv+jUzL/o1My/6RTM/+kUzP/pFMz/6VTM/+lUzT/pVM0/6VTNP+lUzP/pVMz/6VTM/+lUjP/ + pVIy/6VSMv+lUTL/pVEx/6VRMf+lTzD/pU8v/6NRMv+OUDf/mouF/93d3f/U1NT/urm5/XFpadgAAAAx + AAAAFgAAAAYAAAAAAAAAAHFpadvY19f+7e3t/+7u7v+PcWT/u2hG/75gOP+9XTX/vFs1/7tbNf+6WjT/ + ulk0/7lZM/+3WDP/tlcz/7ZXMv+1VzL/tFcx/7NXMf+zVzL/r1Eq/6lFHP+mQRf/pkEZ/6VBGf+kQBj/ + o0AY/6NAGP+gPxf/nz8V/58+Ff+ePhT/nT4V/549F/+dPhf/nD0X/5w+F/+aNw//ok0p/8OzsP/Hxcj/ + w729/8K9vf/Au7v/wbu7/8C6uv+/urr/v7q6/8C6uv/Cvb3/1tXW/7enoP9qNR3/fTQV/55MK/+gTSv/ + n00r/59OLP+fTS7/oE8u/6BPL/+gTzD/oFEw/6BRMP+gUTD/oFEw/6JRMf+jUjH/o1Ix/6NSMv+jUTL/ + o1Ix/6RSMv+kUjL/pFIx/6NRMf+jUTH/pFEw/6NPMP+jTzD/o08w/6NPL/+jTi//o04u/6JOMP+TTzX/ + inhw/93d3f/V1dX/xcTE/nFra+QAAAAyAAAAGAAAAAcAAAAAAAAAAHJqauXh4OD/7e3t/+3t7f+QbV7/ + wGtI/8BfN/++XTX/vV01/7xbNf+7WjT/ulo0/7pZNP+5WTP/uVgz/7dYMv+2WDL/tVcy/7RXMv+zVzH/ + s1gy/7BTLP+qSB//p0EZ/6ZCGf+lQRn/pEEY/6RAF/+kQBf/oj8X/6M+Ff+fPhT/nz4V/50+Ff+ePhf/ + nT4X/5w/GP+dPRT/mzgO/7SFdP/Dw8f/v7q7/765uf+9t7f/vbe2/7y0tP+7tbX/u7W1/7y2tv+9trf/ + wLu7/9rY3P+9q6b/bjgk/3kwEv+cSij/oEwq/55MK/+eTCv/nk0r/59NLP+fTi7/n04u/59PLv+gTy7/ + nk8v/6BOL/+gTy//oE8w/6BPMP+iTzD/ok8w/6JPL/+iTzD/ok8w/6JPL/+iTy//ok4v/6JOL/+iTi7/ + ok4u/6JNLv+iTSz/ok0r/6FNLf+UTTL/g21l/9zc3P/W1tb/zczM/3JqausAAAAzAAAAGAAAAAcAAAAA + AAAAAHJqauzl5eX/7Ozs/+zs7P+Ta1z/xG1I/8FgOP/AXjb/v142/75dNf+9XTX/vVs1/7tbNf+7WzX/ + u1s0/7paNP+5WjT/t1k0/7ZYM/+1WDL/tFgy/7RYM/+yVTD/rEwl/6dDGv+mQBj/pkIZ/6VBGf+kQBj/ + pEAY/6NAGP+iPxf/oj8X/58/Ff+ePxf/nz8X/54+F/+dPxj/mzgP/6RRLv++sK7/vbu9/7q0tP+6s7P/ + ubOz/7mysv+5srL/ubKy/7eysv+6s7P/vLW2/7+5uf/e3N//zsG9/3hJNf9wKAv/mEYk/59MKf+eSyj/ + nUsp/55MKv+eTCr/nkwr/55NKv+eTSv/nk0s/55MLP+eTSz/nk0u/55MLP+fTS7/n00u/59NLP+fTS7/ + n00s/59NLP+fTSz/n0wr/59MK/+fTCv/n0wr/59LK/+fSyr/n0sp/59LKv+VSi7/gGhe/9zc3P/X19f/ + 0tLS/3Nra/AAAAA0AAAAGAAAAAcAAAAAAAAAAHJqau/p6Oj/6+vr/+vr6/+Xa1r/x29L/8JhOv/BXzb/ + wF83/79fNv++Xjb/vl42/75dNv+9XTX/vF01/7tbNf+6WjX/uVo0/7lZNP+2WTT/tlgz/7VYM/+0WDP/ + tFgz/7BRKf+pRhz/p0EY/6dBGf+lQRn/pUAZ/6RBGP+jQBj/oj8X/6I/F/+gPxf/nz8X/58+GP+ePxj/ + nj8Y/5w3DP+vdV7/vLq9/7ezs/+3srH/t7Gx/7axsf+2sLD/tbCw/7WwsP+3sbH/urOz/7u1tf++ubn/ + 3t7f/+Hc2f+FXUz/ayYJ/5NDIf+fSyj/nUon/51LKP+dSyj/nUsp/51LKf+dSyn/nUsq/51MKv+dTCr/ + nEwq/51LKv+dSyr/nUsq/51MKv+dSyr/nkwq/55MKv+eSyr/nksp/55LKf+eSyr/nkop/55KKf+eSin/ + nkko/51JKP+TSSr/f2Zc/9vb2//Y2Nj/1tbW/3JqavMAAAAzAAAAGAAAAAcAAAAAAAAAAHJqavLq6ur/ + 6urq/+vr6/+abFn/y3JO/8VhO//CXzr/w184/8BfN//AXzb/v182/75fNv++Xjb/vl01/71dNf+7WzX/ + uls1/7tbNf+5WjT/uVkz/7dYMv+1WTP/tVgy/7RYM/+yVS//rEoj/6hCGf+nQhj/pkIZ/6RCGf+kQRj/ + pUEY/6Q/F/+iPxf/oEAX/6BAF/+gPxf/oD8Z/549FP+ePRT/s41//7q7vv+1sLD/ta+v/7Wvr/+1r6// + tK+v/7Wvr/+1r6//t7Gx/7q0tP++t7f/wbu8/97c3v/v7Ov/j2pa/2klCP+UQiD/nkkm/5tIJv+cSCb/ + nEgn/5xKJ/+cSib/m0oo/51KKP+cSSj/nEoo/5tKKP+cSij/nEkn/5tKJ/+cSif/nEoo/5tKJ/+bSij/ + nUko/51JKP+cSSj/nUgn/5xJJv+bSCb/nEgn/5xIKP+TSCn/f2Ra/9vb2//Z2dn/2dnZ/3JqavQAAAAy + AAAAFwAAAAcAAAAAAAAAAHJqau/n5+f/6urq/+rq6v+ba1n/zXNR/8ZjPP/FYTr/xWE6/8NgOP/CXzj/ + wV84/8BfN/+/Xzf/vl82/75dNv+9XTX/vV01/7tbNf+7WjX/ulo1/7daNf+3WTT/tlgz/7VYM/+1WDP/ + s1cy/69RKf+rRx7/qEEY/6ZBGP+mQRj/pUEY/6VBGf+kQBj/o0AX/6JAGP+gPxj/oj8Y/6A/Gf+eOxD/ + o0gh/7aZjv+5ur7/tbCw/7Wvr/+1r6//tK+v/7Surv+1r6//trGx/7qzs/++t7f/w76+/8a/v//g3t// + 8/Dw/5BsXf9qIwX/lUMg/51IJP+bRyT/nEgk/5tHJP+bRyX/m0gm/5pIJv+aSCX/m0gl/5tIJv+aSCX/ + mkgm/5tIJv+aRyX/mkcm/5pIJv+aSCb/m0cl/5tHJf+bRyX/mkcl/5tHJf+bRyX/m0gm/5tIJv+TSCj/ + fmVb/9vb2//a2tr/19fX/3JqavMAAAAwAAAAFgAAAAYAAAAAAAAAAHJqauzi4uL/6urq/+np6f+aa1n/ + znZV/8hmQP/GYTv/xmE6/8VhOv/CYDj/wl84/8FfOP/AXzf/v183/79eNv++Xjb/vl41/71dNf+8WzX/ + uls1/7pbNf+5WTT/uVk0/7dZM/+1WDP/tVcz/7RYM/+zVjH/rk0n/6lFHP+nQhj/p0EY/6ZBGP+lQRj/ + pEAY/6RAF/+iQBj/oj8Y/6I/GP+gQBn/nToQ/6NIIf+3lIj/urq9/7Wxsf+1rq7/tK+v/7Wvr/+1r6// + trGx/7qzs/++ubn/w729/8rDw//LxsX/5uXm//Xx8f+EWUf/cCYG/5lGIf+cRiH/m0Yh/5pGI/+bRiP/ + mkYj/5pHJP+aRyT/mkYk/5lGJP+aRiP/mkck/5lGJP+ZRiT/mUYj/5lGJP+ZRiT/mkYk/5pGJP+aRiT/ + mkcl/5pHJf+aRyX/mkcl/5tHJv+QRin/fmdd/9zc3P/b29v/1dXV/3JqavAAAAAuAAAAFQAAAAYAAAAA + AAAAAHJqauXc29v/6enp/+jo6P+cbVz/zndW/8pqQ//IYTr/yGI7/8dhO//GYTj/w2E4/8NfOP/CXzf/ + wl83/8FfN/++Xjb/vl42/75eNf+9XTX/vV01/7xbNf+7WzX/ulo0/7paNf+3WTT/tlgz/7RZM/+1WDP/ + tFgz/7JUL/+uTCX/qEUc/6dBGP+lQRf/pUEY/6VAF/+kQBf/o0EY/6JBGP+iQRn/okAa/546Ef+jQhr/ + tIh4/7q5u/+1sbP/ta6u/7WwsP+1sLD/ubOx/7u1tP+/ubn/xb6+/8rGxf/Ry8v/1M3O//Dw8f/q4t// + cj8o/3wvDv+cRiH/mkMf/5lDH/+aRSD/mUYg/5pFIP+ZQyD/mEUh/5lDIP+ZQyH/mUMg/5hFIf+YRiH/ + mUUh/5hFIf+YRSH/mUUj/5lFI/+ZRSP/mkUj/5pFI/+aRSP/mkcl/5pGJv+NRin/gWxj/93d3f/c3Nz/ + 0dDQ/3FpaeoAAAArAAAAEwAAAAUAAAAAAAAAAHJqatrU0tL+6Ojo/+fn5/+gc2H/zHdW/81tSP/IYzv/ + yGM7/8hiO//HYTv/xmE6/8VhOv/DYDj/w184/8JfN//AXzj/wF83/8BfN/+/Xjb/vl42/75bNv+8XTb/ + vFs1/7tbNf+6WjT/uVo0/7dZNP+2WTP/tVgy/7VYM/+0WDP/sVMu/6xMJf+oRRz/p0EY/6ZAF/+lQBj/ + pEAY/6NBGP+jQRj/o0AZ/6JAGv+fOxL/oD4T/7OBbf+8ubv/tbO0/7awr/+5sbL/urOz/722tv/Bu7v/ + x8DB/8zHx//TzM3/2NPU/9zW1v//////zLqz/2YoDf+NOBX/nEUe/5lCH/+ZQh7/mUMf/5lDH/+ZQx// + mEIf/5lDIP+ZQyD/mUMg/5hDIP+YQyD/mEMh/5hFIP+YQyD/l0Uh/5dFIf+YRSP/mEUj/5hFI/+ZRSP/ + mUUj/5hGJf+JRSr/hXJr/93d3f/d3d3/y8nJ/m5mZuEAAAAnAAAAEQAAAAQAAAAAAAAAAHFpacrIxsb9 + 5+fn/+bm5v+hemz/ynRS/9J0Tv/KYzv/yWQ8/8pjPP/IYjz/yGI8/8djO//FYjv/xWE7/8NhO//CYDr/ + wWA4/8FfOP/BXjj/wF43/79eN/+9XTb/vV02/7xdNf+7XTX/uls1/7paNP+3WjT/tlkz/7ZZM/+1VzP/ + tVgz/7NYM/+yVDD/rk0n/6lHHf+nQhn/pUAY/6RAF/+jQRn/o0EY/6NAGf+jQBr/oD4U/6A7EP+yeWH/ + u7m6/7m0tf+6s7P/vLW2/8C5uv/Dvr7/ycPD/8/Jyv/Uz8//2tXV/97Y2P/m4uP//////517bP9vJQT/ + mUEc/5pCHf+aQx7/mUIf/5lDH/+ZQx7/mEIf/5lDH/+YQx//mUMf/5hDIP+YQyD/mEMg/5hDIP+YQyD/ + l0Ig/5dDIf+YQyH/l0Mh/5hFIf+YRSH/mEUj/5dGJf+ERCn/joB7/97e3v/e3t7/wb+//WxkZNQAAAAk + AAAADgAAAAMAAAAAAAAAAHBpabW6t7f65ubm/+fn5/+fg3n/ynJP/9R5Vf/LYzz/y2Y+/8tlPv/KZT7/ + ymQ9/8hkPf/GYzz/x2I8/8ZiO//FYTv/w2E7/8JhOP/BXzj/wV84/8FeN/+/Xjf/vl03/75dN/+9XTb/ + vF02/7xdNP+6WzT/uVs0/7daNP+3WDT/tlkz/7VYMv+0WDP/s1gz/7JVMP+vTyn/qkkf/6ZCGf+lPxX/ + pEAX/6RBGf+jQBn/pEEa/6A9FP+gOg//s31p/727vf+7t7n/vrm5/8K9vP/HwcH/y8bG/9LMzP/X0tL/ + 3dfX/+Ld3f/i3d3/9/b3/+nh3v9xNx//iDUS/5xDH/+aQh3/mkId/5pBHv+ZQh//mUMf/5lDH/+ZQh7/ + mEMf/5hDHv+YQh//mEIg/5hDIP+YQyD/l0Mg/5dDIP+XQyD/l0If/5VCH/+VQh//l0Mg/5ZGJf+ARCv/ + nJSS/9/f3//f39//tLGx+mlhYcMAAAAgAAAADAAAAAIAAAAAAAAAAHBoaJirpqb35eXl/+bm5v+uk4r/ + yG5L/9iCYf/NZT3/zGY+/8tmPv/LZT7/y2Q9/8pkPf/JYzz/yGM8/8djPP/GYjv/xWE7/8NhO//DYTr/ + wmA4/8FgOP/BXzf/wF84/79eN/++Xjb/vV02/7xdNv+7XTX/u101/7lbNf+3WzT/uVo0/7ZZNP+2WTP/ + tVgy/7NXMv+zWDP/slYx/69SLP+rTCX/p0Yd/6VBGf+kQRj/pEAY/6NAGf+gPRP/oj0T/7aPgP/CwsX/ + wr29/8bAwf/Lxcb/z8vK/9XP0f/a1dX/4Nra/+Pe3v/o4uH/6eTk//////+lg3b/ciQE/5xDHv+bQx3/ + mkMd/5pBHf+ZQh3/mkId/5lCHv+ZQh7/mUIf/5lDHv+YQh7/mEIe/5hCH/+XQh//l0Mf/5dCH/+XQh// + lUMe/5dCH/+VQh//lUIf/5NEIv9/STL/sqyq/+Dg4P/g4OD/o5+f9mRdXaoAAAAcAAAACQAAAAEAAAAA + AAAAAG9nZ3GYk5P05eXl/+bm5v+3qaX/v2tK/9uHZ//RbEb/zWU9/8xmPv/MZj7/y2U+/8tlPv/KZT3/ + yWQ8/8ljPf/HYzz/x2I8/8ZiO//FYjr/w2E6/8FhOv/BYDj/wV84/8FfOP+/Xjf/v102/75dNv+9XTX/ + vF02/7tbNf+6XTT/uVs0/7daNP+3WTT/t1o0/7ZZM/+0WDP/tFgz/7JXMv+yVzL/sVUw/65RKv+qSyT/ + p0Ye/6VCGv+kQRn/oDoP/6hNKv/Csq//yMbI/8vGxv/Pysr/1M7O/9nU1P/f2Nj/4t3d/+Tg4P/p5OT/ + 6uTk//z8/f/f087/cC8T/5M8GP+dQh3/mkEd/5pCHf+ZQh3/mkId/5lBHf+ZQh3/mUId/5lCHv+YQh7/ + mEIe/5hCHv+YQh7/l0If/5dCHv+XQh//l0Ee/5VBHv+VQh//lUIf/5BBIf96UD7/yMfG/+Hh4f/h4eH/ + kYyM81tVVYkAAAAXAAAABwAAAAAAAAAAAAAAAG1lZUGIgoL05OTk/+bm5v/LxcL/uG5S/92Jav/VdlH/ + z2Q7/89mP//OZj//zWY+/8tmPv/LZj7/y2U+/8tlPf/JZD3/yWQ8/8hkO//HYjz/xWI8/8VhOv/CYTr/ + wV84/8FgOv/BYDj/wV84/75eNv+/XTf/vl02/71dNf+8XTT/ul00/7pbNf+3WzT/t1s0/7dZNP+2WTT/ + tlk0/7VYM/+0VzL/s1Yy/7JXMv+xVjH/r1Qw/6xSK/+pTCb/p0gg/6M7Ef+8jHv/zs7R/87Jyf/Tzc3/ + 2NPT/9zX1//g3Nz/5ODg/+jj4//r5ub/7ejo//Pw8f/8+vn/iVdD/4QuC/+eQx7/m0Ed/5tBHP+bQRz/ + mkId/5pCHf+aQh3/mUIc/5hBHf+ZQh7/mEEe/5hCHv+YQh7/mEEe/5dCHv+XQh3/lUEe/5VBHf+VQR3/ + lUEe/4k+Hv99YVT/29vb/+Li4v/i4uL/gnx89ExGRl4AAAATAAAABQAAAAAAAAAAAAAAAAAAAAOCe3vs + 0tHR/+fn5//f3t7/snRb/9+Ma//dhmT/0WU7/9FoP//PZj//zmY+/81mPv/MZj7/zGY+/8tmPv/KZT7/ + ymU9/8lkPP/IZDz/xmM8/8diO//FYjv/xWE7/8NgOv/BYDr/wV84/8FfOP/AXjf/v143/79dNv+9XTb/ + vF02/7xdNf+6XTT/uls1/7dbNP+3WjT/t1o0/7ZZM/+1WTP/tVgz/7NXMv+zVjH/sVUx/7FWMf+wVjH/ + r1Uw/6pKJP+8dlv/4N3e/97c3P/e2Nj/39nZ/+Da2v/j39//5uLi/+rj4//s5ub/7enp/+/r6/////// + q4l8/3ooBf+dQhv/m0Ec/5tBHP+bQRz/mkEc/5pBHP+aQRz/mkEc/5lCHf+ZQh3/mEAc/5hBHf+YQRz/ + mEEc/5dBHf+XQR3/lUEe/5VBHf+VQB3/lEEe/4M9IP+Ab2j/5ubm/+Xl5f/T0tL/e3R07AAAACQAAAAP + AAAAAwAAAAAAAAAAAAAAAAAAAAF9dXXHv729/ufn5//j4+P/rYNz/9uBXf/ilXn/02tD/9JoP//RaD// + z2g//85oP//NZj7/zWY+/8xmPv/LZT7/y2U+/8pkPf/JZD3/yWQ8/8hjPP/HYjv/xWI7/8ViO//CYTr/ + wmA4/8FgOP/BXzj/wF84/8BeN/++XTf/v102/75dNf+8XTX/u101/7ldNf+5WzT/t1o0/7daNP+2WTT/ + tlk0/7RYM/+0VzL/slYx/7JVMf+xVTD/sFUx/69PKv+3akn/5t/d/+zr7P/t6en/7urq/+3q6v/u6ur/ + 7enp/+7q6v/v6+v/7+vr/+/q6v//////w6ug/3YoB/+bPhj/nEAa/5tAG/+bQBv/mj8a/5pAG/+aQBv/ + mj8a/5lAG/+ZQBv/mUAb/5hAG/+XQBv/lz8b/5c/G/+VPxz/lUAc/5VAHP+VQBz/kUEf/39EK/+Zko// + 6enp/+jo6P/CwMD+cWtrzQAAAB0AAAAKAAAAAQAAAAAAAAAAAAAAAAAAAABwaGiKpqKi+eXl5f/m5ub/ + tqCY/9J1UP/pp43/2HZR/9NmPf/SakD/0mk//9FpP//PaD//zmg//81mP//MZj7/y2Y+/8xmPv/LZT7/ + y2U9/8lkPf/JYz3/x2M8/8diO//GYjv/xWI7/8NgO//CYDr/wWA4/8FfOP/AXjb/wF01/8BeNv+/Xjf/ + vV02/7xdNv+7XTX/ul00/7dbNP+3WTT/t1o0/7ZZNP+2WTT/tVgz/7NXMf+zVjD/slUw/7BOKP+3Zkb/ + 6ODd/+/v8P/v7Oz/8e7u//Tw8P/08fH/9vPz//f09P/28/P/9vHx//Tw8P//////2MnD/4I8Hf+cQh7/ + oEgk/59HIf+eRiD/nUUg/51FH/+cQx//m0Mf/5pDH/+bQx//mkMf/5pDH/+aQyD/mkUh/5pGI/+ZRiP/ + mkcl/5pHJv+aSSf/lEkp/4FXRf/Lycj/7Ozs/+vr6/+ppaX6Y1xcnQAAABcAAAAHAAAAAAAAAAAAAAAA + AAAAAAAAAABvZ2dHjYeH9+Dg4P/p6en/0s3M/8VtSf/rqY//4pJ0/9RmPf/UakH/02pB/9NpQP/SaED/ + 0Wk//89oP//OZj7/zmY+/8xmPv/LZj7/y2U+/8tlPv/KZD3/yWM9/8hjPf/HYjv/xmI7/8ZiO//DYTr/ + wmE6/8FfN/+5VS7/n0gl/59HJP+2VzL/wV83/79eN/+9XTb/u101/7pdNf+6WzX/uVo0/7daNP+3WjT/ + tlk0/7VYM/+0WDP/s1cy/69OJ/+6bEz/7ujo//Px8//z8O//9fHx//bz8//29PT/9vT0//f19f/49fX/ + 9/X1//bz8///////5NnV/4xKL/+iSyf/qFQx/6ZTL/+mUi//pVIv/6RRLv+kUSz/pFEs/6NPLP+iUSz/ + oE8u/6BPLv+gTy7/n04r/6BPLv+fTyz/nk4s/55OLP+cTi3/kk0w/4JoXf/s7Oz/7+/v/+vq6v+LhYX2 + UkxMYQAAABEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACh4GB5sjGxv/q6ur/4+Pj/7GAbv/nknL/ + 8Lql/9VtQ//VakH/1WpB/9RqQf/TaUD/0mlA/9JoQP/PaD//z2Y//85mP//MZj7/zGY+/8tlPv/LZD3/ + ymQ9/8lkPf/IYzz/yGM8/8diPP/GYjv/w2A3/8VjPf/RoI7/xauj/5VkUv+GOx3/pkwo/71eN//AXzf/ + vl43/7xdNf+7XTX/uls1/7daNP+3WjT/t1o0/7ZYNP+1WDT/tlo1/65KIf/KlID/9/j6//bz8//29PT/ + 9/X1//f19f/49fX/+PX1//j19f/49fX/+Pb2//bz8///////5drV/41LL/+jSyb/qVQw/6dTMP+nUzD/ + p1Qw/6VSMP+kUy//pFIv/6RSL/+kUi7/o1Mu/6JRLv+iUSz/ok4r/6BOLP+fTiz/nk0r/55NK/+bTy7/ + iUw0/5OLh//z8/P/8vLy/9bV1f+Ce3vmAAAAHgAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + e3Nzo66qqvzn5+f/6Ojo/7emoP/YeVT/98m2/+CJaP/VaD3/1WtC/9VrQf/UakH/1GpB/9NqQP/SaED/ + 0WY//9FoP//OZj//zmY+/81mPv/MZj7/y2Y+/8tlPv/KZT3/yWQ9/8lkO//HYz3/wlox/8x5WP/z7u7/ + +f///+rm5v+zl43/hkgw/407Gv+oTSj/uVgz/75dNv++Xzb/vV82/7xeNv+7XTX/ul01/7pbNf+5WTP/ + r0sk/69hQP/q3Nf/+vv8//j19f/49vb/+fb2//n39//59/f/+ff3//n29v/49fX/+PX1//fz8/////// + 4tXR/49KLP+lTSf/qVQv/6hSLv+nUi7/p1Iv/6ZSL/+kUS7/pFEu/6RRLv+kUS7/pFEr/6NRK/+iUSz/ + ok8r/6BOK/+gTiv/n04r/55NK/+YTy//glZE/9HQ0P/19fX/9PT0/7i0tP1tZ2euAAAAFgAAAAcAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb2dnTI+Jiffe3d3/7+/v/9rY2P+/eF3/86uR//C0nv/WaD3/ + 1mxC/9ZrQv/Va0L/1WtB/9RrQP/TakH/0mpB/9JpQP/PaD//z2hA/85oP//NZj//zWY+/8xmP//KZT7/ + y2Q9/8pkPf/IZD3/xVow/89/X//07u3/9Pb3//f3+P/5+/3/3tXS/6+MgP+NUjz/iz4g/5hBH/+lSST/ + rE4o/7FSKv+zUyv/sVIq/6pMJf+gRR//qGJG/+DMxf/9////+fb3//n39//59/f/+ff3//r4+P/69/f/ + +ff3//n29v/49vb/9/X1//Xz8///////1L62/49BIf+qUiv/qlQv/6hTLv+oUi7/p1Iu/6dSL/+nUi7/ + pFEs/6RRLP+kUSz/pE8s/6NPK/+jTyv/ok8r/6BOK/+gTSv/oE0r/59OLP+QTC3/hXRs//n5+f/4+Pj/ + 8PDw/5GMjPdWUFBjAAAADwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYqEhN3Bv7// + 7e3t/+bm5v+5lor/5Yhm//jKt//ghWH/1mg8/9dtRf/XbEP/1mxD/9VsQv/Ua0L/02tC/9NqQf/SakH/ + 0WlA/9FpQP/OaED/zmg//85oP//NZj//zGU+/8tkPv/KZT7/xlsx/9J/X//48fD/+fr7//b09P/39vb/ + +/z9//z9///q5eP/ybSs/6uFeP+calb/lFc9/5JOM/+UTzP/mFQ4/6VrU/+/nI3/7ebl///////7+fn/ + +vj4//r4+P/6+Pj/+/j4//r4+P/6+Pj/+vf3//n29v/49fX/9/T0//Xx8///////x6ea/5M+G/+sVC// + qlMv/6pTLv+pUiz/qVIu/6dSLv+nUi7/plEr/6VPLP+kTyv/pE8s/6NPK/+jTyv/ok8r/6BPK/+iTSv/ + oE0r/5xOLv+HUTv/vLi2//r6+v/6+vr/1dPT/4V/f90AAAAZAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAHBoaHmfmpr65ubm/+/v7//MyMn/0XpZ//W1nf/vsJn/2GxB/9dtQ//YbkX/ + 2G5F/9dtQ//WbEP/1WtC/9VrQv/Ua0L/02tB/9JqQf/RakD/z2lA/89pQP/OaD//zWg//81lPv/MZj// + yFoy/9SAYf/69PT//P3///n39//59/f/+ff3//n39//9/Pz///////3////29PT/6uTh/+PZ1v/h19P/ + 6N7c//b08/////////////z5+f/8+vr//Pr6//z6+v/8+fn/+/n5//r4+P/6+Pj/+ff3//j19f/39PT/ + 9vHx//b09P//////sYBs/51CHf+vVDD/q1Mv/6pTL/+qUy//qlEu/6lSLP+pUiz/qFIr/6ZRK/+lTyv/ + pU8r/6VPK/+kTir/o04q/6NOKv+iTir/n00s/5VLLP+Ga2D/9PT0//z8/P/7+/v/qaWl+mJbW4oAAAAQ + AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlhYRaMhobuycjI//Ly8v/k5OX/ + u5SG/+uRb//4zLv/44hm/9hpP//Zbkb/2G5F/9htRf/XbEP/1mxD/9ZsQv/VbEL/1GtC/9NqQv/SakH/ + 0mpA/9FpQP/PaED/zmg//85oP//NaD//yV0y/9WCYf/89vX///////z6+v/8+vr//Pr6//z6+v/8+fn/ + +/n5//37+//////////////////////////////////9+/v//fv6//37+//9+/v//fv7//z6+v/8+vr/ + +/n5//r4+P/69/f/+fb2//f19f/28/P/8+/v//v7/P/17On/nFQ2/6pOJ/+vVTD/rFMv/6xTL/+rUy// + qlEu/6lRLv+pUi7/qVEr/6hRK/+nUSv/pU8r/6VPK/+kTiv/pE4q/6ROKv+jTir/nk0s/4tPNf+yrKr/ + /v7+//39/f/h39//jYeH7TMvLy0AAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACBenqbpqKi++jo6P/w8PD/z8zN/9ODZf/0spn/9b+r/91xSf/abUX/2W5G/9luRf/YbUX/ + 121F/9dtQ//WbEP/1mxD/9VrQv/TakH/02pB/9JqQf/RaUD/z2lA/89oQP/OaED/y14y/9aCYv/9+Pf/ + //////38/P/9+/v//fz8//38/P/9/Pz//fz8///8/P///Pz///z8///8/P///Pz///z8///8/P///Pz/ + //z8///8/P/9/Pz//fv7//z6+v/7+fn/+/n5//r4+P/49/f/+Pb2//b09P/08fH/8O3t///////Pr6L/ + nUId/7FVMP+vVC//rlQu/6xUL/+sUy//q1Ms/6pRLP+qUi7/qVEu/6lRLP+oUSv/pk8r/6VPK/+lTyv/ + pU4q/6ROKf+jTyv/lk0s/4ptYf/39/f///////7+/v+2srL7dW5uogAAABAAAAAFAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsZWUhjYaG8MjIyP/z8/P/5ubm/7mhmf/pkXD/ + +sq3/+mYev/ZaD7/3G9H/9pvRv/Zbkb/2G1G/9huRf/YbUX/121F/9dsQ//VbEP/1GtC/9NrQv/TakH/ + 0mpB/9FpQf/PakH/zF80/9iEY///+vn//////////////f3///////////////////////////////// + //////////////////////////////////39///8/P///Pz//fv7//z6+v/7+fn/+vj4//j29v/49fX/ + 9vT0//Xx8f/u6+v/+fn6//r08f+rY0b/rkwn/7FVMP+vVC//r1Qu/65ULv+uVC7/q1Qv/6tTLv+qUiz/ + qlEs/6lRLP+pTyz/qE8s/6ZPK/+lTyv/pU4r/6VOKv+hTy3/iVA5/7y4t////////////+Ph4f+Qi4vv + RD8/NQAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gnt7laKenvrn5+f/8vLy/9nZ2P/Lj3r/8aKD//nHtP/igFv/3GtB/9xvR//abkb/2m5G/9luRf/YbkX/ + 2G1F/9htRf/WbEP/1mxC/9VrQv/Ua0L/02tC/9JqQf/RakL/zF80/9mFZf///Pr///////////////// + //////////////////////////////////////////////////////////////////39///8/P///Pz/ + /fv7//z6+v/7+fn/+ff3//f19f/29PT/9PHx/+/s7P/z8fP//////8aVgf+mRh//s1Yx/7JWMf+wVi// + r1Uv/69UL/+vVC7/rlQu/6xTLv+rUyz/qVIs/6pSK/+qUSv/qE8s/6hPK/+nTyv/pk8r/6VPLP+TSSr/ + k393/////////////////7Ourvt0bm6bAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamNjDY6IiOfAvr7/8PDw/+rq6v/Curj/4ZF0//i6ov/0uaL/ + 3m9G/91tRf/cb0f/3G9G/9puRv/ZbkX/2G5F/9huRf/XbUX/121D/9ZsQ//VbEP/1WtC/9NrQv/Ta0L/ + zl81/9yGZf////v///////////////////////////////////////////////////////////////// + ///////////////////////8/P//+/v//fv7//v5+f/59/f/+Pb2//b09P/18fH/7+3t//Hw8f////// + 2rSl/6pNKP+0VS7/s1gz/7NWMv+yVjD/sVYw/69UL/+vVC//r1Qv/65ULv+sUyz/q1Is/6pSLP+qUiv/ + qlIr/6hPK/+nTyv/p08s/59LKP+NYlL/5eTk//7+/v/+/v7/3Nra/5GLi+crKCggAAAABwAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFpaWWWkZH3 + 3Nvb//f39//h4eH/w6SZ/+yUcv/3vqj/7J+B/91sP//eb0f/3XBH/9xvR//cbkf/2m5G/9huRv/YbkX/ + 2G5F/9huRf/XbEP/12xD/9VsQ//VbEP/0mQ6/9d3Uf//8Or///////////////////////////////// + //////////////////////////////////////////////////39///8/P/9+/v/+/n5//n4+P/49/b/ + 9vT0//Pw8P/w7u7/+Pv8///////ftqb/r1Mu/7ZWL/+3WTP/tVkz/7RYMv+zVzL/s1cy/7FWMP+xVjD/ + sFUv/69UL/+vVC7/rlEs/6xSLP+rUiv/qlEr/6pRK/+oTyv/pE8s/5BOM/+tpqP//Pz8//39/f/z8/P/ + oJub+GJbW3UAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAGMhobFr6ur/Onp6f/w8PD/29zc/8mdjv/wnHv/+sm1/+qUcv/ebED/ + 3nBH/95wR//db0f/3G5H/9puR//Zbkb/2G5F/9huRf/YbUP/121F/9dtQ//WbEP/1GtC/9JkO//imHr/ + //bw//////////////////////////////////////////////////////////////////////////// + //39//37+//8+vr/+/j4//j19f/18/P/9PHz//j5+v////////bx/9egi/+zUir/uVUu/7pbNf+3WjT/ + t1k0/7VZM/+1WDP/s1Yy/7NXMf+yVjD/sVYw/7FVMP+wVS//r1Mv/6xTLP+sUiz/rFIr/6pSLP+pUCz/ + mEkp/5iHgf/6+vr/+/v7//v7+//DwMD8h4GBxAAAAA8AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxaWkpjoiI7MHAwP/v7+// + 6urq/9DMzf/Zm4X/8aiN//rKuf/oiWb/3mxA/99wR//eb0f/3W9H/9xuR//ab0b/2m5G/9luRv/YbkX/ + 2G1F/9htRf/XbEP/1mxD/9VrQv/RYjb/2HpV/+66pv//7OT///////////////////////////////// + ///////////////////////9/f///f3//fv7//v5+v/6+Pj/+ff4//r6+//////////////49f/pwbL/ + xXFR/7ZRKP+7WjL/vV01/7paNf+6WjX/uVo0/7dZNP+2WDP/tVgz/7RXMf+zVzH/s1cx/7FWMP+xVTD/ + sFUv/69ULv+uUyz/rFMs/61UMP+eTCr/lXNm/+zs7f/4+Pj/+fn5/9za2v+Tjo7tU01NOAAAAAcAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAcWlpZJOOjvXV1NT/9PT0/+Tk5P/KwsL/5Zh7//SpjP/4waz/5YJd/99tQP/fcEf/ + 33BH/95vR//db0f/3G9G/9xuR//abkb/2W5F/9luRf/YbkX/2G5D/9ZsQ//WbEP/0mQ7/9FhNf/WdU7/ + 5JyB//TItv//7+n///////////////////////////////////////////////////////////////// + ///////8/P/339b/4q+a/8p4WP+8Vi//vVYv/79eN/++Xjf/vl42/7xbNf+7WzX/u1o1/7paNP+5WjT/ + uVk0/7ZYM/+1VzL/tVcx/7NXMP+zVjH/slYw/7FVL/+wVC//r1Uw/6RMJv+XaFX/2dnZ//X19f/29vb/ + 6unp/5uWlvZlXl5vAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeBgaeinp744uLi//X19f/g4OD/ + 1cC5/+mXdv/0rpH/9r2n/+aEXv/fbUH/4HFI/99wR//ecEf/3m9H/91vR//cbkf/3G9G/9luRv/ZbkX/ + 2G5F/9htRf/XbUP/1m1F/9VrQv/TZDr/0WA0/9FiN//Uckz/3Idm/+Wmjf/rs53/8cm5//nf1P/64df/ + +eDW//jg1v/54Nf/9tjM/+y/rP/lr5n/3Jd8/855Vv/FYz3/v1Ys/75WLv/BXjb/wWE6/8FeOP/AXjf/ + v143/75dNf+9XTX/vFs1/7tbNf+6WjX/ulo0/7daNP+2WTP/tVcy/7VXMv+0VzH/s1cx/7JWMP+wVzH/ + p08q/5pfRv/Cvr3/8vLy//Pz8//y8vL/rqqq+IB5eaYAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAGMh4fLraur+uXl5f/y8vL/39/f/9G+tv/pm3z/9KyR//fBrP/oi2b/4GxA/+FxR//fcEf/ + 3nBH/95wR//db0f/3G9H/9xuRv/abkb/2W5G/9luRf/YbUX/2G1D/9dsQ//WbEP/1WxC/9VpQP/SZTz/ + z2M3/81fNP/MXTL/zGE2/81lPf/OZj7/zWU9/8xkPf/LZT3/ymI4/8ZaMf/DVyz/xVow/8VdM//FXzX/ + xWA6/8ViO//CYTr/wWA6/8FfOP/BXzj/wF43/75eNv++XTX/vl01/7xbNf+7WzX/u1s1/7paNP+5WTT/ + t1cy/7ZYMv+1VzH/tFcx/7NZM/+rUi3/nV9F/7m0sv/v7+//8PDw//Dw8P+7ubn6iIODyQAAAA0AAAAE + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwaGgejYeH3bazs/vn5+f/8PDw/97e3v/Tvrf/ + 7Jt7//Wqjv/6yrn/7JV1/+BtQf/gb0X/4HFI/+BxSP/fcEf/3nBH/91wR//cb0f/3G5G/9luRf/Zbkb/ + 2G5G/9huRf/XbUX/12xD/9VtQ//Va0L/1GtC/9NrQv/Ta0L/0mlA/89mPv/OZj7/zWU9/81lPf/NZTz/ + zGU8/8tlPv/LZT7/ymU9/8ljPf/IYzz/x2M8/8ZiO//FYjr/w2E7/8JgOv/BYDj/wWA4/8BfOP+/Xjb/ + vl42/75dNf+9XTX/vF01/7tbNf+6WzX/ulkz/7dYM/+3WDP/tVkz/65OKf+hYUf/vri2/+7u7v/v7+// + 7u7u/8TBwfyMhobbUUtLKQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + cWlpNIyGhuS7uLj86Ojo//Dw8P/e3t7/0sS+/96eiP/2pon/+8i0/+6gg//hckj/4G5D/+FySP/gcUf/ + 33BH/95wR//db0f/3W9H/9xvR//abkb/2W5F/9huRv/YbkX/2G1F/9dtQ//XbEP/1mxD/9RrQv/Ta0H/ + 02pC/9JqQP/PaUH/z2lA/85oP//OaD//zmg//8xmPv/LZT7/y2U+/8pkPf/JYz3/yWQ9/8hjPP/GYzz/ + xmI7/8VhOv/DYTr/wmA4/8FgOv/AXzj/wF82/75eNv++XTb/vl41/71bNf+8WzX/uls1/7paNP+5WjP/ + rk4o/6FuWv/AvLr/7e3t/+7u7v/t7e3/yMbG/I2Hh+ReV1c/AAAABQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqaj+LhYXlure3/Ofn5//y8vL/4ODg/8fBwf/co43/ + 76KD//m+qP/2u6T/5oRe/99sP//hcUf/4HBH/99xR//fcEf/3nBH/91vR//cb0f/2m5G/9puRv/ZbkX/ + 2G5F/9huRf/YbUP/121D/9VrQ//Va0P/1GtC/9NrQf/TakH/0mlB/9FpQP/PaT//zmk//81mPv/MZj7/ + zGY+/8tlPv/KZD3/ymQ9/8ljPP/IYzz/x2M7/8ZiO//FYjv/xWE7/8JhOv/CYDr/wV83/8BfNv+/Xjb/ + vl42/75dNv+9XTX/vF01/7lZM/+sUS7/pnlo/83Nzf/u7u7/7e3t/+vr6//HxcX8jIaG5WJbW0gAAAAF + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByamo/ + jIaG5Lazs/vk5OT/9fX1/+Tk5P/Pzs//zaqc/+6df//5uqD/+say/+2cfP/idkz/4G1B/+BxR//gcUf/ + 33FH/95wR//ecEf/3XBH/9xvR//abkb/2m5G/9luRf/YbkX/2G1F/9dtRf/XbUP/1m1D/9RsQv/VbEL/ + 1GtC/9NqQf/RaUH/0WlB/89oP//OZj//zWY//8xmPv/MZj7/y2Y+/8tkPv/KZD3/yWQ9/8djPP/HYjz/ + xmI8/8VhO//DYTv/wmE6/8FfOP/BXzf/v183/79fN/++XTb/ulYt/65WM/+qkYf/4uLi/+7u7v/s7Oz/ + 6urq/8K/v/yMhobjZF1dRwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcWlpNI2Hh9ytqqr64ODg//Pz8//o6Oj/2trb/8Kwqv/foYn/ + 9qiJ///JtP/2u6X/6Itm/+FwR//gbUH/4HFI/99xR//fcUf/33BH/91vR//db0f/3G9H/9puRv/Zbkb/ + 2W5G/9huRf/YbkX/121F/9ZsQ//VbEP/1WxC/9RrQv/Ta0H/0mpB/9FpQf/RaD//zmY//81mPv/NZj7/ + zGY+/8tlPv/LZT7/y2U9/8ljPf/IYzz/x2M8/8ZiO//GYjv/xWE6/8NgOP/CXzj/wmA4/8FbMv+3Uyr/ + rWxU/7Kmo//r6+v/7e3t/+rq6v/n5+f/t7S0+oyGhttiW1s8AAAABAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBoaB6Nh4fL + op6e+NPT0//u7u7/7+/v/97e3v/EwcH/zqaZ/+ifhf/5tJv/+cCr//Cojf/mhWD/4G5D/+BwRf/gcEf/ + 33BH/95wR//ecEf/3W9H/9xuR//abkf/2m5G/9luRf/YbkX/2G5F/9dtQ//WbEP/1mxD/9VsQv/Ua0L/ + 02tB/9JqQf/RakD/0Wk//85mP//OZj7/zmY+/8xmPv/LZj7/y2U+/8pkPf/LZD3/yWQ8/8hjPP/HYzz/ + xmI7/8ZhOv/EYDj/v1ct/7NcOf+yj4P/1NPV/+rq6v/r6+v/6Ojo/9va2v+ppaX4ioSEyFtVVSUAAAAD + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4GBppKNjfXAvr7/5+fn//f39//n5+f/1tXV/7+zsP/Zn4v/ + 8KSH//ixl//4tp3/8KSI/+aGYv/hdUv/4HBG/+BvRf/fcEb/33BH/95wR//dcEf/3G9H/9puRv/abkb/ + 2W5G/9huRf/YbkX/2G1F/9dsQ//WbEP/1WxD/9RrQv/TakH/02pA/9FpP//PaD//0Wg//85mP//NZj7/ + zGY+/8tmPv/LZT3/ymU9/8pkPv/KZDz/yWE3/8VYL/+9WTD/uH9o/762tf/o6en/6+vr/+jo6P/m5ub/ + y8rK/5eSkvaCe3ukAAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqamOOiIjs + rKmp/NrZ2f/v7+//8vLy/+Pj4//Kycz/vquk/9mfi//so4b/9aqO//m1nP/xp4v/6Ixp/+N7VP/hdUv/ + 4G9F/99vRf/ecEf/3m9H/9xvR//ab0f/2m5G/9luRv/ZbkX/2G5F/9htRf/XbUP/1mxD/9VrQv/Ua0L/ + 1GtB/9JpQP/SaUD/0Wk//89oP//OZj7/zmY//8xmPv/MaD//zWY+/8xhN//GWTD/w142/759Zf+6rKj/ + 4+Pk/+np6f/o6Oj/5eXl/93c3P+1sbH8kYuL7mtkZGkAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABxaWkpjIaGxZWQkPe9u7v/5OTk//Pz8//w8PD/4uLi/8rIyf+7rqn/ + yaKS/9+bgP/vo4X/96qN/++fgP/qjGn/5H9Y/+F2Tf/gckn/33BH/91vRv/db0f/3G5H/9puRv/Zbkb/ + 2W5F/9huRf/YbUX/2GxD/9ZsQ//WbEP/1WxC/9RqQf/TaUD/0mlA/9FoP//RaUD/0Wg//89lPf/OYDT/ + x10z/8JqRv/AkYL/vrOw/+Li4//o6Oj/6Ojo/+bm5v/j4+P/xsTE/5qUlPiJg4PDZV5eLgAAAAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqamSNh4fm + oJyc+sXExP/m5ub/9PT0//Hx8f/l5eX/1NPT/724t//Bo5n/2ZmA/+WafP/rmXn/7ZJw/+qHYf/mfVb/ + 5XhP/+N0Sv/gcUj/33BH/95vR//db0f/3G5H/9puRf/ZbkX/2W5F/9ltRf/XbUP/2GxD/9hsQf/Wa0H/ + 1Wo//9RoPf/SYzj/zGQ8/8tqRf/JgWT/w6ee/8vIyf/l5eb/6Ojo/+jo6P/l5eX/4uLi/8zKyv+loaH6 + j4qK521lZWkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABza2sMgnx8lIuFhe+jn5/7xMLC/+Tk5P/x8fH/9vb2/+zs7P/g4OD/ + zs3O/7Wuqv+2npf/w5qK/9aYgf/hjW//4Idl/92AXf/le1T/5HpS/+F3Tv/gdUv/33FJ/95wSP/dcEf/ + 3G5F/9pvRf/abkb/2W1F/9JuSP/Ubkf/0nVT/8uDZ//DlYT/vqih/8W/vv/i4uP/6enq/+vr6//o6Oj/ + 5OTk/+Dg4P/KyMj/qKSk+46IiPB9d3eUUUtLEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNrax+Ce3ub + i4WF7Z2Xl/m7ubn/29vb/+rq6v/19fX/9vb2/+3t7f/k5OT/3d3d/8G+v/++s6//uKqm/7ijnP/KnI3/ + wZOD/76PgP+9jHr/u4l4/7qId/+7iHb/u4d1/76NfP/JmIb/y6CR/7+spv/Ds7D/w7u6/9fW2P/o6ur/ + 6+vr/+/v7//u7u7/5+fn/+Li4v/Z2dn/wsDA/5+bm/qMhobufnd3mmNdXSQAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc2trFHJqaneJg4PdjYeH96mlpfzBv7//3d3d/+np6f/x8fH/ + +fn5//f39//x8fH/6+vr/+fn5//i4uL/39/f/93d3f/b29v/2dnZ/9nZ2f/c3Nz/3t7e/+Dg4P/k5OT/ + 6Ojo/+zs7P/w8PD/9fX1//b29v/v7+//6Ojo/+Pj4//a2tr/x8XF/62pqfyPiYn3ioOD3W9oaHpkXV0W + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + cmpqS3x1daGGf3/li4WF9qKdnfm3tbX+y8rK/9/f3//l5eX/6+vr//Dw8P/19fX/+Pj4//v7+//9/f3/ + ///////////9/f3/+/v7//j4+P/19fX/8fHx/+zs7P/n5+f/4uLi/9zc3P/NzMz/u7m5/qSgoPmMhob3 + h4CA5npycqJvZ2dMAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc2trRXNra4h9dXXFgXp67IaAgPSVj4/z + pKCg9rGvr/q+u7v9xsXF/s7Ozv/T09P/1tbW/9jY2P/X19f/1NTU/8/Pz//Ix8f+v729/bOwsPqloaH2 + lpGR9IeAgPSBenrse3R0xXFpaYlvZ2dHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAHNraz5yampuc2trlXJqarJyamrHc2tr2HNra+Nza2vrc2tr7nNra/Fza2vu + c2tr63Nra+Nza2vYcmpqyHJqarNxamqWcWpqbnBoaD8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP/////////////////////4AAD///////////+AAAAP//////////gAAAAA + /////////+AAAAAAP////////4AAAAAAD////////gAAAAAAA///////+AAAAAAAAP//////4AAAAAAA + AD//////wAAAAAAAAB//////gAAAAAAAAA//////AAAAAAAAAAP////8AAAAAAAAAAH////4AAAAAAAA + AAD////wAAAAAAAAAAB////gAAAAAAAAAAA////AAAAAAAAAAAAf///AAAAAAAAAAAAP//+AAAAAAAAA + AAAP//8AAAAAAAAAAAAH//4AAAAAAAAAAAAD//wAAAAAAAAAAAAB//wAAAAAAAAAAAAB//gAAAAAAAAA + AAAA//gAAAAAAAAAAAAA//AAAAAAAAAAAAAAf/AAAAAAAAAAAAAAf+AAAAAAAAAAAAAAP+AAAAAAAAAA + AAAAP8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAA + AAAAD4AAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAA + AAAABwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA + AAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAD4AAAAAAAAAA + AAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH+AAAAAAAAAA + AAAAP+AAAAAAAAAAAAAAP/AAAAAAAAAAAAAAf/AAAAAAAAAAAAAAf/gAAAAAAAAAAAAA//gAAAAAAAAA + AAAA//wAAAAAAAAAAAAB//wAAAAAAAAAAAAB//4AAAAAAAAAAAAD//8AAAAAAAAAAAAH//+AAAAAAAAA + AAAP//+AAAAAAAAAAAAf///AAAAAAAAAAAAf///gAAAAAAAAAAA////wAAAAAAAAAAB////4AAAAAAAA + AAD////8AAAAAAAAAAH////+AAAAAAAAAAP/////gAAAAAAAAA//////wAAAAAAAAB//////4AAAAAAA + AD//////+AAAAAAAAP///////AAAAAAAA////////wAAAAAAD////////8AAAAAAP/////////gAAAAA + //////////8AAAAP///////////wAAD//////ygAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABwAAAA0AAAATAAAAGgAAAB4AAAAj + AAAAJgAAACoAAAAsAAAALQAAAC0AAAAsAAAAKgAAACYAAAAjAAAAHgAAABoAAAATAAAADQAAAAcAAAAE + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAFgAAAB4AAAAm + AAAALgAAADMAAAA2AAAAOAAAADoAAAA7AAAAPAAAAD0AAAA9AAAAPAAAADsAAAA6AAAAOAAAADYAAAAz + AAAALgAAACYAAAAeAAAAFgAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAABAAAAAb + AAAAJgAAAC8AAAA2UFBQbWlpaZ90dHTCenp62319fex+fn72f39//H9/f/5/f3/+f39//H5+fvZ9fX3s + enp623R0dMJpaWmfTU1NcAAAADwAAAA6AAAANgAAAC8AAAAmAAAAGwAAABAAAAAHAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAG + AAAADwAAABwAAAApAAAAMmBgYIZ0dHTCfHx86I+Pj/2np6f/xcXF/97e3v/s7Oz/8/Pz//X19f/39/f/ + +Pj4//j4+P/39/f/8PDw/+Xl5f/MzMz/rKys/5CQkP18fHzodHR0wl5eXokAAAA8AAAAOQAAADIAAAAp + AAAAHAAAAA8AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAMAAAALAAAAGAAAACdBQUFVcHBwrXx8fOOWlpb+vLy8/9/f3//t7e3/9PT0//b29v/19fX/ + 9PT0//Dw8P/x8fH/8fHx//Hx8f/y8vL/8vLy//j4+P/8/Pz//f39//v7+//5+fn/6+vr/8bGxv+ZmZn+ + e3t7425ubq46OjpdAAAAOgAAADIAAAAnAAAAGAAAAAsAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAYAAAARAAAAID09PUxzc3OygoKC7aampv/U1NT/5ubm//Dw8P/l5ef/ + zMzM/66rqv+elZH/hXRu/3tfVv96VEj/fVBB/39MPv+BTT7/gFBC/4FVSf+IZ13/jHdx/6WZlv+/vLv/ + 5ubm//7+/v/+/v7/9vb2/+Tk5P+urq7/gYGB7XBwcLQ1NTVXAAAAOQAAAC8AAAAgAAAAEQAAAAYAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAWAAAAJm5ubpyAgIDlpaWl/9XV1f/h4eH/ + 8fHx/8zMzP+ZlZP/gWxl/3RMPf+DRzL/lEwy/6BRN/+nVzv/rlo//7RbQf+3XEH/ultA/71ZP/+9WD7/ + vFU8/7lQNv+wTDX/n0o3/4pRQv+ZgHn/urSz//7+/v//////9fX1/+jo6P+urq7/fHx85WlpaZ8AAAA7 + AAAANQAAACYAAAAWAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAaVFRUXHx8fMqZmZn9 + ycnJ/9ra2v/u7u7/ysnJ/4p/fP9tSDr/gEEp/5JKL/+dUTT/o1Q3/6hXOv+sWjz/sVs9/7VbPv+3Wz7/ + u1s+/75aPv/AWj3/wlg8/8VVOv/GUzn/yFI3/8hRNv/HTTX/vkoz/6hHM/+GUkb/ppqW/+fn5/////// + 8/Pz/97e3v+cnJz9dnZ2y0dHR2gAAAA3AAAAKwAAABoAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAb + bW1th4ODg+Stra3/1dXV/+Li4v/9/f3/mpCM/3BEMv+EPyP/kUco/5hLK/+eUC//pFIx/6hVNv+sWDj/ + rlk6/7JbPf+2Wz7/uFs+/7xbPv++Wz7/wVk+/8NYPP/GVzr/yFQ5/8pSNv/LUDT/zU8y/81MMf/LSzD/ + x0wx/7RIMf+ITD3/r6Sg//7+/v/7+/v/8vLy/7y8vP99fX3lYmJijwAAADkAAAAuAAAAGwAAAAoAAAAC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAgAAAAoAAAAbdnZ2n5CQkPS+vr7/0dHR//Pz8//EwL7/gV5P/3o3G/+LQCD/k0Uj/5lIJv+cSyr/ + oU8u/6RSMf+nVDX/q1g4/65ZOv+yWzz/tVs+/7hbPv+8Wz7/vls+/8BZPv/CWDz/xVc6/8hVOf/JUjf/ + y1E1/85PM//PTC//z0ou/85KLv/MSS7/x0sx/69JM/+HW1D/29fV///////v7+//1tbW/46OjvRra2ul + AAAAOgAAAC4AAAAbAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAae3t7qpiYmPnFxcX/z8/P//////+klpH/bTMa/4Q4F/+MPBf/ + kT8c/5ZCH/+aRyT/nUoo/6BOLf+jUTD/plQ1/6pXN/+tWTr/slo8/7VZOv+2Vzj/uFg5/75aPf/CWz// + wlk9/8NYPP/HVTn/yFQ4/8pSNv/LUDT/zk8z/89MMP/QSi7/z0ku/85JLv/LSS//wks1/5pKOP+rm5b/ + +/v7//Pz8//j4+P/l5eX+W9vb7AAAAA6AAAALgAAABoAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAWfX19qpubm/vFxcX/0tLS//79/f95XVH/ + djIV/4U2Ev+LNxP/kDoV/5M+Gf+VQh7/mUcj/5xJJ/+gTiz/olEv/6VUM/+qVzf/q1Mz/6NMLv+dVDz/ + nVxH/5tXQf+YSC//pUYr/8BYPP/FWT3/xlc6/8hVOf/IUzf/ylE2/8xQNP/OTjP/z0ww/9BLL//QSi7/ + z0ku/81KL//HTTT/rkw4/5BwZ//29fX/8/Pz/+np6f+bm5v7b29vsAAAADkAAAArAAAAFgAAAAYAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAARfX19m5mZmfnDw8P/ + 09PT//n49/+AXE3/fDUV/4UyD/+JMw3/jTYP/5A5E/+SPRn/lEEd/5hFIf+bSSb/nkwr/6FQLv+lUzP/ + pE4s/6diSP+/pJr/0sjH/9nU1P/Z09P/0MLA/6mBdv+SQCj/vVQ4/8ZZPP/HVzn/yFQ4/8lTN//LUjb/ + zFA0/85PM//OTjH/z0ww/89LL//OSzD/zUww/8hONP+3UDr/il9U//Hv7//09PT/6enp/5eXl/lra2ul + AAAANwAAACYAAAARAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAL + eXl5f5WVlfS+vr7/z8/P//r5+P99VUX/fzQU/4c0Df+KMw3/izMM/4w1Dv+POBL/kTwX/5RAHP+XQx// + mkgl/51LKP+hTy3/oUsq/6xtU//UzMr/3t7h/9rV1//Y09P/2dTV/97c3f/s7u//v6ag/5dAKP/DWTz/ + xVg8/8dVOf/IVDj/yVM3/8pRNv/LUTX/zFA0/8xPM//OTzP/zk4x/85OMf/NTzL/yFA1/7hROv+FV0r/ + 8/Hx//Pz8//j4+P/jo6O9GJiYo4AAAA1AAAAIAAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAGa2trTY6OjuS1tbX/ycnJ//79/f9xTT3/gDUV/4kyDf+LMwv/jjML/440DP+ONQ7/ + jzcR/5E8Ff+TPhr/l0Ie/5lGI/+cSSf/nksq/6NSMf/OvLb/19XY/9DKyv/PyMj/zsjI/8/Jyf/Ry8v/ + 08/P/+3v8P+peGv/sEou/8VaPv/FWDz/x1c5/8hVOf/JVDj/ylI3/8pSNv/LUjX/y1E1/8tRNP/MUDT/ + y1A0/8pRNf/GUjj/tlE6/4xjWf/39/b/8PDw/9bW1v99fX3lSEhIZwAAAC8AAAAYAAAABgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD4qKiserq6v/xMTE//39/f+DaFz/fzYV/4s1Dv+OMwv/ + jjMK/440C/+ONAz/jjUO/483EP+ROhT/kj4Z/5VBHf+YRSH/m0gm/5tGIv+ublX/0s/Q/8vGxv/IwcH/ + x8HB/8fAwP/HwcH/ysPD/8zHx//e3eD/y7Os/6VHLP/DWj7/wlk9/8VYPP/GVzr/yFU5/8lUOP/JVDf/ + yVM3/8lTNv/KUzb/ylI2/8pRNv/JUTb/yFI2/8NUOf+xUTv/k3Zt//j4+P/v7+//urq6/3Z2dssAAAA5 + AAAAJwAAAA8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4SEhJGhoaH9vr6+/+3t7f+0p6L/ + ejMV/402EP+PNA3/kDQL/480C/+QNAv/kDUO/481Dv+QNg//kTkT/5I9F/+UPxv/l0If/5lHJP+aQx7/ + rXRd/8rJy//Fv7//wry8/8G8vP/BvLv/wru7/8W+vv/IwsL/1dPV/9K+uP+nSi//wVs+/8FaPf/CWT3/ + xVg9/8ZYPP/HVzr/yFc5/8hVOf/IVTj/yFQ4/8hUOP/IVDf/yFQ3/8hTN//GVDj/wVY8/6ROOf+xpJ// + +Pj4//Ly8v+cnJz9aWlpnwAAADIAAAAcAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmlpaTGTk5Pk + tra2/9LS0v/v7ev/cDQc/484Ff+SNg//kzUM/5I0DP+SNAz/kDUM/5A1DP+QNQ//kDYP/5E4Ev+TPBX/ + lD8a/5dCHf+ZRiL/mUMe/6lnT//GwsP/wLu7/7+4uP++t7f/vre3/764uP/Bu7v/w729/9XX2P/QtKv/ + rUww/79bPv+/Wz7/wFo+/8FaPf/DWT3/xVk9/8VYPP/FWDz/x1c8/8dXOv/HVTr/x1U6/8ZVOf/GVTn/ + xlU4/8NVOf++Vj7/jEk2/+Th4f/39/f/3d3d/3x8fOU2NjZVAAAAKQAAABAAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAaLi4upp6en/8PDw//6+vr/fFlK/406GP+UOBH/lzYP/5U2Dv+UNQz/kzUM/5E1DP+RNgz/ + kTUP/5E2D/+SNxD/kzoU/5Q+GP+VQBz/mEUf/5pHI/+cSij/vaeh/8C/wf+8tbT/vLW1/7y1tf+9trb/ + vre3/8C9vf/i4+X/vH1q/7VTNv+7Wz//vVs//79bP/+/Wz7/wFo+/8JaPv/CWj3/w1k9/8NZPf/FWD3/ + xVg8/8VYPP/FWDr/xVg6/8NXOv/DVzr/v1g7/7RUPf+DXlT/9fX1//Hx8f+rq6v/cHBwswAAADIAAAAb + AAAABgAAAAAAAAAAAAAAAAAAAAF1dXU1mZmZ7Lu7u//d3d3/x7+8/4A2F/+WOhT/mDgQ/5g4D/+XNw// + lTcO/5Q2Dv+TNQ7/kjYO/5I2D/+SNhD/kjcQ/5M5E/+UPRf/lUAa/5hDHv+aRiL/mkMf/6VeQf+/r6r/ + wMDC/7y5u/+8uLj/vbm5/8PDxv/b29z/y6CR/65SNP+3Wz7/uFw//7tcP/+8Wz//vVs//79bP//AWz// + wFo+/8BaPv/BWj7/wlo+/8JaPf/CWT3/wlk9/8FZPf/BWDz/wVk8/79YO/+7WD//m0o0/8G4tf/4+Pj/ + 5ubm/4GBge09PT1ZAAAAJgAAAA0AAAABAAAAAAAAAAAAAAAEjo6OoKmpqf/Hx8f/9fT0/35TQf+TOxj/ + mjoS/5s5Ef+aORD/mTgQ/5g3D/+VNw//lTYO/5Q2Dv+TNw7/lDYQ/5I3EP+TOBH/lTwV/5U/GP+YQRz/ + mkMf/5tHJf+bRSH/o1U2/7WJef/Aq6T/wLKt/8i3sv/MrqX/vX9p/6xSM/+zWjz/tFs+/7ZbPv+3XD// + uVw//7tbP/+8XD//vlw//75bP/+/Wz//v1s+/79bPv+/Wz7/wFo+/8BaPv/AWj3/v1o9/79ZPf+/WTz/ + vFg7/7RYPv9/UUP/8fHx//Dw8P+pqan/bm5urQAAAC8AAAAWAAAABAAAAAAAAAAAAAAAB5mZmeC7u7v/ + 3t7e/8vFwv+ORij/nUEb/506Ef+dOhL/mzoR/5o5EP+ZOBD/mDgP/5c3D/+XNw//lDcP/5Q3EP+TNxD/ + lDgQ/5U5E/+VPRf/mEAa/5lCHv+aRiL/nEkm/51IJf+eRyP/o1Av/6ZVNf+pWDf/p1Ev/6lRMP+uWTn/ + r1o8/7JaPf+0Wz7/tVs+/7ZcPv+3XD//uVw//7tcP/+8XD//vFw//71bP/+9Wz//vls//75bP/+9Wz7/ + vlo+/75aPf+9Wj3/vVk8/7tZOv+4WT7/l0ky/8S8uf/29vb/3Nzc/3t7e+MAAAA2AAAAHgAAAAcAAAAA + AAAAAYyMjG6pqan+xcXF/+/v7/+JaFv/olEv/6dKJf+hPRP/njwS/548Ev+cOhL/mzkR/5o4Ef+ZOA// + mDgP/5c3D/+VOBD/lTgQ/5U4Ef+VORL/lz0V/5c/Gf+ZQRv/mkUf/5tGI/+dSSX/oUwo/6JOK/+kTyz/ + plEu/6lTM/+rVzb/rFg4/61ZOf+vWjz/sFo8/7NbPf+0Wz7/tVw+/7ZcPv+3XD//uFw//7lcP/+5XD// + u1w//7tbP/+7Wz7/u1s+/7tbPv+7Wj7/u1o9/7lZPP+5WTz/t1g9/65VO/+EYFT/8/Pz/+7u7v+YmJj+ + YGBghgAAACYAAAANAAAAAQAAAAKWlpa4srKy/9vb2//e3Nv/iUsw/6lSLv+tUCv/pUUc/6E8Ev+hPRP/ + njwS/506Ef+cOhH/mzkQ/5o5EP+ZOA//lzgQ/5g4EP+XOBH/lzkR/5c6E/+YPRf/mD8a/5pCHf+bQx// + kkAd/4U9Hv+FPSH/hj8j/4hBJf+JQyf/ikIm/6FRMf+rVzj/rVg4/65ZOv+vWjz/sFo9/7NbPf+0Wz3/ + tFs+/7ZcPv+2XD7/t1w+/7dcPv+3Wz7/uFs+/7hbPv+4Wj3/uFo9/7daPP+3Wjz/t1k8/7VYOv+yWTz/ + h0Qw/+Pg3//29vb/u7u7/3R0dMIAAAAuAAAAEwAAAAIAAAAFn5+f5sHBwf/n5+f/r6Kd/5xOLf+vUy3/ + r1Er/61PJ/+kQBj/oj0T/6E9E/+gPBP/njwS/508Ef+cORH/mjkR/5k5EP+ZORH/mDkR/5g5Ev+XOhL/ + mDwU/5k+GP+ZPxj/nUgk/7eaj/+2q6n/taek/7eqpv+5rar/wri2/62Zkf+JRSr/qlQ1/6pXN/+sVzj/ + rVk5/65ZOv+vWTz/sFo8/7JbPf+zWj3/tFo+/7RbPv+1Wz7/tVs+/7VbPv+1Wz3/tVo9/7VaPf+1Wjz/ + tVo8/7VYOv+0WDn/slc6/51MM/+snZf/8/Pz/9/f3/98fHzoAAAAMwAAABoAAAAFjIyMSqurq/3Gxsb/ + 8fHx/41sX/+qVjP/slMt/7JSLP+wUyz/rEwl/6Q/Ff+jPhT/oj4U/6E9E/+gPRL/nTwS/5w6Ef+bORH/ + mzkR/5o5Ef+ZORL/mToS/5g6Ev+ZPRX/mDoT/6BPLv/PyMf/0tDR/9LMzv/T0ND/1NHR/9vZ2//Rysr/ + iUku/6VRMP+nVDX/qVU2/6pXN/+rVzf/rFg5/61ZOf+uWjr/r1o8/7BaPP+yWjz/slo9/7JaPf+zWjz/ + s1o8/7NaPP+zWTz/s1k6/7JYOv+yWDn/slc4/7BXOP+nUzb/hGBU//Dw8P/t7e3/jo6O/VJSUmoAAAAe + AAAAB5aWlomwsLD/1dXV/+no5/+MWEL/slo1/7VVLv+0VS3/s1Qt/7JULf+sSyP/pD8U/6Q+FP+jPhT/ + oj0T/6A9E/+ePBL/nTwS/5w6Ef+bOhH/mzoS/5o6E/+aOhP/mjwT/5g5Ev+hTyv/0cbF/9PP0P/Sy8z/ + 0szM/9POzv/Z09T/0crJ/4NJMf+hTCv/pVIx/6VUM/+mVDX/p1U1/6pXNv+rWDj/rFg4/61YOf+tWTn/ + rlk5/65ZOv+vWTr/r1k6/69ZOv+vWDn/r1g4/69XOf+vVzj/r1c3/65VN/+tVDb/qVQ4/39HNP/n5eX/ + 8fHx/6Ghof9qamqdAAAAIwAAAAqcnJy2ubm5/+Li4v/Mycj/lVE2/7VaNP+3Vy//t1Uu/7VVLf+0VC3/ + s1Qu/6xLI/+mPxX/pT8U/6M/Ff+iPhP/oT0T/6A8E/+ePBL/nToR/5s8Ev+cOhP/mzwT/5o8E/+ZOBH/ + nkgj/9DBvf/V0tP/08zM/9LMzP/SzMz/1M/P/9vY2f+MZFP/kD4c/6ZSMP+kUTD/pVIx/6VTM/+mUzT/ + p1U1/6lVNv+qVTb/q1c2/6tXN/+rVzf/rFc4/6xXOP+tVzj/rVc3/61VN/+tVTf/rVU2/61VNv+sVDX/ + rFM0/6hSNP+IQij/zMfF//Dw8P+6urr/dXV1wQAAACYAAAALoaGh1cLCwv/r6+v/s6up/6FVN/+5WjP/ + uVkx/7lYMP+3VzD/tlcv/7VVL/+0Vy//rUsj/6dAFf+mQBX/pD8V/6I+FP+iPRP/oT0T/6A8Ev+dPBL/ + nToS/5w8E/+bPBP/mzoS/5o6E//Ir6b/09PU/9DKyf/Oycn/zsjI/87Ix//V0tP/uaul/3UzGP+eSif/ + pFAu/6NQL/+kUC//pFEw/6RSM/+lUzP/plM0/6dUNP+nVDX/qVQ1/6lUNf+qVDX/qlQ1/6pUNf+qVDX/ + qlM0/6pTNP+qUzT/qlIx/6lRMf+nUTH/kUUo/6+jnv/v7+//z8/P/3p6etoAAAAqAAAADaampunOzs7/ + 8PDw/6CRjP+pWzv/vFs1/7xZM/+8WTH/uVgx/7hXMP+2VzD/tlcv/7RYL/+vTiX/qUEX/6Y/FP+lQBX/ + pD4U/6M+FP+iPRT/oTwS/548E/+ePBP/nTwU/509E/+ZNQn/u458/9DQ0//KxcX/ycLC/8fBwf/HwcH/ + x8HB/9PR0/+iiX//di8R/55KJv+jTyz/ok8s/6NQLv+iUC7/o1Ev/6RRMP+kUjH/pVIx/6VSM/+lUjP/ + plIz/6ZSM/+mUjH/plIx/6ZRMf+mUTD/plAw/6ZQL/+mUC//pE8v/5ZHK/+XgXj/7Ozs/9vb2/99fX3r + AAAALAAAAA6qqqr11dXV//Ly8v+TgHn/tGA9/79cNf+/WzT/vVoz/7xZM/+7WTH/uVcw/7hXMP+2Vy// + tVcw/7BRKP+qQhn/pj8V/6ZAF/+lPxX/oz8U/6I+E/+hPRL/oD0T/6A9FP+ePRT/mzcL/6lcPf/Hw8X/ + w7+//8K8vP/Au7v/v7m5/8C5uf/CvL3/1NHT/6SKf/91LhH/m0Ui/6NOKv+hTCv/oUws/6FOLP+hTy3/ + oU8t/6FPLv+jUC7/o1Av/6NQL/+jUC//pFAv/6RQLv+kTy7/pE8t/6ROLf+kTi3/o04s/6FMLP+ZSCr/ + iGtf/+vr6//g4OD/fn5+9gAAAC0AAAAPrq6u+9fX1//z8/P/kXx0/7pjP//AXTb/wFw0/79cNP++WzT/ + vVs0/7xaM/+7WjP/uVkx/7dYMP+2WTH/tFQt/6xHHv+nQBX/p0AV/6VAFf+kPxX/oz4T/6I+FP+hPhT/ + oD4V/549FP+dOQ7/uJeK/8DAwv+8trX/vLW1/7u0tP+5tLT/u7W1/7+4uP/Y1dj/tqGZ/3QzGP+UPxv/ + okso/55LJ/+gSyj/oEsq/6BMKv+gTCv/oEwr/6BMLP+hTCz/oUwr/6FMK/+hTCz/oUwr/6FLK/+hSyr/ + oUsq/6FKKP+gSij/mkgo/4VjVv/r6+v/39/f/39/f/sAAAAtAAAAD7Gxsf7Z2dn/9vb2/494b/++ZUH/ + xF42/8JeNv/BXjX/wF01/8BdNf++XDT/vVs0/7xaM/+5WjP/uFkx/7dZMf+1VzD/r04k/6pCGP+nQBX/ + pkAX/6VAFf+kPxX/oz4U/6E/FP+hPhX/njkP/6VPLP+8sK7/ube5/7iwsv+3sLD/t7Cw/7ewsP+7tLT/ + vri4/9zb3f/Lvrj/dzkh/5E8GP+hSSb/nUkl/51JJv+eSSf/nUon/55KJ/+dSif/nUon/51KJ/+dSif/ + nkon/55JJ/+eSSf/nkkm/55IJv+eSCb/nUgm/5lGJf+BXU7/6+vr/93d3f9/f3/+AAAALAAAAA6ysrL+ + 3t7e//j4+P+Re3P/wGhD/8ZgN//GYDf/xV43/8JeNv/BXjb/wF01/79cNP++XDT/vVo0/7taM/+5WTP/ + uFgx/7dZM/+zUiz/rUgd/6lAFf+mPxX/pj8X/6U/Ff+jPxT/oz4V/6I+Ff+eNwv/q2JD/7u1tv+3tbf/ + t7Cv/7awsP+2sLD/uLOz/7+4uP/Dvr7/4uHi/9XKxv92Nx3/kzwY/55II/+cRyP/nEcj/5xHJP+cRyT/ + nEck/5tHJP+cRyT/nEck/5tHJP+bRyT/nEYk/5xGJP+cRiP/nEYj/5tHJP+WRiT/gV1P/+rq6v/a2tr/ + f39//gAAACoAAAANsrKy++Pj4//39/f/kn94/75oRv/IYjn/yGE4/8ZgN//FXjf/w142/8JeNv/AXTX/ + wF00/79cNP+9WzT/vFo0/7taM/+4WTH/t1gz/7ZYMP+yUCj/rEYb/6dAFf+mPxT/pT8V/6Q/Ff+jPxX/ + oj8V/6A3C/+sYUH/u6+t/7i2uP+3r6//t7Cw/7m0tP+/ubj/x8HB/87IyP/s7O3/z764/3MtD/+ZQBv/ + nEMf/5tFH/+bRR//mkUh/5pDIf+aQyH/mkUh/5pDIf+aQyH/mUMh/5pDIf+aRSH/m0Ui/5tFIv+aRiP/ + lUMi/4NhVf/l5eX/2NjY/39/f/sAAAAmAAAAC6+vr/Xl5eX/+vr6/5eIgv+5aEj/yWU9/8piOf/JYTn/ + x2E4/8ZgOP/FXjb/wl42/8FeNv/BXTX/wFw1/75bNP+9WzT/vFoz/7lZM/+4WTH/t1kx/7VXMP+wTyf/ + q0Yc/6dAFf+mPxT/pD8V/6NAFf+kPxf/oTYL/6lVMf+7q6b/uLe5/7iysv+8trX/wby7/8nDw//TzM7/ + 2dTU//n7/f+wlIj/eSgG/51DHf+aQh3/mkId/5pCHf+ZQh3/mkIe/5lCHv+ZQh7/mUIe/5lCHv+YQh// + mEMf/5lDIf+ZQyH/mUMi/5BAIP+Hal7/4uLi/9bW1v9+fn72AAAAIwAAAAqtra3p4eHh//r6+v+rop7/ + smVH/8xnP//MZDz/zGM8/8pjOv/IYjn/x2E5/8ZhOf/DYDf/w143/8JdNv/AXDb/v1w1/75cNf+8XDP/ + u1sz/7laM/+4WDH/t1kx/7VVMP+wUCj/rEcd/6dBF/+kPhT/pD8V/6Q/F/+hOAz/qVIt/7ysp/+8u7z/ + wLi5/8a/v//OyMj/19HR/97Z2f/n4+T/+Pf3/4ZROf+QNhD/nUIc/5pBHP+aQR3/mkId/5pCHf+ZQhz/ + mUEd/5lCHv+ZQh7/mEIe/5hCHv+YQh7/mEIe/5dDIP+KPBz/mIR8/+Xl5f/Ozs7/fX196wAAAB4AAAAH + qqqq09jY2P/5+fn/vbi3/6tmSf/Oa0T/zmU9/85lPf/MZDz/ymM6/8ljOv/IYjn/xmE5/8VhOP/FYDf/ + w143/8JdNv/AXTX/v1w1/71cNP+8WzT/u1oz/7laM/+3WTH/tlkx/7VXMP+yUiv/rUoi/6lDGv+lQBf/ + pD8V/6I2Cv+rWDf/wbm4/8XBwf/Lxcb/087O/9vV1f/j3d3/5+Li//z8/f/Js6v/fCoI/51CHP+bQRv/ + m0Eb/5pBHP+aQRz/mkEc/5lBHP+ZQRz/mUEd/5hBHf+YQR3/mEEd/5dBHf+UQR//gzcY/6memf/k5OT/ + wMDA/3t7e9oAAAAaAAAABaenp7PNzc3/+Pj4/+De3v+gZ0//z3BK/9BlPP/PZj3/zmY9/85lPf/LZDz/ + ymQ8/8ljOv/IYjn/xmE4/8NhOP/DYDf/wl43/8FdNf/AXDX/vlw1/71cM/+8WzP/uVoz/7laM/+4WTH/ + tlcz/7VXMP+0VC7/r1Ao/6tKIv+nRRz/ojYJ/7iFcf/MzM//0cvL/9nT0//h29v/5uLi/+zm5v/y7u7/ + 9vPz/4ZHLP+YOhP/nEEb/5tAG/+bQRv/m0Eb/5pAG/+ZQRz/mUEc/5lBHP+YQRz/mEEc/5dAG/+XQBz/ + k0Ae/3o3G//Au7n/4uLi/6mpqf92dna/AAAAEwAAAAKkpKSFx8fH//f39//z8vL/mnJi/9F3VP/SZjz/ + 0mY+/9BmPf/PZj3/zmY9/8xlPf/LZDz/ymQ6/8liOf/HYjn/xWE4/8NgOP/DXjb/wl43/8FcNf+/XDX/ + vlw1/7xcNP+7WzP/uVoz/7lZM/+3WDH/tlcx/7VXMP+zVTD/slQv/6xLI/+2Zkb/3tnZ/+Db2//i3Nz/ + 5eDg/+rk5P/t6en/8Ovr//////+keWb/jC8I/51BGf+cPxr/m0Aa/5tAGv+bQBr/mkAb/5k/G/+ZQBv/ + mUAb/5hAGv+XQBr/lz8a/5A+Gv96RC7/z87O/93d3f+Xl5f/b29vlgAAAA0AAAABoaGhRcDAwP329vb/ + /v7+/6aOhf/Melr/1GtB/9NpP//SZz7/0Wc9/9BmPf/OZj3/zmU9/8xkPP/LYzz/yWM6/8hiOf/HYTj/ + xWA4/8VgOP/DXTf/wlw1/8NdNf/BXTX/vVw1/7xbM/+5WzP/uVoz/7hZM/+2WDH/tVcw/7RUL/+yUiv/ + tl48/+rg3P/z8vL/8+7v//Tw8P/08PD/9fLy//Xw8P//////vqGT/4kvCf+gQhv/nUAa/5w/Gv+bQBr/ + mj8a/5o/Gv+aPxr/mUAa/5lAG/+YQBv/mEAc/5dBHv+PPRv/iGVX/9jX1//T09P/ioqK/WBgYFoAAAAH + AAAAAAAAAACvr6/k6Ojo//39/f/Gvrr/wXxh/9h2UP/VaT7/1Wk//9RnP//SZj7/0WY9/9BmPf/OZj3/ + zmU9/8xkPP/LYzr/yWI5/8hhOf/GYTj/xWA4/75ZMP+mSib/slAq/8JeNv/AXTX/vVw0/7xbNP+7WjP/ + uVoz/7dZM/+2WDD/tFIr/7dgPP/v5uT/9/X2//j19f/59/f/+/j4//z4+P/79/f//////9O+tv+TPxz/ + qVAr/6VPKv+lTij/pEwo/6NMKP+iTCj/oUso/6FLKP+gSyj/oEwo/55MKv+cTCv/jEEi/6mZk//e3t7/ + xsbG/319fecAAAAWAAAABAAAAAAAAAAAqamps9PT0//8/Pz/8fDw/7CAbf/bhmT/1Wc9/9hqQP/Vaj// + 1Gk//9NnPv/SZj7/0GY+/89mPf/OZT3/zGQ9/8tkPP/KYzr/yGI5/8ZcM//brJr/0MG7/5lgSv+aQBz/ + uFMs/8FcNf/AXTX/vlw1/7xbNP+8WzT/u1kz/7BIHv/HinP//P3+//v4+P/8+Pj//Pn5//z5+f/8+Pj/ + +/f3///////Xwbj/l0Ie/6xTLf+pUi7/qVIu/6ZRLf+lUS3/pVEs/6RRLP+jUCz/o08r/6JOK/+fTir/ + nEsp/4RHLv/Ewb//5OTk/6SkpP94eHi8AAAADQAAAAEAAAAAAAAAAKSkpGbJycn++Pj4//////+xmY// + 2Ipr/9tzSv/Ya0D/2GtA/9hrQP/VakD/1Gk//9JnP//RZz7/0GY+/89mPv/OZT3/zGQ8/8piOf/IXjX/ + 79rS///////y7+//vqKY/5pbQ/+aRSP/pkch/65MJP+yTyX/r0wj/6dHHv+2c1j/9Ozp///////9+/v/ + /fz8//78/P/9+/v//fn5//n39///////y6+j/5tCHP+tUy3/qlEs/6lRLf+nUSz/plAr/6VQK/+lTyv/ + o08q/6NPKv+iTir/oU4r/5ZGJP+Sbl//0dDQ/9HR0f+QkJD+bm5udQAAAAYAAAAAAAAAAAAAAAAAAAAA + sLCw3ubm5v//////5eHg/8SHb//gh2P/2ms//9ttQv/ZbEL/2GxC/9dqQf/VakD/1Go//9JpP//RZz// + 0Wc+/89mPf/OYzz/ymA3//Pa0f/+/////fv8///////29PT/2cnD/7+ekv+wgnD/rXpl/7WGcf/Stqv/ + +/j4/////////Pz///39///9/f/+/Pz//fv7//z4+P/59fX//////76Rf/+jQx3/rVIt/6xRLP+rUSz/ + qlEr/6dQK/+mTyr/pU8r/6VPKv+kTyj/ok4q/6BMK/+MQyT/tqyo/93d3f+7u7v/fHx84QAAABAAAAAC + AAAAAAAAAAAAAAAAAAAAAKioqJjR0dH/+vr6//7+/v+3mIz/3Yxr/952Tv/bbUP/225D/9psQv/ZbEH/ + 2GxB/9VqQf/UakD/02o//9JpP//RZz7/0GQ8/8xiN//23dT////////9/f///f3///////////////// + /////////////////////////////v7///7+///9/f///f3//vv7//35+f/79/f/+Pb2//79/f+rZUj/ + rUwl/65SLf+tUi3/rFAs/6tQK/+rUCv/qVAq/6dPKv+mTir/pU4o/6NOKf+cRiH/kmVS/8vKyv/V1dX/ + mZmZ/3Z2dqIAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAACioqIrtLS06u3t7f//////7Obk/82SfP/ji2r/ + 3W1C/9xvRf/bbkP/221D/9ptQ//YbEL/12tB/9VrQP/UaUD/0mk//9FmPf/PYzj/+ODY//////////// + /////////////////////////////////////////////////////////////v7///z8//35+f/79/f/ + 9vTz///////iysD/pUgi/7JTLP+vUy3/rlMs/61SLP+sUCv/q1Ar/6pPK/+nTyr/pk8q/6ZOKP+kTij/ + k0Qk/7muqf/a2tr/wcHB/4GBgexiYmI4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmpqaDS0tL/ + +Pj4///////ErqX/3JBy/+SBW//ebkP/3W9G/9xuQ//bbkP/221D/9psQv/YbEH/12tB/9VqQP/TZz7/ + 0WQ5//zk2v////////////////////////////////////////////////////////////////////// + //39//37+//7+Pj/9/T0//f3+P/9+/n/tmtM/7JPJv+zVS7/sFQt/69TLP+uUyz/rVIr/6xRK/+sUCr/ + q08q/6dPKv+mTyv/nkMe/553Zv/Ix8f/09PT/5ubm/95eXmoAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACioqIlsbGx4eXl5f/9/f3/+vn4/8efj//jjmz/43dO/+BvRv/eb0b/3W5F/9tuQ//bbkP/ + 221D/9lsQv/Xa0H/1WpA/9JkOf/+5dv///////////////////////////////////////////////// + //////////////////7+//78/P/7+Pj/9vT0//f5/P//////yYtx/7BMI/+2WDH/tVUw/7NVLv+yVC3/ + sFQt/69TLP+uUSv/rVEq/6xQKv+qUCr/pUol/5dSNv/Cvbv/3d3d/7i4uP+AgIDjZWVlLgAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKenp4XKysr9+Pj4///////o4Nz/1ZuD/+aNa//jdkr/ + 4XFG/+BvRv/dbkb/3G5F/9tuQ//bbUP/2m1C/9lsQv/UZDj/6aGF//////////////////////////// + //////////////////////////////////7+//78/P/7+Pn/+/v8///////98u7/zIdr/7VOJP+7WjP/ + uFkx/7ZXMf+1VzD/tFUu/7NVLv+yVC7/r1Ms/65RK/+tUSr/q08p/5tGIv+3pZ//z8/P/87Ozv+VlZX9 + enp6jAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArKysv9bW1v/39/f/ + /////9nLxP/Zl33/6Itq/+RzSP/icUf/4W9G/95vRv/dbkX/3G5F/9tuQ//bbUL/2W1C/9VkOP/egF3/ + 9cOy///38v////////////////////////////////////////////////////////////7y7f/ltaL/ + xWZC/7tTKP++XDX/vFs0/7taM/+5WTP/uFgx/7ZXL/+1Vy//tFUu/7NVLv+wUyz/rlMr/6VHH/+si33/ + xcXF/9fX1/+kpKT/f39/wwAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKSkpDuysrLg39/f//j4+P/+/f3/2cS6/9yTdv/pi2j/5XVJ/+NxR//hcUf/4G9G/95uRv/dbkX/ + 3G5D/9ttQ//abUL/12Y6/9NhNf/Yb0f/45Jz/+63ov/3z7///eTZ///v6v//7uf//+7n//zl3P/10MH/ + 6rek/9qRdP/IZ0H/v1Qq/8JaM//CXjf/wF01/75cNP+9WzT/vFo0/7taM/+5WDH/t1cw/7ZXL/+1Vy// + s1Uu/6pHHv+ufWr/w8HB/9zc3P+0tLT/g4OD4nV1dUEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApqamb7+/v/Lq6ur/+vr6//79/f/Xv7b/3pV4/+qPbP/meEz/ + 43FG/+JxR//hcEb/3m9G/91uRv/cbkX/225F/9ttQ//abEL/2Go//9RjN//RYTT/0WA0/9FlOv/SakH/ + 0Wc//9BpP//OZDr/yFsw/8dZLf/GWi//x142/8ZhOP/FYDj/w143/8JeN//BXTX/v1w0/75cNP+9WjT/ + u1o0/7lYMf+4WDD/t1cv/7BJIP+ud2L/wr++/+Dg4P/Dw8P/kJCQ8319fXQAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiMxsbG+fDw8P/7+/v/ + +fn4/+HNxf/en4X/7JJv/+p+VP/lcUf/5HNI/+FwRv/gb0b/3m9G/91uRf/cbkX/225D/9ptQv/ZbEL/ + 2GxC/9VrQf/UaT//0mc+/9FmPf/RZjz/z2U8/85lPf/OZTz/zGQ8/8pjOv/IYzr/x2I5/8VhOP/DYDj/ + wl43/8FeNf/AXTX/wFw0/75bNP+8WjT/u1cv/7FLJP+1g3D/xMHA/9/f3//Ly8v/l5eX+YCAgJAAAAAC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKqqqprJycn77u7u//r6+v/6+vr/4dbR/96tl//slnX/7Ipj/+Z1Sf/kc0f/43NH/+FvRv/gb0b/ + 3m5G/9xuRf/cbkP/225D/9ptQv/ZbEL/12tB/9VrQP/UakD/02k//9JnP//QZj7/z2Y9/85lPf/MZT3/ + ymQ6/8ljOf/IYjr/xmE4/8VgOP/DYDf/wV42/8BeNf/AXTX/v1gt/7NTLv+3koT/xMLB/+Dg4P/Ly8v/ + m5ub+4ODg54AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqmsbGxvno6Oj/+Pj4//z8/P/r5eP/3r2t/+aaff/vk3D/ + 64FZ/+V0R//kc0f/43FH/+FwRv/eb0b/3W5F/9xuRf/bbkP/225D/9ptQv/ZbEH/12tB/9VrQf/TakD/ + 02c//9FmPv/QZj3/zmY9/85lPf/MZDz/ymM6/8liOf/IYjn/xmE4/8VgOP/FXjX/vVQp/7VmRv/Brqb/ + w8PD/+Hh4f/ExMT/nJyc+YSEhJ0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiMv7+/8t3d3f/29vb/ + //////Hv7//m1Mz/366Z/+uXdv/wj2v/7IBY/+d2Sf/kc0j/4nNH/+FwR//ecEf/3W5F/9xuRf/bbkP/ + 221D/9lsQf/Ya0H/12tB/9RqQP/TZz7/0mY+/9FmPf/PZj3/zmY9/85lPf/MZT3/y2Q8/8pjOf/FWjD/ + vFw3/7qMev/Dvbv/1tbW/93d3f+4uLj/lpaW84eHh48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKampm+ysrLg1tbW//Pz8//8/Pz/+vr6/+vm5P/hysD/4KuU/+qZef/ukGv/7YZd/+p8Uv/mdkv/ + 43RJ/+JzSP/gcUj/3W9H/91vRf/bbkX/2m5D/9ltQ//XbEL/12tB/9VqQP/UakD/02k//9JpP//Raj// + z2Y9/8liOf+/ZD7/u4Nt/8Gzrv/Hx8f/6enp/9fX1/+wsLD/jY2N4YeHh3AAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSkO6ysrL/Kysr94eHh//b29v/+/v7/9fX1/+rl4//izsX/ + 4Lek/+Saff/pkW3/7Yli/+uCWv/pfVP/5nlP/+R3TP/idUz/4HRJ/91zSP/ecUj/3XFH/9twR//bcEb/ + 2W9I/9ZuRf/RbEL/xmhD/7xyVv+4jHv/v7Ou/8jGxv/l5eX/4ODg/8PDw/+mpqb9jY2Nv4aGhj0AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp6enhbGxseDR0dH/ + 5ubm//b29v/+/v7/+fn5/+vp6f/k2tb/2cS7/9WtnP/Xl3//2pBy/9yIaP/ehWL/4IJe/+GAW//gf1j/ + 3X5X/9d8V//ReFb/yndV/8B2Wf+3fmj/s5CD/7qoof/Dvbr/0tLS/+3t7f/k5OT/zc3N/7Gxsf+SkpLh + jY2NhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACioqIlqampoLS0tOrQ0ND/4uLi//Ly8v/7+/v//f39//f39//l5OT/39va/9bMyP/SwLn/ + yLCn/72il/+6n5T/uZ2S/7adkv+3n5b/vKmi/76yrf/Gv7z/zMvK/9ra2v/s7Oz/8fHx/+Pj4//Kysr/ + tbW1/5mZmeqQkJChjIyMJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACioqIrp6enmK+vr97Hx8f+1NTU/+Pj4//y8vL/ + 9/f3//r6+v/4+Pj/9/f3//X19f/v7+//6urq/+Xl5f/o6Oj/6Ojo/+3t7f/u7u7/7+/v/+3t7f/o6Oj/ + 1tbW/8DAwP+vr6/+mJiY3pOTk5iPj48rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + pKSkZqioqLOurq7kv7+//crKyv/Q0ND/2tra/+Pj4//r6+v/7+/v//Ly8v/x8fH/7u7u/+fn5//b29v/ + 0tLS/8bGxv+8vLz/r6+v/Z2dneSYmJizlJSUZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoEWjo6OFpaWls6ioqNOrq6vorq6u9bCwsPuwsLD+ + r6+v/qysrPuoqKj1pKSk6KCgoNOcnJyzmZmZhZaWlkUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA///wAAAP/////8AAAAP/////AAAAAP////wAAAAAP///8AAAAAAP///gAAAAAAf/ + /8AAAAAAA///gAAAAAAB//8AAAAAAAD//gAAAAAAAH/8AAAAAAAAP/gAAAAAAAAf+AAAAAAAAB/wAAAA + AAAAD/AAAAAAAAAP4AAAAAAAAAfgAAAAAAAAB8AAAAAAAAADwAAAAAAAAAOAAAAAAAAAAYAAAAAAAAAB + gAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAA + AAAAA8AAAAAAAAADwAAAAAAAAAfAAAAAAAAAB+AAAAAAAAAP4AAAAAAAAA/wAAAAAAAAH/gAAAAAAAAf + +AAAAAAAAD/8AAAAAAAAf/4AAAAAAAD//wAAAAAAAf//gAAAAAAD///AAAAAAAf//+AAAAAAD///8AAA + AAA////8AAAAAP////4AAAAB/////4AAAAf/////8AAAP//////+AAH///8oAAAAMAAAAGAAAAABACAA + AAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAHAAAACQAAAAoAAAAM + AAAADAAAAAwAAAAKAAAACQAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAKAAAAEAAAABYAAAAb + AAAAHwAAACIAAAAlAAAAJgAAACUAAAAjAAAAHwAAABsAAAAWAAAAEAAAAAoAAAAFAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAADQAAABYAAAAg + AAAAKwAAADQAAAA8AAAAQwAAAEgAAABMAAAATQAAAEwAAABIAAAAQwAAADwAAAA0AAAAKwAAACAAAAAW + AAAADQAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA0AAAAY + QEBBRlRUVXxdXV6mZWVmyHR0del0dHX3c3N0/3NzdP9zc3T/dHR1+XV1du1iYmPQVlZWtUVFRpcpKSlx + AAAATgAAAEIAAAA0AAAAJQAAABgAAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAI + ODg4I1paW2tnZ2i3cnJz54KChOGurrL309PT/+bm5v/19fX//v7+//7+/v/+/v7/9/f3/+bm5v/U1NT/ + vLy+/4GBk/Rvb3jxXl5gy0FBQpUUFBRgAAAARgAAADQAAAAiAAAAEwAAAAgAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAzQ0NBRgYGFncHBx0YKCgtyzs7Xr9PT1/u3t7f/o5+f/6+fl/8vCv/+1p6H/pJCJ/6GIgf+nkIr/ + taOf/8e8uv/f2dj/4uHg/+3t7f/z8/X+rKy49np6iO5paWvfQUFClgwMDFoAAABBAAAALAAAABkAAAAL + AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAEXl5fPG9vcLSEhIXZ1tbW+Pj4+P7U09P/mpWT/2NRSP9tSz7/f1FA/41VQv+ZWkb/ + oV1J/6heSv+nXUn/o1pH/51WRP+SUkT/g1FF/3haVP+knZv/19XV//b2+P/ExM35eXmI7WBgYs0rKyx6 + AAAASgAAADMAAAAdAAAADAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAANnZ2hYdnZ33Lu7u+T7+/v+397e/4qAfP9kRTj/e0k1/4xROf+XVTv/ + n1k9/6ZbP/+sXED/slxB/7dcQP+5W0H/ulpB/7xYP/+6V0D/tldB/65XQ/+dUUL/hFJH/5mIhP/X1dT/ + +vr7/6qqt/RwcHPrPDw9kQAAAFAAAAA2AAAAHgAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmtrbGyEhIXV4+Pj9Orq6v+ZlJH/Yj8w/3dCK/+HSC3/ + kk0v/5pQM/+hUzX/p1c5/6xaPP+yWz3/tlo8/7xbPf/AWz//wFk+/8JXPP/FVTr/xVQ4/8RSOf++Uzv/ + tFNA/6BSQ/+GUkj/raSi/+rq6v/Z2d/8d3d+6kVFRZ4AAABRAAAANgAAABwAAAAKAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbm5va5KSktP4+Pj82tnZ/3FjXf9sPCf/ + fj8j/4lBIv+SRST/mEop/59OLv+jUjL/qFY3/6pSM/+iTjH/n1Y9/51QOf+lSC3/v1c5/8RZPf/GVjr/ + x1M3/8lQNv/JUDX/xk82/75SO/+wU0H/lFNG/5F6df/b2tr/9PT2/n19iOpFRUWeAAAATwAAADEAAAAY + AAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwcHFpk5OU0f7+/v/Ozc3/ + YElA/3M6If+AOhv/iTsZ/48+G/+UQyD/mUgl/55NK/+iUTD/pFIy/690Xv+/p6D/zcTD/8zBv/+zk4r/ + oldC/7tSN//GWDz/x1Q5/8lTN//LUDT/y1A0/8lQNf/DUTn/t1VA/55VRf+GYVv/09HQ//39/f9+foTo + RERFmwAAAEgAAAApAAAAEQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJyc1OIiIjQ + +fn5/M/Pz/9cPjH/eDke/4Q3Fv+JNhL/jDgS/5A7Fv+UQR3/mEck/51MKf+fSSj/rW9X/9bT1P/X19r/ + 1dHR/9fT1P/g4OH/187M/6pXP//DWDv/xFc7/8dWOf/JUzj/ylE3/8pRNf/JUTX/xFI5/7pWQP+hVkX/ + hF1U/9XT0//19ff+dXV46Do6OocAAAA9AAAAHwAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + c3N0L3h4edrm5uby3t7e/2FJQP95OR7/hTcU/4o1D/+MNA//jTcQ/487Ff+TPhv/lkQh/5pJJ/+bRyX/ + v52P/87N0P/IwsL/x8HB/8jCwv/Mx8f/3Nzd/7V+bv+5TzL/w1k9/8RYPP/HVzr/yFQ5/8lTOP/JUzf/ + yFM2/8RUO/+5V0H/n1dH/4ZoYv/g397/0dHX+W5ub+gmJiZnAAAAMAAAABQAAAAFAAAAAAAAAAAAAAAA + AAAAAAAAAABzc3QJdXV2rcbGxt/y8vL/dWRd/3k5Hv+IORf/jDUP/440Df+PNQ//jjUQ/5A5E/+RPRn/ + lUIe/5hGJP+bSCX/vqWd/8TCw/+/ubn/v7m4/8C5uf/Ev7//0M3Q/7uJef+2TzH/wFs+/8FZPv/DWTz/ + xlc7/8ZXO//GVjr/x1Y6/8ZUOv/BVj3/tlpE/5hXSP+ahYD/8PDw/5qaou9aWlu4BwcHQwAAACAAAAAK + AAAAAQAAAAAAAAAAAAAAAAAAAABzc3RRioqL0v7+/v2em5n/czoi/4o8Gv+QORP/kjUQ/5E1Dv+QNQ// + jzUQ/5A4Ev+TPBb/lUEc/5dFIf+YRB//s4p6/8DAwf+8tbX/u7W1/722tv/Au7z/1dXX/79/a/+4VDf/ + vVs//79bP//AWj7/wlo9/8NZPf/DWD3/xlg8/8RXO//CWDz/vFlA/61cRv+PWkz/u7Sx//T09P50dHXq + Nzc3dwAAAC4AAAASAAAABAAAAAAAAAAAAAAAAHNzdBF1dXbF19fX6eXl5f9jQzX/iTwc/5I7FP+VOBH/ + lTcQ/5M3D/+RNw//kTcQ/5A4Ef+TOxT/lT8b/5dEH/+YRCD/oVg6/72uqv+9vL7/vby9/729vv/NzM7/ + 0a2i/7NZPP+3XD7/u1w//7xbP/++Wz//v1s//8BaPv/BWj7/wVo+/8FaPf/BWT3/vlo+/7hcQv+hWkf/ + imRZ/+Tk4/+oqK7zYWFiww0NDUAAAAAbAAAABwAAAAAAAAAAAAAAAHNzdFSMjIzR/f39/YyGhP+APyT/ + kz0X/5g8FP+ZORH/lzkR/5Y4EP+VNw//lDgQ/5Q4Ef+TORP/lT4Z/5dDHf+ZRiP/mkYj/6NaPP+vfGj/ + tIt7/7iOfv+7fmf/rVg5/7FZO/+0Wz//tlw//7hcP/+7XD//vFw//71bP/++Wz//vls//79bPv+/Wj7/ + vlo+/7pbP/+vXET/k1hI/7Glov/y8vL+dHR16Tk5OW8AAAAkAAAADAAAAAEAAAAAAAAAAHNzdKLExMTg + 5+fn/2xIOf+YSir/mz4W/508E/+bOxL/mToR/5g5Ef+WOBD/ljkQ/5U4Ef+UORL/lTwV/5dBGv+YRB// + mUYk/5tGIf+eRB//oUcj/6NJJv+nTiv/rFg5/61aPP+vWz3/s1s9/7VcPv+2XD//t1w//7hcP/+5XD// + uVw//7tbP/+7Wz7/u1s+/7paPv+yXEH/nlpF/4llW//l5eX/kpKW7VZWVqQAAAAuAAAAEgAAAAMAAAAA + c3N0Jnd3eN/39/f7uLWz/49SOP+kUC3/oUIb/589E/+fPRT/nTsT/5s6Ev+ZOhH/lzkQ/5Y5Ef+WORL/ + lTsT/5c9GP+YQRz/mkQf/5pSNP+VWD7/lllB/5lcRf+ZW0P/nlAy/6tYOf+sWTv/rlo8/7FbPf+zWz3/ + tFw//7VcP/+2XD//tlw//7dbP/+3Wz7/t1s+/7daPf+zWz7/p1tC/41XRv/Dvbv/zc3P+mtrbN4XFxdB + AAAAFwAAAAUAAAAAc3N0XpOTlNH6+vr/gHFr/6ZWNf+tUi//rE4n/6M/Fv+hPRT/oD0U/588E/+dOxP/ + mjoR/5k6Ef+XOhP/lzoT/5c7FP+XPRb/nUcl/8Ozrv/HxMb/x8PD/83Ky//Hv77/ikkx/6dTMv+pVzj/ + q1g5/61ZO/+uWjz/r1s9/7JaPf+zWz7/s1s+/7RbPv+0Wz7/tFs9/7RaPf+yWTz/q1o//5NWQv+ZhX7/ + 7u7u/3Z2d+o8PD1nAAAAHAAAAAcAAAAAc3N0h7Kys9ro6Oj/iGNU/61ZN/+yVC//slQu/6xOJv+kPxb/ + oj4V/6E+FP+fPRT/njsT/5s7Ev+aOxL/mTsU/5g7E/+YOhP/nkkm/83Cwf/SztD/0czM/9TR0f/Ry8v/ + hkwz/6FOLf+nVDT/p1Y1/6lXOP+qWDr/rFk6/61ZO/+uWjv/rlo8/69aPP+vWjv/r1k7/69ZO/+uWDr/ + q1k8/5pYQP+IZFj/8O/v/5iYmfFUVFWRAAAAIAAAAAkAAAAAc3N0r8/Pz+nQz87/m19H/7NbN/+2WDD/ + tVYv/7NWL/+tTyj/p0IY/6Q+Ff+iPhb/oD0U/548E/+dPBP/mzwU/5s8FP+ZOhL/m0Ec/8q3sv/U0dL/ + 0crK/9HLy//W1NX/m3pu/48+Hf+lUjH/o1Ix/6RTM/+lVDX/qFY3/6lXN/+qVzj/q1c4/6tXOf+rVzj/ + q1c4/6tXOP+rVjf/qVU3/55VPP+EVUb/z8zL/7W1tfZwcHG+AAAAIQAAAAoAAAAAc3N00ubm5va1r6z/ + q2NG/7hbNv+6WTP/t1gx/7ZXMf+0WDH/rk8n/6hDGf+kPxX/oz8V/6E+Ff+fPRT/njwT/548FP+bPBT/ + mTgP/76Yi//QztH/y8TE/8nDw//MyMj/ycLB/4hQOP+VQh//o1Av/6JQL/+iUTH/o1Iy/6RTM/+lUzP/ + p1M0/6dTNP+nUzT/qFM0/6hTNP+oUjP/pVIy/55TN/+GUT7/yMG+/9bW1v99fX7dAAAAIgAAAAoAAAAA + c3N07vf39/2dkIr/uGhH/7xcNv+8WjT/u1ky/7hYMv+3VzH/tVgy/7FSK/+pQxr/pT8V/6Q/Fv+iPxX/ + oT0U/589FP+ePRX/mjQK/6xuVv/Gx8n/wry8/8C5uf+/uLj/x8LD/7+0sv+CSTL/lT4b/6JOK/+hTi3/ + oU8u/6FQL/+hUC//olEw/6JRMP+jUTD/o1Ew/6NQMP+jUC//ok8w/5xRM/+HTzn/w7ey/+Tk5P9xcXLg + AAAAIQAAAAoAAAAAc3N0/v7+/v+OeXH/wmtI/75dNv++XTX/vlw0/71bM/+7WjP/uFkz/7dZMv+zVC7/ + rEgf/6hBGP+kPxb/pD8W/6E+Ff+gPhX/njsT/6JII/+8qaT/vLm8/7mzs/+4srL/uLKy/8bBw//Iv73/ + k2NP/406GP+hTCj/n0wp/59MKf+fTSr/n00r/59NK/+fTSv/oE0r/6BNK/+gTCr/oEwq/5tNLv+JSzX/ + qpqU/+fn5/9ycnPkAAAAIAAAAAkAAAAAc3N0/v7+/v+Jb2X/yHBM/8JeOP/DYDf/wV43/79dNf++XDT/ + vFs0/7laM/+4WjP/tlgy/7JQKP+rRhz/pz8W/6Q/Fv+jPxX/oT8V/6A6Ef+kUC3/t6ml/7e2uf+1rq7/ + ta+v/7iysv/Iw8T/3Nvb/593Zf+MNxL/oEgl/5tHJf+bSCX/m0gl/5tIJf+bSCb/m0gm/5tIJv+dSCX/ + m0cl/5lIKf+HSjH/nYuD/+fn5/9ycnPjAAAAHAAAAAgAAAAAc3N0/v7+/v+TenH/y3NQ/8dhOf/GYDn/ + w144/8FeN//AXTX/v100/71cNP+7WzT/uVoz/7dZNP+0VjD/rUsj/6lEGv+lPxX/pD8V/6I/Fv+fOQ7/ + ql5B/7ekn/+3tbf/tq+v/7u0tP/CvLz/0s3O/+Tg4f+OVj7/kTkT/5tFIP+aRSD/mkUh/5lEIf+ZRSH/ + mUQh/5hEIf+ZRCH/mUUi/5VHKP+ESTH/oJGK/+fn5/92dnblAAAAGAAAAAYAAAAAc3N08vn5+f2mk4v/ + yXVT/8lkPP/JYjv/x2I6/8ZgOf/DYDn/wV44/8BdN/++XDX/vVs0/7laNP+4WjP/t1kz/7RWL/+tSyP/ + qEIZ/6Q/Ff+jPxb/oTgO/6dOKP+4qaT/uba4/763t//HwMH/0svM/+bk5v/SxL//fjUW/5pBG/+aQx7/ + mEMe/5lDHv+ZQx7/mEMf/5hDH/+YQyD/l0Qh/5NGJ/+BRzD/v7Ou/93d3f5vb3DUAAAAEwAAAAMAAAAA + c3N01+np6fe8sq7/yXNR/8xpQf/MZT3/y2Q8/8ljO//GYjr/xGA5/8JgOP/BXjj/v103/75cNf+7WzT/ + uVsz/7haM/+2WTL/s1Qu/65OJv+pRR3/pEEY/6E5DP+pWDf/vre2/8TAwf/NyMj/2NPT/+Hc3f/7+/3/ + uJaI/480EP+bQhz/mUMd/5lDHf+ZQx7/mEMe/5hDHv+XQx//lkMg/5BGJv98RjD/zMXC/87OzvtsbG2/ + AAAADQAAAAEAAAAAc3N0stLS0unW09L/xHha/9BrRP/NZj3/zWU9/8tlPP/KYzz/yGM7/8ZiOf/DYTn/ + wV44/8BdN/++XDf/vVw0/7tbNP+4WzT/uFoz/7ZZM/+0VjH/rk8p/6pJIf+kPBL/uIJu/87Nzv/U0ND/ + 3tja/+fh4f/y8fL/2srE/4o4Ff+bQRr/mkEc/5lCHP+ZQhz/mUId/5hCHf+XQh3/lUIf/4xFJv93RzL/ + xcLB/7Ozs+xqamulAAAACAAAAAAAAAAAc3N0iLOzs9rs7Oz/uIVy/9h4U//RZT3/0Gc9/85mPf/MZT3/ + y2U8/8pkPP/IYjv/xGI5/8NhOf/CXjj/wV03/8BcNP++XDX/u1w0/7haM/+3WTP/tVgz/7RXMf+vUCr/ + tV48/+Tc2v/p5ub/6+fn/+/q6v/z8PH/7Ofm/4pFKP+bPRX/nUEb/5pBG/+aPxv/mUEb/5hBG/+YQRz/ + lEIf/4lGKf90Tz//4+Li/5mZmuFpaWp8AAAABAAAAAAAAAAAc3N0XZKSk9H7+/v/qZSM/+OYe//UZz7/ + 02g//9JnPv/OZj3/zWY9/8xlPf/KZDz/yWM7/8diOv/EYTr/wV43/65SL/+2Uiv/wF00/71dNP+5WzP/ + uFoz/7dZM/+zUyv/tVs4/+7l4v/39fb/9/X1//n29v/69vf/+/n7/55oUf+gRiD/pE4p/6NNKP+hTCf/ + oEwn/59MKP+eTCn/mE0t/4hNNP+EcWn/9PT0/4CAgd9lZWZJAAAAAQAAAAAAAAAAc3N0Knd3eNz6+vr8 + x8LA/+GkjP/cfVv/1Wc9/9RqP//TaD//0WY+/85mPf/NZj3/y2U9/8lkO//GWzH/04xw/9zRzP+vgG3/ + m0Uj/7NOJv+8WC7/u1gw/7hULf+uSyP/0aOR//v7/P/69/f/+/n5//v39//79/n/+vr6/6NrUv+kSyT/ + qVIv/6dSL/+kUS7/pFEt/6NRK/+gUC3/l1Ey/4FMNf+5trT/4uLi+HNzdN5YWFkaAAAAAAAAAAAAAAAA + AAAAAHNzdKrLy8vg7e3t/8mRe//lknP/1Wc9/9dsQv/Wa0L/1GpB/9JoP//QZz7/zmc+/81mPf/IWS// + 3J2D//7////3+vv/zbmz/7J/a/+0cFb/s2pM/7VtUP/Knoz//Pz9//38/f/8+vr//Pr6//z5+f/69/n/ + 8u7u/6BYO/+qTyj/qlEt/6hRLf+lUCv/pE8r/6JPK/+eUS7/lFM3/39YSP/l5eT/q6us4W5ub40AAAAC + AAAAAAAAAAAAAAAAAAAAAHNzdFuQkJDO/v7+/L20sv/npo7/3npV/9psQv/abkT/12xD/9VsQ//Ua0H/ + 0mg//9FoP//LWzH/4J6F///////+/f7////////////7+/v/+vn5//z7/P////////////78/P/9+/v/ + /Pr6//v39v/6+/z/5tTO/6dOKf+tUi3/rFIu/6tRK/+pUCv/p1Ar/6JQLP+dUzL/jVI4/56Sj//7+/v+ + goKD2W1tbkkAAAAAAAAAAAAAAAAAAAAAAAAAAHNzdBR2dnfI3Nzc6u3t7f/HopT/65h6/9ppP//bbkX/ + 2m5E/9htRP/WbEP/1WtB/9NqQf/NXDL/5KGI//////////////////////////////////////////// + //7+///9/f/9+/v/+/n5//Xz8///////0aKO/6xLI/+vUy7/rlMt/6xSLf+rUCv/qVAs/6JRL/+XVDj/ + f1RB/+Xk5P/Ozs7odHR1vWtrbA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3RdkZGRzv7+/v3Kx8b/ + 5auV/+eObf/baj//3G9G/9puRf/YbUT/12xD/9ZsQ//QYDP/56WL//////////////////////////// + //////////////////7+//78/P/79/f/9vX2//z////dtqf/sVMu/7RUL/+yVC//r1Qu/65TLf+rUSz/ + qFMu/59VNf+MUjr/samn//39/f6GhofUcnJzTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3QM + dnZ3sMrKy9329vb/xK6n/+upkP/ifVX/3WxD/91vRv/bb0X/2m5F/9htRP/VZjz/3oVj//3n3/////// + //////////////////////////////////////7////+////+vf2/+fCtP+7XTj/uFYu/7dZM/+1VzH/ + s1Yv/7BUL/+sVDD/pVU2/5VSNv+OeG//9PT0/8HBwd11dXamc3N0CAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAc3N0OHt7fNPq6urx6enp/8iupf/vrZP/43xU/95sQv/ecEb/3W9G/9tuRf/bbkT/ + 12o//9ZoP//lmXv/9cm3//vh2P//7uf///f0///59f/+8/D/+ebf//PYzv/pvq3/zXxc/75XL/++WjL/ + vVw0/7taNP+5WTT/tlgy/7FYM/+qWjj/m1c6/4ZlWf/m5uX/6Ojo8nl5ethzc3QxAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNzdFyOjo/L+vr6/Ofn5//Rqpv/8K6U/+WCXP/fbEL/ + 4HBG/95wRv/cbkX/225E/9hsQv/VZDn/02M5/9RoPv/Ta0L/03FL/9NxTP/Rb0j/zGU9/8liOf/DWjD/ + wlsy/8NeOP/BYDj/v101/75cNP+7WzX/tVo2/65bOv+gWTz/iF1L/9jY2P/5+fn8ioqKz3NzdFMAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3Rzn5+gzP7+/v/o6Oj/ + yrGq/+ysk//pkG3/321A/+BvRP/fcEb/3W9G/9tuRf/bbkT/2G1D/9drQf/UaD7/0WU8/9BlO//OZTv/ + zGQ7/8tjO//KYzz/yWM7/8ZiOv/DYTn/wWA4/75eN/+6Xzn/sV8+/6FZPP+PaFn/2dnY//7+/v+dnZ7M + c3N0cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + c3N0c56en8z6+vr87+/v/8K1sP/nsp3/7pl6/+V7VP/fbUP/4G5E/95vRv/cbkb/225F/9puRP/YbUP/ + 1mxC/9RrQv/Saj//0Wc+/85mPf/NZT3/y2U8/8ljPP/FYzv/wmM9/7tiPv+wXz//oF1D/5+IgP/n5+f/ + +vr6/J+fn8xzc3RzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAHNzdHKOjo/M6+vr8vn5+f/Oy8v/zKyh/+uslf/sknH/5H1V/99vRf/fbkT/ + 3m9G/9xuRv/bbkX/2m5E/9dtQ//Wa0L/1GpB/9FnP//PZz7/y2dA/8hnQf/CZkH/umVE/6xgQ/+bblz/ + vbi3//b29v/q6urxjo6Py3NzdHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3Rbe3t81MvLzN7+/v797u7u/8C8uv/Pp5n/ + 6aaO/+uVdP/lfFT/4HFI/91vR//bbkf/2m1F/9huRP/YbUX/1GxF/9BsQ//MaUT/x2lF/71lQ/+0ak3/ + pm5a/7Klof/p6en//v7+/crKy917e3zUc3N0XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3N0N3Z2d7CRkZHO + 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 + h4eI7OHh4f/BwL//ek47/4ozDP+POhX/lEIf/5tKKP+hUDD/plMz/7J3YP+6koX/toJy/69UPP/EVTj/ + yVQ4/8tRNf/NTzL/zksw/9FKLv+wTTb/wrKt/+Hh4f+Hh4jsamprQwAAAAAAAAAAAAAAAAAAAAAAAAAA + amprIoODg9jT09P/wMC//39OOP+LMAf/jDQN/444E/+TQB3/mUck/51KKP+4iHf/1NPU/9bW2P/Z2t3/ + w6uk/7RSOP/GVjv/yVQ4/8pSNv/MUTX/zFAz/81PM/+3TDT/w7ay/9TU1P+Dg4PYamprIgAAAAAAAAAA + AAAAAAAAAAB8fHyYt7e4/NnZ2f99VUP/jjAF/480DP+ONA3/jzcS/5E9Gf+WRCD/nU4s/8W1r//HxMb/ + w76+/8bCwv/W09T/tmhT/8JWOv/EWT3/xlY7/8lUOP/JVDf/yVM3/8pTN/+tTjb/19HP/7i4ufx8fHyY + AAAAAAAAAAAAAAAAamprQIiIifLt7e3/hnVu/5EyCf+TNg7/kTUN/5A1Df+QNg//kjsV/5RBHf+aSCT/ + uaCX/7+/wv+6trf/v7y//9HJx/+4Zkz/vlk8/8BaP//CWj7/xFk9/8VXPf/FVjv/xFY7/8VVOP+gYU// + 7Ozs/4iIifJqamtAAAAAAAAAAAB1dXaev7+//rm4uP+NRij/mTcP/5c4Ef+UNg//kjYO/5E2D/+SOBP/ + lkAb/5hCHv+jXkH/uaGY/761tP/FtrL/v4Nv/7RXOv+4XD//u1w//75cP//AWz//wFs+/8FbPv/BWj7/ + wFo9/7xQM/+5pZ//wMDA/nV1dp4AAAAAamprJXh4efLr6+v/jntz/6M/Fv+dOxL/mzsS/5g4Ef+WOA// + lDcP/5Q4Ev+WPRf/mEQf/5lEH/+bRiH/olIy/6VRMf+rUjL/sFs9/7RcP/+3XD//uVw//7pcP/+7XD// + u1s//7tbPv+7Wj3/u1k7/55bR//q6en/eXl68mpqayVqamtgn5+f+dTU1P+bYkr/rU8o/6NAGP+ePBP/ + nTwT/5o6Ef+YOhH/lzgS/5Y8FP+XPhj/nU8t/6FxXv+hc2H/o3dl/51XPf+rVjf/rlo8/7FbPf+yXD// + tVw//7ZcP/+2Wz//tls+/7ZaPf+2WTz/rFAz/83Cvv+goKD5amprYGpqa5TAwMD+pqKg/65ZN/+yVCz/ + rU8o/6NAF/+hPhT/nj0U/5s7Ev+ZOxL/mTsT/5Y2Dv+oZ0z/0M7R/9HQ0//U1Nf/oG1a/6NOK/+nVjf/ + q1k6/61aO/+uWjz/sFs9/7BbPf+wWjz/sFk7/7BXOv+wVDX/ooBz/8HBwf5qamuUamprwNra2v+ViIL/ + t1Us/7dWMP+1VjD/rlAo/6VBF/+iPhT/oD0U/508E/+bPBP/mDYO/6ZdP//Tzs7/0czM/9XT1f+oh3r/ + lEEe/6VTMv+kVDT/p1U2/6hWN/+qVjf/q1Y4/6tWOP+rVjf/q1U1/6xUNf+TWUT/2tra/2pqa8Bqamvh + 7e3t/5R2a//AWzP/u1oz/7hZMv+2VzL/sFEp/6dEGf+kPxX/oj4V/6A9FP+cOxP/oEUf/8S2sf/Gw8T/ + xL+//8S+vv+YZ1T/lkAd/6JPLP+iUTD/olEx/6NSMv+kUjL/pVIy/6VSMf+lUTH/pVAw/5NPNf/t7e3/ + ampr4Wpqa/j7+/v/mHBh/8dgNv+/XTX/vlw0/7tbM/+4WjT/tFQu/6tHH/+mQBb/oz4U/6E+Ff+dOA7/ + rXVf/7y8wP+4tLT/u7a2/8TBwf+id2X/kj4c/55KJ/+eSyr/nkwq/55MKv+eTCr/oEsq/6BLKf+eSin/ + lEsv//v7+/9qamv4ampr+Pv7+/+fdGP/zGQ7/8RfN//DXjb/wF01/75cNP+7WzT/t1kz/7JSKv+rSCD/ + pkAX/6I9FP+hPRT/rHRe/7exsf+2sbL/v7q6/9bU1v+1koX/kDwY/5xFIP+aRiL/mkUi/5lFIv+ZRiP/ + mkUi/5pGI/+QSSv/+/v7/2pqa/hqamvh7e3t/6ODdv/QZz7/ymM7/8djO//EYDj/wl83/8BdNv++XDX/ + ulw1/7dZM/+yUiv/rEkh/6VAFv+hNwz/q2hO/7q0tf/Dv8D/1tDR/+zs7f+kclz/kzgS/5lCHv+ZQh7/ + mEIe/5hCH/+XQiD/mEQh/4pHLP/t7e3/ampr4Wpqa8Da2tr/pZSO/9VuR//NZDv/zGY9/8lkPP/GYTv/ + xGA4/8JeNv+/XTb/u1w1/7pbNP+3WjP/tFQu/61MJP+lPhP/uId1/9HQ0//e2Nj/7+7v/9XCu/+ROxf/ + mj8Z/5lBHP+ZQR3/mEEd/5dBHf+WQBz/i1lE/9ra2v9qamvAamprlMDAwP6wqqj/2oJe/9RoPv/PZz3/ + zWY+/8tlPf/JYzv/xWE6/8NfOP++VzD/uVQr/7xcM/+5WzT/t1o0/7BPJ/+/eFv/6+np/+/s7f/08fL/ + 8evr/5tQMf+dQRn/nEId/5tCHv+ZQh7/mUQg/5Y9F/+jin//wcHB/mpqa5Rqamtgn5+f+dbW1v/OmIT/ + 3XVO/9RnPf/TaD//z2Y+/8xmPf/KZDz/xl82/8+Qef+4hXD/rlIt/7RQJ/+0UCb/rUgf/86ZhP/6/P3/ + +vj4//z4+f/39vX/qGVI/6ZPKP+lUSz/o1As/6JPK/+hTiv/l0ck/9LNy/+goKD5amprYGpqayV4eHny + 6+vr/7Sjnf/ojWv/12k+/9dqQf/UaUD/0Gg//85nPf/KXjT/6sS3//r////aycL/xZuL/8KNd//Rqpn/ + +PPy///9/v/9+vr//Pr6//Lq6P+qWTj/q1Aq/6hRLP+mUCz/pE8q/6BKJP+YZlD/6+vr/3h4efJqamsl + AAAAAHV1dp6/v7/+w8PD/+Gnkv/ielP/2WpA/9htRP/Wa0L/02g//85hNv/uxbb///////////////// + /////////////////vz8//r4+P/9////2biq/6xMJv+uUiz/rFEs/6hQK/+mTyr/nEIe/7+1sf+/v7/+ + dXV2ngAAAAAAAAAAamprQIiIifLt7e3/urGu/+2aev/fb0X/221E/9luRf/Xa0L/0WM3//HDsf////// + ///////////////////////////9/v///P///+3a1P+6ZkT/slIr/7BVLv+vUyz/rVEr/6VHH/+hdmX/ + 7e3t/4iIifJqamtAAAAAAAAAAAAAAAAAfHx8mLe3uPze3t7/2sC3/+yRbv/fbUL/3W5F/9tuRf/Yaj// + 3XxW//LBrv//8ev///////////////////z6//jq5//jtaP/wmhE/7lVLP+4WjP/tVcx/7RWMP+uTCT/ + pF1A/9zb2/+3t7j8fHx8mAAAAAAAAAAAAAAAAAAAAABqamsig4OD2NPT0//Ozs7/6ce6/+2ScP/icUb/ + 3m1C/91vRv/YaT//1mU4/9hwSP/bgl//35By/92Qcv/Wf17/y2pE/8JZMP/BXDP/wV42/7xcNP+6WzT/ + tVEp/65ePv/LxsX/09PT/4ODg9hqamsiAAAAAAAAAAAAAAAAAAAAAAAAAABqamtDh4eI7OHh4f/Ozs7/ + 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 + nDsS/5k6Ev+XOBH/tHhh/9nd3//MwL3/nE4u/6dUM/+qVzj/rVo7/69aPP+vWjv/rVo8/6JYPv+rjIL/ + zMzM92xrbK5sa2zY6Ojo/p+Cd/+zXDn/tVgz/65OJ/+lQRf/oT0U/508E/+ZNAr/r2ZI/9jZ3f/Tzs// + p21W/5tGIv+jUTH/pFMz/6VUNP+nVDT/plQ1/6BVOf+TZlX/6Ojo/mxrbNhsa2z1+fn5/551ZP+7YT3/ + u1w1/7laM/+0VC3/qkUc/6M+FP+eOA7/pU0q/8fCwv/Gxcb/y8bH/6h8av+bQBv/oEwq/55MKv+eTCv/ + n0wr/5tOMP+JVUH/+fn5/2xrbPVsa2z1+fn5/6V5aP/DZkH/wV83/79dNf+7XDX/tlYw/65LJP+mQhn/ + oDoO/6hNKf/Cu7n/yMbH/9jW1v+oaE3/lz4X/5lFIf+ZRSL/mEYj/5VIKf+FUz7/+fn5/2xrbPVsa2zY + 6Ojo/q6Ogv/HaEP/yGQ9/8VgOP/CXjf/v101/7pbNP+2VjD/rk4m/6Y+E/+oUS7/z8rK/+Ph4//Yy8X/ + kkEf/5k/Gf+YQR3/l0If/5JGJ/+LYE7/6Ojo/mxrbNhsa2yuzMzM97ippP/Lb0z/zGY//8tlPP/HYTv/ + w2A4/79cNP+3VCz/uVcw/7VULf+sSyP/2cO8//Dv8f/09PX/qmZJ/5k7FP+aQh3/l0Qg/5BGJ/+li4D/ + zMzM92xrbK5sa2x4o6Oj5tDNzf/NiG7/0WlB/9BoQP/NZj7/yV40/9N3VP/Qjnb/tmdI/7FWMf/Gbkz/ + 9Orn//38/f/8/f7/unph/6JHIf+jUCz/n1Iv/5BPMv/Tzcr/o6Oj5mxrbHhsa2w4eHd43ujo6v/Cp5z/ + 13tY/9VqQv/VakH/zV4y/9yGZv//////9vPz/+/k4P/69vX///////7+///y7Ov/rlo4/6tPKf+mUS7/ + nU4u/5hyZP/v7+/+eHd43mxrbDgAAAAAbGtsmLGwtO7Lysr/z5iC/9dvSP/YbET/1GQ5/9x/W//24Nf/ + //////////////////////n4+f/KiXD/sVEp/69UL/+oVDL/mFE0/87Jx/+4uLjrbGtsmAAAAAAAAAAA + bGtsPXZ1dtXW1dn7wb28/9mTev/acUn/2W1E/9ltQ//fhmT/6amQ/+y2of/psp//4qKL/8hwTf+7WDH/ + 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 + + + + Ayuda + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.resx similarity index 98% rename from 1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.resx index ae52bdee..f15ff0e9 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/HelpDialog.resx @@ -1,5937 +1,5940 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Top, Bottom, Left, Right - - - - 12, 12 - - - ForcedVertical - - - 560, 304 - - - - 0 - - - - - - richTextHelp - - - System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - 472, 325 - - - 100, 25 - - - 1 - - - &OK - - - MiddleRight - - - ImageBeforeText - - - buttonClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 584, 362 - - - - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAB3d3h3h3h3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAB3eIj//////////4iHd3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAHeIj/+PiIiIiIiIiI////+IdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAB3iP+PiIiIiPiPj4+Pj4iIj///+HcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAB4j/iIiIiPj4+IiIiIiPj///iIj///h3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAB4+PiIiI+PiHd3Z3Z8d3dneHiP//iP//+HcAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAB4+IiIiPiIdnR8Z8fHx2xsfHx2d4iP//j///dwAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAB4/4iIj4h3ZHx2dnx2fHfHfHfHx8bHd4j/////93AAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4+IeI/4dnRlZ2x8fHx8dsjHfHbHx8fGx3eP/////3cAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4+IiI+IZWVsfHx3x2dnx3x2fGfH58dnx8fGd4j////4cA - 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 - +I9wAAAAAAAAAAiIiHZnTGfGRlZWx0fGR0VsZHx0ZWfGVsZ0fGx2fHZ2dnx2fHx2d8dox2fIZ2x3x2fH - Z8dnd4+I9wAAAAAAAACIiPhHx2ZcZWxkbHRkZMbGRlZGR2xkdGdlbHZ2x2fHx8fHZ8dnx8dnx2fHbHyG - x2x8dsdsfHx/iPcAAAAAAAAAiIj2fGx8ZkZWVsZGR0dGVkfGVsZHR8bFbHZlx3x8dnx2fHx2fHZ8fHbH - Z8hnx3x3yGd8d8dnf4j4AAAAAAAAAIiIh8d2x0fGxsZWVsbGRkbGRsZWRsZ0dkZFRmRkZGVnx2dnx8d8 - doZ8hshsfHx2x2x8fHx2x2j4iHAAAAAAAAiIj3Z8ZWfGR0ZWRsZWR8fHR0dGR8dHRsd3d3d3d3d0Z2x8 - fHZ8dnx8dnx8d2dnyGfHfHZ+fHx3+I9wAAAAAAAHiIh8Z8bHbHRsbHR0bGRkZGRsZWRkZGVoiIiIiIj4 - hHx3x2fHZ8fHZ8fHdnx8fHbHfHZ8fHZ3R4iPgAAAAAAACIj4d8dnbHbGVlZGxlZWR0bHRkbHR8fGWIiI - iIiIiIZWx2fHZ8dnZ8dnfHx2fHZ8jHbHx2fHxnyPiIcAAAAAAAiI98Z8bHfHbGxsfGRsbGxlZMdHRsZG - dGiIiIiIiIiFZ2fGfHx2x8dsfHZ2x8dnx2fHZ2fHbHx2j4j3AAAAAAB/iId2x3x8Z8dlZkZWVlZWRsdk - bGR0dGx4iIiIiIiPhkfGfHZ2fHZ8d2fHx3Z8fHbHZ8fHbHdnZXiI9wAAAAAAiIj2fHbHZ8Z0fGVsbGxk - bHRkR0ZWRsZWSIiIiIiIiIVsdHZ8bHZ8dnx8dnx8dnZ8d8dnbHfHx8dviPgAAAAAAIiIh8fHbHx2x8ZG - x0dHRlbGVsbHTGVkbHiIiIiIiIj3R2fHx3Z8dnx2dsfHZ8fHx2x2x8dsdnx2WIiIcAAAAACIj4Z2fHZ2 - x2dnx2xsbGxkdMZWRmVsZWRoiIiIiIiIiEZWZWbHx2x2x8d2dsdnZ2fHZ3x2d8fHbHf4j3AAAAAAiIh8 - fHbHx2x8fHxlZ0dHxsZ0bHTGR0bHx4iIiIiIiIh0bHx0dnx2x3Z8bHx2x8fHZ8fHbHx2bHZniI9wAAAA - CIiPd8fHbHx2x8Z2xsbGxnR0bHRmVsbHRkiIiIiIiIiIhHR2Z8dGdWfHx3Z2fHZ8dsdsdnx2bHdld4iP - cAAAAAf4j2dnbIZ2x3Z8dndHR2TGRsdGx8ZWRkdGiIiIiIiIiIdGR8dsfGx8Z2xsfHZ8dnx8d2x2x3x8 - fGX4j3AAAAAIiIh8fHbHx2x8Z8fGxsbHZWx0bHRkZWxsbIiIiIiIiIiIdHRsdlZ2dlx2d8dsdsfHZ8Z8 - d2x2dkdmiIiAAAAACIj4Z8fl7HyGx2x2x3Z0fGxlbHRkfGx2VlaIiIiIiIiIiPdGVlZsfHxnZcZ2Vnx2 - dsdnx2x2XGVsdI9/gAAAAAiIiHx2x8dnx2fHZ8fHxsZWbGZGxkZWRsZGWIiIh4h4iIiIdGfHx2VnbHZ0 - bHxnR8dlx2R2XGdsdlaIiIcAAAAIiPhnyGx2x2x8fsdsdnx2x0fHx0fGRsdHxsiIeIiHiHh4iPdEZnRm - x0dMfHZ2Vsdkdmx8fGdsdlZ0iIj3AAAACPiIx2x3yGx+dsfHx2x2fGRsZGRsdHxkZHRmiIeHiIeIh4iP - hFZHx0dsdmdHx8dkfGx2VmdHx0fGx3+IhwAAAAiI93fIxnx3x8fHZ2yGx8dsdlbHxmxnR8bGXHiIiHh4 - h4iHiIhkdHbGVmXGfGZ0fGd0fGfGx2R2ZWSIiPcAAAAIiPfIZnx+x2x2fHx2x2x2fHxsdkdHTGR0dGZI - eHiIh4h4iIiPh0bHR8fGdGVlbGdGx2VkdWR8bHx2f4iHAAAACPiIZ8fIx2yGyMfnx3x3x8dnx0bGxmfG - xmx8ZYiHh4h4h4eIiPhkdGZkdGfGVsdHx2RsdsZ8Z0dGVniIhwAAAAiI93yG52x3x2x2x2x2x2x2x2xl - ZWXGR2XGR0bIeIeHh4iIeIiPhUZWVsfGdGdkdmR8dlZ0Z0Z8dkWIiPcAAAAI+Pdox8x3xnyGx2x2yGx+ - x2x3xsbGZWxkZ8bGZ4h4iIh4yIiIiPhkZcdmVkfGVsfHRlbGVsdMdkdmeIiHAAAACIiIyGyGyGfHx+x3 - yGx2x3x3xndnZcbHR8ZHR8TIh4d4eIiIiIiPhHZkdGVsdGx0ZHxlZWx0dkfGVIiI9wAAAAj4+Gd8d8bI - bnx3x2x2fIxnxnxsfHxnRsZHxsZGZIiIiIh4h4iIj/dEfGXGdGx2R0fGdGx2RsdGVmWIiIcAAAAIiIjI - yM53x8fHx2yGyMdnx2fHfHbHbHx2xkdlbHxnh4yIiIiIiIj/dGR2bGVnR8bGdGx2R0dkfGx0iIiAAAAA - CPj4doZ8fIbH58aMaMZ8fHbHbHbHfHZmx0fGxlZGxIiIh4h4iIiIj4ZHxHR8ZGRnR0ZWR0bGVmVnRoiI - gAAAAAiIiGfHx+fIbHx8dnx8fnbIbIbIbHbHx2xsZWxsdHxnh4iIiIiI+Pj3RmVsZ0fHRlbHZHxlZWx2 - RlaIj4AAAAAH+Ph8jnx8bIZ8hnx2fsfHbHbHbHbIZ8fHdnxlZ8ZkxniIeIiIiIj4/0VkZ0bGdGxnRsZH - bHZHTHRliIiAAAAACPiPd3x8fnfHx+x+x8d8fIbIZ8fIbHx2fHxnbGRlx2x4iIiIiI+Pj492R8ZWVkZW - VsdHbHRsZGdGV4iPcAAAAACPj3yOfsfH7IbHx3x8dsfHbHyGfHZ2x8dnx8dsdmRlxoiIiIiIiPj/hGR0 - bGVsfGRkfGVkdHx0Z0eIiIAAAAAAj49+fHx8jHfHfIxoznyGfIZ8bHbHx2dsfHZ8d8bHxmWIiIiI+PiP - j/dGxlZGx2R8dkdGRkdkbHRoiIhwAAAAAI+IjIjIZ8dsjOdnxnx2x+fHx37HZ8fHx2fGx2x3x2XGeIiI - iI+Pj4j4R0fGfHRkZ0bGR8dsZWVkd4iIAAAAAACIj4fIbIyMhmfHyGfIx+x8fOfHbIx+fH7HZ8fHbHbH - bHiIiI+I+Pj/+EZGZWRkfHRlZWZGVlbGRliIiAAAAAAAj4/3eIx+Z8jH7Hzsdnx3x2fHbIx2x8Z8fHx2 - fHbHZ8fPj4/4+Pj4iP9GXHxlbHZGxlbHR8ZGdHR4iPcAAAAAAA+I986MfHznx8hnd8jHx2yMfIbHZ8dn - x2fHbHbHZ8dmePj4+P+Pj/+PdGZGRnRsdHRsdGxlbHRneIiIAAAAAAAI+Ph3jnyGx+fHx8fsfnyGx+fH - fHx+x2x8Z8fHZ8fGx8+Pj4+P+Pj4/3R8dlxsdGxnx2R2VnRnRoiIgAAAAAAACPj4zoyGyMfH5858d8fH - x+x8fOfGZXx+dnx+fHx2d8dvj4//j4//j492Z8dndnx3x2R8fGfHx0eIiIAAAAAAAAj4j4eIyMfnyMd8 - fsdn5+x3x2fHiGRnx8fHbHbHbHx8iP/4+P/4+P//dMdsfGx2R2R8Z2dGZWZ3iI9wAAAAAAAAj4+MiHyM - fIx858d8jMfHx2fHaIj4Rnx8flbIbHbHZo+Pj/+Pj/+Pj3Z8dnZWx2x8dnxsfHZWWIeIgAAAAAAAAI+P - h8iOZ+fH58d8fsd8d+yM58j/j4dGZ8fIbHfIbHj4//j4//j4//98Z8bHx2VnZlbHZWdMdniI+AAAAAAA - AAAPj/h+jIx8jHyM58d858fHx3xoj4/4h8ZmfHbHbHaI/4+P/4+P/4+PZ8dlZ2x8fHxnZWx8dmV4h/cA - AAAAAAAACPj4d4jHyG58dnyM58fnyGx+yP/4//+IVkZHbHZ4+Pj/+Pj/+Pj4/0dkfHx2dmVnx8Z2Z0dH - iHiAAAAAAAAAAAj/j3eI5+x8fsjIZ8d8fIZ+x3iPj4+P//+Ih3h4/4//+P//j4/4//hsfHZsfGx8bHZW - x8Zsd4iPgAAAAAAAAAAA//+MiIx3yMd8fOyM58jGx3zI///4+Pj///////j/j/+Pj//4/4/3VnbHx2Vn - x2dGx2VldliHiHAAAAAAAAAAAI+P9+iHyMhnyOd8d8fnyHx36Pj4////j4+Pj4////j///j4/4+P9sfH - Z2VsfGfGfHbHbGV4iIgAAAAAAAAAAAAP//h8iOx+yOx8d858fHznx8j///j4////////j4//j4+P/4+P - j4dsdsfGdnZWfHZHbHZWiHj3AAAAAAAAAAAACP//iIh3x3x8fshnyMhox+x4+Pj///j4+Pj4///4///4 - /4+P+P98dsfHbHxsfGfHx8dHZ4iIgAAAAAAAAAAAAAD//4aIjIznyMd8jIZ87Hx3yP//+P////////j4 - //j4/4/4+Pj4bGdnbHbHfGfGZ2Z2x1iIiIAAAAAAAAAAAAAAj//4yIjnyGjOfH7HyHyGyGj4+P/4+P+P - j/j///j//4/4/4+P9lfHx8fHbHZ8dHxcZWZ4h/gAAAAAAAAAAAAAAA///3joyMfOfIbHfnx+yGx4//// - /////////4//+Pj4/4/4/3xnxnxnbHbHxnxnZ8dHiIiHAAAAAAAAAAAAAAAI//+HeIyOfIx3jHx+x3yM - 5//4+P/4/4/4/4//j////4/4j/fHxnx2fHZ8dnxnxsZ2eIh/gAAAAAAAAAAAAAAAAP//+HeIx8jIzsjI - x3yMdsiP///4////////j/+Pj4/4+P98dnx2x8Z8Z8ZWfHZ8dIiHiAAAAAAAAAAAAAAAAAAP//+OiI58 - hnyG587Ibsh8j/////+P+P+P//+P/4/4+P+Hxnx2x3x2x8dnxsdsdkeIePcAAAAAAAAAAAAAAAAACP// - h3iHyM58jHyHx8d858eP/4///////4+P/4/4///4xnbH5Wx2Z8dsfHdsdlZ4iIiAAAAAAAAAAAAAAAAA - AAD///h3iIyMjH7Ix+d8hnyMbIj///j/j////4/4//+Ixnx8hsd+x8dsdsdsdlbHiIeIAAAAAAAAAAAA - AAAAAAAAD///h+iOfOfIfOfHyMfIZ+fIaI/////4//////iHxnx2dsdsfHZ8d8dnx8bHd4h4+AAAAAAA - AAAAAAAAAAAAAAj/j/h3iMjIbIZ8jIbn7Hx8jGx8iIiPj/j4iIfHxnx2yMdnx2fHx8Z8fGdndoiHj3AA - AAAAAAAAAAAAAAAAAAAAj///h8j37IzsjIbsfHfIaM5358bGx8fHx8bH7HyGyGx8jHx8dnx2x2fHxseI - ePgAAAAAAAAAAAAAAAAAAAAAAAj/j/iOiIyHd8jHyMjI7Hx3x8fIaMhn5858jHdnx+x2fsdufHxn7HbH - bHeIiIiAAAAAAAAAAAAAAAAAAAAAAAAA//j/iMiIzsjOfnyGfHfnznyMjHx+x8d8d8fOyGx3yMdsfHbI - bHfHbHdniHiIAAAAAAAAAAAAAAAAAAAAAAAAAAj/j4iI6IfIaMfIyMjOXIyGfmfnx8jOx85+fHx+x2x8 - d8fIbHbHbIbHiIeI8AAAAAAAAAAAAAAAAAAAAAAAAAAA/4j/iHiIjHyMhnbnx358fHyMx+fHfIaMfHfI - x3x+fGfnbHbIbIbHeIiIiIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4j/iMiIjnyM7Ix3yMfn58dox8jOfH - x8fOdnxox8jHx8fIbHfHd4iHiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iPiI54h+yHyM7Ix8fHyMjI - yGfH58hufHx+x8dsfsdn7HfGfHiHiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iP+HjIiHznyHfsjn - yGfsfnzsjHyGx8fIx3yMhsd8fHfGjHiIiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iP+IiHiIyM - 7HyMfIyMd8fHd8jH7IyGjHbH5shsfsfGfGiIh4iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iI+I - joeIhoyMfnyGyM58jOyG58d2x858hsd8d8d8jHiIh4iIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - iP+I/4jI6Ih358fIznZ8hud8fHyM5358fsd8fsfsdmeHiHiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACP+Ij/iHjIiHjI58jIyMjHyOfIZ8fHx8d8hsd8d8iIiIeI+AAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAACI/4iP+IjoyI6MjH7IbsjIx8jOyMjIaMfsd858h4iIeIiIAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAIj4iPj4h4eMiOd3yMd8fnyGfIx+fOx8d851iIiIeIj4AAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAIj/iIj4iIeO13yOyMjsfIznyGx8d8jsd3iIiIeIiIgAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiP+IiP+Ih4yOeH58h358jIyOeMhseIiIiIeIiIgAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI//iIj/j4iIx3d8jHyGfnx8eOiIiIiIeIj4gAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP+IiIj/iPiIiHiIeIeIiIiIiIiHiIj4cA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI/4iIiIj4+Ij4iIiIiI+IiIiIiP - iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP/4iIiIiIiIiIiIiIiI - iI+PiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP/4+IiIiIiI - iIiIj/+IhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIj/ - ////////j4dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAACHd3d3d3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////wAAH////////////////+AAAAD/// - ////////////4AAAAAH//////////////wAAAAAAP/////////////wAAAAAAAf////////////wAAAA - AAAB////////////wAAAAAAAAH///////////wAAAAAAAAAf//////////wAAAAAAAAAB//////////w - AAAAAAAAAAP/////////4AAAAAAAAAAA/////////4AAAAAAAAAAAH////////8AAAAAAAAAAAA///// - ///+AAAAAAAAAAAAD////////AAAAAAAAAAAAAf///////AAAAAAAAAAAAAD///////gAAAAAAAAAAAA - Af//////wAAAAAAAAAAAAAD//////4AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD//////AAAAAAAA - AAAAAAAf/////gAAAAAAAAAAAAAAD/////wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAH////8AAA - AAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAP// - /8AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAA - AAA///8AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP//wAAAAAAAAA - AAAAAAAAD//8AAAAAAAAAAAAAAAAAAf/+AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAA//wAAAA - AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/ - 4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAA - AAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAA - AAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAA - AAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/ - gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAA - AAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAA - AAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAA - AAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAD/ - wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAA - AAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAA - AAAAAAAAA//4AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//8AAAA - AAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAB// - /wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAA - AAB////AAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////wAAAAAAAA - AAAAAAAD////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAA - AAAAAAAAAAAAH/////8AAAAAAAAAAAAAAD//////gAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAf/// - ///gAAAAAAAAAAAAAP//////8AAAAAAAAAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAAAAA - D////////gAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAA - AAAAAf/////////4AAAAAAAAAAf//////////AAAAAAAAAAP//////////8AAAAAAAAAP/////////// - wAAAAAAAAP////////////AAAAAAAAP////////////+AAAAAAAf/////////////4AAAAAAf/////// - ///////4AAAAA////////////////4AAAH/////////////////+AB//////////KAAAAGAAAADAAAAA - AQAEAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA - wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d3d3d3d3cA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3iIiIiIiIiId3dwAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3eIiIiIiIiIiIiIiIiHd4AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAB3eIiIj4////////j4+IiIiHeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeIiI - j/+Ph3d3d3d3iIj/+IiIh4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd4iIj/+Hd2VnxsbHxsdHd3 - j/j4iIh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHiIj4+HdlZWfHZ3fHZ8fGx8Z3iPiIiHeAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAd4iPiIdlZWx8dsfMdsfHyMfHzHx3/4iIh3AAAAAAAAAAAAAAAAAAAAAA - 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 - AAAAAAAAh4//iIjIh3zn7IyGjOfOfOyM58foiPj4iHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeP/4iI - d4h8jIzsfl58jIx8fIiI+PiIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3iP/4iH6HjOd3yMfIyGjo - iPj4+Ih4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeIj//4iIiIjIhoh4iIiI//j4iHgAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeIj//4+I/4j4j4iPj/iPiHcAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAACHd4iP/////////4+IiHeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - CHd3eIiIiPiIiHh3eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3d3d3d3d4AA - AAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////// - ////////////////////////////////+AAD////////////gAAAP//////////8AAAAA//////////g - AAAAAP////////+AAAAAAD////////4AAAAAAA////////gAAAAAAAP///////AAAAAAAAH//////8AA - AAAAAAB//////4AAAAAAAAA//////wAAAAAAAAAf/////gAAAAAAAAAP/////AAAAAAAAAAD////+AAA - AAAAAAAB////8AAAAAAAAAAB////4AAAAAAAAAAA////wAAAAAAAAAAAf///gAAAAAAAAAAAP///gAAA - AAAAAAAAH///AAAAAAAAAAAAH//+AAAAAAAAAAAAD//+AAAAAAAAAAAAB//8AAAAAAAAAAAAB//4AAAA - AAAAAAAAA//4AAAAAAAAAAAAA//wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/gAAAAAAAAAAAAAP/gAAAA - AAAAAAAAAP/gAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAD+AAAAA - AAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB+AAAAA - AAAAAAAAAB+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD/AAAAA - AAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAP/wAAAA - AAAAAAAAAP/wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/4AAAAAAAAAAAAA//4AAAAAAAAAAAAA//8AAAA - AAAAAAAAB//+AAAAAAAAAAAAD//+AAAAAAAAAAAAD///AAAAAAAAAAAAH///gAAAAAAAAAAAP///gAAA - AAAAAAAAP///wAAAAAAAAAAAf///4AAAAAAAAAAA////8AAAAAAAAAAB////+AAAAAAAAAAD/////AAA - AAAAAAAH/////gAAAAAAAAAP/////wAAAAAAAAAf/////4AAAAAAAAA//////+AAAAAAAAD///////AA - AAAAAAH///////wAAAAAAAf///////4AAAAAAA////////+AAAAAAD/////////wAAAAAf/////////8 - AAAAB///////////gAAAP////////////AAH//////8oAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A - /wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHd3d3d3d4AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACHd4j//////4h3eAAAAAAAAAAAAAAAAAAAAAAAAAAAd3j//4+P+P////+HeAAAAAAAAAAAAAAAAAAA - AAAAAHeP/4h3d2VnR2d4j//3eAAAAAAAAAAAAAAAAAAAAACHiPiHdlZlZ8dsfHR3j//3eAAAAAAAAAAA - AAAAAAAAB3j/h3RlZ8fHbHx8fGx0iP/3cAAAAAAAAAAAAAAAAAh4+PdkZWx8dnx8d8fHx8bHj/+HgAAA - AAAAAAAAAAAAh4j4dGVsdnbHx2jGfOfGfHxlj/h4AAAAAAAAAAAAAAh4j3RkZHbHx2x8fHzlx8fHxsdo - /4eAAAAAAAAAAAAAh4j3RkdGx0Z8dnZ2x8dsjGx8fMdv/3cAAAAAAAAAAAh4j3RkRsdGfGZ4iIiGfIxs - jOx2x8f/94AAAAAAAAAAB4j2RGRkZGxlZYj4+PjHx8fHx8fHx0/4eAAAAAAAAAB4j3RkR0R8dHx4+IiI - j3bH7Hx8fOx8dv+HAAAAAAAACIj3RGRsZGRkZs+IiIiPjHx3znznx8fHf/hwAAAAAACHj3RkZUZEfGXH - eIiIiIiGfGx8fHx8fsfI/3gAAAAAAHiPZGTGRGxkZGR4iIiIiIx8hnx2x8fHx2T/hwAAAAAIiPdGVkbG - VkVsfGiIiIiPfHbIx8jH7Hx8fH/4cAAAAAeIhGxGxHRkbGVmx4iIiIjHyGx+fHx3x+x2ePhwAAAAiI90 - ZGR0ZMZGRsdGx4eIxnZsd8fH58Z8dsfG/4cAAACIiGTHxkxkZFbHRkdGxsZ8fHfGfHx8fH7HfHaPhwAA - AHj3x2RsZGx0bGRkfGfHbHbHx2fHZ8dnx3x8fH/4gAAIiPR2xkdGVkxkRlxmxGR0fHZ8fH7HbIx8Z8dn - T/dwAAiPdsfHxGxsZGVsZkWIiIh2fHbHZWyGx2fHbHx3/3AACI92fGZGx0ZHxkZFbIiIj4R8Z2fHx8ds - fHx+x2ePcACIiHxnx8dGxGxkx8bHiPiI9GfHx2x2fHfHZ8dsfP94AIiIZ8Z8bGxlZMZGRkaPiPj3xnxs - d8fHbH7HbHfGj4cAiPjHx8dnx0xsdGx0bIiIiIhGx2fGdmx2x2x2xnSPhwCI93bHbHxmxnRsdGxkiIiI - iHR2x2x8dsdsdsd8Z3j3AIj3x2x8Z8dsbGRsZHxoiIiI90ZWx2bHfHZWfGfEf4cAiPdshsjGfHbHxsZc - ZGiIiIiIhGx2x2xnxsfHRnZ49wCI93xnxnznx2xlZGbGxYiIiIiIZGVsdHRnRmx8TH+HAIj3yM5858fG - x2xsfGVkaIeHiI+FbHRsbHxlZWZ2X4cAj/dmfHx8fHfHx2xkRsbHiIiIiPhGRlZ0ZHxsbEZ49wCI93x8 - fsdmznx8d8fGVsTIh4iIj3RsbGR8ZHR0dHj3AIj4yM7HfHx8dmfGbHxsZkaIiIj490dHRsZWxkbGf4cA - iPhnZ3xn58fHznx2fHbHxMiIiP/4RsbHRsZWx0aIhwCI/3yMaMx8fnx8fHxnx2xnZ4j4j49kdGR0dGR0 - ZY+HAIj/dsjGjH7Hznx+x8Z8dsfHj4/4/3xsfGxkbGRkiHgACP94znx+x8dsdsdsjGx8dsb/+P//dGRk - ZWx0fHePcAAI/4aMdsfIbIx8fHbH58fHbP////+Gx8fGdGxmSIhwAAiP98jIyGyMfshoh2x8fmx4///4 - /4R2Z2xnx2Vo+HAAAI/4fs58jOfHbHj/hsbHxnj/////jGx8dHxnxniHAAAAiPh3x858fIyM6P//iHd4 - //////92fHxsdsZWiIcAAACI/4eMjH7H7GfP//////////+P/2x8Z2fGfGWPeAAAAAj/iM52yMjHfH// - ///////////4x8Z8xnxnSPhwAAAACI/4jIyM587Iz///////////+PdsdsdsdHx4iHAAAAAAj/9+fOfI - yGbo//////////j/fGfHbHbGx4+HAAAAAACI/4h4yM58jHj///////////fGx2x2x2dIiHgAAAAAAAiP - +H7Ix8jIzHj////////4xnx8dsfGxoiIcAAAAAAAAIj/iHaM585+xsiIj/+Ih8Z8fsfHxnx3iIcAAAAA - AAAACP/4d8jIx8d37Gx8bHxsfOfHbH58Z8j4cAAAAAAAAAAIj/+I52fnfOx3yOyM58hnx8Z2x8fIj4eA - AAAAAAAAAACI//iIyMfnyMjGfH5WfOx858jGxoiIiAAAAAAAAAAAAAiI/4iOfHyM52jIx8jHyMfHxnyI - j4hwAAAAAAAAAAAAAIj//4iHfsjIx+yOx+yG58hseIiIeAAAAAAAAAAAAAAAAIj/+Ih4dozsfHyMdsfH - 7HiI+IcAAAAAAAAAAAAAAAAACIj/+Ih353jI5853dox4iIiIgAAAAAAAAAAAAAAAAAAAiI//+IiHd+fI - d8jIeIiPiIgAAAAAAAAAAAAAAAAAAAAAiIj//4iIiIeIiIiP+IiIAAAAAAAAAAAAAAAAAAAAAAAAiIj/ - ///4+Ij4//iIiAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIj4///4iIeIAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAIiIiHh4iIgAAAAAAAAAAAAAAAAA/////////////////////////wAD///////wAAA//////8AA - AA//////AAAAA/////wAAAAA////+AAAAAB////gAAAAAB///8AAAAAAD///gAAAAAAH//8AAAAAAAP/ - /gAAAAAAAf/+AAAAAAAA//wAAAAAAAD/+AAAAAAAAH/wAAAAAAAAP/AAAAAAAAA/4AAAAAAAAB/gAAAA - AAAAH8AAAAAAAAAPwAAAAAAAAA/AAAAAAAAAB4AAAAAAAAAHgAAAAAAAAAeAAAAAAAAABwAAAAAAAAAD - AAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAA - AAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAOAAAAAAAAAB4AAAAAAAAAH - gAAAAAAAAAfAAAAAAAAAD8AAAAAAAAAPwAAAAAAAAA/gAAAAAAAAH+AAAAAAAAAf8AAAAAAAAD/wAAAA - AAAAP/gAAAAAAAB//AAAAAAAAP/+AAAAAAAB//4AAAAAAAH//wAAAAAAA///gAAAAAAH///AAAAAAA// - //AAAAAAP///+AAAAAB////8AAAAAP////8AAAAD/////8AAAA//////+AAAf///////AAP///8oAAAA - MAAAAGAAAAABAAQAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAA - gIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - B3d3d3d3cAAAAAAAAAAAAAAAAAAAAAB3eI////iId3cAAAAAAAAAAAAAAAAAAHeP//h3d4j//4d3AAAA - AAAAAAAAAAAAeI+IR0dnx2VlZ4+HcAAAAAAAAAAAAAAHj/dlZ2XHbHx2V3ePh3AAAAAAAAAAAAB/90dG - VsdsjHbHxsdoj3cAAAAAAAAAAAj4dGR0Z2x3ZsjHx8fHePdwAAAAAAAAAI+GR0ZHxleIiHx858fHx493 - AAAAAAAAB/hHRkZGfHiIiIbHx8Z8dnj3gAAAAAAAf4dGRGVsZoiIj4jHbIx8fHf4cAAAAAAIj3RkZUZH - RYiIiIhsjHznx8d/dwAAAAAH90ZFZGxkbHiIiIfHZ8fHx2x49wAAAAB/9lZGRkR8dmiIiIx8fH5efHZ2 - +HAAAACPdGRsZGxkbFZ3fHZ8fsfHx8fHf3AAAAiIdGx0R8ZHRmzGx2x+V8dsdnx2eIcAAAf4ZWRsZEdE - bFZ3Z8fHxnx3x8fHyIcAAAj3RsfGVsZGx2iIiGdnbHbHZ+dnd/cAAIiHZ8ZGxkbHRGiI+Fxsd8d8fHzH - x/eAAHiHx8fHRsdEbHiIiHZ8fHbHbHZ8dohwAH+Gx2dsbHRsZMiIiIxnZsdsdsfGdIiAAH93x8bHfGxk - dkeIiIhUx2x2x2dlZ49wAH98fnx8Z8ZcbGyIiIiHbHbHZcbGxn9wAH93x8fnxnxmxlZIiIiIdkdkdmVn - R39wAH92fOXGfHbHRsbHeIiI9GxWxsbHxn9wAH93x8dsfGfHx0ZMaIiI+EZsdHR0ZYhwAH+M52fIZ8fs - dsdsbIiI/4RWRsZGVoiAAHj3fHzsfIx2x2x2VniPj4bGx0fGZYhwAIj3yOd8hsbHx8fHxs/4/4RlZGRl - ZvgAAAj3jMx+x+fIbIbHZ8////fGfHx8dfcAAAf4jn7Hx8fIiGx+xo//j/dsdmZnSPcAAAiPd8d8jIzo - /4dneP////R8bHxWeIgAAAB/iHyM58fI/////////4xnZWZ8f3AAAACI+OyGyOx+///////4/4bHxsfH - +HAAAAAI+IjIx8jI////////+Mdsdnx39wAAAAAHj3jOfsfnj///////jGx2x8d/iAAAAAAAf/iMfIx8 - eIj/+PiMZ2fHx2ePcAAAAAAAB/iI58jOzOx8fHxnx8fHZ2j3AAAAAAAAAI/4h+yHd8jOfOfH7H5sfP+A - AAAAAAAAAAj4iHfOyM58d8dsd8fHj/gAAAAAAAAAAAB/+IiMjIx3znyMfHZ4+IAAAAAAAAAAAAAHj4iI - 587Ix8hn53j/hwAAAAAAAAAAAAAAh/+IiId+d+yMiI+IcAAAAAAAAAAAAAAAAHiP+IiHd4iP/4hwAAAA - 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 - wPEbmP0G/n+7sMqt4AflUwAAAABJRU5ErkJggigAAACAAAAAAAEAAAEACAAAAAAAAEAAAAAAAAAAAAAA - AAEAAAABAAAAAAAAXCQMAF8qFABmJw0AYysUAHMtEQBpMhsAdzcbAGk6JwB3OyQAbUAtAHdBKwBrRzcA - d0k2AH1RPgBxT0EAeVVGAH5dUQB8Y1kAfGpkAH19fgCLOxgAkz0ZAIM9IgCNQB4AmUEdAKBFHgCLQyUA - lUcnAIVLNACYTjAAilE6AJxSNACiSCMAplAtAKZPOQC4TzgAp1c3ALZbOgC7YT0AxE00AMFTOQDEYzwA - iFhGAJlYRQCFXlEAml1RAKpbQgC2W0IAoF5SAJVhSwCJZFYAk2ZTAJpkVACWZ1oAm2RYAJVqWwCbalwA - pmNHALxkQgCma1YAtG5TAKdyXQC7c1cAiWxjAJNuYQCebmIAjXNoAJRyZQCYcGQAknVrAJJ4bwCaeWwA - hnl3AJR7cgCcfHAApG1iAKRxZQCpdmIAoHNoAKhyaAChe20ArXxqALV7ZgCpe3EAyGlEANFuSQDLcE0A - 1XBKAMJvUADGdlcA1nhVAMJ7YADRf2AAnIN6ALiCbACphXgAuIl3ANuBXwDNg2YA2YdnAMmMdgDUjXEA - 2pN4AOKLawDgj3AA45Z5AH9+gACAf4AAg4ODAIuDgwCHiIgAi4uLAJmNjACdk44Ajo6QAJOPkACTk5MA - mpSTAJeXmACXmJgAmpqbAKSKgACrjYMAtI6CAKuSiAC1lYkAppuZALSclAC5m5MAsp6ZAKqgnAC5oJUA - taOdALukmwCfn6AAoJ6gAKSiowCrpKQArKmmAKumqACuqakAtKWgALumoACyq6YAuqqlALKsrAC9raoA - urSsAK6usACzrrAAtbGxALq0tAC+uLYAtrW4ALq2uAC9ubkAx5iHANibgwDHnpMA5J2CAN2ijADCo5oA - 2amXAOajiQDlqpQA5LCcAMSspQDFua0Aw7WxAMy3sADCu7QAy7q0AMK8vADKv7sA0ry1AOm6qQDHwK4A - xsG0AMnCtQDEwLsAy8O8AM3KvADTwrsA1si/AO3ArwDsw7QA8cu9ALy9wgDCvsAAv8DAAMXBwQDJxMQA - zcjEAMnGyADNysoA08bAANLMxADdysEA0czNANrOyQDU0cUA1NLKANvTzADMztAA0s7QAM7Q0QDV0tIA - 2dTUANbY1gDc2dUA2dbYANfY2ADd2toA78zAAPDOwQDl1swA8tLGAODW0gDi29QA6dzUAOHd3QDz29IA - 5eLUAOji1gDk4dwA6uTcAOvo3gDy4doA39/gAOLf4ADl4+MA6eXlAOfo5QDs6uMA5uboAOjn6ADn6ewA - 7OrqAPPm4gDx6+QA8O7tAPLw5gD08uwA+PTuAPn47gDt7vAA8e7wAO3x8gD08vIA+PX0APv59QD09vgA - +fb4APb4+gD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - b29wdXV3d3h4eHh4dXV1cG8UbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAb3Bwib/O3fn7+/v7+/v7+/v7+/v799XOlXVwFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAHBweL3R8fr56N3Sx8K/v729vb+/wsLOzdXn8f37+/v2zolwFAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAcHCVx/b66N3CmZiYmL3Cx9HR3d3d5t3d3d3Rz8fOws3R5vn7+/v2mnBsAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAcInH8fHdwpeWl67N3ebj8NvLyMbExMSvxMTIyNji8PDw8efRzc/V9vv7 - +/eVb28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdZzn8dW9lpCZy+fw4tjEhoF7UUVFNjc1NTc1NzZMT1R+gaev - 3PD19Pbo5/b7+/v7z3drAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdb/2586WjZjR8PDbqoFeQTMrHyssLCwvLy8vLy8v - Ly8vLC8sLDxMYJ+q3PH7+/v++/v7++uHbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdcL23b2KkMLv9NinekErDh8sLCUsLy8v - Ly8vOjAvMDAwMDAwMCQwLyMvLDFQfKrc+vv7+/v7+/vneG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdb/o1ZmOl9H15Kl6Mw4dHywg - LCUvLy8vLy8vMDAwMDAwMDAwMCkwMCkpMCkpJC8jMUx8r/H7+/v7+/v75XVvAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdZXd3ZyKl9Lz2KJB - Dh0dLB4gJSUlJSUsLy8vLzAvLzowOjAwMDAwMCkpMCkpKSkpKSQkIy8xVKfk+/v7+/v7+8JvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHXP6L+K - ltH12H4zDR0dHh4eICwgJSwlOi8vLy8vLzswMDAwOzAwMCkpMCkpKSkpKSkoKSkoJCQjMVCi4vv7+/v7 - +/uHbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AHWX58eWisL63H4tDR0bHh4eHiAgICUlJSwvJS8vLycvLy8wMDAwMDAwMDAwKTApKSkpKSkoKCgoKCkk - IzFMou/7+/v++/vMbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAB1zt29ipfo8KdBCwsbGx4bHh4gHiAsJSwlJSU6JS8vLy87LzowOjAwMDAqKTBVKSkwKSkp - KSkoKSgoKCgoJCQsVK/5+/73+/v+dQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAidXRloPH+thRDQkbGxwcGx4eHh4gICAgJSwlLC8sLy8nOi8wMDA7MDAwMCkw - KSkwKSkpKSkpKSgoKCgoKCgoJCQjMXzc/fvr9/v7lW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXdwoOW5/GBDgkXFxgbGxweGx4eHh4gLCAlJSwvLy8vLy8vLzow - LzA6MDAwMDA7MCkwMCkpKSkpKCkoKCgoKCgoKCkkMUyn+fvr5/77whQAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHic0r2DnPvcUQsJFxUYGxgcGxweHB4eICAgJSwsJSUs - JSw6LycvOy86OzAwMDAwVSkwMCkwKTApKSkoKCgoKCgoKCgoKCgkIzF84vvrz+z71WsAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4wtWYg8L6ty0JFxUVFxgYGxscGx4eHB4e - ICAeJSUsJSwlJy8vLC8lLy8vMDAwMDApMDAwVSkpKSkpKSgpKCgoKCgoKCgoKCgkJDFUxv3sztX79m8A - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeMLRl4PT+YYNCQcVBxUVGBgY - HBscGx4eHh4eJSwgICUsJTogIB0eDR0NCxcbIDAwMDA7MCkpMDApMCgpKSkoVSgoKCgoKCgoKCgpJDE8 - p/rsx9H7928AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHjB0Y6K1fF7DRcH - FRUVFRUYGBgbHBwcHB4eHiAeICUsJSwlJR80e4WZrq6nfUQLCyMwMCkwMDAoMChVKSkpKSkoKCgoKCgo - KCgoKCgoKSwxovH5x9H9+W8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwseW - iubxVAsHFRUVFRUVFxUYGBsbHBweHB4eICAgICUlICA0lMrR0c/Kz9Xl5sJFCR0wMDAwMFUpKSkpKSlV - KSkoKSgoKCgoKSgpKSgpKS8xgfD5x8379msAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAJzPloro5FEKFwcVFQcVFRUVGBgYGBwbHB4cHh4fICAsICwgYMrPx87BzsLOws7H3eyACR0wKTAp - KTApWSkpKSkpKSkpVSkoKSgoKCkoKSgpMC8xe+/5zsf76xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAACV0ZeK3fBIChcVFRUVFRUVFRUVGBgYGxwcHB4eHh4gICAgIGDKzMHBwsKuwsLCwsLD - zfeBCSMwMDAwWSkpMCkpKSkpKSkoKSkoVSkoKSkpKSgoKS8xe+/xwtH7zGwAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAidGTg9XxUQsXFRUFFRUFFRUVFRUXGBgbGxwbHB0eIB4gICA+w8PAwr+/ - v66/rsKuwsLC0PdFFzAwMCkpMCkwKVkpKSkpKSkpKSkpKSkpKSkoKSkkMCMxfvHxwtH7mwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHjRvYPN+nsKFxUVFRUVFRUVFQUVFRUYGxgbHBweHB4cHSAg - IJTAwL+/vb29vb29vb2uwsKu68MLIzAwMDAwKTApKTApWSkpKSkpKSkoKSgpKSkpKSkpMC8xgfrmwt37 - eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIwq6Kvf2BCxcVFRUVFRUVFRUVFRUVFRgYGBwc - GxweHh0gICA8tMC+v5y9mZm9nJm9vb29rsLN9y4dKTAwKTBZKTApKVkoKTApKVkpKTApMCgpKSkpKSkp - MCwxp/vVv/b+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJfHlpP7qg0JFRUVFQUVFRUVFRUV - FRUVGBgbGxscHBseHh4eHGDDtJycnJiZmJiZmJiZmb29vcLuexwwMDAwKTAwMFkpKSkwKVkpKSkpKSlV - KSkpKSkpKSkpMDE2t/vNwvrVFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJx5iK8dwQGxcVFRUV - FRUVBRUVFRUVFRUYGBgYHBscHhweHh4cYLS+nJycl5iYmJiYmJmZvb29vex+GzAwMDAwMCkwKTAwMCkw - KSkpKVkpKSkpKVkpKTApKTApMDFF2Pu/zfuXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeMe9itLx - QQsXFRYVFRUVFRUVFRUVFRUVFRgYGBgYHBwbHhweHh5gtpqUl5iYl5iXmJiYmJiYmb2u7H4dMDAwMDBZ - MDAwMClZKTApMFkpKSkwKSkwKSkpMCkpKTAwMCxK8ey95vtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACXt469+34LFxUVFhUVFRUVFRUVFRUVFRUVFRgYGBwbHBwbHh4eG2C2l5qclJeXl5iUlpeYmJiZvb33 - fB4wMDAwMDAwKVkpMCkwMDApKTAwKVkpMCkwMDApMDApKSkwMTGA+8+9/tUUAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAg82XlvS3DhsVFRUVFhUVFRUVFRUVFRUVFRUWGBgYGBwbHhseHh4bPpyalJSWlJaWlpaW - l5eYmJiYvfZMIzAwMDAwMDAwKTEpMDAwKVkwKTAwKSkwWSkpMCkwKTApMDApLDO3+7/H+4wAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAC9v4rP9DMLFRYVGRkVFhYVFhUWFRUVFRUWFRUWGBgcGxscGx4bHh4gkJqU - lZaWlpaWlpaXl5eYmJjV0SAvMDEwMDAwMDAwWSkwWSkwMDAwKTAwWSkpKTAwKTBZKTApMDAwLkfx7L3m - +W8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAiceWnPuBCxsWFhkVFhYVFhYVFhUVFhUVFRUWFRUYGBgYHBwb - HBweGx5StJWWlpaWkJaQlpaXl5iYvflgIzowMDAwMD0wMDAwMSkwMDAwMDAwKTApMDAwMFkpMCkwMDAp - MDAsLn37x739lwAAAAAAAAAAAAAAAAAAAAAAAAAAAADCmYro4BAbGBYWFRkVFhYVFhUWFRYVFhUWFRYV - GBgYGBgcHBwbHhweHh5+mpSWkJaWkJaWlpeXl5nrqiMvMDowMDEwMDA9KTAwMDAwWSkwKVkwMDAwMDAp - KTEpMDAwMCkwMDAxNtL0vdH5bwAAAAAAAAAAAAAAAAAAAAAAAAAAiceWvftgCxgYGRkVGRYWFhYWFhYV - FhUWFRUVFRUVGBkYHBgcHBwbHhweHiB+mpSWkJaQlpCQlpfC56ovLy8wOjA6MDAwMDAxMDAwMDAwMDAw - MDAwMDAwMDAwKTAwMDAwMDAwMCwsXvrNvfqcbwAAAAAAAAAAAAAAAAAAAAAAAADCmZbixQ4bGBkZGRkZ - FhYWFhYVFhYWFRYVFhUWFRUZGBgYGBwbHBwcHhweHiBgl5yal5eUmJy/z8udLy8vLy8wLzAwMTAwMDAw - MDAwMDAwWTAwMDAwWSkwMDAwMDAwMCkwKTAwMDEtt/u90flvAAAAAAAAAAAAAAAAAAAAAAAAiceWrvVg - DRgZGRkVGRUZFhYWFhYWFRYWFRYVFhUZFRUZGBwcGRwcHBweHB4eHhwvUoSXmZm9rqd8OiUsLy8vLy86 - MDowMDEwMDA9MDAwPTAwMDBZMDAwMDAwMDAwMDAwMDAwMDAwLyte9ce9+pcAAAAAAAAAAAAAAAAAAAAA - AAC/vZDoxS0gGRkZGRkZGRYWFhYWFhYWFhUWFhYWFRUZFRUZFhkYGxwcHB4bHh4eHh4cJS8vJS86LyUl - Ly8lLy8vLzAvMDowMDA8MDAwPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAvMS23+pjS9m8AAAAAAAAA - AAAAAAAAAAAAg8eWvfV7HyAiGRkZGRkWGRYZFhYWFhYWFhYWFRYWFRUZFRgYGBgcGRseHB4eHB4eICAe - Hh4sICAgLyUlJS8vLy8vLy86MDo6MDAwMDAwMDEwMTAwMSkxMDBZMDEpMDAwMDAwMDAwMC8vK176x736 - eAAAAAAAAAAAAAAAAAAAAACWwpDd2zMsIiIaGRkZGRkZGRkWFhYWFhYWFhYWFhYWGRUZFhkYHBkbHBwc - HBweHB4eICAgJSAlJSUsJSwlLC8sLy8vLy8vMDowOjEwMTAwMDAwMDAwMDAwMSkxKT0wPTAwMDAwMTAw - JC8sM9j2l+jRbwAAAAAAAAAAAAAAAAAAiceYmPSBDiUiICIZGRkZGRkZGRkZFhYWFhYWFhYVFhUWFRkV - GBkYHBkcHBwcHh4eHh4eICAgICAsHiUlJSwvJSUvLy8vLy8vLzowMDowMDEwMDA9MDEwMDAwMDAwMDAw - MDAwMTAwJC8vLzErffW9wvpwAAAAAAAAAAAAAAAAAACMypbH9kEsICAiIiEZGhkZGRkZFhkZFhYWFhYW - FhYWFhkVGRYWGBwZGBkcHBwcHB4cHh4eICAgICAgLCAsJSwlLywvLy8vOi8vLy86MDowMDEwMDAwMDA9 - MDEwMDAwMDEwMDAwMC8vMC8kMSxA8NKY+ZcAAAAAAAAAAAAAAAAAAJzCluKuKyUgIiUiIhoZGhkZGRkZ - FhkWGRYWFhYWFhYWFhkVGRYWFhgcGBscHBweHBUHBwcHBgYJCQkHCQsgJSwlJTolLy8vLy8vLzAvOi86 - MDEwMTAwMTAwMDAwMTAxMDAxMC8vMC8wLy8vLCuu8ZjV3W8AAAAAAAAAAAAAAACJx5i99HsfLyIlJSIl - IhkZGhkZGRkZGRkZGRYWFhYWFhYWFhkVFhgYGRgcGRwcHBkgSENDQ0NKSkpKSl5KDgkgLCUsJSwlLywv - Ly8vLy8vMDowMDowMTAwMTAxMDEwMDAvMC8vMC8vMC8jMC8jK171wr36cAAAAAAAAAAAAAAAAJXHlsro - QSUlJSUlJSIiIhkaGhkZGRkZGRYaGRoWFhYWFhYZFRkZFhkZGRgZGBwcHoa2tr6+w7a+wMPDytGUCB8l - IDolJTogJywlLy8vLy8vLy86Ly8wOi8wLzAvMC8vLy8vMC8vLzAsMC8vLy8sM+jbl/mWAAAAAAAAAAAA - AAAAl8WX4sIrOiUiJSIlJSIiGhoZGhkZGhkaGRYZFhYaFhYWGRYZFRkWGBYYHBkcGRwesb6+tr60vr6/ - tMDAwsANHiUgIC8gLyAsJTovLy8vLy8vLy8vLy86Ly8vLy8vLy8vMC8vLy8vLyQvLyMjLywQrvCX3c9v - AAAAAAAAAAAAAADCvZzwhCsvIiYiJiIlIiUiGhoaGhkZGhkaGhkZFhYaFhYWGRkZFRkWGBkZGBkYGB6x - vr6+tL6+v7+0wMDMvwocLCAvIDogOiUvIC8gLywvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8jMC8l - LB9y9ZzC9m8AAAAAAAAAAAAAeNiYzuhRLC8mJiYiJiUiJiIiGhoaGhkaGRkZGhYaFhYaFhkWFhkZFhwZ - GRkbGRsZHrK+tr6+v7+/v8DAwMyuDR0gICAgICwlICwlLDolJSwlLy8vLy8vLy8vLzovLy8vLy8vLyMv - Iy8vIy8lIy8lK0DwxZj6dQAAAAAAAAAAAACVzZjR20EvJSYgJiYiJiImIiYiGRoaGhkaGhYaGhkaGRYa - FhoWGRkWGRYZGBkZHBketMC+wL+/v7/AwMDBw8EQFyAgIC8gIDogJTolIC8sJS8sJSUlLC8vLy8vLy8v - Ly8jLy8vLy8vLyUvJS8vJSwfLcvVlvGWAAAAAAAAAAAAAJzHmOS9KzolJiYiJiImIiYlICIiGhoaGhka - GhkaGRoWGhYaFhkZGRUZFhkZGBkYGRyxwMDAwL/Cwr/AwMHBz0gGHiAgICAlICAgICA6IDolIC8sLywl - LyUlLC8lLyUvLy8lLyMvJS8lLyUvJSUlJSwOmOKW3cdwAAAAAAAAAAAAv8KY8I8yOyUmJiYlJSYiJSYi - JiIiGhoaGhoaGhkaFhoWGhYaFhkZGRkWGRkYGRgZG4/MtMDAv7+uv7/Av8DMgwYdJSAgLCAsJTogICAl - ICwlJSAlLyAvJSwvLywlLCUvLCUvLCUvIC8gLyAlIC8gIA599JjH5m8AAAAAAAAAAADHrr/jeiw6JiYm - JSYiJiUmIiUmJiAhGhoaGhoaGhoaGhoZGRkZGRkZGRYYGRkZGRgZfsPAwMC/v7+/v7+/v8LOEAYeICUg - ICAgICAvICwlIDogOiAvICwvJSUlJS8lLCUlLCUlJS8jLCUjJSwjJSMsH0fwvb30cAAAAAAAAAAAiN2Y - zt9GOjslJiYiJiYlJiYmJiUiJiYiGhoaGhoaGhYaGRoZGhkWGRkZGRkZGRgZGRVfw7TAvr+9v729mb+9 - vcGFBgkeICAgICAgICAgICAgICAgLCUgJSAsJSUsIC8lLCUlJSwjLCUlLCUgJSMsIh4rEtLBmPl1AAAA - AAAAAAB43ZjP5kU6OiYmJSYlJyYmIiYiJSUmJSIiGhoaGhoaGhoaGRoZGRoZGRkZFhkZGRkZFjrDtr6+ - nJm9mZm9nJm9vcpeAgseICAgICAgICA6ICAsJSAlIDogLCUgLCUlLCAlLCUsJSAlICIlICUgJR4lIB8t - 28qW+XgAAAAAAAAAAJbPm9vKNDo7JicnJiYmJiYmIiclJiYlJSYiGhoaGhoaGhoaGRoZGRkZGRkZGRkZ - GBkZHpS+nJy9nJycnJeZmZycvcxDAgscICAgICAgICAgICAgICAgICAlICAlIB4vICUgJR4lICAlLB4l - ICAgJR4gHw7B0ZbolwAAAAAAAAAAnNGZ25w0OjsmJiUmJiYmIiclJyYmJSYiJSYiIRoaGhoaGhoaGRoa - GRkZGRkZGRkZGRkWfLaanJiXl5eXmZeYl5icv8pGBBceHh4gICAgICAgICA6ICAgICAgLCUgJR4gICAg - JR4lLB4lHiAjIB4eIx4fDZjbkN2/AAAAAAAAAAC9z5zmkzo9JyYnJyYlJyYlJyYiJSYiJSYmIiYmIRoa - GhoaGhoaGRoZGRkaGRkZGRkZGRY6nJqUmJiXqZeXl5eXl5eXwtJGAhceHh4eHiAgICAgICAgICAgICAl - ICAgICUgICAgLB4iHiIsHiAiLCIeHh8NituW3cdwAAAAAAAAAL3RmeKQMj0nJicmJicmJiciJycmJiYm - JiYlJiImISEaGhoaGhoaGhoaGRoZGRkaGRkZGRl+nJqUlJSWlpeTlpaTlJeXv+FeAgYeHh4eHh4eICAg - ICAgICAlICAgICAgHiAgIB4iHh4sHiIeHh4eHh4iHw2D35bPz3AAAAAAAAAAv9GZ4o46PScnJyYmJyYm - JicnJSYlJiUmIiciJSYmIiEaGhoaGhoZGhoaGhkZGRkZGRkZFjqUlJWWlpaQlpCWkJWWlpeXv+uFCAYb - Hh4eHh4eHh4eHiAgIB0gIB0gICAeHiAgHh4sIh4eHiIeHiIeHh4eDX/blsjTbwAAAAAAAAC9z73jgyw/ - JycmJycnJicnJScmJyYmJiYlJyUnJSYmIiIaGhoaGhoaGhoZGhoZGhkaGRkaFmCalpaMlpCWjJCMkJaQ - lpeYv+uzCgYbIR4hHh4eHh4eHh4eHh4eHh4eHiAeHiAeHh4eHh4eHh4eHh4eHhwLf+CWx89vAAAAAAAA - AL/RmfCAOj8nJycnJicnJiYnJiYlJSclJyYlJyYiJSYmJSIaGhoaGhoaGhoaGRkaGRkcGhkZGoCVlZCW - io6VjJaKkJaWl5SYv+nSDgIbHh4cHiEeHh4cHh4eHh4eHh4cIB4eHh4eHh4hHh4hHh4hHiEeHAty35bH - 0WwAAAAAAAAAv9Gu8H86WicnJycnJicnJSclJycnJSclJyYlJiclJiInJyIiGhoaGhoaGhoaGhkaGhkZ - GRoZIJSVjIyQlY6MkJWKlpCWlpicv+nfDgMbHBweHB4cHB4cHh4cHiEeHhwcHh4cHh4aHh4hHh4eIR4c - HhwfC3LmkMfRbwAAAAAAAADC0b3wfTpcJzsnJyonJycnJycnJSonJyUnJiYlJyYmJSYiJyYiIRoaGhoa - GhoZGhoaGRoZGRkZL5SMkJWKlYyMkJCMlpaXmL29v+nhDAYbHBwcHhwhHhweHBweHB4cHh4cHB4cHh4e - HB4bHBwcHhweHh0Lct+Qx9FsAAAAAAAAAL/YveODOlxVJyo7JycnJycnJycnJyUnJyUnJiYmIiclJiYm - IicmISEaGhoaGhoaGRoaGRoaHBkWL5CUipaKkJaKloyWkJiYnJm/wvHSCAUbIRweHBwcHBweHBwcHBwe - HBweHBwcHB4bHB4eHB4cHhwcHAty25bH0W8AAAAAAAAAv9W98IMvXFU7OyonJyonJycnJycnJycnJyYl - JScnJyUlJiYmIiYlJiEhGhoaGhoaGhoZGhkaGhkWIISVlZCKkIqWkJaXl5i9v67BzvmzBAcbHBwcHBwe - HBwcHBwcHBwcHBwcHhseGB4cHBweHBweHB4fC3fYkMfPbwAAAAAAAADC1b/jjjpcWSo7KjsnJyonJycn - JyUnJScnJycnJiUmJyYlJSYmJiYlJiIiGhoaGhoaGhoZGhoZGhoZIn2XlZCVipaQlpeXmZm/v8630vuA - AhgcHBwcHBwcHBwcHBwcHBweGxwcHBweGB4cHBwcHBweHB0LiNKQ0c1wAAAAAAAAAL/dwuKTOlxZKjsq - OyonKicnJycnJycqJycnJycmJScmJyYmJSUlJiYmJSciIhoaGhoaGhoZGhocGhwZHH6XlY6WlpaQl5iZ - vb/CwcfP5/4zAxscHBwcHBwcHBwcHBwcGxwcHBwcHBwcHhgeHBweHBwcHQyDyorRxwAAAAAAAAAAvd2/ - 5qg6XFwqVTsqKioqOyonJycnJyclJyUnJyUqJScmJiYnJiUmIiYmIiYmJSIhIRoaGhoaGRoaGRoZGnyX - lZaQlpeYmb29rsHOx8/P+d8GBxkcHBwcHBwcHBwcHBwcHBwcHBwcHBwYHhwbHhscHB0dDJbIjt2/AAAA - AAAAAACV3a7mzDpcXSo7KlU7Oyo7Kic7KicnKicqJycnJycnJSclJyYnJyUmJSYmJiYiJyIiIRoaGhoa - GhoaGRoZGnyXlpaWmJiZvb/CwsfH0dHV+30CGBwcGRwcHBwcHBwcHBwcHBscHBwbHBwcHBwcHB4cHBsM - vcGM6JYAAAAAAAAAAHjxwubfPD9jVVU7VVUqOyo7Ozs7KicnJycnJyclJycnJyUnJiUmJyUmJSYmJSYm - JiYmJSEhGhoaGhohHBoZGYGXlJiYmL29rsHHx8vR0dX29ggHGRkcHBwaHBwcGRwcGRscHBwcHBwcGxwe - GxwbHBsdCxHBworxeAAAAAAAAAAAivHB0uZOWWZVVVU7O1U7OztVKjs7Oyo7JycnJyonJyUqJyUnJyYm - JyclJiUmJiUlJSIlJiUiIRoaGhoaGhoZIZCYmJy9va7BzrfPz9HV1d37fgEbHBwcGRwZHBkbHBwcHBwZ - GxwcGxwcGxwcGB4bGBwLEsWZlvl1AAAAAAAAAAAA58fK8GA7ZVlVKlVVKlVVVSo7Ozs7OyonJycnJycn - JycnJyclJyUnJicmJyUlJiUmJSYmJSUlJh4iGhwaGhoZPZycvb29wsLHx8/V2NXV3fnbBhUcGRwcHBwZ - HBwcHBwcGRwcHBkcHBwcGxwYGB4cGwtJyZiY8XUAAAAAAAAAAADK5s70gTpkY1VVKlU7VSoqO1VVOyo7 - KjsqJycnJycnJycnJycnJyYmJSYmJicmJSYmJiIlJiIlJSYiIiEhGhkhor69va7BxcfR0dHV1dXd6PtA - BRwZGRwZHBwcHBwaGBwcHBwYHBscHBwYHBwcGB4dCHLSkMLRcAAAAAAAAAAAAL/owvCcO1xnVVVVVVU7 - VVkqKjtVOypVJzs7KicnJycnJycnJSclJyUnJScmJSYnJiInJSclJiUmJSYmJSUgIhlfzr3CwcfHys/P - 1dXV5uTl+4QDGxwcGRwZHBkcGRwcHBwYHBwcHBwYHBwYHBwYGx0Kla6M0scAAAAAAAAAAAAAlejC8Mo9 - XKFXVVVVVVUqKllVVTtVO1UqVScnOycnJycnJycnJycnJycnJScmJiUnJSclJyUlJiYlJSUmJSYiIj3P - 0cvPx9HP0dXV1d3d5ub50QcVGhwZHBwZHBwcGBwaHBkZGxwZHBwcHBgcHBwbCw+0torolQAAAAAAAAAA - AACK+cfV8E5Znl1VVVVVVVUqVSo7VTtVKic7VSdVJzsnOycnJycnJycnJScnJSclJScnJSciJyUmIiUm - JSUiJiUiL8vd1d3d3d3k1d3d3d3m5vHwCBUcHBoZGRwZHBkcGhgcHBwcGRsZGBgcHBgYHBsJE7aYlvF1 - AAAAAAAAAAAAAADn3c/1fVdnnlVVVVUqVVVVO1VVO1U7VVUnVSdVJzsnJycnJycnJycnJycnJycnJSUn - JyUnJyUnJSYlIiUiJiUlyefn3ejo5uzm7+jo6Obm7PorBxwZHBwcGRwaGBkYHBkYHBkcHBgcHBkcHBwc - HQp0yZa98HUAAAAAAAAAAAAAAM72zvSZWV2wVVZVVVVVVVVVVVU7VTs7VSo7VSdVJyo7JycnJycnJycl - JyUnJScnJyYlJyUnJScmIiUmJSUmJSbL5+fn5+jo6Ozs7Ojv9+/s+1EXIiAeISAcHhweHB4cHhwcHB4c - HhweHh4gIB4dD4y2itLNAAAAAAAAAAAAAAAAnPHH6OZZWrBmVVZVVVVVVVVVVVVVVSpVVTtVJ1U7VScn - OzsnJycnJSEeJScnJyUnJSclJyYmJSclJyYlJiImOtjr5+fo7Ojs7O/u9+zs7Pn7ehcgICYgJSUlICIl - JSUeJSUeJR4lHiUeHh4eHR0Ss7+K8ZcAAAAAAAAAAAAAAACX+dLR9XtXoaZWVVZVVVVVVVVVVVU7VTtV - VSdVJyc7VSo7Jyc7JydhfisHHiUnJycnJScmJSYmJSciJyUmJSFf7uno9uj26PHs9uzs7+7s7Pt7FyAm - ICAgICAlICUeICUgICAgICAeHh4eIB4gDW+2lJj5dQAAAAAAAAAAAAAAAADS9sf7mVln3ltVVVZVVlVV - VVVVVVVVVSpVO1VVVSdVOypVJycnZePy330LGB4lJycnJSclJyYlJyciJyUmJbby8Ovo8Pbo9uzv9+zu - 7uz5+3sYJSAgJSUiJSAgICUeHiAeICAgHiAgICAeHh8Pi7OKz9V3AAAAAAAAAAAAAAAAAJz9x/DwPlu5 - pVVWVVZVVVVVVVVVVVVVO1UqVSdVO1UnOztVJyej6enp6bY0CxgeJSUqJyclJyUnJScnIh6d8vbp9vbo - 9vD29uz27Ozs7Oz7URsgIiUlICUlICUeJR4lICAgHiAeJR4gIB4eDhKztIz2lwAAAAAAAAAAAAAAAAAA - APvnz/uEWp7ZWFVWVVZVVlVWVVVVVVVVVVVVVVU7VVUqOyonJ6Pp6enp6emxRAsYHB4lJSUnJSclJR4e - fvLu7vD28Pbw9ujx7O/27/bs+f4rHiIlJSAlHiUgICAgICAgICAiIiAeHiAeIB4MdbOVnPF1AAAAAAAA - AAAAAAAAAAAA0/nP+89aZNekVVZWVVZVVlVWVVVVVVVVVTtVVVUnVTtVVScno+np6enp6fPpyYA0HRsb - GBgcGBwdPrH17u7x8fb28Pb29u/27Oz26Ozx7x0iJSAmICIiJSUgIiAiICIgIiAgICAgICAgHxGUs4nS - zAAAAAAAAAAAAAAAAAAAAACX++f2+3xioddYVVZWVlZVVlZVVVVVVVVVVVU7VVVVVSdVKieh+PP46fPp - 8/jy8+nftoV9enp9hsny9e7u8/Hx9vb29ujx9ujx7Ojs6P7IHSIlICAiJSIlHiIlICAiIiIgICAgICIi - Hh8Nb7GUlfCHAAAAAAAAAAAAAAAAAAAAAAD5/ef7wV1k16FYVVhWVlZVVlZWVVZVVVVVVVVVVTtVVSdV - J6H48/ju8fjp8fj4+Pjz8/X19fX19fP48fPx8fH28fD28fbo8ezx6Ojo+4EVJSUiJiUlIiIiJSAiIiIg - ICIgIiAgIB4eHxCUsovA5ngAAAAAAAAAAAAAAAAAAAAAAJz7+fv7e2ak11tYVVhWVlZVVlVWVVZVVVVV - VVVVVVVVVSono/jz8fHx8fHx8e7u8/P48fHx8fH48fPx8/jx8fHx9vHw9ujx6Ojo6Pb7NyIlJSIgJiAi - JSUlICUiJSAgIiAgIiAhIB4ObbGUi+OVAAAAAAAAAAAAAAAAAAAAAAAAAPv7+fvBXWm6pVhYVVZWVlZW - VlVWVVVVV1VVVVVVO1VVKiqj/vjx8fHx8fHx9fHz8fH48/j1+PT48fj48fj09vbx9uz26Pbo6Ojm+8ge - IiUlJSImJSUlICIiJSAiIiAgIiAgICAeHw6UsYu26XgAAAAAAAAAAAAAAAAAAAAAAAAAwvv7+/uBZ2rk - ZFhYVlZWVlVWVlZWVVVWVVVVVVVVVVVVJ6P+8fj5+Pn4+fj4+Pj49fj1+Pn4+Pn5+fn49Pbx8fbw9ujw - 6Ojo5/b7Uh4lIiUlIiUlJSIiJSUgICIiICIgIiAhICAOb7GUi+maAAAAAAAAAAAAAAAAAAAAAAAAAAAA - +/v7+9Ffaqa5WFdWVlZWVlZWVVVVWFZVVlVVVVVVVVUqpvX1+Pn5+fn5+fn1+fX49fj5+fn5+fn49PH4 - 8fH28Pbo8ezo6Ofd+8YeIiYlIiYiJh4lIiIlICIlIiUgIiAiICIgHxKxsYm26XUAAAAAAAAAAAAAAAAA - AAAAAAAAAADC+/v7+5dnadekVlZYVlZWVlZVWFVVVVZVVVVVVVVVVSej/v759fn59fn1+fn5/vj5+fX5 - +fn5+fn4+fHx8fH26Pbo6Ojn3f7xLyIlJiUiJSImJSIlIiUiJSAlICIiIiAgICAOcrGLi+mVAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAD7+/v78nxqpN5kVlhYVlZWVlVVW1hVWFdXV1dVVVVVKqb++fn++f75+f75 - /vn5+f75/vn5+fn5+fT28fHx9uj26Ojo5935+18iLyYlJiUmJSUlIiYiJSIlIiUiIiAiJSAgHUOxsYnJ - 5XgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL/7+/v7ymVqpblYWFhYVlZYWFhVWFVYVlZVVlVVV1Uqpf71 - +fn5+f75+f759f75+fn5+fn1+Pn4+fHx8fbw9ujo6Ofn+PthIiYlJiImIiYlIiIlIiUlJSIlIiIlIiAi - IB4Ri7GLlemLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOv7+/v7mWppuaZYWFhWVlVYVVhVWFhVV1VX - V1dVVipk9f7++f71/v359f7++f75/vn++f74+fnx+fH29ujo6Ojn5/v5ZSImJSYlJiUmJiUmJSYiJSUl - IiUiIiIlIiAgDnKxlIvfzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7+/v0gZ5q16BYWFhYWFhY - WFhVWFdXWFhVVlVWVVWe9fv7/v75+v3++f75/vn5/vn5+fn59/n29ujw9ujo6Pn75D8iJiYmJiYlJiUm - JSIlJiInIiUlJSIlIiUgIB9tsbGJvul4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwvv7+/vpnaBq - 5GlYWFhYWFhYVVtWVldYVVhVVlVWVVVduvn7+/v++f75+f35+/n5+fn5+Pn29vHx9ujo9vn7+aMvJSYm - Ji8mJiYmJiUmJSYiJyUlJSUiJSUiJSAeE7GxiZTplQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 6/v7+/vPnaSg2WhYWFhYWFhYVVhYVlVYVlZWVlVWVSoqXabv+/v7+/v9+f35/vn5+fn59vHx9vD2+fv7 - 76M6JiYnJyYmJiYlJiUnJiYiJSclIiYlIiciIiUlHhKQsYuL384AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA+/v7+/vHZ2qk12JYWFhYVlhYWFZYWFZWVlZWVlVWVlVVKlVksNz6+/v7+/v7/vv+/v77 - /vv7+/3vsGUwJiYqJicmJiYnJScnJSclJSYlJiInJSUlIiclJSAri7GUi8nlhwAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAC++/v5+/vEaqCku2RYWFhYWFhVWFZWV1ZWVlZVVlZWVVVWVSoqKldnprC6 - 4vHw8PDv8OTYsKadWTsmJicnJycnJycmJycnJiYnJiYmJScmIiciJSclIiUgH3KxlIey+IcAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADM+/v3+/uqpGqlu2RYWFhYWFhYWFhYVlZWVlZVVlVWVVZV - VlVWKlUqJioqVlZZVllVVVUmJikqJzsnJycnJycnJyYnJiYnJiYmJSYmJSciJyUmJSclJR9ysbGLlOmV - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV+/7n+/WopGqk2WpYWFhYWFhYWFhXWFZW - VlZWVlZWVVZVVlVWVSoqVlVVVSpVJlUnKioqKjsqKlUnJycnJycnJzsnJSclJiYnJiYnJSciJyUlJSUf - crGxiZTpvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2+/fl+/SopKCg3qRYWFhY - WFhYWFhYVlZWVldWVlZWVVZVVVZWVlZVVVVVVVVVVVU7VVU7VTs7JzsqJzsnJyY7JicnJycmJiclJyUn - JiciJiUlIHKxsYmV39EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr++vV+fnE - nqRq2aZYWFtYWFhYWFhWWFZWVlZWVVZWVVZWVVVZKlZVVVVVVVVVVVU7VTsqVVVVJztVJycnOycnJycn - JicmJycmJyYmIiclJTSDsbGJld/RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD2++XP9PXMnaRqubtoWFhYWFhYWFhYWFhWV1hYVlZYVVZXVlVWKlZVVVVVVVVVVVVVVTtVJztVJyc7 - VSc7OycnJycmJycnJyUnJiclJyU0i7GxiZXf0YcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAADr+9XO9vvSn6Vppd6kWFhYWFhYWFhYV1hYVlZWVlZYVVZWVVZWVVVVVVVVVVU7VSdV - VSdVVSdVOyonOycqOycnJycmJycnJyYmJyU6SouxlImV386HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAADV++fB5vvjlKSkaru7aFhYWFhYWFhYWFhXWFZVVlZYVVZWVVZWVVZV - VVVVVVVVVVU7VVUnVVUnVTsqOzs7JzsnJycnJycmJyUlOnCxsZSJlOnJAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV+/bB1Pvus56laqXepWJYWFhYWFhYWFhYWFhWVlZY - VVZWVVZWVlZVVlVVVVVVVVUnVVUnVTsqVScqOyo7JycqJycnJyclJz6HsZSVibLpvgAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC++/nOx/T10YakpKC5u6BYWFhYWFhY - WFhXWFhWVlhWVlZYVVZVVlVVVVVVVVVVVVVVKlVVVTtVVTsqOyo7JycnJycnIjpyi7GUi4u2+JUAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc+fnPwOX16bKEpKCg - ublqWFhbWFhYWFhYWFZWVlhVWFVYV1VWVlZVVlVVVVVVVVVVO1U7VSdVKjsqOyoqKicnJSdLi7GxlIuU - 0emLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/z/vn - wszx89GnnqSgpLC5amJYWFhYWFhYWFhWWFhWWFVYV1VWVlZZVVVVVVVVVVVVKlVVKjtVVTsqOyo7KiU/ - g5SxlIuLvunKhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAwvv5yr/V9fLJkZ6kpGqkuaRoWFhYWFhYWFZWWFZWV1ZWVlVWVVVWVlVVVVVVVVVVKlVVVTtV - VVU7Oyc9g5SUsZWLlcrplAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAl9X79r/A4fPptqedpKSkoKSkaWJYWFhYWFhWWFhWVlZWWFVYVlVWVlVWVVVV - VVVVVVUqVVUnKiZShpeUsb6Li7bpyocAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJzr+9W/wOnu48mUfmakpGpqaWliW1tYWFhYVlhWVlZWWFVY - VlVYVVVWVVVVVVVVVVUqJj18lL6UspyLi7Tf6ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL/O9fnRv7Tp6fLftoZlampqamliYltbWFZY - WFhWVlZWV1ZWVlVWVlVWV1hWVSo7VWGPnJqxtJyVibTf676JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVzvv50r+2zunp8tG2i2Fh - ZmloaWhoYmJbW1tbW1hYWFtYW1tbWFhVVVVSnZacnLG/v5eMi7Tf8cKHAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl8z5+eHA - nLbR3/Lj38myi51hTlxiXV1aXVlZWllZWVlXVz9gYZ+Umr6atLO2nJCMlMHw8MKHAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAJea6fjxyr6+vsnR6ePf38nOtpSLg3l/eYODeIOIkJeYv76cv7PBxa6cloqWv9v28LyHAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAlczx+O7KvrKcvrbR39Hp39HfycnKycnJycnBycnKxcXCmZSVjJjC5vT5z4kA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqaw/j1+OnKvr6XlZSytr7Dw7bDwcHCrr+cmJaWkJScwt3w - +vnPlYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIuazOn+8fHu6cy/v7ScnJSamJicvb/B - 0d3o9vrxz5uJlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWVmszM4fj1/vv1 - 9fn6+vv5+ezVx5iVgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAlYl4eHV1dXV3eImVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////wAAH////////////////+AAAAD///////////////4AAAAAH///////////// - /wAAAAAAP/////////////wAAAAAAAf////////////wAAAAAAAB////////////wAAAAAAAAH////// - /////wAAAAAAAAAf//////////wAAAAAAAAAB//////////wAAAAAAAAAAP/////////4AAAAAAAAAAA - /////////4AAAAAAAAAAAH////////8AAAAAAAAAAAA////////+AAAAAAAAAAAAD////////AAAAAAA - AAAAAAf///////AAAAAAAAAAAAAD///////gAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAD//////4AA - AAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAD/// - //wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAH////8AAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAA - AAH////gAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAB///+AAAAAAAAA - AAAAAAAAf///gAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAA///8AAAAAAAAAAAAAAAAAH//+AAAA - AAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAAf/ - +AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAA - AAAD//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAA - AAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAA - AAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/ - gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAA - AAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAA - AAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAA - AAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/ - gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAA - AAAAf8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAA - AAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAA - AAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAA//4AAAAAAAAAAAAAAAAAAP/ - +AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAA - AAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAAf//8AAAAAAAAA - AAAAAAAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAA////4AAA - AAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAA/// - //gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAH/////8AAAAAAAAAAAAA - AD//////gAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAf//////gAAAAAAAAAAAAAP//////8AAAAAAA - AAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAAAAAD////////gAAAAAAAAAAAB////////8A - AAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAAAAAAAf/////////4AAAAAAAAAAf///// - /////AAAAAAAAAAP//////////8AAAAAAAAAP///////////wAAAAAAAAP////////////AAAAAAAAP/ - ///////////+AAAAAAAf/////////////4AAAAAAf//////////////4AAAAA////////////////4AA - AH/////////////////+AB//////////KAAAAGAAAADAAAAAAQAIAAAAAAAAJAAAAAAAAAAAAAAAAQAA - AAEAAAAAAABqJQcAdSgHAHEuEgBpNB0AejQXAG44JABxPCYAe0IpAHxKNQB6UD4Ae1VEAHxfUgB+ZFkA - dm5uAHdwcAB6c3MAf3h4AIQuCwCMNA4AkjUOAIo4FACXOxQAoDoPAKE+FQCGPCEAkj0lAJdBHQCkQRgA - iUUpAJpIJgCfUS8Aik00AJVNMgCIUToAm1Q3AKVNKgCwTigAqVItALNULQCiTjAAsU4yAKhVNgC3WTcA - u2A7AMxJLgDEVy0Ay00yAMRXOQDIYzwA02Y8AIFWRACMVkMAhFlHAI9aRQCEWkkAjFxNAJJaQwCcW0QA - k11LAJxcSwCIX1AAol1DAK1cRACjXUsAq11KALVWQwC8VkEAtVxAALpbQACxXkoAmmBJAIdiUQCMYlMA - hGZZAItmXACBaF0AjGlcAJNjUwCbYVMAl2hVAJ1qVgCSa1sAmmtZAKhiSAC1ZEQAu2hGALFgSAC3akkA - vGtLAKdqUwC4blIAr3VeALl2WwCCbGIAi21iAIBvaACVbmIAjXBlAIVzawCTcWUAlnVqAJx0agCUeW4A - mnlsAIp4cACDfHwAk3tzAJt8cgCid2cAt3tkAKR/dwDAW0AAy2pDANdsQwDKck4A3XBHAMt2VQDUeFQA - 4G1CAOBySADkfFQAjoB7AJuDeQCxgG0ApYN2AK2DcwCghX0Aq4V4AKKIfQCriXwAuIh3ANyAXQDkgl0A - yoJlANmFZADLj3oA3Jd8AOWIZQDrkW8A6JZ3APCcewCGgIAAi4SEAI6JiQCVhoEAmIeBAJOLhwCbioMA - kYyMAJqRjACWkZEAmZSUAJ2ZmQCoioEAt4+BAKeQhwCqkYcApZGKAKuSigC4looArJeRAKOZlACinZwA - qp2YALickwCsop0At6KbAKWhoQCppaUArampALWmoAC3qqYAvKqkALOurQC7rakAvLGuALWxsQC6tLQA - vbi2ALu3uQC8uroAxZaGANqbhQDBn5IA6Z6BANihiwDGpZkA66SIAPOnigDjr5kA86yRAO2xmwD2s5sA - xayjAMOyrADctaUAw7SxAMW5tQDLurMAwry8ANK+tgDtvKkA9rulAMrAvgDUwboA+MCrAOnBsgD4ybYA - vr7AAMC/wQDEw8MAysTEAMfFyADKxsgAzMrKANLFwgDRyMYA2MnDANLMzADc0s4Azs7RANPP0QDO0dQA - 1NPTANnU1ADX1tgA29vbAODMxQD22MwA4tvaAPjf1QDl4N4A6eHeAPng1gDe3uAA4d/gAOTj4wDp5OMA - 5uXoAOjn6ADl6eoA6+rqAPTt7AD58OwA7+/wAO/x8wD08vMA+PX1AP749gD39/gA+ff4APf4+gD9/f0A - AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - FhUeFh4bHh4jrbWztK+0tLS0tLTe6UZCREVFRUNwcHBwQzBwMHAwcHAwQ0NDMEMwMENDRkni49e0lQAA - AAAAAAAAAAAAAAAAqa74/e1JHRYWFhQWFBYUFhQWFBYTFhUWFRYbGxseHh4eVMW1tLSur6+0tN/ugylE - RERERUVFcENwcHBDQ3BDMENwMENwQzBDQ0MwQ1Sa9tTXo5kAAAAAAAAAAAAAAAAAl+L995YiFhYWFhcW - FhYUFBQUFBUWExYVFhYVHRsbHh4eHj64s7XT0tPW4c1dKUREREREV0VFRXBwQ0NwcHBDcHBDcDBwQ3Aw - QzBDQ1c43uzXtJAAAAAAAAAAAAAAAACqqv398k0eFhgYFhYWFxYXGxQWFhQWFBYVFhYbGxsbHh4eHh4e - WoOgoLu2bkQkREQqRERERERXRUVFcHBDQ3BwcHBwcHBDMENwQ0NDK0VUe/bX15ijAAAAAAAAAAAAAACY - 4f39ozkfGBYYFhcWFhYUFhQWFBYTFhUUFhYVFhsbGx4eHh8eHiQfJB8kJB9EH0REPitERERERVdFRUJW - cENDQ0NDQ0NDcHBDQ0VFRUNXONzs17GYAAAAAAAAAAAAAACY9v39YiomHBgYGBYYFhYWFhYWFBYUFhYW - FRYWGxsbGx4bHh4fHx8fHx8fRB9EPj4qRERERERERERXRVVFRUJwQnBwcHBCcENFRUMrQytEVJb219OV - qgAAAAAAAAAAAKPI/f20OSomJhgWGBgWFxYXFhYXFhYUFhQWFhYWFRsbGxseHh4eHyQfHyoqH0QfKipE - H0Q+KkREREREREVXRVVFVkJCRUVFRUVFREIrRCtCP0nx4tepmAAAAAAAAAAAAJft/f17OiYmJiYYGBgY - FhgWFxYWFxQWFhYWFhUWFhsbGxseHhsVFQUVGRkZGRkhKipEPipERCpERERERERERERXRVdFV0VXRURC - K0RCK0IrRDav8d20lQAAAAAAAAAAAJf9/fZJRCYlJSYcGBgYGBYcFhYWFhYWFxQWFBYWFhYbGxsbG1po - Z2dnZ2x7e2cIIR8qKkQqKkQqRCpEREREREREREREREREQitERCtEKyorKlRs9tfXla4AAAAAAAAAqa79 - /bRHKicnJycmHBwYHBgXFxwWFxYXFhYWFhYWFhYbFhsbHsff193d3d3i4uxhHSoqKio+Kj4qRD4qRCpE - KkRERERCK0REK0QqRCsqQkQrKj438eLdo6MAAAAAAAAAl979/ZQ+KicnJiYnJhgYHBwcHBgYGBYYFhcW - GBYWFhYWGxsWH8zX19fX1NfX3uJoGR8qKioqKioqKkQqRCpERCpEKkQqREQqREQqRCpEKisqQio5tObd - sZUAAAAAAAAAkO79/WI/JycnJycnJyYcHBwWHBgYFhgWFBgWFhYWFhsWFhsWH8zX1NTU19nZ3uZoGR8f - Kh8qKipEKio+Kj4qRCpEPipEKkQqRCpEKkIqQiorKkIjlPLd05AAAAAAAAAAlf384lMsKycrJycnJyck - GBwcGBgYGBgYGBYWFhcWFhYWGxYWH8zg29vb29ng2eycBR8fHyoqKiMqKioqKioqPioqRCpEPipEH0Qq - RCoqKioqKiojYvLg3ZAAAAAAAAAAo/b9tEcsJysnKycnKicnJRgcHBwYFhgYGBgWFxsWFxsWFhsWHsfg - 2tfZ29nZ3uLGBhoqHx8qKioqIyoqKioqKioqKj4qKkQfRCoqKiorKiorKioqC+Li4JejAAAAAACprvb2 - pFQsKycrJysnJycnJyYcHBwcGBgWGBYYFxYYFhgWGBYXG7vg19vX19fX1NfhTQMfHx8fHx8fKiojKioq - KioqKioqKh9EH0QfKioqKiooKiYqNNPj4KOYAAAAAACV0/b4e1QsJywrJysnLCcrJycmHBwcHBwYGBgY - GxcYFhcYFhYWFpvg19TU1NTM1MzgxgcVHx8fHx8fKh8qHyoqKioqKioqKioqHyoqKioqKiopHyofIqfs - 3a6QAAAAAACQ1vf2Z1csLC4sKysrJycrJycnJhwcHBwcGBgYGBgWGBsXGxgYFFvX18zMzMzMzNPG4qsE - BR8fHx8fHx8fKh8jHyojHyoqKiofKh8qKh8qJB8fJigfI5Ps3bWOAAAAAAAR4vPyYlYsLisrKysrKycr - JysnJyccHBwcHBwYGBgYGBgYGBsXFh7D17W1tbW1tbW10+KrBAUeJCQkHx8fHx8fHx8fKh8fHx8fKh8f - KiQoKCgoKCkoIWni4tNqAAAAAAAR7fL2TXEsLCsuKy4rKysrJysnKycnJRwcHBwcGBgYFhgbFhgbFxd+ - 17W1xsbGscazs7XiwwYFHiQhHh8hHx8fHx8fHx8fHx8fHyokJCgoJCgkJCEkIGDs4tcRAAAAAAAQ7fby - UnEsLiwsLC4uLi4sLCcrJywnJyUcHBwcHBwcGBgYGBsXGBYmsLXGsbGxsbGxxbOz7MkJAhokHh4kHh8k - Hx8eHx8hHyQoJCQoISQhJCQhJB4kIUzi4uAQAAAAAAAQ8vLyYXEsLCwsLiwsLCwnLiwnLCcrJycnHBwc - HBwcHBgYGBgYGxgUXLWxsbGxsbGxsbSzs+ziSAEbHx4eJB4eHiEeHx4eJCEkISEeJCEeJCEeHiQeIQzs - 4uIPAAAAAAAQ8vLyU3MxLDIuMS4sLiwuLCwsJywnLCcsJyUcHBwcHBwcGBgYGBgYGJu1sbGxsbGxrq60 - s9Hm8lIBGx4eHh4eHh4eHh4kHh4eHh4eHh4eHh4eHh4eGkzi4+IPAAAAAAAQ7fLyU3UxMSwsLDEsLCwu - LCwnLiwnLCcnLCcnHBwcHBwcHBgYHBgcFhyltbGwsK6wsLGxs8jT5vZSARseHh4eHh4eHh4eHh4eHh4e - Hh4eHh4eHh4eIUrs4uIQAAAAAAAQ7fLyUXUxMTEyLCwsLiwsLiwuLCwsJywnJycsJyccHBwcHBwcHBwY - HBYeoLWxrq6usbGxs9PM1PH3MwIeHB4cHh4eHh4eHh4eHh4eHh4eHh4eHh4eGkzj4+IQAAAAAAAR4vLx - U3VxMTEuMTIuMTEsLCwsLiwnLiwsLCcnLCcnJxwcHBwcHBgcHBwXHH61sa6xsbHFtdPU29v36QcFGxse - GxweHB4bGxweGxweGx4cHhweHB4eIUzs490RAAAAAACQ3vLxbXVxMTExLDIuLCwuMSwsLCwuLC4sJywn - LCcsJycnHBwcHBwcHBwcGBh8tbGxsbG1xtPU2+Hh/ccBFRwbHhsbGxseGx4bHhobHB4eHh4eHh4eHWPi - 7NcRAAAAAACQ0/HmbXV2MTExMSxxMTExLC4xLC4sLiwsLiwuLCcnLCcnLiUlHBwcHBwcHBYYXLWxxsW1 - 08zb3uHi7v1sAhsbGxseGxsbGxsbGxseGxsbGxobGx4aGXrs7LWOAAAAAACYs/Lye3N2MTEyMTIsMTEx - MSwsLiwxLC4sLCwsJywsJywnLCcnJRwcHBwcHBwYF3y1tbW109Te3ubm5v3pBhMbHB4bGxweGxseGxsb - HhsaGxsbGhseHZjs7LGQAAAAAACpqe3xnXOEMTJxMXExcSwxMTExMSwsMSwuLiwsLiwnLCcsJycnLCcn - JhwcHBwcGBib09PTzNne4ebm7u79fQIbGxscGxsbGxwbGx4bGxsbHhsbGxsdCa7s7KiYAAAAAAAAme3x - r1aHcjFxMTIxMTIxMTEsMS4xLCwsLC4sLCwsJy4sJywnJycnJycmJhwcHBcfw9PU2eDh5ubt7u793AUW - GxsbGxscHhsbGxsbGx4bGxsbGhsbCtXs7ZepAAAAAAAAkO3tzFuKdjIyMTJxcTIxMTExMTEsMSwxLCwu - LiwsLCcsLCcsJywsJywnJycmHxwcg+DX3uHi5ubu7vL3+DMSHB4bHBsbGxsbGxsbGxsbGxsbGxsZDOPt - 7Y4AAAAAAAAAkN7y5lyLhzEycjExMXExMTExMTExMS4xLDEsLiwsLCwsJywsJywnJywmJycnJyclXePm - 4+bm5vHu8vLz/YICGxwbHBsbHBsbHB4bGxsbGxsbGxsZYPHt4I4AAAAAAAAAmNHx7X6EiXIycTIycTEx - cTExMjExMTExLC4sLDEsLiwuLCcsLCcsJywnLCYqJycmWOny8vLy8vLy8vPu/cICHBsbGxwbGxwbGxsb - GxsbGxsbHRsIl/Lx05AAAAAAAAAArqnt8adzvHYyMnJxMjJxMjEyMTExMTExMTExLC4sLiwuLCwsJywn - LCcsJywnJycmWOnz8vT39/T49Pj2/doZGx4cHhweGx4bHB4cGxweHh4eGyEL1/LyqZkAAAAAAAAAAJDm - 8dtzvIwycjIyMnJxMTJxMnEyMTExMTExMSwxJxweLC4sLCwsLCcnLCcsKicnVvL09PT09/f4+Pj4/eYg - HicqHycfJx8fHx8fHx8kIR4fHyFK8vbykwAAAAAAAAAAAJXX8u18jMpycnJyMnEyMnFxMTExMjExMTEx - MSwxusJQFSYsLiwsJywsJywnLCcliPf39/f3+Pj4+Pj2/eYdJiYnHyofHx8nHx8fHyQkHx4fHiKT9Prg - kAAAAAAAAAAAAKmq8fGndtCHMnJycjJyMjIycTEycTFxMTExMS519PfyoB0WJicsLiwsLCwnLCUs6f33 - 9/33/fj4+Pj4/dwhJCYfJx8nHx8fJyQmJB8eHyQfHwve9/axmQAAAAAAAAAAAACV4vfiXb/BcnJycnJy - cnEyMjJxMjExMTExMS6G8/f39+CbIhUcHicnJScmHD7k/Pf9+Pj9+Pj4+Pf2/c0bJiYnHx8nHycfHyQk - JB8kJCEeIWP49/SXAAAAAAAAAAAAAACY0/LyoIrQhzJycjJycjJycTJxcXEycTFxMS6H8/j3+P338sOb - UCMgIB9RuPL4/fj4/fj4/fj4+Pj3/bsbJiYmJx8nHx8mHyYfJCQeHyYkIrP9/eCXAAAAAAAAAAAAAAAA - o+331ITBwHJycnRycnJyMnIyMjJxMjJxcS6H9P34+P33+P349PLc5unz+P34/f34/fj9+Pj49/j3/Xwb - JyYnHycfJiYmJSQkJB8kJB4hTPf9/KmqAAAAAAAAAAAAAAAAldT28ZuL0IpydHJ0cnJycnJycTIycXEy - Mi6H9P39/fj9/fj9/fj9+Pj9+P39+P39+P34+P33+PT98yMlJiomJx8nJx8lHyYmJCQkJB4grv395pcA - AAAAAAAAAAAAAAAArqny9taHwc50cnJ0cnJycnJyMnJyMnEycTKE+P39/f39/f39/f39/f39/f39/fj9 - +P34+Pj39/b9whwrJicnHycfJx8mJSYeHyUfHx5i9/39tKMAAAAAAAAAAAAAAAAAAJXU9vKni9C5cnRy - dHRycnJycnJxcnJxMi6H+P39/f39/f39/f39/f39/f39/f34/fj4+Pf39vj0VSYnJyYqJycfJiYmHyUf - JR4mJCC1/f3tlwAAAAAAAAAAAAAAAAAAALGp8ffiiLzOhXJ0cnR0cnJycnJycXIycjGH+P39/f39/f39 - /f39/f39/f39/f39+Pj4+Pf39/22HCsmKycnJycnJyQmJR8lHyUfHnr9/f2uqQAAAAAAAAAAAAAAAAAA - AACX0fbys4zLwXR0dHJ0dHRycnJycnJxcjKH+P39/f39/f39/f39/f39/f39+P34+P339/f2+MQmJysn - JyonHycfJx8mJSYmJiYeSO39/eKZAAAAAAAAAAAAAAAAAAAAAAAAmOL47buLzrlydHR0dHNycnJycnJy - cjF49P39/f39/f39/f39/f39/f39/fj9+Pj39/f9xCcnKycrJysnKycnJyYmJiUmJiQgq/j99qMAAAAA - AAAAAAAAAAAAAAAAAAAAqa7y9uK4jdCLcnh0dHR0dHJycnJycnIyjPT9/f39/f39/f39/f39/f39/fj4 - +Pb4/fi6Jy4rKysnKycqJyonJycmJicmJh579/3906MAAAAAAAAAAAAAAAAAAAAAAAAAAJfT8vLet73Q - i3J3dHR0dHRycnhycnIycXnK9P39/f39/f39/f39/f39+P39/f34z3MnLissLisrKysnKycqJycnJicf - HmT09/3imQAAAAAAAAAAAAAAAAAAAAAAAAAAAACX3/jtzLm9zoV3eHR0dHR0dHJyeHJyMnEydLnQ9P39 - /f39/f39/f39/f395751Ky4sLCsrKysrKysnKycnKycnJycmUOD39/aZAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACuqeb37cmMv86Fd3h0dHR0dHJyeHJycnIyMjEycoq+wNDq6urq6uXPwIl1MS4uLCwuLC4sLi4u - LCcsJywnJyonJx9HzPb0+qqpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo67x9+bJub3Oind4eHR0dHhy - cnhycnJyMnIyMjEuMTEyMjIxMTIuLi4uMTExLCwxLCwsLiwsJywrKysnKycsHz6x9Pb2taMAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAJmx8fbsyY290Ix3d3h0dHh4dHJycnhydDJycjJ0MjIyMTFxMjIxMjEx - MTExLDEsMTEuLC4sLiwrLisrKywlPrX08fTTmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYs/H3 - 49q6vdCNeHh4dHh4dHh4cnJ0dHRycnJyMnJxcnEycTFxMXEyMTExMiwxMS4xLCwuLC4uLC4sJyVRtfTx - 9tOYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl7Px9+zMvLzOy4V3eHR4eHh0dHR0cXR0cnJy - cnFycnEyMXExMTExMTIxMTExLCwsLCwxLiwsLCwnJ23X9vTx15cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAJeu7fTx3buNy9CNeHh4dHh0dHR0dHRzMnRycnJyMnJycjJyMXIxcTExMjEsMjExMSws - MS4sLicnnfL08fHTlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZru328uPDub3Qy4p4 - eHh4eHR0dHJ0dHR0dHJycnJxcnFyMXExMXEyMTIyMTExMTIsLDEuJ1yr8fHx8bGZAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo6Pd9PTj07u8wc69hXh4eHhydHR0dHRzMnR0cXJycjJycjIy - MjFxMTExMTIsMS4xLC4nneDx9PHjq6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AK6X0fH68uDDur2/wb2FeHh4eHR0dHRydHRzcnRycnJxcnEycTIxcTIxMjExMTEuLnyz8fTx8deYqgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl6rj9Pbt18K6vL3BvYp5eHh4dHR0 - dHJ0MnRycnJyMnJyMnJxMjFxMTExMS6GrPLx8fHgsZYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAKiXte309u3Xrbu5vL+Ni3l4dHR0dHR0dHR0cnJycnJxcjEycnEyMTExtrDt - 8vLt7cyZqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl6jT8vb2 - 8tuzu4m5jIuKhXh4dHR0dHR0dHJycnIycnIyMjJxhrvU8fHt8uPXppgAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALGVo9Py9Pb049esp7aJi4qHeXl5dHR0dHR0cnRz - cnaGtqfT5vL28e3s16aXsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAsZOZtePx9vf28uPTsavCtrabg4Obm4ODtrvDw8ji8fL29vHm4tOZla4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl5Om0+Px9Pr09vTx - 7e3j7ePg4+Pt7fLy9/b49vLm4tSulZcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqlZOosdfr8fH29vf4/f39+P339/Tx8ubs1tGjl5WpAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAACxmY6Ql6ixtdfd4OLi4uLe17WxqZmQjpmuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqZk45qEBAQEBFqjpOY - qgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////// - ////////////////////////////////////////////////////////////////+AAD//////////// - gAAAP//////////8AAAAA//////////gAAAAAP////////+AAAAAAD////////4AAAAAAA////////gA - AAAAAAP///////AAAAAAAAH//////8AAAAAAAAB//////4AAAAAAAAA//////wAAAAAAAAAf/////gAA - AAAAAAAP/////AAAAAAAAAAD////+AAAAAAAAAAB////8AAAAAAAAAAB////4AAAAAAAAAAA////wAAA - AAAAAAAAf///gAAAAAAAAAAAP///gAAAAAAAAAAAH///AAAAAAAAAAAAH//+AAAAAAAAAAAAD//+AAAA - AAAAAAAAB//8AAAAAAAAAAAAB//4AAAAAAAAAAAAA//4AAAAAAAAAAAAA//wAAAAAAAAAAAAAf/wAAAA - AAAAAAAAAf/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAA - AAAAAAAAAH/AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAA - AAAAAAAAAD+AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA - AAAAAAAAAB8AAAAAAAAAAAAAAB+AAAAAAAAAAAAAAB+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAA - AAAAAAAAAD+AAAAAAAAAAAAAAD/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/gAAAA - AAAAAAAAAP/gAAAAAAAAAAAAAP/wAAAAAAAAAAAAAP/wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/4AAAA - AAAAAAAAA//4AAAAAAAAAAAAA//8AAAAAAAAAAAAB//+AAAAAAAAAAAAD//+AAAAAAAAAAAAD///AAAA - AAAAAAAAH///gAAAAAAAAAAAP///gAAAAAAAAAAAP///wAAAAAAAAAAAf///4AAAAAAAAAAA////8AAA - AAAAAAAB////+AAAAAAAAAAD/////AAAAAAAAAAH/////gAAAAAAAAAP/////wAAAAAAAAAf/////4AA - AAAAAAA//////+AAAAAAAAD///////AAAAAAAAH///////wAAAAAAAf///////4AAAAAAA////////+A - AAAAAD/////////wAAAAAf/////////8AAAAB///////////gAAAP////////////AAH//////8oAAAA - QAAAAIAAAAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAHgqCQB1LhEAbTMaAHYyFQB9NBQA - czQaAHo3GwB3OSEAekQuAG1IOgBwRDIAf0c0AHJMPQB/TD4AfVJCAHpUSAB8WUoAel5TAH9/fwCKLwgA - hjMOAIwzDACUNg0AgTUUAI02EQCEOBcAjjkUAIM3GACFPR4AjDsaAJI2EACTORMAmzoRAJM+GQCZPhkA - oTYKAKI+FACFPiIAlUEdAJlBHACnQhgAsEgeAIpBJACDRSsAikQoAIlJLgCUQyIAmkUiAJxJJgCTQygA - kkovAJtKKgCeUC8AhUUxAINJMQCKSjMAgU0+AIhMPQCVSjIAnUo0AJpKOACGUTkAllE2AJ1RNACdVDwA - pkchAKRJJACtSyMApUYrAKJNKgCqTyoAsUwlAKRQLQCsUSsAtFQtAKhHMwCuSjEApE45AK5MOACySjMA - vkozAKVSMgCqVDUAqlg3AKdXOwCsVjgArVk5ALVWMAC4VTEAtlgxALtaMwCzVDkAu1Q7ALRaPAC7Wj0A - uWE9AM1JLgDQSi4AxlkuAMZMMwDNTTEAyVE1AMFdNQDIXDIAxVU5AMhUOADCWTwAyWI6ANJmPQCDUUQA - ilFCAIxYQgCDVkkAgF1OAJtXQQCbW0UAhVxSAIpfVAClXkEAtVtBALpbQACZYEoAhGFUAIpkVQCKZVsA - hWldAIpqXQCSaVgAq2FCAKNkSwCqZkoAuGdGAK1tVACtdF0AuXJXAIFsZQCFdG4Aj3hvAJBwZwCcdGQA - k3ZtAIx3cQCKf3wAkXx1AKp5ZgC6fmkAxmhCANlsQgDPcEoA3HFIAMd3WADWeVQA4G9GAONzSADnfVQA - wXxhAJWAeACYgnoAtYFtAKmBdgCjiX8ArIt9ALaHdQC+kX8A3oBdAOeBWgDIh20A24hnAMiKcgDNknwA - 2pN3AOeLZwDwj2sA65FtAOiWdwCDg4MAioqKAJeIggCakIwAk5OTAJuVkgCbm5sApo6FAKCRjAC0lYkA - pJaRAKWZlgCrmpQAqZ6ZALmekwCtop0AvaGVALSjnQC+o5kApKSkAK+koACrq6sAuaqmALyxrgCzsrIA - u7S0AL24twC4trgAu7q6AMefjwDZnYQAy6CRANutmQDpoYUA4KuUAMatpADFsqsA1berAMO8ugDUvrYA - 57ajAMTAvgDUwboA9sm4AMC/wQDEwsMAycTEAM7IxwDMy8sA0MTCANPJxgDZysMA0svLANLP0ADT09MA - 2dTUANbW2ADY1dgA3NvbAOHLwgDm1MwA9dDBAOPa2AD029IA5+DdAPvj2gDe3eAA4+PjAOvl5ADp6OcA - 6+vrAPXt6wD98u0A7e/wAPPz8wD69vYA+fj3APf3+AD3+fwA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAw7SxsbETExOxE7GxtMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAxbSxscPe8vX5+vr9+vr68+DFtLG0xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC2sbTc8vn6/fr6+vr6+vr6+v39/f313raxtgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAALaxw+jz+vPgxbqJEhAPDg4PcX+Qvdn1/f3988WxtgAAAAAAAAAAAAAAAAAA - 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 - oUolAKxMJACiTSoArE8oALNOJgCnUS0AtFQtAKJOMAC3TzEApFIyAKlUNACrWDcAp1c5AKpXOAChWTwA - rVk7ALVWMAC5UzcAtVgyALtbMwC+VDoAtFs9ALtbPgC7Yj4AyFkvAMZPNgDHUzcAyVE1AMFcNADMWzEA - xFU6AMhTOADCWjsAyGM7ANNnPQCDUkYAjVZEAIZSSACLW0sAk1NEAJ1URACWWUEAmltEAJhXSACTWEgA - hF1UAKFVQwCuV0MAoltEAKxcQgCkXUkAqF5KALRUQAC5VkAAtFtBALlaQQCTY08AiGNUAIZjWgCJZFkA - j2hZAJxrVgCrYUQAt2dHAKhtVgC1bVAAr3ReALhxVQCHa2MAhnNrAJ14aQCOeXEAknpzAK98aAC2fWkA - x2hCANltQwDIcEwA2XBIAMl1UwDaeFMA4G5EAOBwRwDjfFQAioB8AJmFfgCvgG0AuIJuAKaIfgC2iXkA - 3YBeAOWCXADehWMA1YxwAMmRewDnjm0A6ZBtAOiWdwB+foAAg4OEAIyGhACEhIkAioqLAJqFgACciYIA - nZGMAIWFkgCPj5AAkpKTAJmUkgCXl5gAm5ucAKWLgwCrkIcApJGKAKmUjACzk4oAuJaIAL6ajQCqmpQA - pJ2bALOflwC2o58Au6ScAKOjpACtpKIArq6vALKloQC8p6AAtKmmALqppAC1rq4Ava6qAL2yrgCsrLEA - ra26ALKyswC6tLMAvbi3ALe2uQC5trgAvLq7AMibiQDcnYMA4J6FANGijgDLpJYA0aaWAOWkiwDqq5MA - 8K6UAOeynQDIraQA0a2iAMayrADdtqcAwraxAMq3sgDDurYAzbmzAMK8uwDIv70A6b6tAMXBvwDKwb4A - 0sS/AOfCtAD1ybcAv7/AAMXBwgDKw8MAzMjHAMXGywDNy8sA0svLANzRzADOzdAA0M3QANTS0wDY1NQA - 19faANva2gDm1M4A89jOAOHd3AD75NwA5OTkAOrm5QDr6+sA9e7sAPT09AD79vUA//n1APb2+AD69/kA - 9/r7AP39/QD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - lkAbAJNAHQCVQB0AmUIdAKVAFgCjRBsAq0cfAK1IHwCGQSMAi0YqAJZEIQCZRSEAnEklAJJKLQCdSyoA - jk82AJNPNQCbUDEAnVc9AKBKJACsSiMAok0qAK1PKACwTycApFAsAKxRKwC0UCYAslMrALlTKgCtTjYA - s0w1AL1LNACiUTEApVExAKJTNACmVTUAq1Q1AK5ZNwCsVTkApl0/AKpZOQCtWTkArlo8AK5ePgCzVTEA - u1MyALdZMwC7WzQAslU5ALBZOwCwWj0Atlo9ALJcPwC1XD8Au1s+AMlFKwDRSi0AzU0xAMxQMwDKUjYA - zVA0AMlUNwDCXDQAyl40AMRVOgDJVDgAw184AMBaPQDEWT0Ax2A2AM1hNgDFYTkAy2Q8ANFjNwDTZTsA - 2Gc7ANNoPgDZaj8Aj1VDAItZRACJXEwAlFVDAJNZRACUWEcAnltHAKNeQQCkXUAAoFhHAKJfTwC6XEAA - m2JKAIFhVACBaF0AiGleAJhmUgCWZlkAoGFPAKhmSgCraE4AumZEALhmTACgbVoAtmhTAKJxXQCsdF4A - s3BVAL94WwCGdW4Am3JiAJR2awCOe3MAoXVkALJ3YADAXEAAwmhEAMtqRADVakEA221DANpySwDMdVMA - 3XxWANZ/XgDgbUEA4nFGAOV2TADielMA6HxTAL+DbwCigXQApIZ+AKiHegCjin8AtoJyALiGcgC4iHcA - vol4ANqCXgDCjXcAwI59AM+QeQDekHIA6Y1qAOyRbgDtknAA7Zp6AH9/gACOjo8AlYiCAJ2OiACPj5AA - lZWVAKWUjgC1koUAuZOFAL+YigC5oJcAtKOdALmjmwChoaEApqKgAKioqQC6p6IAsKqoALSvrQC6sa4A - sLCwALaxsQC7tbQAt7e4ALi4uAC/uroAv76/AM6YhADFmYkA756BAMqnmgDRqpkA362bAOGnkgDEqqIA - w7OuANm4qgDDtrIAw76+AOO1owDptaEAwcC/AM7CvgDawLcA1cK7AN/IvwDywa4A7MS2AOnHugDxw7EA - vb3BAMO/wADAwMAAxcHBAMbDxADHxMYAy8XEAMvIxwDMzMwA0cnGANrJwgDSzcsA0c3NANfRzwDQztEA - 0tLTANbQ0QDV09QA1NTVANjS0ADW1tgA2dnZAN3Z2QDZ2t0A3d3dAO3a1ADh4eEA6urqAO3s7QD46ucA - 8erpAP/x6wD18/MA+PPyAPr6+gD8+fkA//z6APr9/gD+/v4AAAAAAP///wAAAAAAAAAAAAAAAAC0pgQD - AwSmtAAAAAAAAAAAAAAAAAAAAAAAAAAAALQEstns8/n58+zZsgS0AAAAAAAAAAAAAAAAAAAAALmm2fPj - qHFkYmVnc5Xg89mmuQAAAAAAAAAAAAAAAACqvPO3byM2PUhthVhVUDNrtfO8qgAAAAAAAAAAAAAAqebs - cBwWIjY6OTFBWFRQTkxLbOrmqQAAAAAAAAAAAKnxzgEHDRYiNjaErZg6VFVQTk5MMsjxqQAAAAAAAACq - 5s4BBwcNFh8gmubq7sdEVFVQTk5OMsrmqgAAAAAAubzsAgYHBwwQHyLK3NjZ63pUWFRVUFVQMeq9uQAA - AACm838ICAgICA0WIK/YvdjgeFdYWFhYVFhUdPOmAAAAtL29HQsJCAgMDhYWa6+7ypNEV0lthYVYWFdB - sdm0AACl84IYDw8PDAgODh8fHzY5LT1JSW1XSW1XSFdo86UAALLmbioYDw8PDw4OESJ7e4MmOj1JP0lJ - SEhXRDnPsgC02bI5LyoYEw8PDw8Kdebm5nksPD09PUlIPT1EOZTYtKbspzBCLy8YExMPDwtq4+Pmlh82 - Njw8Njo6OjkxZeymBPOBUkJCMS8aExMPDxnK2dzLchAsNDQ2NjY2LCwk8wQD+YBZUlJSQi8aGBgTD3zX - u7vZgxAiIiwgLCcsIiH5AwP5g1xSUlJSQkIvKBMTE3y5u8vmrBAXFxcXIhYXJPkDBPOUYFxcXFJSUjlC - LygYEna72Ofzew4XFx8WFxcd8wSm7KuKXFxcW1tSUlJCQi8oE5nn7PPREBEXFxcfFmTsprTZtpxgXFyG - XFxbQjBCQkIvfvPz9/M0HxEXFxcQl9m0ALLmwIpgYFxcXFKfmi8vMBrA+fn6+HQoLCwsLBfjsgAApfOw - omCJYGBcWtT54cGdxPj5+fnzOSoqNiwgcvOlAAC0vdnGkWGJYGBa1Pn5+fn5+fn5+ckrKioqLB/KvbQA - AACq87ikiYmKYGDW+fn5+fn5+fnwhi85Kiong/OqAAAAALS98dCjiY+JYYzW9vn5+fn2zIYwOUI5K2rs - u7kAAAAAAKrm5dWjj4mJiV+KnKCgnIdSUlJCUi5I3OaqAAAAAAAAAKnx5dLCko6JiYlhX19cXFxcXFIw - fd7xqQAAAAAAAAAAAKnm8d7NopCOiYlgYGBfXFpSUq3s5qkAAAAAAAAAAAAAAKq589/RxaGQjo6JX19c - i67c872qAAAAAAAAAAAAAAAAALmpvfPszsjDnpvBx8rs886puQAAAAAAAAAAAAAAAAAAAAC0pbLZ7PP5 - +fPs2bIEtAAAAAAAAAAAAAAAAAAAAAAAAAAAALSpBAMDBKa0AAAAAAAAAAAAAAAA//AP//+AAf/+AAB/ - /AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACAAAABgAAAAYAAAAHAAAADwAAAA+AAAAfwAAAP+AAAH/wAAD/+AAB//4AB///wD/8oAAAA - GAAAADAAAAABAAgAAAAAAEACAAAAAAAAAAAAAAABAAAAAQAAAAAAAHs/JABxcHEAkjYOAJk0CgCWOA8A - njgOAI83EACJORYAjToVAI46GACQNxMAlTkSAJM8FgCXPhcAmToSAJw7EgCdPBMAmTsUAJI8GACXPxkA - mT8ZAKA6DgCmPhMAoj4UAIE9IACSQR8AlkEeAJtAGwCZQR0AnUIdAKVBFwCmQhkAqkUcAIlBIQCBRSsA - k0UkAJlFIgCVSCkAnkwqAJ1NLgCfUi8Aik40AJBPMgCbTjAAhVM+AJ1SMgCYUTQAmVU7AJ1WOgCZWDwA - okchAKxLIwCuSyQArk4mAKJMKgCpTikApFAtAKxRKwCoUS4Ar1QvALRTKwCqTzIAvU8xALJOOgCjUTEA - pFMzAKJUMwCnVDMAoVU2AKZUNACoVDIAqlc1AKBVOQChVj0Ap1Q9AKlVOACsVzgAolg+AK5aOgCuWjwA - tFYwALlXMAC4UTQAtVgzALFaNQC7WzQAtFI4ALFRPQC7VD4As1w5ALZbPgCyXD4Atlw/ALhdOAC9Wj8A - ulw/AL5cPwC/YjsAu2E9AMJeNgDKXTMAwVA6AMVTOQDCVDsAxVQ5AMFXPQDCWT0AxWA5AMtkPADSZDkA - 1mg+AIlVQQCkXEAArF9AALNaQgCyXEEAullBALxYQACLYE4AgmJUAJFgUQCWYFEAk2ZVAJJtXwCrY0cA - oWFJAKpmSQCvZkgAqGhNALZnSAC7a0wAomtUAKdtVgClZlkAoGxfAItsYACbbWAAmHJkAJ51ZACleWgA - qHxqALR4YQC6emEAw2ZBAMdoQwDMaUIAxm5MAMtvTADTakIA2WxEANdvSADIcE0A13BJANpxSQDTd1QA - 2XlVANd7WADcf1sAn4J3ALOGdQC6hXEAvYp3AM2IbgDdhmUAyolwAMGLfQDTjnUA2ZN6AIKBggCJiIkA - jIuMAJ2PigCdlZIAmpqaAKWLgACrjIIAro6CAKKPiAC9locAsZCIAKuemAC2mJAAt5+YALKhmwC/opgA - o6OkAKSjpACnpqcArKysALippAC2tbkAv7y7ALu7vAC+vr4AxpCAAMSYhwDPmIIA1pqDAMCdkQDCp5wA - yqmfAOKiiwDpqZAA6bKfAMKrowDIrqcAwbWxAMK7uQDBvbwAxL+8AOy2oQDGwL0AysG/AMzAvQDZw7wA - xsPEAMrGxgDOyccAy8rKAM3KyQDNzcwA0MbDANXIxADYy8UA0MvJANPNygDWzcoA0c3OANjOywDa0M4A - 09LSANbS0gDY1tYA1tXZANjZ3QDZ3d8A3NzdAPbg1wDe3uAA4+HjAOTk5ADv5OAA6OjoAOnp7ADv7+8A - 9OrnAPLs6wDu7vAA8O/xAPHx8QD28/MA9PT1APr29QD4+PgA////AAAAAAAAAAAAAK6pAgKprgAAAAAA - AAAAAAAAAAAAALyqvd3z/v7z3b2qvAAAAAAAAAAAAAAAqsLz4rJ8eXmHtOb6wqoAAAAAAAAAAAC879R4 - KjBKTD52WUCG3/G8AAAAAAAAALzzrAEiJih9zslXaWlpQLb+vAAAAAAAqu+tGQgKGkXe7/qmP2lpaVi3 - 8aoAAAC8wsIjCAcHFC7V3ejDU2traXZK5cK8AACq9IgUDAMHDBtxucRMW3Z2dnZzifqqAAC93TAdEBAQ - DBQwhH5IUFtdXVtzceK9AK7dtUg6GBAQDBCO79UoRUhQUFBQcbDdrqnzn1tRNiAYEASA6+KFJUVFRUhF - RXnzqQL+i2NWVj0hGAY32MLijRw3Nyg3LHD+AgL+jJBkVlZRNSAWNtHZ6YAMJR0aJi3+AqnzsJFtbGxW - VlE1GEjZ8d8aHR0lGnfzqa7dvpRtbWxsVlJWPTXX+fp/EB0aJq/drgC94qWVlW1lm6ddUZP2/v6PNzk5 - KuK9AACq9MidlZVlpP7+8v7+/vpbNTkpi/iqAAC8v93Fl5Zunu7+/v7+/qU9Okgv2sK8AAAAqurRqJqW - lqTL09PLmFZRWym476oAAAAAALzz1MaclpZub21lZWNjcrj4vAAAAAAAAAC86t3Op5yalZWRkIOg2u+8 - AAAAAAAAAAAAqr/z6M/HoqGzzujzwqoAAAAAAAAAAAAAALyqvd3z/v7z3b2qvAAAAAAAAAAAAAAAAAAA - AK6pAgKprgAAAAAAAAAAAP+B/wD8AD8A+AAfAPAADwDgAAcAwAADAIAAAQCAAAEAgAABAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAIAAAQCAAAEAgAABAMAAAwDgAAcA8AAPAPgAHwD8AD8A/4H/ACgAAAAQAAAA - IAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAenl6AJsyBwCQNA0AljcOAJk4DwCPOhYA - kDUQAJM4EACVPBUAnjsRAJg8FgCWPxoAoTwSAKZBFwCsQhYApkUdAJpFIgCaRyQAnkooAJ1QMACgRyEA - pEkiAKxJIACiTy0AsU8oAKJQLwCtUSsAq1IvALVSKgCpVjYArFU2AKRaPAChXT8Arlo8ALdXMAC+VDcA - u1s0AL5dNgCwWjsAu1s/AMZOMgDAXjYAxFo9AMRgOQDKYjoA1GM3ANFmOwDZaT0Atl1AALpdQACaYksA - nWRMAK5hQwClYEgArWJMAKdoTgCzYkEAvGZDALhnRgC+Y0sApmpTALxuVgCqc18ArXNcALV0WgC+eFsA - rH1rALV3YQC/c2EAtnpiALB7ZADBZ0MAzGlDANBpQgDUakIA1nBKAMd9XwDKeFkAwnZjAMd0YQDKhWoA - zohtANiCZADZjG8A145zAOSZfACLiYkAkJCQAJuXlwC6k4IAuZ6TAL2glAC8pp4ApaGgAKSkpACxsLEA - vrm3AMCajQDLnIkAy5yRAMOjlwDWq5oA4aiTAMSupwDUr6EAx7GpAMK3swDMtrAAxLi1AMa7uADFvboA - x7+9ANHAuwDSwrwA78S1APDDsgDNxsMA0MnIANfNyQDf09AA0dbaANLY3gDf3N4A5cvCAOHZ1gD67+sA - +PPyAPn4+QD5/P0A/v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - vLd9JGbdee98htjClwGvE1L+KZ+BXZ0BFEIppRAzBcAFWzDlQCUc4IM1ILgTCOAkC4EAVgTrXErseXs9 - v2t/x/4u/4P/ZSDnPfBeYstudD4GO5+n/FM+A+Uz8DnPQKwUbI4B7gMC4Ew5YHERAAkwTQCqKQyURk1i - r4t/l79lfxdrzv8ykPP/DeiWniuD/XN+yeVfK5+Bz3sGigoCMJqiAKCIKYzdHe31MbDt79n/+bzvs/x7 - 5TNQPgPlM1A+A+UzUD4D5TNQPgPlM1A+A+UzUD4D5TNQPgPlM1A+A1/SGfj/BBff+U1oCsQAAAAASUVO - RK5CYIIAAAAoAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAB - AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB - AAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAC - AAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAwAAAAUAAAAHAAAACgAAAA4AAAAOAAAAEAAAABIAAAAT - AAAAEwAAABMAAAATAAAAEwAAABEAAAAQAAAADgAAAAwAAAAJAAAACAAAAAUAAAAEAAAABAAAAAMAAAAD - AAAAAgAAAAIAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAYAAAAKAAAADQAAABIAAAAX - AAAAGwAAAB4AAAAiAAAAJAAAACcAAAAnAAAAKAAAACoAAAArAAAALAAAAC0AAAAtAAAAKgAAACsAAAAp - AAAAKAAAACYAAAAgAAAAGgAAABgAAAASAAAADAAAAAkAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAAB - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAF - AAAACgAAAA4AAAAUAAAAGQAAAB0AAAAkAAAALAAAADMAAAA7AAAARwAAAFAAAABWAAAAXQAAAGIAAABk - AAAAZgAAAGcAAABnAAAAZQAAAGIAAABdAAAAWAAAAFIAAABJAAAAQwAAAD8AAAA3AAAAMwAAADEAAAAq - AAAAJQAAAB0AAAAUAAAADQAAAAkAAAAGAAAABAAAAAMAAAACAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAAQAAAAQAAAAJAAAAEgAAABYAAAAbAAAAJQAAAC8AAABBAAAAUgkICWYdHR19 - JyYnjTk6OqBdXV2zb25vwHl5e8uCgYHShISF14iIiNqJionciYiL3IiHh9qEhYbXgYOC1Hp6fM5ycnLD - X2BhuD8/P6coKCiWHx8fiAsLC3gAAABkAAAAWAAAAEoAAABBAAAAOQAAADMAAAAtAAAAJAAAABoAAAAP - AAAACgAAAAYAAAAEAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAgAAAAPAAAAEwAAABoAAAAo - AAAAPAAAAFYZGBl1LCwsk1taW7N0c3TMmJaX4MC+vvPRz9D/4+Lh//Xy8v//+vr///7+//////////// - ///////////////////////////////////////////+/v//7+3u/9vZ2//LysvzpaWn5Hp7etFiYmK7 - Li4vnhsbG4UAAABtAAAAWQAAAEsAAAA/AAAAOAAAADEAAAAlAAAAGQAAAA4AAAAIAAAABgAAAAQAAAAD - AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AAAABQAAAAsAAAAQAAAAFgAAACQAAAA+DAwMYyorK4xdXF22ioiJ1ry6vPHZ2Nf/8O3t//f09P/y7+// - 6ubm/+Xf3//c2Nf/0MvL/8nDw//Evr7/wr29/8C7u//Au7v/wby8/8K9vf/Evr7/xcDA/8nEw//MyMj/ - 083N/9nX1v/o5OT/8+/v//v4+v/////////////////q6uv/zs7P9JSTldtlZWbALi4ung0ODnsAAABf - AAAATQAAAEAAAAA6AAAALgAAACAAAAAVAAAACwAAAAYAAAAEAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAsAAAARAAAAFwAAADAHBwdaKysrimNiYrqioaHj - 0tDQ/+3q6v/28fH/6+Xm/9/Z2P/Mx8b/v7m5/7q0tP+6tLX/u7a2/8K7vP/JxcX/0c3N/9jU0f/d19b/ - 39vZ/+Le2//i3dz/4+Dd/+Pf3f/i393/4d7b/9/b2v/c2Nf/1dLT/8/LzP/MyMj/zMnJ/9DLy//V0dH/ - 4d7f//Ty8//////////////////n5un/sbK05m1sbcUwLzGdCAgIdwAAAFkAAABGAAAAPQAAADMAAAAl - AAAAFgAAAA0AAAAHAAAABAAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAP - AAAAGgAAADsWFhZtTU1Np5eVltzRz8//8O7u//Ht7f/g3Nz/ysTE/7i0tP+1r6//ubSz/8XAv//Vz9D/ - 4dzZ/+bj2//r6OH/7+rj/+Tc1f/d1M7/2s7I/9fKxP/UxsD/1MS+/9LBu//SwLr/08K9/9bHwP/XysT/ - 3NDK/+HX0f/p4dn/9PDn//Px6P/x7uf/8Ozo/+Xj4f/b19b/0c7O/9HNzf/a1dX/7Orq//////////// - /////+np6/+mpqfiV1dYtxsbHIkAAABlAAAATQAAAEIAAAA2AAAAJgAAABYAAAALAAAABwAAAAQAAAAD - AAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAGAAAAD4mJSZ/cXBxw7i4uPHm5eT/8Orr/97Y2P/Ev7// - tK2t/7OsrP/Aubr/1tLR/+Xj4P/x7un/6uXd/9/Wzv/Swbr/u6Wc/7WakP+sjoP/nXxw/5dyZv+XbmH/ - l2pc/5dnWf+YZlj/mGVX/5plVv+aZlj/m2ha/5xrXv+ebmL/oHNo/6Z+dP+0j4X/vZuT/8Onn//Vwrv/ - 5NnS//Hr4f/49u//9vTv//Dt6//n4+T/4+Li/+vp5//6+fn/////////////////z8/Q9X5+gM8uLi+b - AAAAbAAAAE4AAABCAAAAOAAAACUAAAAWAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAJAAAAFAAAADooKSl/ - eXh5x8bExPvs6Oj/6OPj/83IyP+1r6//r6mq/724uP/Z1NT/7url//Dr5P/j2tL/x7St/7edkv+ggXb/ - lG9i/4xiUv+IWEb/i1ZD/45UQP+TVUH/mFdC/51ZQ/+hWkT/o1pE/6ZaRP+nWkT/qFpD/6lZRP+oWUP/ - qFhD/6ZXQ/+jV0P/oVVC/55VQ/+cV0b/m1pL/59kWP+lcWb/r4R7/8Gelv/Ot7D/6N7V//Xw6//8+/r/ - ///8//f19f/19fX//f38/////////////////+Pj5P6Li47TLy8wmgAAAGoAAABOAAAAQgAAADQAAAAg - AAAAEAAAAAgAAAAFAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAQAAAAGAAAACgAAACwfHx9xcnFyw8rHx/vt6ur/4t3d/8O7u/+tqKj/s62s/83Iyf/r6OT/ - 9PHq/+LWzv/DrKP/p4uA/5FuYP+FWkn/hFI//4lQO/+TVT3/mlg//55ZQP+hW0H/plxC/6dcQv+pXEP/ - rF1D/65eRP+wXUT/sl1E/7NdRP+0XUP/tlxD/7ZcQv+2W0P/t1pC/7ZaQv+3WUH/t1hB/7ZXQP+0VkD/ - r1U//6pTP/+kUkH/oFZF/6BgUv+ncmf/t46E/8qupv/p3NT/+PTx//39/f////////////////////// - ///////////k5OX8hISH0CcnKJYAAABhAAAASQAAAEAAAAAuAAAAGAAAAAoAAAAHAAAABAAAAAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABgAAABgPDg9YZmVmtsG/v/bp5+f/ - 3dnZ/763t/+upqT/ubGy/9jV1v/38+//7ubf/8izq/+nin7/i2ZX/4BTQf+CTDf/jFA4/5ZUOv+aVjz/ - n1c8/6FZPv+lWz//pltA/6lcQf+qXEL/q11C/61dQ/+vXUP/r11D/7FdRP+zXUT/tF1E/7VcQ/+3XEP/ - uFxD/7lbQv+5W0H/u1lA/7xZQP+9WD//vVc+/75WPf++VT3/vVU9/7tUPf+6Uz3/s1I9/6xRPv+kUkL/ - n1pL/6VtYv+2joX/z7ex//Dp4v/7+vn/////////////////////////////////39/g/HR0d8gVExWE - AAAAVwAAAEcAAAA6AAAAJAAAABEAAAAIAAAABQAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD - AAAABAAAAAcAAAAzQD8/kKakpObk4OH/4tvb/7+6uv+tpaX/trGx/9vY1//28ez/5drS/7yjmf+TcmT/ - f1NB/35JM/+KTDT/klA2/5hTOP+cVTj/n1c6/6BYO/+jWTz/pFo+/6ZbP/+nW0D/qVxB/6pcQv+rXUL/ - rl1D/65dQ/+vXUP/sV1D/7JdQ/+0XUP/tVxD/7dcQ/+4XEP/uVtC/7pbQv+6WUD/vFlA/71YP/++Vz7/ - vlY+/8BVPP/BVDz/wlM6/8FSO//BUjn/wFE5/7xROv+3UDv/rU88/6NSQf+hXlH/rHtx/8ann//q3tX/ - +vj3/////////////v3//////////////////8HCwuxLS0yuAAAAagAAAEwAAABCAAAALgAAABcAAAAL - AAAABgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAARFRQVWnd1dcLV0ND/6OPj/8fCwv+tpaX/ - samq/9jT0//38+3/5trS/7GXjP+KZlb/eks2/4BHL/+MSzD/k04y/5dQM/+ZUjT/nVQ2/55UN/+fVjn/ - oVc7/6NZPP+kWj7/pVo//6dbP/+oXEH/qVxC/6tdQv+tXUL/rl1D/69dQ/+xXUP/sl1D/7RdQ/+1XUP/ - tlxD/7dcQv+4W0L/uVtB/7paQf+8WUD/vVg//75XPv++Vz7/v1Y8/8BVPP/CVDv/wlM6/8NSOP/EUDf/ - w1A3/8NPNv/BTjf/u084/7RPOv+oUD7/oVhK/6hyaP/DoZn/6t7U//r49////////Pv7//v6+f////// - //////v7/v+Hh4nRFxgYiQAAAFQAAABHAAAANwAAAB8AAAAMAAAABwAAAAQAAAACAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAD - AAAAIzs8PIqvrK3r5uHi/9TOz/+zraz/q6Wj/8vGx//69/T/7OLb/7OZjf+FYFD/eEcx/4BEKv+KSSz/ - kUot/5VNLv+YTzD/mVAy/5pSNP+cVDX/nVQ3/59WOf+hVzv/olg8/6RZPf+lWj7/p1tA/6hcQf+pXEH/ - q11B/61dQv+uXUP/r11D/7FdQ/+yXUP/s11D/7VdQ/+1XEP/t1xD/7hcQv+5W0L/ulpB/7tZQP+9WUD/ - vlc//75XPv+/Vj3/wFU8/8FUO//CUzr/w1I4/8RROP/EUDf/xU42/8VNNf/ETTX/w001/8BON/+4Tzn/ - rFA8/6FWSP+mcWb/waCY/+7l3P/8+/r///////X19P/39vb////////////LzM3xRERGqwAAAGYAAABH - AAAAPgAAACUAAAASAAAACAAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAQEBDtjYWGtzszM/+Lf3//Cu7v/qaOi/7izs//q5uf/ - 8+zp/8WupP+LZ1j/dkUw/35BJ/+IRSj/j0gp/5JJKf+VSyz/lk0u/5hPL/+ZUDL/mlE0/5xTNf+eVTj/ - n1Y5/6BXOv+iWDz/pFk9/6VaPv+mWz//qFtB/6lcQf+rXUL/rV1C/61dQ/+vXUP/sF1D/7JdQ/+zXUP/ - tF1D/7VcQ/+3XEP/uFtC/7lbQv+6WkH/u1pA/7xZQP+9WD//vlc+/79WPf/AVTz/wVQ7/8JTO//DUjn/ - w1I4/8RQN//ETzb/xU41/8VNNP/GTDT/xUwz/8RMNP/ATjb/uU84/6tQPf+gWEv/q3lw/8+1rv/17+v/ - /v7+//Pz9P/t7Ov/+fn5///////39/n/dHN0xwEAAXMAAABNAAAAQwAAACoAAAATAAAACQAAAAUAAAAD - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAUSERFT - ioqKzt7a2v/Y0tL/tK+t/6qjo//Oysv/+ff0/+HTyf+aemz/d0k0/3o+Jf+FQST/jEQk/49GJv+SSCj/ - k0kp/5VLLP+WTS7/l04v/5lQMv+ZUTT/nFM1/51UN/+fVjn/oFY6/6JYPP+jWT3/pVo+/6ZbP/+nW0D/ - qVxB/6tdQf+sXUL/rV1D/69dQ/+wXUP/sV1D/7NdQ/+0XUP/tVxD/7dcQ/+4W0L/uFtC/7paQf+6WUH/ - vFlA/71YP/++Vz7/vlc9/79WPf/AVDv/wVQ7/8JSOv/DUjj/xFE3/8RQNv/FTzX/xU41/8VNNP/FTTT/ - xksz/8VLM//ESzP/wE42/7dPOv+oUUD/oF9T/7WLgv/m2M7/+/n4//n4+f/n5eb/7Orq//////////// - nJye2xUVFIgAAABPAAAARQAAAC8AAAAXAAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAIAAAALJCQkaqOhoeLj39//y8XF/6ylpf+zrK3/5eLi//Tt6v+5oJX/ - fVVD/3Q9Jf+BPSD/iEAg/4xBIP+PRCP/kEUl/5FGJ/+TSSn/lEor/5ZMLf+XTjD/mE8x/5pRM/+bUjX/ - nVQ3/55VOP+gVjr/oVg8/6NZPf+kWT3/pls//6dbQP+oXEH/qlxB/6tdQv+uXUL/rl1D/69dQ/+xXUP/ - sl1D/7NdQ/+1XEP/tlxD/7dcQ/+4W0L/uVpC/7paQf+8WUH/vVlA/75YPv++Vz7/v1Y9/79VO//BVDv/ - wVM7/8NSOv/DUjj/xFA4/8RQN//FUDb/xU41/8VONP/FTDT/xUwz/8ZMM//FSzP/w001/75POP+yUDz/ - olRF/6RuY//Gq6T/9e/t//7+/f/l4uP/4d7c//b09f//////wMHC7CgoKJgAAABUAAAARwAAADUAAAAY - AAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAADzw8PIG2tbXy - 39nZ/8C6uv+ooqD/vLe5//v59v/o3db/mnpt/3RFL/95OyD/hDsc/4k+Hv+MQB7/jUEg/49DI/+PRST/ - kUcn/5JIKf+USSv/lUwt/5dOL/+YTjD/mlAy/5tSNf+cVDb/nlU4/59WOv+gVzv/olg8/6RZPf+lWj7/ - p1tA/6hcQf+pXEH/q11C/61dQ/+vXkP/sF5D/7JeRP+zXkT/tF1D/7VdQ/+2XEP/t1xD/7hbQv+4W0L/ - ulpB/7tZQf+8WUD/vVg+/75XPv+/Vj7/v1Y8/8BUO//BVDv/wlI6/8JSOf/EUjn/xFA3/8RQNv/FTzX/ - xU40/8VNNf/FTTT/xkwz/8VMM//FSzL/xEwz/8FNNv+4UDv/qVJA/59eUv+0joX/7OHY//z8+//k4uX/ - 2NTT/+jm5f//////2dfZ9zw7PacAAABcAAAARwAAADYAAAAXAAAACgAAAAYAAAADAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAAAQAAABBFREWKx8TE+97a2v+5tLT/p6Ch/8rGyP/49vL/1cK4/4ZgUP9yPCT/ - fzob/4U7Gv+JOxr/iz4c/4w/Hv+NQSD/jkIi/49FJP+RRib/kkgo/5RKKv+VTC3/lkwu/5hPMP+ZUDL/ - mlI0/5xTNf+dVDf/n1Y5/6BXO/+iWDz/pFk9/6VaPv+nW0D/qFtA/6lcQf+qXEH/qFpA/6VXPv+iVDz/ - o1U8/6VVPf+qWD//r1tC/7RcQv+3XEP/uFxC/7hbQv+5W0L/u1pB/7xZQP+8WUD/vlg+/75XPv+/Vj3/ - v1U8/8FUO//BUzv/wlM6/8NSOf/DUTj/w1A3/8RQN//FTzb/xU41/8VONf/FTTX/xU00/8VNNP/FTDP/ - xEw0/8JNNf+9UDn/sVI//59XSP+penD/3crB//r49//n5ef/z8zM/97b2///////6Ojp/U1MTrIAAABf - AAAARwAAADUAAAAYAAAACgAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAQT05Ok8vGx//X0tH/ - tq+u/6mhov/Y09b/9/Lx/7qhlv93Tjz/djsh/4E5Gv+GOhj/iDsY/4k8Gf+LPRz/jD8e/41BH/+OQiH/ - j0Qj/5BGJv+SSCj/k0oq/5VLLP+WTC7/mE4w/5lQMf+aUTT/nFM1/51UN/+eVjj/oFc6/6JYPP+jWT3/ - pVo+/6ZbP/+kWT7/m1A2/41HL/+ISTP/hko2/4NKOP+BSDX/gEMw/4A9KP+JQiz/m003/6pWPv+1W0L/ - uFtC/7lbQv+6WkH/u1lB/7xZQP+9WD//vlc+/75XPv++VTz/v1U8/8FUPP/CUzr/wlM6/8JSOf/DUTj/ - xFA4/8RQN//EUDb/xU82/8VPNv/FTjX/xU40/8VONf/FTjT/xU40/8NONf/AUDj/t1M+/6RWRf+faV7/ - yK6n//j18//s6uv/zsvL/9nV1P///v7/8PDy/1hYWbkAAABeAAAARwAAADMAAAAXAAAACgAAAAUAAAAC - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAABAAAACkxNTZDKx8b/1tHR/7KsrP+spaX/3dra//Tt6v+tkYT/dUg0/3s9IP+COBj/ - hjgY/4g6F/+IOhf/iTsY/4o8G/+MPx7/jEAf/45BIP+PRCP/kEYl/5FHKP+TSSn/lEsr/5ZMLf+XTi// - mFAx/5pRM/+bUjX/nFM2/55VOP+gVjr/oVg7/6NZPP+kWT3/nFE2/5BONf+XaVj/p4yC/7ekoP/Dt7T/ - yL+9/8e8uf++ran/rZOM/5NtYf95QDD/fzso/5xOOP+wWED/uVtC/7lbQf+6WkH/vFlA/71ZQP++WD7/ - vlc+/75WPf+/VTz/wFU8/8FUPP/BVDr/wlM6/8NTOf/DUTn/xFE4/8RQN//EUDf/xE82/8RPNv/FTzb/ - xU82/8VPNf/ETzX/xE81/8NPNv/AUDj/uVM9/6hVQ/+dY1j/v6GZ//bw7P/y8PD/0MvM/9bS0f/++vv/ - 8fHy/1FRUrQAAABeAAAARgAAADAAAAAUAAAACQAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANBQUF+yMPD/9bR0P+yrKz/ - rKem/+Tf3//y6uf/oIJ0/3JDLv98Ox7/hDkY/4Y4F/+HOBf/iDkX/4g6F/+JOxj/ijwa/4s+HP+MQB7/ - jUEg/49DI/+PRST/kUYn/5JIKP+USir/lUwt/5dNLv+YTzH/mVAy/5pSNP+cUzb/nlU4/59WOf+hVzv/ - oVc7/5hOMv+calj/va2n/9LPz//Y19j/19TV/9XS0//V0dH/1tLT/9nX2P/f3+D/4uDg/8/Ewv+Vb2T/ - dDYk/5FHMv+uVj//uVtC/7pbQf+6WUD/vFlA/71ZP/++WD7/vlc+/79WPv+/Vjz/wFU8/8FUPP/CVDr/ - wlM6/8JSOv/DUjn/w1I4/8NROP/EUTf/xFA3/8RQN//ETzb/xE82/8RPNv/ETzb/xE82/8JQN//BUDj/ - vFM9/6tWQ/+cYFP/uJmR//Ps5v/19PL/z8rK/9TQ0P/9+/z/6uvs/0ZGRq0AAABZAAAARAAAACwAAAAS - AAAACAAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAADMTAwab28vPnW0tL/tK2s/6ynpf/l4uL/8Ojh/5h5bP9xPyn/fjod/4U4F/+HORX/ - iDgX/4g5F/+IORf/iDoX/4k7GP+KPBn/iz0c/4s/Hf+NQR//jkMi/49FJP+RRib/kkco/5NKKv+VSyz/ - lkwu/5dOMP+ZUDH/mlE0/5xTNf+dVDf/n1Y5/59WOf+ZUDT/rIV3/9DLzP/U0tP/0MzM/87Jyf/Oycn/ - zsnJ/87Jyf/Oycn/zsrK/8/Ly//Szc7/393e/+rp6v+0nJX/dDop/5JHMv+yWD//ultC/7paQf+7WUH/ - vFlA/71ZQP++Vz7/vlc+/79WPv+/VTz/wFU8/8FUPP/BVDv/wlM6/8JTOf/DUzr/w1I5/8NSOP/DUjj/ - w1E4/8NROP/EUDf/xFA3/8NQN//EUDf/w1A3/8NQN//BUTn/vFM9/61WQ/+aXFD/r42F//Hq4v/18/L/ - zcnK/9XQ0P///v7/4+Pk/TMzM6AAAABQAAAAQgAAACgAAAAQAAAABwAAAAMAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh0bHFKopKXp2NPS/7Wvr/+rpKT/ - 4N3d//Hp5P+YeGr/c0Aq/4A5HP+GOBf/iDkV/4k5Fv+JORb/iDkX/4g4F/+JORf/iTsX/4k7Gf+LPRv/ - jD8d/41AH/+OQSH/j0Qk/5BFJf+RRyj/k0kp/5RLK/+WTC7/l04v/5hPMf+aUTP/m1I1/51TNv+eVTj/ - mlAy/6+Ief/Qz9D/z8zM/8zHx//Lx8f/ysbG/8rFxf/KxcX/ysXF/8vGxv/Lxsb/zMfH/83IyP/NyMj/ - 1dHS//Hy8/+1nZb/djYk/59OOf+3W0L/uVtC/7paQf+7WUH/vFlA/7xYP/++Vz7/vlc+/75XPv+/Vjz/ - v1U8/8FUPP/BVDv/wVQ7/8FUO//CUzr/wlI6/8JTOf/DUjn/w1I5/8NSOP/DUjj/wlE4/8NROP/DUTj/ - w1E4/8JROP/AUjn/u1Q9/65XRP+ZW07/rYyE//Lr5f/z7+7/y8bH/9bT0v//////ysnL8hoZGo0AAABN - AAAAPwAAACEAAAAMAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAEPDg41l5WX19jT0/+7tLT/qKCh/9nV1//17uv/nH1w/3NAKv+BPR//hzgX/4k4Ff+JORX/ - iTkV/4k5Fv+IORf/iTkX/4k6GP+JOxf/ijsZ/4o8G/+MPh3/jEAe/41BIP+PQyP/j0Uk/5FHJ/+SSCj/ - lEoq/5VMLf+WTS7/mE4w/5lQMv+aUjT/nFM2/5pPMP+ncl7/zcrK/8zIyf/JxMT/ycTE/8fCwv/HwsL/ - xsHB/8bBwf/GwcH/x8LC/8fCwv/Iw8P/ysXF/8vGxv/Lxsb/1tLT//Dw8P+VbmP/hT0p/69XP/+6W0L/ - ulpC/7paQf+8WkD/vFlA/71ZP/++WD7/vlg+/79XPv+/Vj3/wFY9/8BVPP/AVDz/wVQ8/8FUO//BVDv/ - wlQ6/8JTOv/CUjr/wlM6/8JTOf/CUjn/wlI5/8JSOf/BUjn/wlI5/8JSOf/AUzr/ulU+/61XQ/+aXVD/ - spOL//Tu6P/s6+v/yMTD/9jV1f//////r66v5gwMDH8AAABHAAAAOAAAABgAAAAKAAAABQAAAAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFnNxcbPY09P/wbu6/6qiov/SztH/ - +PTy/6iLf/9zQSz/gT0f/4c5GP+JOBX/ijgV/4k5Ff+JORX/ijoW/4o6Fv+JORf/ijoY/4o6GP+KOxj/ - ijwa/4s+HP+MQB7/jUEg/45CIv+PRCT/kUYm/5JIKP+TSSr/lEss/5ZMLv+XTjD/mE8x/5pRNP+bUTT/ - nFI1/8CrpP/Lysv/x8LC/8bBwf/FwMD/xL+//8O+vv/Dvb3/wr29/8K9vf/Dvr7/w76+/8XAwP/GwcH/ - yMPD/8rFxf/JxMT/5eXl/9TIxf97PSz/o1E6/7hbQv+5W0L/uVtC/7paQf+7WkH/vFlA/71ZQP++WD// - vlc+/79XPv++Vz7/wFY9/8BWPP/AVTz/wFQ8/8FVPP/BVTz/wVQ7/8FUOv/BVDv/wVQ7/8JUO//CUzr/ - wVM6/8FTOv/BUzr/wVM6/8BTOv++VDv/ulY//6tYRf+YX1L/uZ2W//j19P/l4uP/x8HB/+Dd3f////// - h4eH0wAAAGkAAABFAAAAMAAAABMAAAAIAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAJSUFOMysTF/8jCwv+spKT/xL2///v49/+3npP/dUUw/4E+IP+IORf/ijkW/4s4Ff+KOBX/ - ijkV/4o5Fv+KORb/ijoW/4o5F/+KOhj/ijoY/4o7GP+LPBr/jD0c/40/Hv+NQR//jkIh/49EJP+QRSb/ - kUco/5NJKf+USiv/lkwt/5dOL/+YTzH/mlEz/5hNL/+nbFX/yMPC/8bBwv/Dvr7/wr29/8G8vP/Au7v/ - v7q6/8C6uv+/urr/v7m5/7+6uv/Au7v/wby8/8O9vf/Ev7//x8LC/8jDw//Szs7/7uzs/41cT/+XSDP/ - tltC/7hcQv+5W0L/uVpC/7taQf+7WkD/vFlA/7xZQP+9WD//vlg+/75YPv++Vz7/v1c9/79WPf+/Vj3/ - v1U8/8BVPP/AVTz/wFQ7/8BVO//BVTv/wVQ7/8FUO//BVDv/wVM7/8BTO//AUzv/wFQ7/8BUOv+9VTv/ - uFY//6hYRv+YY1f/xK2m//v5+P/a1tn/xsLC/+zp6P/19Pb/WltbuQAAAFkAAABBAAAAJwAAAA8AAAAH - AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKCopWLSxsvbSy8z/r6in/7iys//8+/b/ - yriv/3dKN/+BPiH/ijoY/4s6Fv+MOhb/jDkW/4s5Ff+KORX/ijkW/4o6Fv+LOhf/ijoX/4o6F/+KOxj/ - ijsY/4s8Gf+LPRv/jD8d/41BH/+NQiD/j0Mj/5BFJf+RRib/kkgo/5RJKv+VSy3/lk0u/5hPMP+ZUDL/ - l0kq/7GGdf/Ixsf/wr29/8G7u/+/urr/vri4/723t/+8t7f/vLe3/7y3t/+9t7f/vLe3/724uP++ubn/ - wLq6/8K8vP/Dv7//xsHB/8nExP/u7/D/rIqA/49BLP+0W0L/uFxD/7hbQv+5W0L/ulpC/7pbQv+7WkH/ - u1pB/71ZQP++WD//vlg//75YPv++Vz7/v1c+/75XPv+/Vj7/v1Y9/79WPf+/Vj3/wFY9/8BWPP/AVTz/ - wFU8/8BVPP/AVTz/v1U8/79VPP+/VTz/v1U8/79VPP+9Vj3/tlhB/6RZR/+WZ1z/08O7//38+//QzM7/ - ysXE//r4+f/d3N38JSUllwAAAE0AAAA8AAAAHQAAAAsAAAAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQYGBiOOi4rO1c7O/7exsf+vp6b/8e7r/+nc1P+AWEf/fT8j/4k8Gv+MOxf/jToW/406Fv+NOhb/ - jDoW/4s5Fv+KORb/ijoW/4s6F/+LOhf/ijoY/4s7Gf+LOxj/izwZ/4s9Gv+MPh3/jkAe/45BH/+OQiH/ - kEQk/5BFJv+RRyf/k0kq/5RKLP+WTC7/l04v/5hPMf+WSSn/r4l6/8TExv+/urr/vri4/7y3t/+7trb/ - urW1/7m0tP+5tLT/ubS0/7q0tP+6tLT/u7W1/7y2tv+9uLj/wLq6/8G7u//Dvr7/xcDA/+nr7P+ylIv/ - jEAq/7RcQv+3XEP/t1xD/7hcQv+4W0L/uVtC/7paQv+7WkH/vFlB/7xZQf+9WUD/vVhA/75ZP/++WD// - vlc+/75YPv+/Vz7/v1c9/75XPv++Vz7/vlY9/75WPf++Vj3/v1Y9/79WPf++Vj3/vlY9/75VPf+/Vjz/ - v1U8/75VPP+8Vj3/tFhC/59ZSP+YcGX/49nQ//78+P/Fw8P/087O//////+ko6ThBQUFdgAAAEQAAAAw - AAAAEwAAAAgAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWVlZks7Hx//CvLv/q6Wl/9vZ2f/07+r/ - km9g/3c+Jv+JPh//jjsY/487F/+NOxf/jToX/406F/+MORb/jDoW/4s6Fv+LOhb/jDoX/4w7F/+MOhj/ - izsY/4s7GP+LOxj/jD0a/40+HP+NQB7/jkEf/49CIP+PQyL/kEUl/5FGJ/+SSCj/k0kr/5VMLf+WTS7/ - mE8w/5ZJKP+thnj/wcHD/7y3t/+7tbX/ubS0/7m0tP+5s7P/uLKy/7eysv+3srL/t7Ky/7eysv+5s7P/ - ubS0/7u2tv+9uLj/v7m5/8K9vf/Dvr7/6Onq/7OVjP+PQyv/s1xC/7ZdQ/+3XEP/t1xD/7hcQv+5W0L/ - uFtC/7pbQv+7W0L/u1pB/7tZQf+8WkD/vFlA/71ZQP++WUD/vlg//75YP/++WD//vlc+/75YPv++Vz7/ - vlc+/75XPv++Vz3/vlc9/75XPf++Vz3/vlc9/71WPf+9Vj3/vlY9/71WPf+6Vz//sFpE/5dYSf+ce3H/ - 8u7m/+vo6P/Dvrz/4N3d//z6+/9naGjBAAAAXwAAAD8AAAAlAAAADgAAAAYAAAADAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAASgpKVGxrq72zsfH/6+mpv/Bu73/+/n3/6+UiP91QSv/hz4g/448Gf+PPBj/jzsX/487F/+OOhf/ - jToX/446F/+NOhf/jDoW/4w6F/+MOxf/jDsX/4w7F/+LOxj/izsZ/4w8GP+MPBr/jT4c/40/Hf+OQB7/ - j0Ig/49DIv+QRST/kkYm/5JIKP+TSSn/lEss/5ZMLv+XTi//lUgn/62Edf/AvsD/urW1/7qzs/+4s7P/ - t7Gx/7axsf+3sbH/trGx/7axsf+2sbD/trGx/7exsv+4srL/urOz/7q2tv+9uLj/wLu7/8O9vf/s7e7/ - s5GH/5ZHLv+0XUP/tV1D/7ZcQ/+2XEP/t1xD/7hcQ/+4XEP/uVtC/7pbQv+6W0L/u1tB/7taQf+7WkH/ - vFpB/7xaQP+8WUD/vVlA/71ZQP++WUD/vlg//75YP/+9WD//vlc+/71XP/+9Vz//vlc+/71XPv+9Vz7/ - vVc//71XPv+9Vz7/vVc+/7tXP/+3WED/qVlG/5FcT/+2nZX/+/r5/9TR0v/Dv7//9vP0/9rY2v4nJyiZ - AAAASgAAADgAAAAZAAAACgAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMXfnx8vNPNzf+3sbH/squs//Xz8P/WyL// - e047/4RAI/+PPRr/kDwY/5A8GP+QPBj/kDsX/487F/+OOhf/jjoX/446F/+NOxf/jToX/4w7F/+MOxf/ - jDsY/4w7GP+MOxn/jTwZ/4w8Gf+NPRr/jj4d/45AHv+PQSD/kEMi/5BFI/+QRiX/kkgn/5NJKf+USyr/ - lUwt/5ZNLv+VSSr/qHJd/725uf+4tLT/t7Ky/7awsP+2sLD/ta+v/7Wvr/+0rq7/tK+v/7Svr/+1r6// - trCw/7exsf+4srL/urS0/7y3t/+9uLj/xsLC/+3t7f+hcGH/o1E4/7RdRP+zXUP/tV1D/7ZdQ/+2XUP/ - t1xD/7hcQ/+3XEL/uFxC/7hbQv+6W0L/ultC/7tbQv+7W0L/u1pB/7taQf+7WkH/vFlA/71ZQf+9WUH/ - vVlA/7xZQP+9WUD/vVlA/71YQP+9WED/vFg//7xYP/+8WD//vFg//7tYPv+8Vz7/u1g+/7pXP/+0WUP/ - olpI/45jWP/Sxr7//v76/8XCwv/Qy8v///7//5mYmdoAAABsAAAAQQAAACsAAAAQAAAABwAAAAMAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAUZFRXbDv7//xcDA/6ylpf/Z1dX/8+7m/4xoWP99PyX/jT8d/5E9Gf+SPRn/kT0Y/5E8GP+QPBj/ - kDwY/487GP+POxf/jjsX/447F/+OOhf/jTsX/4w7F/+NOxj/jTsY/407Gf+NOxn/jDwZ/409Gv+OPhz/ - jj8e/49BH/+PQiH/kEQj/5FFJf+SRif/k0ko/5RKKv+VSyz/lk0t/5ZNLv+aUzb/uaml/7i1tv+1sLD/ - ta+v/7Wvr/+0rq7/s66u/7Ourv+zra3/tK6u/7Surv+1r6//trCw/7exsf+5s7P/u7a2/7u1tf/Z2dn/ - 4NbT/5dSPP+tWkD/sl1E/7JdRP+zXUP/tF1D/7VdRP+2XUP/t11D/7dcQ/+3XEP/uFxD/7hbQv+5W0L/ - uVtC/7pbQv+6W0L/u1tC/7tbQv+6WkL/vFpB/7xaQf+8WUH/u1lB/7tZQP+7WUD/u1lA/7tZQP+7WUD/ - vFhA/7xZQP+7WUD/u1k//7pZP/+7WD//ulg//7hYQP+uWkT/l1hJ/5d1a//w6+L/6+jo/7+6uv/l4OD/ - 8O/w/0dGR6sAAABRAAAAOQAAABkAAAAKAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDgwllJGR1NLKy/+xrKz/vre5//z79v+1nZP/ - dkIr/4tAIv+SPhv/kz0Z/5I9Gf+SPRn/kjwY/5E8Gf+QPBj/kDwY/5A7F/+POxf/jzsX/447F/+NOxf/ - jTsX/408F/+NPBj/jTsZ/407Gf+NPBn/jTwZ/44+G/+PPx7/j0Ef/5BCIP+QQyL/kUQk/5JGJf+SSCf/ - lEkp/5RLKv+VTC3/lk0u/5VJKf+rfWv/u7q8/7Wvr/+0rq7/tK2t/7Otrf+zra3/s62t/7Otrf+zra3/ - s66u/7Surv+1sLD/trGx/7izs/+4s7P/w7+//+7w8f+ziHr/oE82/7BeRP+xXkT/sV1E/7JdRP+zXUP/ - tF1E/7VdRP+2XUT/tl1D/7ZdQ/+2XEP/uFxD/7hcQ/+5XEL/uVxD/7lcQv+6W0L/ultC/7pbQv+6W0L/ - ulpC/7pbQv+7WkH/u1pB/7taQf+6WkH/u1lA/7paQf+7WkD/ulpA/7lZQP+6WUD/ullA/7pZQP+5WT// - uFlA/7VaQv+oW0b/jFpM/6+bk//7+/n/z8vM/8TAv//8+fr/ra2u5wsLC3sAAABBAAAAKwAAAA8AAAAH - AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAUpJSn3Iw8P/wrq6/66nqf/q5uX/6eDW/4JZR/+GQSX/kUAd/5Q+Gv+UPhr/kz4Z/5I+Gf+SPRn/ - kjwZ/5E9Gf+RPBj/kDwX/5A8GP+PPBj/jzsX/447F/+OPBf/jjwY/448Gf+OPBn/jTwZ/408Gv+NPRn/ - jj0b/48/HP+PQB//kEIf/5BDIf+RRCP/kkYl/5JHJv+TSSj/lEoq/5VLLP+WTC7/lkwt/5lPMf+0mI7/ - urm7/7Ourv+zraz/s62t/7Otrf+zra3/s62t/7Otrf+zra3/tK+v/7WwsP+2sbH/trCw/7+7u//k5+n/ - zrWu/55SOv+tXEL/r15E/69eRP+wXUT/sV5D/7JdRP+zXUT/s11E/7RdRP+1XUT/tl1E/7ZdRP+3XUP/ - t11D/7hcQ/+3XEP/uFxD/7hcQ/+4W0L/uVxC/7lbQv+5XEL/ulxC/7pbQv+6W0L/uVtC/7lbQf+6W0H/ - uVpB/7laQf+5WkH/uVpB/7lZQP+5WUD/uVpA/7laQP+4WT//t1lA/7FaQ/+cWUj/jmhd/+LZzv/28u// - v7q6/9vX1//18vb/VlZWtQAAAFMAAAA4AAAAGwAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREsl5SW2NDKyv+yq6n/xsDB//n48v+jhXj/ - eUAo/49CIv+VPxz/lT8b/5U/Gv+UPhn/lD4Z/5M+Gf+SPRn/kj0Z/5E9Gf+RPRj/kTwY/5A8GP+QPBj/ - jzsX/488GP+OPBj/jjwZ/448Gf+OPBn/jTwa/449Gv+OPhr/jz4c/49AHv+QQR//kEMg/5FEIv+SRST/ - kkcm/5NIJ/+USSn/lUor/5ZLLf+XTS//lkss/5tSNP+0mI7/u7m7/7aysv+yra3/sqys/7GsrP+yraz/ - s62t/7Otrf+zrq3/s66u/7eysv/HxMX/4uTl/9C4sf+iW0L/qVk+/65eQ/+uXUP/rl1D/69dRP+wXkP/ - sV5E/7JdRP+zXUT/s11E/7NeRP+1XUT/tV1E/7ZdRP+2XUT/t11E/7ddQ/+3XEP/t1xD/7hcQ/+3XEP/ - uFxD/7hcQ/+4XEP/uFxC/7lcQv+5W0L/uFtC/7lbQv+4W0L/uFtC/7hbQv+4W0L/uFtB/7hbQf+4WkH/ - t1pB/7haQP+3WT//tFpB/6pbRv+OWEn/oIZ9//n38f/V0tL/v7u7//r39/+4uLjsERERgAAAAEEAAAAr - AAAADgAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAUxMTX7JxMX/wLq6/7Gqq//t6eX/1svD/31RPv+JQiT/lEAd/5dAG/+XPxv/lj8b/5U+Gv+VPhr/ - lD4Z/5Q9Gf+TPhn/kz4Z/5I9Gf+SPBj/kTwY/5E8GP+QOxj/kDsY/448GP+OPBj/jz0Z/489Gf+OPBr/ - jzwa/449Gv+PPRv/kD8d/5BAH/+QQh//kUMh/5FEI/+SRiX/k0cm/5RIKP+VSSr/lksr/5dNLv+XTi// - l0wt/5pQMf+ugnD/u6+t/7u7vf+4t7j/trKz/7Wxsf+1sLH/t7O0/7y4uf/Fxcb/1NXX/9nRz/+/l4n/ - olg9/6hZPf+rXUL/rF1C/61dQ/+tXUP/rl1D/69dRP+wXkT/sF5E/7FeRP+yXkT/s15E/7NdRP+0XUT/ - tF5E/7VeRP+2XUT/tl1E/7ZdRP+2XUP/t11E/7ddQ/+3XUP/t1xD/7dcQ/+3XEP/t1xD/7hcQ/+3XEL/ - uFxC/7hbQv+4W0L/uFtC/7dbQv+3W0H/t1tB/7dbQf+3W0H/t1pB/7daQf+1WkD/sFtD/55aR/+IYFT/ - 0ce///n38v/Au7r/2tXV//Xz8/9ZWFm3AAAAVAAAADUAAAAZAAAACgAAAAQAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAkko+Q0NHLy/+zra3/x8PD//f17f+hhHf/ - gUky/5NDI/+XQBz/mEAb/5dAG/+WQBv/lj8b/5U/G/+VPxr/lT4a/5Q+Gv+UPhn/kz0Z/5I9Gf+RPRn/ - kT0Z/5E8GP+ROxj/kDwY/489GP+QPBn/kD0Z/488Gv+PPRr/jj0a/489Gv+QPhz/kEAe/5FBH/+RQyD/ - kUQi/5JFJP+TRib/lEgn/5RJKf+VSiv/lkws/5dNLf+YTjD/mE4v/5hLK/+fXED/roFw/7idlP/As6// - v7a0/8C4tv/Fvbv/y7+7/8eupv+7j4D/qWZN/6JTN/+nWj7/qVxB/6pcQf+rXUL/rF1C/6xdQ/+tXUP/ - rl1D/69eQ/+vXkT/sF5E/7FeRP+xXkT/sl1E/7NdRP+zXkT/tF5E/7ReRP+0XUT/tV1E/7VdRP+2XUT/ - tl1E/7ZdQ/+2XUP/tl1D/7ZdQ/+2XEP/t11D/7ZcQ/+2XEP/t1xD/7dcQv+3XEL/t1xC/7ZcQv+2W0L/ - tltC/7ZbQf+1W0H/tVpB/7ZaQP+0WkH/qltF/49XSP+dgnn/+Pbu/9bR0/++ubn/+PT2/6+vr+gKCgp2 - AAAAPgAAACcAAAAOAAAABgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAERERW7FwL//xL2+/7Crq//p5uP/183H/4heTP+TUTT/mUYi/5lAG/+ZQRz/mEAc/5dAG/+XQBv/ - l0Ab/5Y/G/+VPxr/lT4a/5Q+Gf+UPhr/kz4Z/5I9Gf+SPRj/kT0Z/5E8GP+RPBj/kD0Z/5A9Gf+RPRn/ - kDwa/488Gv+PPRr/jz4a/5A+G/+QQB3/kUAf/5FCIP+RQyH/kkUj/5NGJf+URyf/lUko/5VKKv+VSiv/ - lkwt/5hNL/+ZTzD/mVAx/5lOMP+ZSyv/nVI0/6BaPv+hXED/oVxB/6NeQ/+kXUL/olc6/59RM/+jVzr/ - plo//6ZbP/+nW0D/qFxB/6lcQf+qXUL/q11D/6xdQ/+tXUP/rl5D/65eRP+vXkP/r15D/7BeRP+xXkT/ - sV5E/7JeRP+zXkT/s15E/7NeRP+zXkT/tF1E/7ReRP+0XUT/tV1E/7VdRP+1XUT/tV1D/7ZdQ/+2XUP/ - tVxD/7VcQ/+1XEP/tVxD/7ZcQ/+2XEL/tVxC/7VcQv+1W0L/tVtC/7VbQf+0W0D/tVtA/7NaQP+uW0P/ - nlpG/4dfU//Qx8D/9vPu/723t//b2Nb/7Ovt/0NDQ6kAAABMAAAAMgAAABUAAAAIAAAAAwAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBAMNfXl7t9TOzf+1rq3/xL+///r37/+ojYP/ - ilI8/59VNv+eSyr/mkId/5lBHP+ZQRz/mUAc/5hAHP+XQBv/lkAb/5Y/G/+VPxr/lT8a/5Q+Gv+UPhn/ - kz4a/5M9Gf+SPRn/kj0Z/5I8GP+QPRn/kD0Z/5E9Gf+QPRr/jz0a/5A9Gv+PPhr/kD4b/5E/HP+RQB7/ - kUEf/5JDIP+SQyL/k0Yk/5RGJv+USCf/lEko/5VKKv+WSyz/l00t/5hNLv+ZTzD/mlAy/5pRNP+bUTT/ - m1Ez/51SNP+eUzX/nlQ3/6BVOP+hVzr/olg8/6NZPf+lWj7/plo//6dbP/+nW0D/qFxB/6lcQf+qXEL/ - q11C/6tdQ/+sXUP/rV1D/65eQ/+uXkP/r15E/7BeRP+wXkT/sV5E/7FeRP+yXkT/sl5E/7NeRP+zXkT/ - s15E/7NdRP+0XkT/tF1E/7RdQ/+0XUT/tF1E/7RdRP+0XUT/tF1D/7RdQ/+0XEP/tFxD/7RcQv+0XEL/ - tFxC/7RcQv+0W0L/tFtB/7NbQf+zW0D/s1pA/7FaQf+nWkT/jFZH/5+Gff/6+e//z8vL/8K8u//6+Pj/ - jY2O1gABAmkAAAA4AAAAIQAAAAsAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAACgnKEe0r6/5y8TE/7Cqqv/j4N7/493X/41kU/+WVDn/o1Qz/6NRL/+dRyL/mkEc/5pCHP+aQhz/ - mUEc/5hBHP+YQBz/l0Ab/5ZAGv+WPxv/lT4a/5U+Gv+UPhr/lD4a/5M9Gf+TPhn/kj0Z/5I9GP+RPRn/ - kT0Z/5I+Gf+RPRr/kT0a/5A+G/+QPhv/kT4b/5FAHf+RQR//kUIg/5JDIf+TRSP/lEYk/5RHJv+USCf/ - lUop/5ZKK/+WTCz/mE0t/5hPL/+ZUDH/mlEy/5tSNP+cUjX/nFQ2/51VNv+eVTj/n1Y5/6BXOv+hVzv/ - olk8/6NZPf+lWT7/pVs+/6ZbQP+nXED/qFtA/6lcQf+qXEL/ql1B/6tdQv+sXUP/rV1D/61eQ/+uXkP/ - r15E/69eRP+vXkT/sF5E/7BeRP+xXkT/sV5E/7JeRP+yXkT/sl5E/7JeRP+zXUT/s11E/7NdRP+zXUT/ - s11D/7NdQ/+zXUP/s11D/7NcQ/+zXEP/s1xD/7NcQ/+zXEL/s1xC/7JbQf+yW0H/sltB/7JbQf+xWkD/ - sVpA/6tbQ/+YWEX/imRY/9/Y0f/t6uf/ubSy/+Xi4v/V1db+KSoqlAAAAEMAAAArAAAAEAAAAAcAAAAC - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXFtbjdHNzf+8t7b/ura2//Py6/+ynpb/ - iFQ+/59XOP+kUzH/pVIw/6JNK/+cQx//m0Ic/5pCHf+ZQR3/mUEc/5lAHP+YQRz/l0Ac/5ZAG/+WQBv/ - lj8b/5U+Gv+VPhr/lD4Z/5M+Gf+TPhr/kz0Y/5I9Gf+RPhn/kT4a/5I+Gv+RPRv/kT4b/5E+G/+RPhv/ - kT8c/5JBHv+SQiD/kkMh/5JEI/+TRSP/lEYl/5VIJ/+VSCn/lUoq/5ZLK/+XTC3/mE4u/5pPL/+bUTL/ - m1Ez/5xSNP+dUzX/nlQ2/55UN/+fVTj/oFc6/6FXO/+iWDv/olg8/6RZPf+kWT7/pVo+/6ZbP/+mW0D/ - p1xB/6hcQf+pXEH/qlxB/6tdQv+rXUP/rF1D/61eQ/+tXkP/rl5D/65eQ/+vXkT/r15E/69eRP+wXkT/ - sF5E/7FeRP+xXkT/sV5E/7FeRP+xXkT/sV1E/7FdRP+yXUT/sl1D/7JdQ/+yXUP/sl1D/7JdQ/+yXUP/ - slxD/7JcQv+xXEL/sVxC/7FbQf+xW0H/sVtB/7FbQf+wWkD/rVpB/6JbRP+HVkj/qZaP//n47v/Fv8D/ - ycTE//r3+P9paGjBAAAAVwAAADMAAAAYAAAACQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAABARER+UkpLN083N/7KsrP/Szs//7+3m/5ZzZP+SVDr/pVY1/6ZTMP+mUjD/pVIw/59IJf+bQhz/ - m0Id/5tCHf+aQh3/mkIc/5lBHP+ZQBz/mEAb/5dAG/+XQBv/lj8b/5U+Gv+VPhr/lT4a/5Q+Gv+UPhn/ - kz0Z/5I+Gf+SPhr/kj4a/5E+Gv+SPhv/kj4b/5E/G/+RPxv/kkAd/5JBH/+SQiD/k0Mh/5NEI/+URiT/ - lUcm/5VIJ/+WSSj/lkoq/5dMLP+YTC3/l00u/5dOL/+XTzD/l1Ay/5lQM/+aUTT/mlI1/5tTNv+cVDf/ - nVU5/51VOf+fVzr/olg8/6NZPf+kWT3/pVo+/6ZbP/+nW0D/p1xA/6hcQf+oXEH/qVxB/6pdQv+rXUL/ - q11D/6xdQ/+tXUP/rV1D/61eRP+uXkP/rl5D/69eRP+vXUT/r15E/69eRP+wXkT/sF5E/7BeRP+wXkT/ - sF1E/7FdRP+xXUP/sV1D/7FdQ/+xXUP/sV1C/7FdQv+xXEL/sVxC/7BcQv+wXEL/sFtB/7BbQf+wW0H/ - sFtB/69aQP+uWkD/qFtC/5JXRf+NbmP/8O7j/97a2f+5srL/9PHx/62uruYPDw93AAAAOAAAACEAAAAM - AAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAxUry4uP/LxMT/tK6u/+vm4f/Nwr3/ - iVtI/59XOv+lVTP/p1Mx/6dUMf+mUzH/o1Au/55FIP+cQh3/nEIe/5tCHf+bQh3/mUIc/5lBHP+ZQBz/ - mEEb/5dAG/+XPxv/l0Aa/5Y/Gv+VPxv/lT8a/5U+Gf+TPRn/kz4Z/5I+Gv+TPhr/kz4a/5I+G/+SPhv/ - kz8c/5E/G/+SQBz/kkAd/5JBH/+TQyD/k0Mi/5NFJP+URiT/lUcm/5VIJ/+WSSr/k0Ym/4Q8Hf93Nhr/ - czUa/3Q1HP90Nh3/dTcd/3U4Hv92OCD/dzkg/3c6If93OSH/eDoi/4JELP+UUDb/oFc7/6NYPf+jWT3/ - pFk9/6VbPv+mWz//p1tA/6dcQf+oXEH/qVxB/6lcQv+qXUL/q11C/6tdQv+rXUL/rF1D/61dQ/+tXkP/ - rV5D/65dQ/+uXkP/rl5D/69eQ/+vXkT/r11D/69eQ/+vXUP/r11D/69dQ/+vXUP/r11D/69dQ/+vXEL/ - r1xC/69cQv+vXEL/r1xB/69cQf+vW0H/r1tB/69bQP+vWkD/rlo//65aP/+rWUD/nFlE/4NZTP/Kv7n/ - 9PDq/7iztP/e2dn/3t/f/zY2Np0AAABFAAAAKwAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAFgX1+R1c/P/7u1tf/BvL3/8e/p/6iPhP+NVT7/pVk6/6hVMf+oVDL/qFQx/6dTMf+nUzH/ - o00q/51EHv+cQx7/nEMe/5tCHf+aQhz/m0Ed/5pBHf+ZQRz/mUAb/5lBHP+XQBv/l0Ab/5Y/G/+WPxv/ - lT8a/5U+Gv+UPhr/lD4a/5M/Gv+TPhv/kz4b/5I/G/+SPxz/kj8c/5I/G/+SPx3/k0Ee/5NCIP+TQyH/ - lEQi/5RFJP+VRiX/lUgn/5VGJf+ZWT7/m3hr/5B1a/+OdGr/j3Rr/491a/+Rdmz/kXdu/5J4b/+UenD/ - lnxz/5iAdv+XfXL/dkw8/3g/KP+YUzj/olg8/6NZPf+jWT3/pFk9/6VaPv+mWz//pltA/6ZcP/+nXED/ - qFtB/6hcQf+qXUL/ql1C/6pdQv+rXUL/q11D/6xdQ/+sXUP/rV1D/61dQ/+tXkP/rV5D/61dQ/+uXUP/ - rl1D/65dQ/+uXUP/rl1D/65dQ/+uXUL/rl1C/65cQv+uXEL/rlxC/65cQv+uXEH/rlxB/65bQf+uW0H/ - rltA/61aP/+tWj//rVo//6tZQP+jWUL/h1ND/6CJgP/49uv/yMPD/8S/v//69vj/bm5uxQAAAFcAAAAw - AAAAFgAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQHZKPkMfUz8//ta6u/9bS0f/p5+L/ - lG5f/5hZP/+pWTf/qlUz/6lVMv+pVDL/qFQy/6dTMf+nVDH/oUom/51CHf+dQx7/nEIe/5xDHv+bQh3/ - m0Id/5pBHf+aQR3/mUEc/5hBHP+YQBv/mEAb/5c/G/+WPxv/lT8b/5U/Gv+VPhn/lD8b/5M/Gv+UPxv/ - kz4b/5M/HP+TQBz/kj8b/5JAHP+TQB3/k0Ef/5NDIP+UQyH/lEQi/5VGJP+URiT/l0op/7qknf/Fxcf/ - xMLE/8TCxP/Fw8T/xcPE/8bExf/Hxcf/yMbI/8vJyv/NzM7/0M/Q/9bV1/+4q6f/cD4q/5FNM/+hVzv/ - oVg7/6JZPP+iWT3/o1k9/6RZPv+lWj7/pls//6ZbP/+nW0D/p1xA/6hbQP+oXEH/qVxB/6ldQf+pXEL/ - ql1C/6tcQv+rXEL/q11D/6xdQ/+sXUP/rF1D/61dQ/+tXUP/rV1D/61dQ/+tXUL/rV1D/61dQv+tXUL/ - rVxC/61cQv+tXEL/rVxB/61cQf+tW0H/rVtA/61aQP+sWj//rFo//6xaP/+sWT7/q1k+/6ZZQP+RVkP/ - i2ld/+nm3f/f2tj/uLKx//Lu7/+opqjlCwwMcQAAADUAAAAdAAAACgAAAAQAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAhICBBtbGy9NDKyv+2sK//6OPf/87Hwv+LXUr/ol1A/6lXNf+rVjP/q1Uy/6pUMv+pVDL/ - qFQy/6hUMf+mUjD/oEgj/55DHv+dQx7/nUMe/5xDHf+bQh7/m0Id/5tCHf+aQh3/mkEc/5lBHP+YQRz/ - l0Ac/5c/G/+WQBv/lj8a/5U+G/+VPxv/lD8b/5U/G/+UPhz/kz8c/5Q/HP+UQBz/k0Ac/5NAHf+TQB3/ - k0If/5RDIP+URCL/lEQj/5REIv+ZTi//wLi2/8K/v//BvLz/wbu7/8G7u//CvLz/wr29/8O+vf/Ev7// - xcDA/8fCwv/Iw8P/zcnJ/8vFxP91RDH/j0sx/6BWOf+gVjr/oVc7/6JYPP+iWDz/o1k9/6NZPf+kWT7/ - pVo+/6VaPv+mW0D/p1tA/6dbQP+nXED/qFxB/6hcQP+pXEH/qVxB/6pcQf+qXEL/qlxC/6tdQv+rXUL/ - q1xC/6tdQv+rXUL/rF1C/6xdQf+sXEH/rFxC/6xcQv+sXEL/rFxB/6xcQP+sW0H/rFtB/6tbQP+rW0D/ - q1pA/6taP/+rWj//q1k+/6tZPv+rWT7/p1g9/5hXQf+BV0n/x765//Dt5v+2sbH/49/e/9TS0/0jIyOM - AAAAPQAAACUAAAANAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAExMTXbLx8j/w76+/724uf/w8Of/ - sp2V/49YQf+pXkD/q1c1/6tXM/+rVzP/q1Yz/6pWM/+qVjL/qVUy/6hVMv+lUi//n0Yh/55DHv+dRB// - nUQe/5xDHv+cQx7/m0Id/5tCHf+bQh3/mkIc/5lBHP+YQRz/mEAc/5dAG/+XQBv/lz8b/5Y/Gv+VPxv/ - lUAb/5U/G/+UPhv/lD8c/5RAHP+UQBz/k0Ab/5RAHf+TQR7/lEMg/5RDIf+URCL/lEIh/5hNLv/CuLf/ - xcHC/8S/v//Dvr7/xL6+/8S/v//EwMD/xcDA/8bBwf/Hw8L/yMTE/8vFxf/Oysr/ycLC/3JCL/+OSy// - oFY4/59WOf+gVjr/oFc7/6FYO/+hWDz/olg8/6NZPf+kWT3/pFk9/6VaPv+lWz//pls//6ZbP/+nXED/ - p1xA/6hcQP+oXED/qFxB/6lbQP+pXEH/qVxB/6lcQf+pXEH/qlxC/6pcQv+qXEH/qlxB/6pcQf+qXEH/ - q1xB/6tcQf+qW0H/qltA/6pbQP+rW0D/qlo//6paQP+qWj//qlo//6pZPv+qWT7/qVk9/6lYPf+nWD3/ - nlhA/4FRQP+mk4v/9vXq/765uv/KxsX/7u7u/1NTU68AAABMAAAAKgAAABEAAAAHAAAAAgAAAAAAAAAA - AAAAAAAAAAAkJSYEY2JiodzW1f+6s7P/zsjI/+ro4/+bfG//mVxD/61fPv+uWDX/rVg0/61YNP+sVzT/ - q1c0/6tXNP+qVjP/qVYz/6lWNP+mUC3/oEUg/59EHv+eRB//nkQe/51DHv+cQx7/nEId/5tCHf+aQhz/ - mkEc/5lBHP+ZQRz/mEEc/5hAG/+XQBv/lj8b/5ZAG/+VQBv/lT8b/5U/HP+VPxz/lEAd/5VAHP+UQBv/ - lEEd/5RAHf+UQh//lEIg/5REIf+UQh//mU0t/8W7uf/Hw8T/xsHB/8bAwf/GwcH/xsDB/8bBwf/GwcH/ - x8HC/8jDw//JxMX/y8bG/8/Ky//Kw8P/ckQy/4hGLP+eVDf/nlU4/59VOP+fVjn/oFY6/6BXO/+hVzv/ - oVg8/6JYPP+jWTz/o1k9/6RaPv+kWj7/pVs//6VaP/+mWz//pls//6dbQP+nW0D/p1tA/6hcQP+oW0D/ - qFxB/6hcQf+oXEH/qVxB/6lcQf+pXEH/qVtA/6lbQP+pW0D/qVtA/6lbQP+pWj//qVo//6laP/+pWj// - qVk//6lZP/+pWT7/qVk9/6hZPf+oWDz/qFg8/6dYPP+hVz7/i1NA/4xxZv/t7OD/zsvK/7u1tf/69vf/ - dnV2ywAAAFwAAAAtAAAAFwAAAAgAAAADAAAAAQAAAAAAAAAAAAAAABITExmVlJTM19DQ/7ixsf/e19b/ - 4N3Y/5NqWP+iYEX/sFw8/69ZNv+uWDX/rlg1/61YNf+sWDT/q1c0/6tXNP+rVjT/qlYz/6lWM/+lTyv/ - oEUf/59EH/+fRB//nkMe/51EHv+dQx3/nEIe/5xCHf+bQh3/mkId/5pCHf+aQRz/mUEc/5hBHP+YQBv/ - lz8b/5ZAG/+WQBv/lkAc/5Y/HP+VQBz/lUAd/5VBHf+VQRz/lUEd/5VBHv+UQh//lUMh/5RBHv+ZTCz/ - xry6/8nFxv/HwsP/x8LC/8fCwv/IwsL/x8LC/8fDwv/Hw8P/yMPE/8rFxf/Lxsb/zsnJ/87IyP98VUX/ - fT4l/5tSNf+eVDf/nlU3/59VOP+fVjn/n1c5/6BXOv+gVzr/oFc7/6FYO/+iWDz/o1k8/6NZPf+kWj7/ - pFk+/6VaPv+lWj7/pVo+/6ZbP/+mWz//pls//6dbQP+nWz//p1s//6dbQP+nW0D/p1tA/6dbQP+nWz// - qFs//6haP/+oWj//qFo//6haPv+oWT7/qFo//6hZPv+nWT7/p1k+/6dZPf+nWTz/p1c8/6dYPP+nVzv/ - p1c8/6FWPf+RVED/g15Q/9vX0P/f29f/ta6u//Ds7f+qqanlERAQcgAAADEAAAAZAAAACgAAAAMAAAAB - AAAAAAAAAAAAAAAAGxwcNbe0tO7Szc3/uLOz/+Xi2//Fvbn/jl5K/6plSP+vWjn/sFk2/69ZNv+uWDb/ - rlg1/65YNf+tVzT/rFc0/6xXNP+rVzT/qlYz/6lWM/+kTir/n0Qf/59EH/+gRR//n0Qf/55EHv+dRB7/ - nEMe/5xDHv+bQx3/m0Id/5tBHf+aQRz/mUEc/5lBHP+YQBz/l0Ab/5dAHP+WQBz/lkAc/5Y/HP+VQB3/ - lkAd/5ZAHP+VQR3/lUEe/5VBHv+UQh//lEEe/5hKKP/FtrH/ysjJ/8jExP/Iw8P/yMPD/8jCwv/HwsL/ - yMPD/8jDw//Iw8P/ycTE/8rFxf/Lxsb/1NHS/5J2a/9tMxz/lE4y/55UNv+dVDb/nlQ3/55VN/+fVjj/ - n1Y5/59WOf+fVzr/oFc7/6FXO/+hWDv/olg8/6JZPP+jWTz/o1k9/6NZPf+kWT3/pFk9/6VaPv+lWj7/ - pVo//6VaPv+lWj7/plo//6ZaPv+mWj//plo//6daP/+nWj//p1o//6daPv+nWj3/p1k+/6dZPv+nWT7/ - plk+/6dZPP+nWTz/plg8/6ZXPP+mVzv/plc7/6ZXOv+lVjn/o1Y7/5ZUPv97UUL/vLOv/+jk3f+1r6// - 4d3d/8/OzvsjJSWIAAAAOAAAACAAAAALAAAABAAAAAEAAAAAAAAAAAAAAAAwLy9TwsDA/8/IyP+8tbb/ - 8fDn/7ypof+QW0X/r2VH/69bOP+wWjf/r1o2/69ZNv+vWTX/rlg1/65YNf+tWDT/rFc0/6xXNP+sVzT/ - q1Y0/6pWNP+lTir/oEUg/6BFH/+gRR//n0Qf/55EH/+dRB7/nUMe/5xDHf+bQh3/m0Id/5tCHf+aQR3/ - mUEd/5lBHP+ZQRv/l0Ab/5dBHP+WQRz/l0Ac/5dAHf+WQR3/lkEd/5ZBHf+VQR3/lUEe/5VBHv+UQR7/ - l0Uj/8Cpof/Lycv/yMPD/8jDw//Iw8P/x8LC/8fBwv/HwcH/x8LC/8jBwv/HwsP/yMPD/8jDw//Qzc7/ - s6Sf/2YzHv+GRSv/m1Iz/51TNf+dUzb/nVQ2/55UN/+eVTj/n1U4/59WOP+fVjn/n1Y6/59WO/+hVzr/ - oVc7/6FYO/+iWDz/olg8/6NYPP+jWDz/o1k9/6RYPP+kWT3/pFk9/6RZPf+lWT3/pVk+/6VZPv+lWT3/ - pVk+/6VZPv+lWT3/pVk9/6VZPf+lWD3/pVg9/6VYPP+lWDz/pVg8/6VYPP+lVzv/pVc7/6VXOv+lVjr/ - pVU6/6VWOf+iVDn/mlQ8/31OPf+smpP/8/Dl/7mztP/Tz8//397e/zc3OJ4AAABAAAAAJAAAAA0AAAAF - AAAAAQAAAAAAAAAAAAAAAFVUVHfVz8//xb29/8bBwP/q6eD/o4l//5ldRf+xZEX/sFs3/7FbN/+xWzf/ - sFo3/7BZNv+wWTb/r1k2/65ZNv+tWTX/rVg1/61YNf+sWDX/q1g1/6pXNf+mTir/oEUg/6BFH/+gRSD/ - n0Uf/55EHv+eRB//nUMe/5xDHf+bQx7/m0Md/5tCHf+bQh3/mkEd/5lBHf+ZQBz/mEAc/5dBHP+XQRz/ - mEAc/5dBHf+WQR3/lkEd/5ZCHf+WQh7/lkEe/5VBHv+TPxv/uJaK/8vLzf/Hw8P/x8LC/8fCwf/GwcD/ - xsDA/8XAwP/FwMD/xb/A/8XAwP/FwMD/xsHB/8jDxP/Oysr/e1ZI/240HP+SSy//nVI0/5xSNP+dUzT/ - nVM1/55UNv+eVDf/nlQ3/55UN/+eVTf/nlU4/55WOf+fVjr/n1c6/6BXOv+hVzv/oVc7/6JYO/+iWDv/ - olg8/6JYO/+iWDz/o1g8/6NYPP+jWTz/o1g8/6RYPP+kWDz/pFg8/6RYPP+kWDz/pFg8/6RYPP+kVzv/ - pFc7/6RXO/+kVzv/pFc7/6RXOv+kVjr/pFY5/6NVOf+kVTn/o1Q4/6JUN/+cVDr/gk47/5J7cv/r6d// - w76+/8O8u//z8vL/YWFktgAAAEwAAAAmAAAADwAAAAYAAAACAAAAAAAAAAAeHh8EYV9fmOHc3P+8t7b/ - z8vJ/+Lh2v+Wdmr/omFJ/7NjQ/+zWzj/sls4/7NbOP+yWzj/sVo3/7FaN/+wWjf/r1k3/69ZN/+uWTb/ - rVk2/61YNv+sWDb/q1g1/6tXNf+mTyr/oUYg/6FFH/+gRR//oEUf/6BFH/+eRB//nkQe/51DHv+cQx7/ - nEId/5tCHf+bQh3/mkId/5pBHf+YQRz/mEEc/5hBHP+YQBz/mEAd/5dAHf+WQR7/l0Ed/5ZBHf+WQR7/ - lkEe/5I5FP+vgnD/zMvN/8bBwv/FwMD/xMDA/8S+vv/Dvr7/wr6+/8K9vv/Cvbz/wr28/8O9vf/Dvr7/ - xL6+/83LzP+1p6L/YzId/3o9JP+VTjD/nFIz/5xSM/+cUjT/nVI0/51TNf+dUzb/nlM2/55UN/+eVTf/ - nlQ4/55VOP+eVTn/nlY5/59WOf+gVjr/oFc6/6BXOv+hVzr/oVc6/6FXO/+iVzv/olc7/6JXO/+iVzv/ - olc7/6JXO/+iVzv/o1c7/6NXOv+jVzv/o1c7/6NWOv+jVjr/o1Y6/6NWOf+jVTn/olU5/6JVOP+iVTj/ - olQ4/6JUOP+iVDf/oVM2/5xTOP+JUDv/g2hd/+Hf1v/Nx8b/urOy//j19f93d3bKAAAAVQAAACgAAAAS - AAAABwAAAAIAAAAAAAAAADc4OBFvbW2039vb/7u1tf/Y1NP/5ePc/5hvXv+lZUv/s2ND/7RcOv+0XDn/ - s1s5/7NbOf+yWzj/sVs4/7FaN/+wWjf/r1k3/69ZN/+uWTb/rVk2/61ZNv+tWDX/rFg1/6pYNf+nUCz/ - okYg/6FFH/+hRSD/oEUf/6BFH/+fRB//nkQe/51DHv+dQx7/nUMe/5xDHf+bQh3/m0Id/5pCHf+aQRz/ - mEEd/5hBHf+ZQR3/mEAd/5hBHf+XQR7/l0Id/5dCHf+WQh7/lDwX/6dpT//Hw8P/xcDA/8O9vv/Bvr7/ - wby8/8G7u//Bu7v/wLu6/7+6uv+/ubr/v7u7/8C7u//Au7v/wr29/9HOz/+dhnz/YCwW/39AJv+WTTD/ - nFAy/5xRMv+bUjP/m1I0/5xTNP+dUzX/nVM1/51UNv+dVDf/nVQ2/51UNv+eVDf/nlU4/59VOP+fVTj/ - n1Y5/6BWOf+gVjn/oFY5/59WOv+gVjr/oFY6/6FWOf+hVjr/oVY6/6FWOv+hVjr/oVY5/6FWOf+hVTn/ - oVY5/6FVOf+hVTn/oVU4/6FUOP+hVDj/oVQ3/6FUN/+hVDf/oVM2/6FTNv+hUzX/nFI3/4tQO/+AXk// - 4d/V/9fS0P+yq6v/8/Hx/4iIidkAAQFhAAAAKgAAABYAAAAIAAAAAgAAAAAAAAAAExQUHJyamsnY09T/ - vre3/97a1v/Szsv/k2ZT/6tnS/+2YkL/tV06/7VdOv+zXDr/s1s5/7NbOP+zWzj/slo4/7FaOP+xWjj/ - sFk3/7BZN/+uWTf/r1k2/65ZNv+tWTX/rFk2/6xYNf+oUS7/o0ci/6FGH/+hRR//oEUf/59FH/+fRR// - n0Qe/55EHv+dQx7/nUMe/5xCHv+cQh3/m0Id/5pBHP+aQR3/mUId/5lBHf+ZQh3/mUEd/5dCHv+YQh7/ - mEId/5hDHv+WQRz/m0oq/8G0sP/Cv7//wLu7/8C6uv+/urr/vri4/723t/+9uLf/vLe3/7y3t/+9t7f/ - vbe3/724uP+9uLj/wr6+/9HOz/+NcWX/YCsV/39BJv+WTS7/m1Ax/5tRMv+bUTL/m1Iy/5xSM/+cUjP/ - nFI0/5xTNf+dUzX/nFM2/51UNv+dVDb/nlQ3/55UN/+eVDf/nlU3/55UN/+eVTj/n1U4/59VOP+fVTj/ - n1U4/59VOP+gVTn/n1U4/6BVOP+gVTj/oFU4/6BVOP+gVTj/oFQ3/6BUN/+gVDf/oFQ3/6BTNv+gUzb/ - oFM2/6BTNv+fUjX/n1I1/59SNP+bUTb/jVA5/3lTRP/NycP/3dfT/7Kqq//q5+f/q6qs5xISEnEAAAAt - AAAAGQAAAAgAAAADAAAAAAAAAAAbHBwosK6v29jR0f+9t7j/4N3X/7+5tv+TYUz/r2pN/7ZhP/+2Xjr/ - tl46/7VdOv+0XTr/tFw5/7NcOf+zWzn/sls4/7JaOP+xWjj/sFk4/7BZN/+wWTf/rlk3/65ZNv+tWTb/ - rVk2/6xZN/+pUzD/pEok/6JFH/+hRSD/oUUg/6BFIP+fRR//n0Qf/55EH/+dRB//nUMe/5xDHv+bQx3/ - m0Id/5tCHf+aQhz/mUId/5pCHf+ZQR7/mUIe/5hBHv+YQh7/mEIe/5hCHv+WPhn/tJGD/8HAw/+9uLj/ - vLe3/7y3t/+7tbX/urS0/7q0tP+5tLP/ubS0/7mzs/+5s7P/urS0/7u1tf+7trX/xMDA/9XS0v+Qc2f/ - YCsU/39AJf+VTC7/m08w/5tPMf+bUDH/m1Ay/5tRMv+cUTP/nFIz/5xRNP+cUjT/nFI1/5xTNf+cUzX/ - nFM1/5xTNf+cUzX/nVM2/51TNv+eVDb/nlQ2/55UN/+eVDf/nlM3/55UNv+eVDf/n1Q3/59UN/+fVDb/ - nlM2/55TNv+eUzb/n1M2/55TNf+eUjX/nlI1/55SNf+eUjX/nlI0/59RNP+eUTP/nlEz/5tQNP+QUDf/ - dk08/7iyrv/e2tH/squr/+Tf3v/Cw8LyHyAgfAAAADAAAAAZAAAACQAAAAMAAAAAAAAAAB8fHzS8urrr - 2NLS/764uf/k4dn/uLCt/5dgSf+0bE//uGA9/7deOv+3Xjr/tl46/7ZdOv+0XTr/tFw5/7NcOf+zWzn/ - sls4/7JbOP+xWjj/sVk3/7FZN/+vWTf/r1k3/65ZNv+tWTb/rVk2/61ZNv+qVjL/pUsn/6JGIP+hRSD/ - oUYg/6FGH/+gRSD/n0Uf/59EH/+fRB7/nkQe/5xDHv+dQh3/nEMd/5tCHP+aQh3/mkId/5lCHf+aQR7/ - mUIe/5hCHv+YQh7/mUIe/5Y9F/+kY0j/vrm6/7q2tv+5tbX/ubOz/7izs/+3srL/t7Kx/7exsf+2sLD/ - tbCw/7WwsP+2sLD/uLKx/7mys/+5s7P/xcDB/9rX2P+Tdmr/XyoU/3s8I/+TSy3/mk8w/5tPMP+bTzD/ - mk8x/5pPMv+bUDL/m1Ey/5tQMv+bUjP/nFEz/5tSNP+bUjT/nFI0/5tSNP+bUjX/nFI0/5xTNf+cUzX/ - nVI1/51TNf+dUzX/nVM1/51TNf+dUjX/nVM1/51TNf+eUjX/nlI1/55SNf+eUjT/nlI0/55RNP+eUTT/ - nlE0/55RM/+eUTP/nVAz/51QMv+dUDL/m08y/5BPNv93Sjj/raaj/+Ld0/+zra7/3tja/8/NzvsmJiaG - AAAAMQAAABkAAAAKAAAAAwAAAAEAAAAAISEhQMG/v/rY09P/v7q6/+nl3f+yqab/m2BI/7dvUv+5YD7/ - uV87/7heOv+3Xjr/t106/7VdOv+1XTr/tFw5/7NcOv+zXDn/s1w5/7NbOP+yWzj/sls4/7FbOP+wWjj/ - r1k4/69ZN/+uWTb/rVk2/61ZNv+sVzb/p08q/6NHIf+iRiD/oUYg/6FFIP+gRSD/oEUf/59FH/+fRB7/ - nkQe/55DHv+dQx7/nEMd/5xCHf+bQh7/mkMd/5pDHv+aQh7/mUIf/5lDHv+ZQx7/mUId/5hAGv+0l4z/ - ubi6/7exsf+2sbH/tbCw/7Wvr/+0r6//tK6u/7Strf+0rq7/tK6u/7Ourv+0rq7/ta+w/7eysv+3sbL/ - xcHC/+De3/+iiYH/YCwW/3Q3Hv+PSCv/mU0u/5pOL/+ZTzD/mk8w/5lPMP+aUDD/mlAy/5tQMv+aUDL/ - m1Ay/5tRMv+bUTL/mlEz/5tRM/+bUDP/m1Ez/5tRNP+bUTP/m1E0/5xRNP+cUTT/nFEz/5xRM/+cUTT/ - nFE0/5xRNP+cUTP/nFEz/5xQM/+cUDP/nFAz/5xQMv+cUDL/nFAy/5xPMv+cTzH/nE8w/5xPMP+bTjH/ - kU41/3dHNP+ooJ3/4+DV/7Otrf/a09P/1NLS/yorKo4AAAAyAAAAGwAAAAoAAAADAAAAAQAAAAAjIyNJ - w8HB/9fS0v/Aurn/6+je/6+koP+eX0b/unBS/7lhPP+6Xzv/uF87/7hfO/+3Xjr/t146/7ZeOv+2Xjr/ - tV06/7VdOv+1XTr/tF06/7NcOf+yXDn/slw5/7FcOf+xWzj/sFs4/69aOP+uWjj/rlk3/65ZN/+tWTf/ - qVMw/6RJJP+iRSD/okUg/6JGIP+hRSD/n0Ug/59EH/+fRB//nkQf/55DHv+dQx7/nUMe/5xDHf+bQx7/ - mkMe/5tDHv+bQh//mkMe/5lCH/+ZQx//lz0X/6RgRP+4s7P/ta+w/7Surv+zrq7/s62t/7Ksrf+yraz/ - sqys/7GsrP+xrKz/says/7GsrP+zrKz/tK+v/7exsf+3sbH/xMDB/+bl5/+3pZ3/YzMf/24yGv+MRin/ - mEwt/5pNLv+aTi7/mU4v/5lOL/+aTy//mk8w/5pPMf+aTzD/mk8w/5pPMf+aUDH/mk8y/5pPMv+aUDL/ - mlAy/5pQMv+aTzH/mlAy/5pQMv+aUDL/mlAy/5tQMv+bUDH/m1Ay/5tQMv+bUDL/m1Ay/5tPMf+bTzH/ - m08x/5tPMf+bTzH/m04w/5tOMP+bTjD/m00v/5pOMP+RTTP/eEQw/6Oalv/m4tb/s62t/9bP0f/W1Nb/ - LS4ulAAAADQAAAAaAAAACgAAAAMAAAABAAAAACMjI07FwcH/2NLS/8C7vP/t6uD/raCb/6BfRf+9c1X/ - umI+/7tgO/+6YDv/uWA8/7hgO/+4Xzv/t187/7dfO/+3Xjv/t146/7ZdOv+1Xjr/tF06/7NdOv+zXDr/ - slw5/7JbOf+wWzn/sFs5/7BaOP+vWjj/rlo3/65ZN/+uWjj/q1Yz/6ZMJ/+jRiD/okYg/6JGIP+hRiD/ - oEUg/6BEIP+fRR//n0Qe/55EH/+dQx7/nUMe/51DHv+cQx7/m0Qe/5tCH/+bQh//mkMf/5pCH/+aQx3/ - mT4X/6+HeP+1tLf/sqys/7KsrP+xrKz/saur/7Gqqv+wq6v/sKqq/6+qqv+vqqr/sKqq/7Grq/+zrKz/ - tK+v/7exsf+3srL/w76//+nq6//Lv7v/bD8t/2kuFf+JRCf/l0ss/5pNLf+ZTS3/mU0u/5lOLv+ZTi7/ - mU4v/5lOL/+ZTi//mU4w/5lOMP+ZTy//mU8w/5lPMP+ZTzD/mE4w/5lOMP+ZTjD/mU4w/5lPMP+ZTzD/ - mU4x/5pPMP+aTzD/mk8x/5pOMP+aTjD/mk4v/5pOL/+aTjD/mk0v/5pNL/+aTS//mk0v/5pNL/+aTC7/ - mEwu/5FMMP92Qy//oZeT/+jk1v+0rK7/083N/9jX1/8uMDCXAAAANAAAABoAAAAKAAAAAwAAAAEAAAAA - IyMjUcXBwf/Y09L/wby8/+/s4f+rnZf/omBF/791V/+8Yj7/vGE9/7tgPf+7YD3/uWA8/7lgPP+4YDv/ - t187/7dfO/+3Xzv/t187/7ZeOv+1Xjr/tV06/7RdOv+zXTr/s1w5/7JcOf+xXDn/sVs4/7BaOP+vWjf/ - r1o4/65ZN/+uWTf/rVg2/6hRLf+kSCP/o0Uf/6NGIP+iRiD/oUYg/6BFIP+fRSD/n0Uf/59EH/+eRB// - nkMe/5xCHv+bRB7/m0Qe/5xDHv+bQx//m0Mf/5pDIP+ZQRv/nEck/7Gbk/+ysLL/sKur/7Crq/+wqqr/ - r6mq/6+pqf+wqan/r6mp/6+pqf+vqan/sKqq/7Grq/+zra3/tbCw/7izs/+6tbX/wr29/+jo6v/c1dL/ - dk08/2YrE/+IQyb/l0sr/5lMLP+YSyz/mEwt/5hMLf+YTC3/mE0u/5lNLv+ZTS3/mE0u/5hNLv+ZTS7/ - mU0v/5hNLv+YTi7/mE4u/5hNLv+YTS7/mE0u/5hNLv+YTS7/mE0v/5lNLv+YTS7/mE0v/5lNL/+ZTS7/ - mU0u/5hNLv+ZTC7/mUwu/5hMLf+YSy3/mEst/5hLLf+XSy3/kUsw/3ZCLP+elI//5+TV/7Osrf/Rysz/ - 2dbX/zAwMZkAAAA0AAAAGgAAAAoAAAADAAAAAQAAAAAjIyNSxcLC/9nU1P/Cvb7/7+zh/6qblf+kYEX/ - wHda/75iPv+8YT7/vGE+/7xhPf+6YDz/umA8/7pgPP+5YDz/uGA7/7dfO/+3Xzv/t187/7deOv+2Xjr/ - tV06/7RdOv+0XTr/tF05/7JcOf+yWzn/sVs4/7FbOP+wWzj/r1o3/65aN/+vWTf/rlo4/6tVM/+mTCf/ - o0Yg/6NGIP+iRiD/oUYg/6BFIP+gRR//oEUf/59EH/+fRB//nkQe/51EHv+cRB7/nEQe/5xDHv+cQx// - m0Mf/5tEIP+ZPxn/olY3/7Wppv+wrrD/r6mp/6+pqf+vqan/r6mp/6+pqf+uqan/rqmp/6+pqf+vqan/ - saqr/7KsrP+0rq7/t7Gx/7u2tv++uLn/w76+/+jn6P/j3tv/dk09/2YrEv+KQyb/l0oq/5hLKv+XSyv/ - mEsr/5hLLP+YTCv/l0ws/5dMLP+XTCz/mEwu/5hMLf+XTC3/l0wt/5hMLf+XTC3/l0wt/5dMLf+XSy3/ - l0wt/5dMLf+XTC3/l0wt/5dMLf+XTC3/l0wt/5hLLf+YSy3/mEst/5hLLP+YSyz/mEss/5dLLP+YSyz/ - mEst/5dLLP+RSzD/dUEs/52Tj//n49b/s66s/9DJyv/Y1tj/MDAxmQAAADMAAAAaAAAACgAAAAMAAAAA - AAAAACQjI1HGw8P/2tXU/8O+vv/u7eH/q5uV/6VhRv/CeFv/v2RB/75iPv+9Yj7/vWI+/7xhPf+7YT3/ - u2A9/7pgPf+5YDz/uGA8/7hgPP+3YDv/t147/7deO/+2Xjr/tl46/7RdOv+0XTr/tFw6/7NcOv+yXDr/ - sVs5/7FbOf+wWjj/sFo4/69aOP+uWTf/rlk4/61ZNv+pUi7/pUkk/6NFH/+iRiD/okUg/6FFIP+gRR// - oEUg/6BFH/+eRB//nkQe/51EHv+dRB//nEMf/51DH/+cQx//nEMg/5tEH/+ZPhf/pWFE/7Wrqf+wrrD/ - r6io/6+pqf+vqan/r6mp/66pqf+uqKj/rqmp/6+pqf+vqqr/says/7Surv+3sbH/u7W2/7+6uf/Cvb3/ - xsHA/+np6v/l4N7/dEs5/2gsE/+LRCb/l0op/5hKKf+XSir/mEsq/5dKKv+XSir/l0or/5dLK/+WSyz/ - lksr/5ZLK/+WSyv/l0sr/5dLLP+WSyv/lkss/5dLLP+XSyz/lkor/5ZLLP+WSiz/lkss/5ZLLP+WSyv/ - lkor/5ZKK/+WSir/lkor/5ZKK/+WSiv/l0or/5dLLP+XSyv/lksr/49LL/90QCv/nJKO/+Xh0v+yq6v/ - 0cvL/9jW1v8wMDCYAAAAMgAAABoAAAAKAAAAAwAAAAAAAAAAJCMkTMbDxP/c1tX/w76//+7s4v+tnZj/ - pmJH/8J6Xv/AZ0T/v2I//75iP/++Yj7/vWI+/7xhPf+7YT3/u2A9/7pgPf+6YDz/uWA8/7hgPP+4Xzv/ - t187/7dfO/+3Xzr/tl46/7VdOv+1XTr/s1w6/7NdOv+zXDr/sls5/7JbOf+xWzj/sFs4/69aOP+uWTf/ - rlk3/65aOP+sVzX/qE8s/6RII/+iRh//okYg/6JGIP+hRSD/oEUf/6BFH/+fRB//n0Qf/55EHv+dRB// - nUMf/5xDH/+dQx//nEMf/5tEIP+ZPBb/pWBD/7appv+ysLL/r6mp/6+pqf+vqan/rqmp/6+pqf+vqan/ - r6mp/6+qqv+yrKz/tK6u/7eysv+7tbX/v7m5/8O+vv/GwcH/ysXF//Dw8f/d1NH/ajso/28wFv+ORSX/ - l0ko/5dJKP+XSSj/lkkp/5ZJKf+XSSn/lkkp/5ZJKf+WSir/lkoq/5ZJKv+WSir/lUkq/5ZJKf+WSir/ - lkoq/5VJKv+VSSr/lUkq/5VJKf+VSSr/lUkq/5ZJKv+WSSr/lkkq/5ZKKv+WSir/lkor/5ZKK/+WSiv/ - lkor/5ZKK/+WSiv/jkou/3NBLf+elZH/5N7R/7KrrP/Sy8z/1tXW/y8vL5UAAAAxAAAAGQAAAAkAAAAD - AAAAAAAAAAAjIiNGx8TE/93X1//EwMD/7uvh/66fm/+nY0n/wntf/8JrSP/AY0D/v2I//79jP/++Yj7/ - vmE+/7xhPf+8YT3/vGA9/7tgPP+6YDz/umA8/7lgPP+4YDz/t187/7dfO/+3Xzr/tl46/7ZdOv+1Xjr/ - tF06/7RdOv+zXDr/s1w5/7JcOf+xWzn/sFs4/7BaOP+vWjj/rlo3/65aOP+tWTj/q1Yz/6dOKv+jSCL/ - okYg/6JGIP+hRiD/oEUf/6BFH/+fRB//n0Qe/55EHv+dRR//nUUf/51DH/+cRB//nEQg/5xEIP+aPhf/ - pFc3/7Oel/+zs7X/rqmp/6+pqf+vqan/r6mp/6+pqf+vqan/saur/7OtrP+1sLD/uLKy/7y2tv+/urr/ - w7+//8jDw//Lxsb/0MvL//f4+f/OwLv/YCwW/3c3G/+SRiX/l0gn/5ZIJ/+WSCf/lkgn/5ZJKP+WSSj/ - lkgo/5ZJKP+VSCj/lUgp/5VJKf+VSCj/lUgo/5VIKP+VSCj/lEgp/5VJKf+VSCj/lUgp/5RIKf+USCn/ - lEgp/5VIKf+VSCn/lUgp/5ZJKv+WSSr/lkkq/5ZJKv+WSir/lkor/5VKK/+NSi//ckIv/6CYlv/g3M3/ - sqqq/9TNz//U1NX/LC0tjwAAAC8AAAAYAAAACQAAAAMAAAAAAAAAACIiIjzGxMT43tra/8TAwP/t6d// - saSg/6dkSv/Ce2D/xG5N/8BkQP/AZD//wGM//79iP/+/Yj7/vmI+/71iPv+8YT3/u2E+/7tgPf+7YDz/ - umA8/7lgPP+4Xzv/t187/7dfO/+3Xzv/t186/7ZeOv+2XTr/tV06/7RdOv+zXDn/s1w6/7NcOf+yWzn/ - sFs4/7BbOP+vWzj/r1o3/65aN/+uWTf/rlk3/6tVMv+mTir/o0ci/6JFH/+hRR//oUYg/6FFH/+gRB// - n0Qf/59FH/+eRR//nUUf/55FIP+dRCD/nEQg/5xEIP+aPhj/oE0q/7KWi/+0tLf/r6mq/6+pqf+vqan/ - r6qq/7Crq/+xrKz/s66t/7awsP+5s7P/vLe3/8C7u//EwL//ycTE/83IyP/Pysv/19PT//7///+xmpH/ - XCQM/4I9IP+VRib/lkcm/5VHJv+VRyb/lkcm/5VIJ/+VRyf/lkgn/5VHJ/+URyf/lUcn/5VHJ/+VRyj/ - lUcn/5RHJ/+USCj/lEgn/5RIKP+VSCj/lEgo/5RIKP+USCj/lEgp/5RIKf+VSCn/lEgp/5VIKf+VSCn/ - lUgp/5ZJKv+WSSr/lEkr/4tJL/9wQzH/pJ2b/9vXzP+vqar/19HR/9PR0/8pKSuHAAAAKgAAABcAAAAI - AAAAAgAAAAAAAAAAHx8fMcK/wOnf29v/x8HB/+nm3v+6rKf/p2VL/8F5Xf/FclL/wWVA/8BlQP/AZD// - wGM//79jP/+/Yj//vmI+/71iPv+9Yj7/vGA9/7xgPf+7YDz/umA8/7lgPf+5YDz/uWA8/7hgPP+4Xzv/ - t187/7deO/+2XTr/tV47/7VdOv+0XTr/tFw6/7NcOf+yXDn/sVs5/7FbOP+wWzj/r1o3/69aOP+uWjj/ - rlk4/61ZN/+rVTL/pk4q/6NHIv+iRR//okUf/6FFIP+gRSD/n0Qf/59EH/+eRR//nkUf/55EIP+eRCD/ - nUQg/5xEIP+bQBr/nkgi/7OTh/+1s7X/r6qq/6+qqf+xq6v/squs/7Osrf+0r67/t7Kx/7q1tf++uLn/ - wry9/8XAwP/KxMX/zcnJ/9LNzf/Tz8//4t/f//v6+v+HY1T/ZykP/4xBIv+XRyT/lUcl/5VGJv+VRiX/ - lUcm/5VHJf+VRyb/lUcm/5RHJv+URib/lUcn/5VHJ/+VRyf/lEcn/5RHJ/+URyf/lEcn/5NHKP+USCf/ - lEcn/5RHKP+TSCf/k0go/5RIKf+USCj/lEgp/5RIKf+VSCn/lEgp/5VIKf+TSCr/iEgv/29EM/+po6H/ - 1tLJ/6+pqf/b1df/zcvM+yUmJn4AAAAmAAAAFAAAAAcAAAACAAAAAAAAAAAdHR0jtLO02eHd3f/HwsL/ - 5+Td/8O3s/+lZUv/wHhc/8h4WP/DZUH/wmVB/8FlQP/BZED/wWRA/8BjQP/AY0D/v2M//75jP/+9Yj// - vWI//7xiP/+7YT7/u2E+/7phPf+6YD3/umA9/7pfPf+5Xzz/uF88/7dfPP+2Xjv/tl47/7VeOv+1Xjr/ - s145/7NdOv+yXDn/slw5/7FcOf+wWzj/sFo4/69aOP+uWTf/rlk3/61aOP+tWTf/q1Uz/6dOK/+kSSP/ - oUYf/6FFH/+gRSD/oEUf/59EH/+eRSD/nkUf/55FIP+eRCD/nkQg/51FIf+bQhz/nkQe/7KOfv+0tLb/ - sKur/7KsrP+zra3/tK6v/7ewsf+6s7T/u7a2/7+7uv/Ev7//yMLD/8vHx//Pysr/087O/9bS0v/X0tL/ - 8fHy/+Lb1/9nNiD/eDYZ/5NFJP+WRiT/lkYk/5ZHJf+VRib/lUcm/5VHJv+VRyX/lEcm/5VGJv+VRyb/ - lEcm/5VHJv+URyb/lEcn/5RHJ/+URyf/lEcn/5RHJ/+URyf/lEcn/5NGJ/+TRyj/lEco/5RIKP+TSCj/ - lEgo/5RIKP+USCj/lEgp/5FIKv+FSC7/a0U1/7Svq//Vzsf/rqio/9/b2//CwcLxHR4dcwAAACMAAAAR - AAAABgAAAAEAAAAAAAAAAG9wcRqRkZLF49/f/8fCwv/l49//zczI/59mUf+/dVj/y31f/8RmQf/DZkL/ - w2ZB/8NlQf/CZUH/wWVB/8FlQP/AZUD/v2Q//75kQP++Yz//vWM//71iP/+8Yj7/u2I+/7phPf+6YD3/ - umA9/7pgPf+5Xzz/uF88/7dfPP+2Xjz/tl47/7ZeO/+1Xjv/tF46/7ReOf+zXTn/sl05/7FcOf+xXDn/ - sVs5/7BaOP+vWjf/rlo3/65ZN/+uWTj/rVk4/6tXNP+oUC3/pEol/6JGIP+hRR7/oEQf/59EH/+fRSD/ - nkUg/59FIP+eRCD/nkQg/51FIf+bQhz/nkMd/7KPgv+2tbj/sq2t/7Our/+1sbH/uLKz/7y2tf++ubn/ - wby8/8XAwP/KxcX/zcjI/9DLy//U0ND/2NPT/9nV1f/e2tr//////6mQhv9iJg3/iUAh/5ZGJf+WRiT/ - lkYk/5ZGJf+VRiX/lUYm/5VGJv+VRyb/lUcm/5VHJv+URyX/lEYl/5RHJv+URyb/lEYm/5RGJv+USCf/ - lEcn/5RHJ/+TRyb/k0cn/5NHJ/+TRyf/k0Ym/5NHJ/+TRyf/k0cn/5RIJ/+USCj/kEgq/4JGLf9pSjz/ - wsG7/9DLxv+spqb/6OPk/6inqeQQERFkAAAAHgAAAA4AAAAGAAAAAQAAAAAAAAAAMzMzD3Rzc67t6Oj/ - yMLC/+Pg3//f3tf/p25Y/75xUv/NhGf/xWdC/8NnQv/DZ0L/w2ZC/8NmQv/DZkL/wmVB/8FlQf+/ZUD/ - wGRA/79jQP+/Yz//vWM//71iP/+8Yj//vGI+/7thPv+6YD3/umA9/7pgPP+5Xz3/uF88/7hfPP+4Xjz/ - tl47/7ZeO/+1Xjv/tV46/7ReOf+zXTn/s105/7JcOf+xXDn/sVs5/7BbOf+wWzj/r1o3/65aN/+tWTf/ - rVk3/61ZN/+sVzX/qVMw/6VNKP+iRyL/oUQe/6BEHv+fRR//n0Ug/55FIP+fRSD/nkQg/55FIf+cQRz/ - n0Yi/7OWi/+2trj/trCw/7izs/+7tbX/vbi4/8C7u//Ev7//yMPD/8vGxv/Pysr/087O/9bR0f/Y1NT/ - 3NfX/9zX1//t6+v/7+vq/3BALf94NBj/lEUk/5dGJf+WRiT/lkYk/5ZGJP+WRST/lUYl/5VGJf+VRyb/ - lUYm/5VGJf+VRyb/lEcl/5RHJf+URib/lEYm/5RGJv+URyb/lEcm/5RHJv+TRyf/k0cn/5NHJ/+TRyb/ - k0cm/5JGJv+SRib/kkYn/5JGJ/+PRyn/fkUt/3RYTP/QzsX/ycTC/62npv/x7e3/hoWG1AAAAFMAAAAb - AAAADAAAAAQAAAABAAAAAAAAAAAdHh4BZWNjkvHs7P/Nycn/2tfV/+Pi2f+vdV7/umxP/9KMcf/Ia0f/ - xWdC/8RnQv/DZ0L/w2dC/8NmQv/DZUH/wmVB/8JlQf/BZED/wGRA/8BkQP++Yz//vmM//71iP/+8Yj// - vGI+/7xiPv+7YT3/umE9/7phPf+6YDz/uWA9/7lgPP+3Xjv/t187/7deO/+1Xjv/tV47/7ReOv+0Xjr/ - s106/7JdOf+xXTn/slw5/7FcOf+wWzn/sFs4/69aN/+tWjf/rVk3/61ZN/+tWTf/rFg2/6pVM/+nUC3/ - o0om/6FGIP+gRR//n0Uf/59FIP+fRSD/nkQg/55FIP+cQBr/oU4t/7ippf+6t7j/urW1/724uP/Aurv/ - w76+/8fCwv/Lxsb/zsnJ/9HMzP/V0ND/19PT/9rV1f/d2Nj/3tra/+Dc3P//////qpCG/2YmDP+NQSH/ - l0Yk/5ZGJP+WRyT/lkYk/5ZFJP+VRiT/lkYk/5VGJf+VRiX/lUYl/5VGJv+VRiX/lUcl/5RGJf+URiX/ - lEYl/5RGJv+TRib/k0cm/5NGJv+TRib/k0Ym/5NHJv+SRiX/k0Ym/5JGJv+SRib/kUYm/4xGKP94Qyz/ - fWVa/9DNwv/Burr/tKyu//Tw8P91dXXEAAAARAAAABcAAAALAAAABAAAAAAAAAAAAAAAAAAAAABaWVpu - 5uLi/9XQ0P/Uz8//7+7l/6mCdP+5aUr/0Ipw/8t1VP/GZ0P/xWdC/8RnQv/EZ0L/w2dC/8NmQv/DZkL/ - w2VB/8JmQf/BZUD/wGRB/8BkQP+/ZED/v2NA/75jP/+9Yz7/vWM+/7xhPv+7Yj7/umE+/7phPf+6YD3/ - umA9/7lgPf+4Xzz/t147/7deO/+2Xjv/tV46/7VeO/+0Xjr/tF06/7JeOf+zXTn/sVw5/7FcOf+xWzn/ - sVw5/7BbOP+vWjj/rlo4/65ZN/+tWDf/rFg2/6xZN/+rVzX/qVQy/6ZPK/+jSib/oEYh/59FH/+fRB// - n0Qg/55FIP+cPhf/rG1W/767vP++ubn/wbu7/8O+vv/GwcH/ycTE/83IyP/Qy8z/1M/P/9bS0v/Z1dX/ - 29fX/97a2f/g29v/39vb//Hw8f/j3Nr/aDMc/4I6HP+XRST/l0Yj/5ZFJP+WRiT/lkYk/5VGJP+WRiT/ - lUYk/5VFJP+URiT/lUYk/5RGJf+VRiX/lEYl/5RGJf+URiX/lEYl/5RGJf+TRiX/k0Ym/5NGJf+TRib/ - kkUl/5NFJf+SRSX/kkYm/5JGJf+RRib/ikYp/3E/Kv+GeHP/19PF/7mysv+7t7b/7uvr/19eXq0AAAA4 - AAAAEwAAAAkAAAADAAAAAAAAAAAAAAAAAAAAADIyMkvT0ND/4t7e/83IyP/39uz/tJ6W/7poSf/Nhmv/ - z4Fj/8dnQ//GZ0L/xmdC/8VnQv/FZ0L/xGdC/8NnQv/DZkL/w2ZC/8JmQf/CZUH/wWVA/8BlQf/AZED/ - v2Q//75jP/++Yz//vWM//7xiPv+7Yj7/umI+/7pgPf+6YT3/umA9/7lgPf+5Xzz/uF87/7dfO/+3Xjv/ - tl47/7VeO/+1Xjr/tF45/7RdOf+yXTn/sl05/7FcOf+xXDn/sVw5/7BbOf+vWjj/r1o4/65ZOP+tWTb/ - rVg2/61XNv+sWDb/rFg2/6pXNf+oVDL/pVEu/6JMKP+gSCT/n0Ug/55DHv+gRSH/u6Sc/8G/wf/Dvr7/ - xsHB/8nFxP/NyMj/0MvL/9POzv/W0dH/2NPT/9rX1//c2dn/39rb/+Hd3f/h3d3/5uPj//39/f+NaFn/ - cy0R/5VEIv+YRiT/l0Uj/5dFJP+XRSP/lkUk/5ZGJP+WRiT/lUYk/5ZGJP+VRST/lUUk/5RGJP+VRiX/ - lEYl/5RGJf+URSX/lEUl/5NGJf+TRiX/k0Yk/5NGJf+TRST/k0Uk/5JFJf+SRSX/kkUk/5BFJv+HRSr/ - bUAs/5yVk//Z1cj/r6mq/8vGxv/a2dn/NDQ0kQAAACgAAAATAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAA - MzU1K8G+v+rp5OT/y8fH//Ht5//AtbL/sWZJ/8yBZP/WkXb/yGhD/8hoQ//HZ0P/xmdC/8ZnQ//FZ0L/ - xGdC/8NnQv/DZ0L/w2ZC/8NmQv/CZUH/wWVB/8FlQP/AZUD/wGQ//79jQP+9Y0D/vmI+/71iPv+7Yj7/ - u2E+/7phPv+6YT3/umE9/7pgPf+5Xzz/uF88/7hfPP+3Xjv/t147/7VeOv+1Xjr/tF46/7ReOv+zXTr/ - sl05/7FdOf+xXDn/sVs5/7BcOf+wWzn/sFo4/69aOP+tWTf/rlg3/6xYNv+sWDb/rFg2/6tXNv+rWDb/ - qVc2/6hWM/+lUi//pE4r/55BHP+0gGz/ysnL/8fCwv/JxMT/y8bH/8/Kyv/Szc3/1NDQ/9fT0//a1tb/ - 3djY/97a2v/g3Nz/4t7e/+Pf3//i3t7//f///7aflv9pKA3/kEEg/5hFI/+XRSP/l0Uj/5dFI/+XRSP/ - lkUj/5ZFI/+WRiT/lkYk/5VGJP+VRSP/lUUk/5VGJP+URST/lEUk/5RGJf+URiT/lEUl/5RFJf+TRSX/ - k0Uk/5NFJP+SRSX/kkUk/5JFJP+SRST/jkUm/4JEKv9nRDT/rKmn/8/Jw/+spqX/3NbW/8vJyvkiIiN3 - AAAAHgAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAABoZ2gXlZOUxO7p6f/Lx8f/7Ojm/9bV0P+ybFD/ - yHhY/92jjf/Lbkv/yWlD/8hpQ//HaEP/x2dD/8ZnQv/FZ0L/xWdC/8RnQv/EZ0L/w2dC/8NmQv/CZkL/ - wmZB/8FlQf/BZUD/wGVA/79kQP+/Yz//vmM//71jP/+9Yj//vGE+/7tiPv+6YT7/umA9/7pgPf+5YD3/ - uV88/7hfPP+4Xjv/t147/7ZeO/+1Xjv/tV46/7ReOv+zXjn/s106/7JdOf+xXTn/sVw5/7FcOf+xWzn/ - sFs4/69bOP+vWjj/rlk3/61ZN/+tWDb/q1c2/6tXNv+rVzX/qlc2/6lYNv+pWDb/p1Iw/7NuVP/Y09P/ - 2NXV/9bT0//V0ND/1dDQ/9XQ0P/X0tL/2dXV/9vX1//e2dn/39vb/+Hd3f/i3t7/49/f/+Pe3v/z8/T/ - 3NLO/200HP+LPh3/mUYj/5dFI/+XRSP/l0Uj/5dFI/+WRSP/lkUj/5ZFI/+WRSP/lkUj/5ZFI/+VRiT/ - lUYk/5REJP+URCP/lEUk/5RFI/+URST/lEUj/5NFJP+TRST/kkUk/5JFJf+SRST/kkQk/5JFJP+MRCb/ - fEMq/3FTR//Ewbn/ycO//6ukpP/o5OX/paSl4A0NDlsAAAAXAAAADAAAAAQAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAABtbWyY9fLy/9HOzv/f29z/6urh/6l2Yv/HcE//256H/9OBYv/KaUT/yWlE/8lpRP/IaEP/ - x2hD/8ZoQ//FaEL/xWdC/8VnQv/EZ0L/w2ZC/8NmQv/DZkL/wmVB/8FlQf/BZUH/wGVA/8BkQP+/Y0D/ - vmM//71jP/+9Yz//vGI//7tiPv+7YT3/umE9/7phPf+6YD3/uV89/7lfPP+4Xzz/t148/7deO/+2Xjr/ - tl47/7ReOv+0Xjr/s145/7JdOv+yXTn/sVw5/7FcOf+xXDn/sFs5/7BbOf+vWjj/rlo4/61ZN/+sWDb/ - rFg2/6xXNv+rVzX/qlc2/6pXNv+pVTP/rF4+/9jOy//f3t7/4N3d/+Hd3f/i3t7/4t7e/+He3v/h3d3/ - 4Nzc/+Hd3f/h3d3/4t7e/+Pf3//k39//5N/f/+3q6//w7Or/cDsk/4U6Gv+YRSL/mUUi/5hFIv+XRSP/ - l0Qj/5ZEI/+XRSL/lkUj/5ZFI/+WRCP/lkQi/5ZFI/+VRSP/lUUj/5VFI/+URSP/k0Uj/5NEI/+TRCP/ - k0Qj/5JEI/+TRCP/kkUj/5JEI/+SRCP/kEMi/4pEJ/90Pyn/fWxm/8/Nvv+8tbT/ta2t//Pv8P9yc3TE - AAAAPwAAABQAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNTVWbl4uP/39vb/9PQ0P/5+O3/ - sZWL/8ZtS//Xk3n/2pl//8tqRf/KakX/yWlE/8hpRP/IaUP/x2hD/8doQ//GaEL/xWdC/8VnQv/DZ0L/ - w2dC/8NnQv/DZkL/w2VC/8JlQf/CZUH/wGRB/8BkQP/AY0D/vmRA/75jP/++Yj//vWI+/7xiPv+7YT7/ - u2E+/7thPv+6YT3/umA9/7lfPP+4Xzz/uV88/7hfO/+3Xjv/tl47/7VeO/+0Xjr/tF46/7NdOf+yXTn/ - sV05/7FcOf+xWzn/sVw5/7BbOf+vWjn/r1o4/65ZN/+tWDb/rVg2/6xXNf+rVzX/q1c1/6pVM/+sXT3/ - 2c3I/+Lh4v/i39//4+Dg/+Xi4v/m4+P/5+Tk/+jl5f/p5eX/6ebm/+nm5v/o5eX/6OTk/+fk5P/n4uL/ - 6ebm//f29v+EV0T/gDYX/5lFI/+ZRSP/mEUi/5hFIv+YRSL/l0Qi/5ZEIv+WRCL/lkQi/5ZDIv+VQyL/ - lUQi/5VEIv+VRCL/lUQi/5REIf+URCL/lEQj/5NEI/+TRCP/kkQk/5JFJP+TRCX/k0Ul/5NGJ/+RRyj/ - iUgu/25BLv+TjIv/08/C/7Grq//Evr//6ujq/1FRUZ4AAAAsAAAAEQAAAAgAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAISEhNMzKye7v7Oz/z8rL//Xy7v/IvLf/vGtM/9GGaf/ltaP/zW1I/8xqRf/LakX/ - ympE/8lpQ//JaUP/yWhD/8hoQ//HaEP/xmdD/8VnQv/FZ0L/xGdC/8RnQv/DZkL/w2ZC/8NmQf/CZUH/ - wWVB/8FkQf/AZED/v2M//79kP/++Yz//vWM//7xiP/+8YT7/u2E+/7phPf+6YD3/umA9/7pgPP+3Xzz/ - tl47/7hfO/+3Xjv/tl47/7VeO/+1Xjr/tF46/7NeOf+zXTn/sl05/7FcOf+xXDn/sVw5/7BbOf+wWzn/ - r1s4/65aN/+tWTf/rVk2/6xYNv+sVzX/q1Uz/61cO//bzsv/5eTl/+Ti4v/l4uL/5+Tk/+jl5f/o5eX/ - 6Obm/+rn5//q6Oj/6+jo/+vo6P/r6Oj/6+jo/+vo6P/s6en//P39/558bv+CPSD/n1Ex/59QMP+eTy// - nU8t/5xNLP+bTSz/m0wq/5tMKv+aSyr/mUsq/5lLKv+YSir/mUsq/5hKKv+YSir/mEsr/5hLLP+YTCz/ - mEwt/5hNLv+YTi7/mE8v/5lPMP+ZTzH/mFAx/5VQM/+GTTT/bk0//6+tqf/NyMH/q6Sk/97Z2v/S0NL9 - ICEgdQAAABoAAAAOAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkWpaOkvvXx8f/Szcz/ - 6+fn/+Pi3P+8b1P/zHZV/+W5p//XjG//zGpF/8xqRf/LakX/ympF/8ppRP/JaET/yWhE/8hpQ//HaEP/ - xmhD/8ZnQv/GZ0L/xGdC/8RnQv/DZ0L/w2ZC/8NmQv/CZUH/wmVB/8FkQf/AZEH/wGRA/79jP/++Yz// - vmM//71jP/+8Yj7/u2I+/7tiPv+6YDz/r1Ux/5pIKP+XSiz/plU2/7NcOv+3Xzv/t147/7ZeO/+2Xjv/ - tV46/7NeOv+zXjr/s106/7JcOf+xXDn/sVw5/7FcOf+xWzn/r1o5/69aOP+uWjj/rlk3/6xYNv+rVTL/ - rmFC/+DY1v/n5uf/5uPj/+fl5f/p5ub/6efn/+rn5//q6Oj/6ujo/+vp6f/r6en/7Onp/+vo6P/r6Oj/ - 6+jo/+zp6f/8/v//p4h7/4M+If+iVTX/o1Y1/6JVNf+iVTX/olU1/6FVNf+hVTT/oFQ0/6BUNP+gVDT/ - n1Q0/59UNP+dVDP/nVM0/51TNP+dUzT/nVM0/5xTM/+cUjL/nFIz/5tSMv+bUjL/mlAy/5lQMf+YUTH/ - k1A0/4FNOP98ZFn/xsG4/8K7uf+tpqb/7+rs/6imqN4JCQlUAAAAFgAAAAsAAAAEAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABlZWWB9vT0/9vZ1//a1tf/+fnv/6uKf//NdFL/36ON/+Sxnv/Ma0b/ - zGtF/8xqRf/MakX/y2pF/8pqRf/JaUT/yWlE/8hoRP/IaEP/x2hD/8dnQ//FZ0P/xWdC/8RnQv/EZ0L/ - w2ZC/8NmQf/DZUH/wmVB/8FlQf/AZUH/wGRA/8BkQP++Y0D/vmM//71jP/+9Yj//vGI9/7phP/+9iXT/ - spGD/4taR/98PCL/lUsu/6xaOP+2Xjv/uF88/7deO/+2Xjv/tV47/7ReOv+0Xjr/s1w6/7JcOf+xXDn/ - sVw5/7FcOf+wWzn/sFo5/69aOf+vWjj/rlo4/6lPK/+7hG7/6enq/+nm5v/p5ub/6ufn/+ro6P/r6Oj/ - 6+np/+zp6f/s6en/7Onp/+zp6f/s6en/7Orq/+vp6f/r6Oj/7Onp//z+//+nh3n/hD4h/6NUNP+kVTX/ - olU0/6FVNP+hVTT/oVU0/6FUNf+gUzT/n1Qz/59UM/+fVDP/n1Mz/55UM/+eVDL/nVMz/51SMv+dUjL/ - nFIy/5xRMf+cUTL/m1Ey/5tRMf+aUDH/mlAx/5hQMv+RUDX/d0o2/42FhP/Oyb3/tK2t/7y0tv/18vP/ - bGxttwAAADIAAAASAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OEHY19f8 - 7+vr/9HMzv/59/L/v7q4/8JvUP/XjXD/8trR/9J8Wv/MbEb/zGtG/8xqRv/MakX/zGpF/8pqRP/KakT/ - ymlE/8loRP/HaET/x2dD/8dnQ//GZ0P/xWdD/8VnQv/EZ0L/w2dC/8NmQv/DZkL/wmZC/8JmQf/BZUH/ - wWRA/8BkQP+/Yz//v2NA/71iP/+7XDb/y494/+fp7P/q7e7/3djX/62SiP93Pij/gz4j/55RMv+vWzn/ - tl87/7hfPP+2Xjv/tl47/7VeOv+0Xjr/s106/7JdOv+yXTn/sVw5/7FcOf+xWzn/sFs5/7BbOf+vWDb/ - pVMy/9W+tv/t7u//6ufn/+vp6f/r6Oj/7Orq/+zq6v/s6ur/7erq/+zq6v/s6en/7erq/+zp6f/s6en/ - 7Onp/+vo6P/s6en//f///6mIev+GQCH/o1Y1/6RVNf+iVDP/o1U0/6JVNP+iVTT/oVU0/6BUNP+fVDP/ - n1Mz/59TM/+fUzP/n1My/55UMv+eUzL/nVMy/51TMv+dUjL/nFEx/5xRMf+bUTH/m1Ex/5pRMf+aUDH/ - l1Az/4pPN/9xT0H/rKum/8rEvv+qpKT/2NTU/93c3f80NTWEAAAAHAAAAA4AAAAGAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmFaenqcD89/f/1M/P/+vn5//n59//snVd/9Z/XP/pvq7/ - 4qeR/85sRv/Oa0f/zGtG/8xrRf/MakX/y2pF/8tqRf/LakT/yWlE/8loRP/JaEP/yGhD/8doQ//GZ0P/ - xmdC/8VnQv/FZ0L/xGdC/8NnQv/DZkL/wmZC/8JmQf/BZUH/wWVA/8BkQf+/Y0D/v2RA/7taM//TpZT/ - 6u7x/+Xj4//n5+f/6urs/87Cvv+Ua1z/eDsj/4U/I/+cTzD/q1g4/7NdOv+2Xjv/tl86/7VfO/+1Xjv/ - tV46/7RdOv+zXTr/sl05/7JcOf+yXDr/rlg1/55KKP++l4f/7vDx/+zp6f/s6ur/7Orq/+zq6v/t6ur/ - 7evr/+3r6//t6+v/7evr/+3q6v/t6ur/7Onp/+zp6f/r6en/6+jo/+zp6v/7/P3/n3lp/41FJf+kVjT/ - pFY0/6NVM/+jVDP/olQz/6JUNP+iVDT/oVQ0/6BTM/+fUzP/n1Mz/59TM/+fUzP/n1Iy/55TMf+eUzH/ - nVMy/51TMf+dUjH/nFEx/5xRMf+cUTH/m1Ex/5lQMf+TTzP/gUw2/3xpYv/Hwbf/v7m3/62lpf/u6uv/ - rKqq3w0NDVUAAAAVAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - YmBifPr4+f/i39//2dbW//779P+snJf/zHhX/+CehP/x08j/0HBL/85sR//NbEb/zWtG/8xrRv/Ma0b/ - zGtF/8trRf/La0T/ympF/8lqRf/JaUT/yGlE/8doQ//HaET/xmhD/8VnQ//FZ0P/xWdC/8RnQ//DZkL/ - wmZC/8NlQf/CZUH/wWVB/8BkQP/AZED/vFs0/9SmlP/s8fL/6Obm/+fl5f/o5eX/6+vs/+no6P/GtbD/ - mXFj/31DLf9/OyD/jkQn/55PMf+nVTX/rVk3/7BcOf+yXDn/s105/7JdOf+vWzj/q1g1/59NK/+VSy3/ - uZOE/+zr6//u7e3/7erq/+3r6//t6+v/7evr/+3r6//t7Oz/7uzs/+7r6//t6+v/7erq/+3q6v/s6ur/ - 7Onp/+ro6P/p5+f/7evr//f29v+OXEj/lkoq/6dWNP+lVjT/pFY0/6NUM/+jVDP/olQz/6JUNP+iVDT/ - olQz/6BTMv+fUzP/n1My/59TMv+fUjL/n1Iy/55SMf+eUjH/nVIx/51SMf+cUTH/nFAx/5xRMf+cUDH/ - mVEy/49QNf90Szr/k4+Q/8zGu/+xq6r/vLW4//Lu8P9mZmewAAAALAAAABEAAAAIAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvMS811dPU8ff09P/X0tH/+/n4/9bV0f/EclT/ - 2IRl/+7Lv//gn4b/z25I/85tR//ObEf/zm1H/81sRv/NbEb/zGxG/8xsRv/La0b/ymtG/8pqRf/KakX/ - yWpF/8hpRP/IaUT/x2hE/8ZoRP/GaEP/xmhD/8VnQ//FZ0P/xGZC/8NmQv/DZUL/wmVB/8FlQf+9WzT/ - 16eV/+/z9f/r6Oj/6ujo/+ro6P/p5+f/6ujo/+/v8P/s7O3/183K/7GXjf+WbFz/gEgy/4JEK/+EQCT/ - hj0g/4pBI/+NQiP/jEEi/41EJ/+NSzD/oHBc/8+9t//x8vP/7+7v/+7s7P/u7Oz/7uzs/+7s7P/u7Oz/ - 7+zs/+/s7P/u7Oz/7uzs/+7r6//t6ur/7erq/+zp6f/r6en/6ufn/+jm5v/x7/D/8Ozr/4VJMf+dTy// - p1Y0/6VVNP+kVTT/pVUy/6RUMv+jVDP/o1Qz/6JUM/+iVDP/oVMy/6BTMf+gUjL/n1Ix/59SMv+fUjL/ - nlIx/55SMf+dUjH/nVIx/5xSMf+dUDH/nFAx/5tQMf+WUDT/iFA5/3lbT/+5tq3/xb66/6miov/b1Nb/ - 0M/P/SYnJ3UAAAAXAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAA4ODwSNjY2o/////+Th3//s6ur//f32/7OOgv/YgmL/4aWN//DPwv/Qb0r/z25I/89uSP/Pbkj/ - z21I/85tSP/NbEf/zWxH/8xsR//La0b/y2pF/8tqRf/KakX/yWpE/8lqRf/IaUT/x2lE/8ZoRP/GaET/ - xmhD/8ZoQ//EZ0L/xGZC/8RmQv/DZUL/wmVC/75bNf/YqJf/8fX4/+3r6//t6+v/7Orq/+zq6v/s6ur/ - 7Onp/+zq6v/v7+//8vT1/+3r7P/f2dj/z8G8/7ukm/+ukIX/qop+/6uJff+tjoL/v6ed/9rPzP/u7u7/ - 9PT2/+/t7f/v7Oz/7+3t/+/t7f/v7e3/7+3t/+/t7f/v7e3/7+3t/+7s7P/u7Oz/7evr/+3q6v/s6ur/ - 6+np/+vn5//q5+f/5+Tk//f4+f/c0Mv/ikgs/6NSMf+nVTX/pVU0/6VVNP+lVTT/pVQz/6VUMv+kVDL/ - o1Qy/6NUMv+iVDL/oVMy/6BSMf+gUjH/n1Ix/59SMv+fUjL/n1Iw/55SMf+dUjD/nVIx/5xRMf+cUDD/ - mlAy/5JRNv98TDn/jIOB/8vFt/+0rq//sqqr/+7q6/+Hh4nKAAAAPgAAABMAAAAJAAAAAwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFQUVvv7e//+vj4/+Xj4v////// - zMjE/8l2V//cimr/78zA/+GhiP/Qbkn/z25J/89uSP/Pbkj/z25I/85tR//ObUf/zmxH/8xrRv/MbEb/ - y2xG/8trRv/La0b/yWpF/8lqRP/IakT/yGlE/8dpRP/GaUT/xmhD/8ZoQ//FZ0L/xWZC/8NnQv/DZkL/ - v1s2/9mqmP/z9/r/7+3t/+7s7P/u6+v/7uzs/+7s7P/u7Oz/7uzs/+7r6//u7Oz/7u3t//Dw8P/z8/T/ - 9ff4//b4+v/19vf/9Pb3//b4+v/3+Pn/8/P0//Hv8P/w7u7/8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/ - 8O3t/+/t7f/v7e3/7uzs/+7s7P/t6+v/7erq/+zp6f/r6Oj/6ufn/+jm5v/n5OT//////7qbjv+NQCD/ - qFU0/6hVNP+nVTT/plU0/6VVNP+lVTT/pVQz/6VTM/+kVDL/pFQy/6NUMf+jVDL/oVMx/6BSMf+gUjH/ - oFIx/6BSMf+fUTD/n1Ew/55RMP+eUTD/nVEw/5tQMP+YUTP/jFI5/3dXSP+wrab/yMC7/6qkpP/Lxsf/ - 4t/g/0FAQI0AAAAZAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAKSgpFKqrqsD/////7uzs//r5+f/8/fb/sIt+/96MbP/io4v/8dPH/9R2Uv/Qbkn/ - 0G5I/9BuSf/Pbkj/z21I/89tR//ObEf/zWxH/81sRv/MbEb/zGxG/8trRv/Kakb/ympF/8lqRf/JakT/ - yGlE/8hpRP/GaET/xmhD/8ZoQ//GZ0P/xWdC/8RnQv/AXTb/26uZ//T4+//w7u7/8O7u//Du7v/w7u7/ - 8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/8e/v//Hv7//x7+//8e/v//Hv7//x7+// - 8e/v//Hv7//x7+//8e/v//Hv7//x7+//8e7u//Du7v/w7u7/8O3t/+7s7P/u7Oz/7uvr/+3q6v/s6ur/ - 6+jo/+rn5//p5ub/5uPj/+zq6v/7+/v/m2dS/5xNKv+pVzT/qFY0/6dVNP+nVTT/p1U0/6ZVNP+lVDP/ - pVMz/6RTM/+kVDP/pFMy/6RTMf+jUzH/olMx/6FSMf+gUjH/oFIx/59RMf+fUTH/n1Ew/59RMP+eUTD/ - m1Ax/5RSNf9/TDb/in9+/8fEtv+3sbH/rqen/+nl4/+mpqbeBwcHSgAAABQAAAAKAAAAAwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcZ/z9/v////// - 8O/v///////LxsT/0X9g/9+Ob//swrP/5auV/9JvSv/Sbkn/0W5J/9BuSf/Pbkj/z25I/89tSP/ObUj/ - zm1H/81sRv/MbEf/zGxH/8trRv/La0b/ympF/8pqRf/JakX/yWlE/8dpRP/HaUT/xmhE/8ZoRP/GZ0P/ - xmhC/8FdNv/crJr/9fr9//Hv7//x7+//8e/v//Hv7//x7+//8e/v//Hv7//x7+//8e/v//Hw8P/x8PD/ - 8u/v//Lv7//y8PD/8vDw//Lw8P/y8PD/8vDw//Lw8P/y8PD/8vDw//Lw8P/y8PD/8fDw//Hv7//x7u7/ - 8O7u/+/t7f/v7e3/7+zs/+7s7P/s6+v/7Orq/+vp6f/q5+f/6efn/+jl5f/l4uH/+fr7/93Oyf+QRyn/ - p1Uy/6lXNP+pVjT/qFY0/6hWM/+nVjT/p1U0/6ZVM/+lVDL/pVMy/6VUM/+kUzP/o1Mz/6RTMv+jUzH/ - oVIx/6BSMf+gUjH/oFIx/6BSMP+fUTD/n1Ew/51RMP+aUjP/jlE3/3pWR/+wrKb/xb+7/6ulpf/IwsL/ - 5+Xm/1JSVJ0AAAAcAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDIYtLS2yf/////5+Pj///////399/+tl5H/3JF1/+GZfv/14Nf/ - 2odo/9JuSv/Sbkn/0W5J/9FuSP/Qbkn/z25I/89tSP/PbUj/zm1I/85tSP/ObEf/zWxG/8xsRv/La0b/ - ymtG/8prRf/JakX/yWpF/8hqRf/IaUT/x2hE/8ZoRP/GaEP/wl02/92um//3+/7/8vDw//Lx8f/y8fH/ - 8vDw//Lx8f/y8fH/8vHx//Lx8f/y8fH/8/Hx//Px8f/z8vL/8/Ly//Px8f/z8fH/8/Hx//Px8f/y8vL/ - 8/Hx//Px8f/z8fH/8vHx//Lw8P/x8PD/8e/v//Hv7//w7u7/7+3t/+/t7f/u7Oz/7evr/+zq6v/r6en/ - 6ujo/+nm5v/n5OT/5eLi/+ro6P/+////rX5r/55KKP+rVzX/qVY0/6lWNP+pVjT/qFY0/6dWM/+nVjP/ - p1Uz/6ZVM/+lVDL/pVMy/6VTMv+kUzL/o1My/6NSMv+iUjH/oVIx/6BSMf+gUjH/oFIx/59RMP+gUS// - nVEw/5ZTNv9+TDb/jIWG/8nCtf+3sLD/rqam/+nj4/+vrrHjDA0NUAAAABMAAAAKAAAAAwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcXF1l - ///////////6/Pv//////9fX0/++hG7/5pd5/+ewnP/svq3/029K/9JvSv/Sb0r/0W9J/9FuSf/Qbkn/ - z21J/89uSP/Pbkj/z21I/85tSP/ObEf/zWxH/81sR//Ma0b/y2tG/8prRv/KakX/yWpF/8hqRf/IaUT/ - x2lE/8dpRP/DXjf/3q+d//j9///z8vL/8/Ly//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/ - 9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/z8vL/8/Ly//Px8f/y8fH/8vDw//Lw8P/x7+// - 8e/v//Du7v/v7e3/7+zs/+3r6//s6ur/7Onp/+ro6P/p5ub/5+Xl/+Xj4//j4OD//P3+/9fCuf+YSir/ - rFY0/6xYNv+qVzT/qVY0/6lWM/+pVjP/qVYz/6hWM/+mVjP/p1Y0/6VVMv+lVDL/pVMy/6VTMv+kUzL/ - pFIy/6NSMv+iUjH/oVIx/6BSMf+hUjH/oFEx/59RMf+aUjT/jE80/3xhWP+5tav/wru6/6qjpP/HwsH/ - 5eTk/05PTpgAAAAYAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4uLxC1tLXF/////////////////////7qqpf/Yj3T/ - 4JFz//DNwP/joYj/029K/9NvSv/Sb0r/0m5J/9FuSf/Rbkn/0G5I/89uSP/Pbkj/z21I/89tSP/ObEf/ - zWxG/81sRv/Ma0b/y2xG/8trRv/Ka0b/yWpF/8lqRf/IaUX/x2lE/8NfN//fr53/+f7///Tz8//08/P/ - 9PPz//Tz8//18/P/9fPz//Xz8//18/P/9fPz//Xz8//18/P/9PPz//Xz8//08/P/9PPz//Tz8//08/P/ - 9PLy//Ty8v/08vL/8/Hx//Px8f/y8PD/8vDw//Hv7//w7u7/8O7u/+/t7f/t7Oz/7Orq/+vp6f/q6Oj/ - 6efn/+fl5f/l4+P/4t/f//T09f/y7ez/o2FG/6dRL/+tWDf/rVg2/6xYNv+qWDT/qlc0/6lWNP+pVjT/ - qVYz/6lWM/+oVjP/plUz/6ZVMv+lVDL/pFQy/6VUMf+lUzH/pFMy/6NSMf+jUjH/olIx/6FSMf+gUjH/ - nVEy/5VSNv9+Tjr/mpaV/8nDtv+xrK3/r6qq/+rk5f+lo6TdCAcHSAAAABIAAAAJAAAAAwAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAF9eX17/////////////////////7O7n/7KOgv/pnYH/4puA//Ta0P/bhmb/1G9K/9RvSv/Tb0r/ - 0m9K/9JvSf/Rbkn/0W5I/89uSP/Pbkj/z25I/89tSP/ObUj/zm1H/81sR//NbEb/y2xH/8trRv/Ka0b/ - ympG/8pqRf/IaUX/xV84/+Gwnv/6////9fPz//Xz8//19PT/9fT0//X09P/19PT/9vPz//b09P/19PT/ - 9fT0//X09P/19PT/9fT0//X09P/18/P/9fPz//Tz8//08/P/9PLy//Ty8v/z8vL/8/Hx//Lw8P/y7+// - 8e/v//Du7v/v7e3/7evr/+3q6v/s6ur/6ujo/+nn5//n5eX/5eLi/+Lf3//v7u///Pv7/7WAa/+kTSr/ - r1o4/61ZN/+tWTf/rVg3/6xYNf+rWDT/qlc0/6lWNP+pVjT/qVY0/6lWM/+oVjP/p1Uy/6ZUMv+mVDL/ - pVQy/6VUMf+lVDH/pFMx/6NSMf+iUjH/olIx/6BRMf+bUzb/iEoy/4R1dP/CvrD/vLa1/6mjo//Qycr/ - 4+Dh/0BBQokAAAAXAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fBJ6goKf///////////////////// - z83K/8WLd//nm37/562W/+3Csv/VcUr/1XBK/9RvSv/Tb0r/029K/9JuSv/Sb0n/0W5J/9BuSf/Qbkj/ - z25I/89uSP/PbUj/zm1I/85sR//NbEf/zWxG/8xrRv/Ka0b/y2tG/8pqRf/GYDn/4KuW//v////18/P/ - 9fPz//b09P/29PT/9vT0//b19f/29fX/9vT0//b09P/29fX/9fX1//X09P/19PT/9fT0//X09P/19PT/ - 9fPz//Tz8//08/P/9PLy//Py8v/y8fH/8vDw//Hv7//w7u7/7+3t/+7s7P/t6+v/7Orq/+ro6P/p5+f/ - 6OXl/+Xj4//j4eH/8fLz//z7+/++jHf/pU8r/7FbOP+wWjf/rlo4/65aN/+uWDf/rVg2/61YNv+rWDX/ - qlc0/6pXNP+pVzT/qVY0/6lWNP+oVjL/p1Qy/6dTMv+mVDH/pVQx/6VUMf+lUzH/pFMx/6JSMf+hUjL/ - nlM1/5NQNf9+XVH/sa6n/8a/uv+rpab/t7Ky/+/r6/+Ojo/IAAAAMAAAABAAAAAIAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAANDQ0NOHh4e7/////////////////////v7Cr/92UeP/hj3H/7cCv/+iumP/VcUr/ - 1HBK/9RwSv/TcEr/0nBK/9NvSv/Sbkr/0W5J/9BuSf/Pbkj/z25I/89uSP/Pbkj/z21H/85sR//ObEf/ - zWxG/8xsR//Ma0b/y2tF/8lmP//Thmf/+PLv//r8/v/29PT/9vT0//b19f/29fX/9vX1//b19f/29fX/ - 9vX1//b19f/29fX/9vX1//b19f/29PT/9fT0//X09P/18/P/9PPz//Tz8//z8vL/8/Hx//Lx8f/y8PD/ - 8e/v//Dt7f/u7e3/7evr/+zq6v/r6en/6efn/+jl5f/k4uL/5+Xl//j7/P/38vH/v4hx/6hQLP+yWzj/ - sVs4/7FbOP+wWzj/r1o4/65aN/+tWTf/rVk3/6xYNv+sWDX/rFg1/6pYNP+qVjX/qVY0/6lWNP+oVTL/ - qFQy/6dUMv+mVDH/pVMx/6VTMf+lUzH/o1Iw/6BTMv+YUzf/gk45/5uVlP/IwrX/sqyu/6ulpf/f2tr/ - zMvL+SMjJGkAAAAUAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4eJev////////// - ///////////w8ez/sp6Z/+GehP/hkXP/8tLF/+Oeg//VcUr/1XFK/9VwSv/UcEr/1G9K/9JvSv/Sbkr/ - 0m5K/9BuSf/Qbkn/z25I/89uSP/Pbkj/z21H/85tSP/ObUf/zWxH/81sR//La0b/y2tG/8pnQf/bmoH/ - +fLw//3////5+vv/9vX1//b19f/29fX/9/X1//f19f/29fX/9vX1//b19f/29fX/9vX1//b09P/29PT/ - 9fT0//Xz8//08/P/9PLy//Py8v/z8fH/8vDw//Hv7//w7u7/7+3t/+7r6//s6ur/6+np/+nn5//n5OT/ - 6OXl//Dx8v/9////6tnR/7p3XP+sUSz/tF05/7RcOv+yXDn/sVw5/7FbOP+wWzn/r1s3/69aOP+tWTf/ - rVg3/61ZNf+sWDX/q1g1/6tYNf+rVzX/qlc0/6lWNP+oVTP/p1Uy/6dUMv+nVDH/plQx/6VUMf+jUzL/ - nVQ3/4lNNP+KgIH/wr+v/721tP+po6P/xsLC/+rn5/9gYGCiAAAAGgAAAA4AAAAGAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAA6OjsNra2vwP///////////fz7///////k5OD/xpSB/+ijiP/imHv/ - 9d3U/+CRc//WcUv/1XFK/9VwSv/UcEr/1G9K/9NvSv/Sbkr/0m9J/9FvSf/Rbkn/0G5J/9BuSf/Pbkj/ - z21I/89tSP/ObEf/zmxH/8xsR//MbEf/y2tF/8llPv/RfVz/6MCx//n08//+////+/3///j4+P/39vb/ - 9/X1//b19f/39fX/9vX1//b19f/29fX/9vX1//X09P/19PT/9fPz//Tz8//z8vL/8vLy//Lw8P/x8PD/ - 8O7u/+/t7f/u7Oz/7Orq/+ro6P/p5+f/6+nq//P09f/9////9e3q/9Kkkv+yXTv/slcy/7VeO/+1XTr/ - tFw6/7NcOv+yXDr/sVw5/7FbOf+xWzn/sFo4/69aN/+uWjf/rlk2/61ZNv+tWTb/rFg1/6tYNf+rVzX/ - qlc0/6pXNP+pVTP/qFUy/6dVMv+nVDL/pVQz/6BVN/+RTjL/hmtk/7m2rP/Dvbj/q6Wl/7ewsP/r6Oj/ - np2e0wQEBDoAAAAQAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NTU4 - 5OTk7f/////+/f3//fv8///////R0M//xZWF/+Wghf/jnoP/89PH/92IaP/WcUv/1nFK/9VxSv/VcEr/ - 1G9K/9NvSv/Tb0r/0m9K/9FuSf/Rbkn/0G5J/9BuSf/Pbkj/z25I/89uSP/PbUf/zm1H/81sR//NbEf/ - zGtG/8lmQP/IYz3/0Hxb/+Gumv/z4dr//Pr5///////8////+fr7//j3+P/39fX/9vX1//b09P/19PT/ - 9fT0//X09P/08/P/9PHx//Px8f/y8PD/8e/v//Du7v/v7e3/7uzs/+7t7f/w7/D/9PX2//r////8/f7/ - 8eTf/9SmlP+7a0z/tFUx/7ddOf+3Xzz/tl87/7ZeOv+1Xjr/tF06/7RdOv+zXDr/sls5/7JbOf+xWzn/ - sVs5/7BaOP+vWTf/rlk3/65ZNv+tWTX/rFk1/6xXNf+rWDX/q1g0/6pWNP+pVjP/qFYy/6dVM/+jVjb/ - l1M2/4NiV/+sqqT/x8G4/6+pqv+upaf/4t3d/9DOz/ghIiFiAAAAEwAAAAoAAAAEAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+fn9s+fn5///////29fb//Pv8///////Oycj/ - 25J3/+Wafv/lo4r/8cy+/9yCYf/Xckv/1nFL/9VwSv/VcEr/1G9K/9RvSv/Tb0r/029J/9JuSv/Sbkn/ - 0W5J/9BuSP/Qbkj/0G5I/89uSP/Pbkf/zm1H/81sR//NbEf/zGxH/8xrRv/KZ0H/x2I6/8pqRf/Thmj/ - 4rGe/+/Yz//48u///Pz8//7////+/////f////r9/v/5+/z/+Pr7//j6+v/4+fr/9/n6//f4+f/3+fr/ - +Pz9//v////8////+/7///n19P/y5eH/4Lqs/8uMc/+6Y0H/tVYx/7ldOf+6YD3/uV88/7hfPP+4Xzz/ - t187/7ZeOv+1XTr/tF06/7RcOv+zXTr/s1w5/7JcOf+yWzn/sVs4/7BbOP+wWTf/r1k2/65ZNv+tWTX/ - rVk2/6xYNf+sWDX/q1c0/6pWNP+pVjX/pVc3/5tVN/+LV0H/o6Cg/8fBs/+0rq//q6Sk/9LMzf/i4eL/ - U1RUlAAAABUAAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACMjI2Y///////////w7+3//v3+/////P/Rvrj/4Jh8/+SZfP/mp47/78i5/9yDYf/Xckv/ - 1nFL/9ZxS//WcEr/1HBK/9RwSv/Ub0r/029K/9JuSv/Sbkr/0m9J/9BuSf/Qbkn/0G5I/89uSP/PbUj/ - z21I/85tR//NbEf/zWxH/8xsR//Ma0b/y2lE/8llP//GYDj/yGpF/8txT//UjnP/3quX/+GwnP/ow7X/ - 8N3V//To4//05+P/8+fi//Pn4v/z5+L/9Ojj//Hh2//r0cj/4LOi/9ytmv/UmYP/w3JR/75mQ/+5WjX/ - uVs1/7tgO/+7YT3/umE9/7phPf+6YDz/ul89/7lfPP+4Xzz/t187/7deOv+2Xjr/tV06/7VdOv+0XTr/ - s1w6/7NcOf+yXDn/sVw5/7FbOP+vWTf/r1k3/69ZN/+tWTb/rlk2/6xZNv+sWDX/qlc1/6ZXOP+fVzn/ - jVQ9/52Vlf/JwrP/uLKx/6miov/CvLz/8u/v/39/f7oAAAAhAAAADgAAAAYAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTFBO7u7zC//////v6+//r6er/ - /vz9//v79P/KuLL/4p6E/+SZff/np47/8cy+/92JaP/Xckv/13FL/9dxS//WcEv/1XBK/9RwSv/UcEr/ - 1HBK/9NvSv/Sb0r/0m5J/9FvSf/Qbkn/0G5J/9BuSP/PbUj/z21I/89tR//ObEf/zWxH/81rR//MbEb/ - zGtG/8trRf/KaUT/yGhC/8ZkPv/FYDn/xF03/8RjPP/Gakb/yG5K/8htSv/HbEn/xmxJ/8ZrSf/FbEn/ - w2lF/8FkQP+9WzT/vFoz/71cNv++YTv/vmI9/75jPv+9Yj//vWI//7xiPv+7YT7/umE+/7pgPf+6YD3/ - umA9/7lfPP+4YDz/t187/7deOv+3Xjr/tl06/7RdOv+0XTr/tF06/7NcOv+yXDn/sVs5/7FaOP+xWTf/ - sFo3/69ZNv+uWTb/rVk2/6xZN/+oWTj/oVc5/5FVPP+ZkZD/xb6v/7u1tP+ro6P/urS0/+vm5/+gn5/U - CQoJPAAAAA8AAAAHAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAACcnKCfQ0NDX//////Px8v/n5OP//Pz8//T07//Jt7D/4p6E/+Sbfv/lpIr/ - 89PH/+CSc//XcUv/13JL/9dxS//WcEv/1XFK/9VwSv/UcEr/1HBK/9NvSv/Sb0r/0m9K/9JuSv/Rbkn/ - 0G5J/89uSP/Pbkn/z25I/89tR//ObUf/zWxH/81sRv/NbEf/zGxH/8trRv/La0X/ymtF/8lqRf/JakX/ - yGhD/8dnQv/GZkH/xmZB/8VlQP/FZUD/xGVA/8RlP//DZT//wmVA/8NlQv/CZUH/wWVB/8FlQP/AZED/ - v2Q//79jQP++Yj//vWM//7xiPv+7YT7/u2E+/7phPf+6YT3/umA9/7lgPf+4YDz/t147/7deO/+2Xzr/ - tl46/7VdOv+0XTr/tFw6/7RcOv+zXDr/sls4/7FaN/+wWjj/sFo3/69ZNv+uWTf/qlo6/6JYOv+TVT3/ - l46O/8O8rP+9t7X/q6Wl/7ewsP/o5OT/u7q66BcWFlAAAAARAAAACQAAAAMAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5NTkHm5ufv - /////+zq6v/g3t///fz6//Ly7f/MubP/5J6E/+megf/knoP/9t3U/+Sfg//Yckv/13JL/9dyS//XcUv/ - 1nFL/9ZwS//VcEr/1XBK/9RwSv/Tb0r/0m9K/9JuSf/Rbkn/0W5I/9BuSf/Pbkn/z25I/89tSP/PbUj/ - zmxH/81tR//MbEf/zWtG/8trRv/La0b/ympG/8pqRf/JakX/yWlF/8hpRP/HaUT/xmhD/8ZoQ//GaEP/ - xmhD/8VnQv/DZkL/w2ZC/8NlQv/CZkH/wmVB/8FkQf/AZEH/wGRA/75jP/++Yz//vWM+/71jP/+8Yj// - u2E9/7phPf+6YT3/umE9/7pgPf+4Xzv/t187/7dfO/+3Xjr/t146/7ZeOv+1XTr/tF06/7NdOv+zXDn/ - sls4/7JaOP+xWjj/r1o4/6xbO/+lVzj/lVY8/5qRkf/BvKv/v7i2/6ulpf+yqqv/5eHh/9TS0vguLi9r - AAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRiY1fn5uf5/////+bk4//b2Nn/9/X1//b18f/Rwbz/ - zZ2M/+mghf/jlnn/89LG/+mvmf/Xckv/13JL/9dyTP/Xckv/13FL/9ZxSv/VcEr/1HBK/9RwSv/Tb0r/ - 029K/9JvSf/Sb0r/0W5J/9BuSP/Qbkj/z25J/89uSP/PbUj/zm1H/85tR//ObEf/zWxH/8xsRv/La0b/ - ymtF/8pqRv/KakX/yWlE/8dpRf/HaUT/x2lD/8ZoQ//GaEP/xmdD/8VnQ//EZ0L/w2ZC/8NmQv/DZkH/ - wmVB/8FkQf/BZUH/wGRA/8BkQP++ZED/vmM//71jP/+9Yj7/vGI+/7thPf+6YT7/umE9/7lgPf+5YDv/ - uGA7/7dfO/+3Xjv/t186/7ZeOv+2XTr/tV06/7RdOv+zWzn/s1s4/7FbOf+uXDz/pVY3/5JjT/+impr/ - w72s/763tv+spab/squr/+Da2v/Z19f8Q0JDfAAAABIAAAAKAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAGhnaGno6On7/////+De3f/U0dD/8O7t//z79f/Pzs7/y52L/+yliv/jknP/7sCw/+7Ds//eiWj/ - 13JM/9dyS//Xckv/13FL/9ZwSv/VcEr/1XFK/9VwSv/UcEr/029K/9NvSv/Sb0r/0W5J/9FuSf/Rbkn/ - z25I/89uSP/Pbkj/z25I/89tR//ObUf/zWxH/8xrR//Ma0f/y2tG/8prRf/Ka0X/yWlF/8hpRf/IaUT/ - yGlE/8dpQ//GaUP/xmhD/8VnQv/EZ0L/w2dC/8NmQv/DZkL/wmVB/8JlQf/BZUH/wGRA/79kQP+/Yz// - v2NA/75jP/+9Yz//vGI//7thPv+7Yj7/u2E+/7pgPP+5YDv/uGA7/7dfO/+3Xzr/t186/7deO/+2Xjr/ - tV46/7NdOv+yXTr/r109/6VUNP+Valr/pqam/8fArv+9tbT/rKWm/7KrrP/f2tn/3Nvb/0pKS4UAAAAT - AAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhoaWvl5Ob5/////93a2P/Py8v/ - 7err////+//X1NL/wKCV/+Gqlf/kkXH/6ayV//Xb0f/lo4n/13JM/9dyS//Xckv/13FL/9ZxS//VcUv/ - 1nFK/9VwSv/Ub0r/029K/9NvSv/Sb0r/0m5K/9JuSf/Rbkn/0G5J/9BuSP/Pbkj/z25I/89tR//ObUf/ - zWxH/81sR//MbEb/y2tG/8prRv/La0X/ympF/8lqRf/JaUX/yGlE/8dpRP/HaUT/xmdD/8VnQv/FZ0L/ - xGdC/8NmQv/DZkL/w2ZC/8JmQf/CZUH/wWVA/8BlQP+/ZED/vmRA/75jP/++Yz//vWI+/7xiPv+7Yj7/ - umE9/7pgPP+6YDz/uWA8/7hgPP+3Xzv/t187/7deO/+2Xjr/tF88/69cPP+fVzv/lXpz/6yqpv/HwbL/ - u7S0/6ujo/+0rq3/497e/9jV1f9MTEyKAAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAGBeXl7Z1tny/////+Lg4P/Nysn/49/h//v69//i5OL/wa6p/96hif/ooYb/ - 5Jt///LNv//tvq3/3opp/9dyS//Xckv/13JL/9dyS//WcUr/1XFK/9VxSv/Ub0r/1HBK/9RwSv/Tb0r/ - 0m9K/9FuSf/Rbkn/0W5J/9BuSP/Pbkj/z21I/89tSP/ObUj/zm1G/81tR//MbEf/zGxG/8xsRv/La0b/ - ymtF/8pqRf/IaUX/yGlF/8dpRP/HaEP/xmdD/8ZnQ//EZ0L/xGdC/8RnQv/DZ0L/w2ZB/8NlQv/CZUH/ - wWVB/8FlQP/AZED/v2NA/75jQP++Yz//vWI//71iP/+8Yj7/u2E9/7pgPf+6YDz/uWA8/7hgPP+4Xzv/ - tl88/7VgPf+uXDr/oFo+/5uOjf+4tq3/xb6z/7evsP+po6P/urKy/+fi4v/Mycr4UVBSfQAAABEAAAAK - AAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNjZFDV1dbh - /////+fl5f/Oysn/2NXX//z7+v/u7un/w7++/8mdjf/nqZH/5ZZ3/+mwmv/13dP/56qS/9p6VP/Xckz/ - 13JL/9dxSv/WcUv/1nFK/9VxSv/VcUr/1XBK/9RvSv/TcEr/029K/9JvSv/Rbkn/0W5J/9BuSf/Qbkn/ - z25I/89uSP/Pbkj/zm1I/85tR//NbEf/zGxH/8xsRv/La0b/y2tG/8prRf/JakX/yGpE/8hpRf/IaEP/ - xmdD/8ZnQ//FZ0L/xWdC/8RnQv/DZ0L/w2ZC/8NmQv/DZkH/wmVB/8FkQf/AZED/v2RA/79kQP++Yz// - vmM//71iPv+8YT7/vGE9/7tgPf+7YDz/uWA8/7dhPv+1YD3/qVc3/6FuXP+loaX/vLms/8a+t/+yrK3/ - qqSk/8K8vP/o5OT/v7297Dw8O2sAAAAQAAAACQAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElKSjSqq6vL//////Du7v/Rzs7/0MzN//Du7f/4+PT/ - 09PR/7iknv/fpI7/7KSJ/+Wafv/tvqz/8Mq8/+Obgf/YdE3/13JL/9dxS//Xckv/1nFL/9ZxSv/VcEr/ - 1HBK/9RwSv/TcEr/029K/9JuSv/Sbkr/0W5K/9FuSf/Qbkn/z25I/89uSP/Pbkj/z21I/85tR//NbEf/ - zWxH/8xrRv/LbEb/y2tG/8prRf/Ka0X/yWpF/8hpRP/IaUP/x2hD/8ZnQ//GZ0L/xWdC/8RnQv/EZ0L/ - w2dC/8NmQv/DZkH/wmVB/8JlQP/BZUD/wGRA/79kQP+/ZED/vmM//71hPv+9YT3/vGE9/7phPv+6YT3/ - tFs3/6hbPf+fjYr/r66t/8W9rP+/ubb/rqep/62mpv/Mxsb/7uvr/6elpdogISFTAAAADgAAAAgAAAAD - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAABYWFh6ZmJmr8/Hy//n39//Y1NP/ycbG/+Dd3v/59/X/5+jl/8G7uf+3mY//4qiS/+qegf/ln4T/ - 7b6s/+29q//hl3r/2XRO/9dyTP/Xckv/13FL/9ZxS//WcUr/1XBK/9VwSv/Ub0r/029K/9NvSv/Sb0r/ - 0W9J/9FuSf/Rbkn/0G5J/89uSP/Pbkj/z25I/85tR//ObEf/zWxG/81sRv/Ma0b/y2tG/8trRv/Ka0X/ - yWtF/8lpRP/IaUP/x2hD/8ZoQ//HZ0P/xmdC/8VnQv/EZ0L/w2dC/8NmQv/DZkL/w2VC/8FlQf/BZUH/ - wWRB/8BkQP+/ZD//vmM+/71iQP+8ZED/ul45/6xaOf+ifG//qaWo/7y5rf/Hv7X/uLKy/6qjpP+1rq7/ - 29bW/+fk5P+Mioy9Cw0NOwAAAAwAAAAGAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRUVQmHhYaB09HQ+P/+/v/k4eL/ - y8bG/9HOzf/v7ez/9fXw/9bY1v++rKj/zpqJ/+eokf/pnH//5p+E/+u2ov/ruab/4pl+/9p9Wf/Xckv/ - 13JL/9dxS//WcUv/1XFK/9VwSv/UcEr/1HBK/9NwSv/Tb0r/0m5J/9FuSf/Rbkn/0G5J/89uSP/Pbkj/ - z25I/89tSP/ObUj/zmxH/81sR//MbEf/y2tH/8trRv/KakX/ympE/8lpRP/IaUP/yGhD/8hoQ//HaEL/ - xmdD/8VnQv/FZ0L/xGdC/8NnQv/DZkH/wmZB/8JlQf/CZUH/wWVA/8BlQf+/ZUL/vmA7/7RZNf+tb1b/ - q56c/7W2sv/Dvaz/wbq3/7Cqq/+rpKT/w729/+rl5f/W09P/XVtbmAEBAiEAAAAKAAAABQAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABVVVVRurm51Pr3+P/08fD/1dDQ/8jCw//d2Nj/9vbz/+7u6f/NzMv/ - t6Wf/8uXhP/mpo3/7KCD/+Wdgv/nqZH/7Lyq/+WiiP/eiWj/13RO/9dyS//WcUv/1nBK/9ZwSv/VcEr/ - 1HBK/9RvSv/Tb0r/0m9K/9FvSv/Sbkn/0G5J/9BuSf/Qbkj/z25I/89tSP/PbUj/zm1H/81sR//Na0f/ - zGtG/8trRv/La0b/ympE/8lpRP/JaUT/yGlD/8hoQ//HaEP/xmdC/8ZnQ//FZ0L/xGdC/8RnQv/DZkL/ - w2ZC/8NnQ//CZkL/wWA6/7hbNv+wb1b/rJuY/7Ozs//Bu6v/xsC4/7ewsf+qpKT/tK6u/9bPz//s6Oj/ - rKqr30VGRWwAAAAOAAAACAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDQkMi - gH5/ltva2////f3/6OXl/8vGxf/Iw8T/4d7e//Px7v/o5+X/zMvK/72nn/+5lIb/2KCL/+ujhv/onYD/ - 5Z6D/+amjf/lpYz/35Fz/9yBX//XdE//1nBK/9VwSv/VcEr/1XBK/9RwSv/Tb0r/029K/9JuSv/Rbkn/ - 0W5J/9BuSf/Pbkj/0G5I/89uSP/PbUj/z2xH/85tR//NbEf/zWxH/8xsRv/La0b/y2pE/8ppRP/JaUT/ - yWhE/8hoQ//HaEP/x2dD/8ZnQv/FZ0L/xWhD/8VoQ//FZUD/wV44/7VgQP+ve2n/s6Cb/7W2tv+9uav/ - xsC2/721s/+spKX/raen/8nExP/r5ub/19TU/2tqaqcPEBA1AAAACwAAAAYAAAADAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZWZmV6Wkpcjp5+n/+PX1/9/a2f/HwcH/ - ysXG/+Pg3//y8O3/6erj/9PU0/+3r67/tZOG/8KVhP/knoT/66CE/+WZe//ilHb/4I9w/96Mbf/bgV// - 2XpW/9h1UP/Vckz/1XBK/9RwSv/UcEr/029K/9JvSv/Sb0r/0W5J/9FuSf/Qbkj/0G5I/89uSP/PbUj/ - z21I/85tSP/NbUf/zWxG/8xrRv/La0X/ymlE/8ppRP/KaUT/yGlE/8lqRv/Ia0b/yWpG/8hpRP/HYjr/ - v144/7JuVf+1joD/tK+w/7i6uv++uav/x8G1/7+5t/+uqKn/rKam/8G8uv/i3t7/6ebn/6SlpNZKSUlu - BAQEDwAAAAgAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAX15fHI2MjYPJx8jm+ff3//Xy8v/Y1dX/xcHB/8nExP/f29v/8e/s/+7u6v/b29r/ - xMPE/7yjm/+9jn3/2JJ2/9iXfv/mmXv/6Jh7/+CNbP/fhWP/2n1b/9h4Vf/YdU//1XBL/9VwSv/Ub0n/ - 029J/9NvSv/Sb0r/0W9K/9FtSf/QbUj/z21I/89tR//PbEf/z2xH/85sRv/Oa0b/zWxG/81tSP/Nbkn/ - zW9K/85wS//Nb0r/zmtE/8lkPf++Y0D/wWhG/72Hcv+7pqD/uLm8/7m4tv/Ev6//ycS6/763tv+vqKn/ - rKWl/8C5uP/g29z/7uvs/8XDxPBfXl+SDQ4OMAAAAAoAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQTB1dXWS - zs3O7/v5+v/28/T/29fW/8bAwP/Dvb3/1NHQ/+jl4v/u7er/6unl/9fY2P/Iw8L/raSi/7uQgf+sg3T/ - 04tv/9SOc//gi2z/5Y9v/+aObv/ghmX/24Ff/9p+W//Ze1f/2HhU/9d3Uv/WdVH/1nVR/9Z0UP/VdVD/ - 1XRP/9R1UP/TdlL/1HdT/9N4Vv/VdlP/1XRO/9FwSf/MaEL/wmhF/8NqSP+wfGn/wZSE/7aur/+8ubv/ - uru6/8K+sf/LxLr/x8C8/7mzsv+spqX/rqin/8O+v//i3d7/8e3t/8rIyfRsamukKSorRAAAAAoAAAAG - AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU08fn1+mcrJyuz08/L/9/T0/+He3//KxsX/ - wLu7/8fCwf/Z1dX/6eXh/+zs5f/p6uL/2drZ/83P0P+/urn/raSj/8eZif+1hnX/oXts/7t7Y//Xf17/ - zn5f/8t7Xv/Ke13/yHhZ/8Z1V//FdFX/xHJU/8RxUv/Db0//wm1N/8VvTv/JcVD/zXBM/7x1W/+tgHD/ - vYp4/82fkP+2r7D/uri5/7y9wf+7urn/xsK1/8zIuv/Lxbz/wLm3/7Grq/+rpaX/ta+v/87Jyf/o5eb/ - 7uvr/8rIyPNxcHCnMjIySwMDAwsAAAAHAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAASklKOHl6eZCwra/c5eTl//f09P/t7Ov/19PR/8TAwP+/ubn/xL6//9TPz//g3dn/ - 6ufh/+no4P/l5N7/4eHc/87Q0f/LzdD/yMbI/7u1tv+vqaj/pp+f/6Kcm/+impn/oZua/6Kbmv+jm5r/ - opua/6Sdnf+knp7/raeo/7WwsP+6tLb/wL/C/7y+w/+6urv/xMK8/8rGuf/QzMH/08zC/8jDvv+/uLf/ - sqqr/62mpv+zra3/xr/A/+Hb2//v7Oz/6+jp/728veRoaGidMTExSgkJCQ0AAAAGAAAAAwAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx7fCZqaWpo - kJCQuMvJyvfv7O3/9vPz/+/r6//Z1dX/xsLC/765uf+9trf/w768/83Jx//W0tD/3NjT/+Dd1v/n5Nz/ - 4uDY/+Hd1v/b2tH/1tTL/9bUzP/U0sn/09HI/9PQx//S0MX/0s/F/9HPxf/QzcP/0c7D/9bSxv/Y1cr/ - 1M/G/9DKw//LxcL/wLq5/7WvsP+vqan/r6mp/7u0tP/Mxsb/5ODh//Tx8v/29PX/0tHS+4yLjMFGRkh3 - GRkZMgAAAAgAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUVFQUT05OQHBvcICbmpvBycfH+uvp6f/39vb/ - 8O3t/+nk5f/V0dH/ycTE/7+5uf+7tbT/t7Ky/7q0s//Burn/xL69/8jDwv/NxsX/zsjF/83Ixv/OyMb/ - zMfE/83GxP/Kw8P/ycHA/8W/vv/Au7n/u7S0/7OsrP+wqqr/says/7Wvrv++ubn/ysXG/+Db3P/t6Or/ - 9/T3//Lx8v/V09X9mZiZyl1eXo42NTVOPz9AHQAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAGRkZhpNTU5Ba2treIGAgK6vrq7c0c/Q/+Xl5v/8+fr/8e3w/+7r7P/s6Oj/ - 4Nza/9TO0P/LxcX/xcC//8C8vP++ubf/vLa1/7u0tP+5tLT/ubS0/7y1tf+9uLj/wbu7/8XAwf/MyMj/ - 2tPU/+Xg4P/p5eb/7+zr//r29//y7/D/19XW/6+tr+KAf4C0WVtbgjU0N05QT1AiAAAABgAAAAQAAAAD - AAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - MjIyC4B/fyVBQUFFent8dHJxcpuWlZjAsK+x3s7NzvvRz8//39ze//Tx8v/59vj/+/r5//v4+P/69/f/ - +fX2//j19v/59fb/+fb3//n49//49ff/9PHy/+nn6P/b2dz/zczN/a+truCTk5TEa2prolhXV3s0MzNP - cG9wLCIhIhIAAAAFAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABISAhBVpbWhiGhYcq - HBwcPFlYWlV1dHZsYGFgg2NiZJZmZmamZ2ZmrmdnZ7RnZme2Z2ZntmdmZ7RnZmevZmVmp2NiYpleXV6G - U1NTcDw8PVscGx1BeXd5Lk1MTB0ODw8KAAAABAAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAP///////////////////////////////////////////////////8AB//////////////////AA - AAf///////////////8AAAAAf//////////////4AAAAAA//////////////wAAAAAAB//////////// - /gAAAAAAAH////////////gAAAAAAAAf///////////gAAAAAAAAB///////////gAAAAAAAAAH///// - /////wAAAAAAAAAAf/////////wAAAAAAAAAAD/////////4AAAAAAAAAAAP////////4AAAAAAAAAAA - B////////8AAAAAAAAAAAAH///////8AAAAAAAAAAAAA///////+AAAAAAAAAAAAAH///////AAAAAAA - AAAAAAA///////gAAAAAAAAAAAAAH//////gAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAH/////4AA - AAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAH////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAH// - //wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAA - AAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD//+AAAAAAAAA - AAAAAAAAA///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAA - AAAAAAAAAAAAAAD//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAA/ - +AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAA - AAAAH/AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAA - AAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAfAAAAA - AAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAD - gAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA - AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAA - AAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAD - AAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAA - AAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAA/AAAAA - AAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf - 4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAA - AAAAP/AAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAA//wAAAAAAAAA - AAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAA - AAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAA// - /8AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAA - AAB////4AAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAH/////AAAAAAAA - AAAAAAAD/////4AAAAAAAAAAAAAAB//////AAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAf//////AA - AAAAAAAAAAAAP//////4AAAAAAAAAAAAAH///////AAAAAAAAAAAAAD///////4AAAAAAAAAAAAD//// - ////gAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAAAAAAA - f/////////4AAAAAAAAAAf//////////gAAAAAAAAAf//////////+AAAAAAAAAf///////////4AAAA - AAAAf////////////gAAAAAAAf/////////////AAAAAAAf/////////////+AAAAAA///////////// - //8AAAAD////////KAAAAGAAAADAAAAAAQAgAAAAAACAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAE - AAAABQAAAAYAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAGAAAABgAAAAUAAAAEAAAAAwAAAAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAD - AAAABQAAAAcAAAAJAAAADAAAAA4AAAARAAAAEwAAABUAAAAWAAAAFwAAABgAAAAYAAAAGAAAABcAAAAW - AAAAFQAAABMAAAARAAAADwAAAAwAAAAKAAAABwAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAIAAAAEAAAABwAAAAoAAAAPAAAAEwAAABcAAAAcAAAAIAAAACQAAAAnAAAAKwAAAC4AAAAx - AAAAMgAAADMAAAA0AAAAMwAAADIAAAAxAAAALgAAACsAAAAoAAAAJAAAACAAAAAcAAAAGAAAABMAAAAP - AAAACwAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAAsAAAARAAAAFwAAAB0AAAAkAAAAKwAAADEAAAA1 - AAAAOQAAADwAAAA/AAAAQgAAAEUAAABHAAAASQAAAEoAAABKAAAASgAAAEkAAABIAAAARQAAAEMAAABA - AAAAPAAAADkAAAA2AAAAMQAAACsAAAAkAAAAHgAAABcAAAARAAAADAAAAAcAAAADAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAkAAAAPAAAAFgAAAB4AAAAn - AAAALwAAADYAAAA9AAAAQz05OXRTTU2XX1hYtGVeXslqYmLYbGVl5G9nZ+xwaGjxcGlp9HFpafVwaWn0 - cGho8W5nZ+xsZWXkaWJi2WVeXspeV1e2UkxMmjs3N3gAAABLAAAASAAAAEMAAAA9AAAANwAAADAAAAAn - AAAAHwAAABcAAAAPAAAACQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAJ - AAAAEQAAABkAAAAjAAAALgAAADcAAAA/Qj09eFtVVaptZWXTeHBw7n53d/WKhIT0mZSU96impvq0s7P9 - vby8/sTDw//IyMj/y8vL/87Ozv/Ozs7/zMzM/8nJyf/Ew8P+vry8/bOysvynpKT4mJSU9YuFhfaDfHzw - dW9v111WVq8+Ojp/AAAASwAAAEYAAABAAAAAOAAAAC4AAAAkAAAAGgAAABEAAAAKAAAABQAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAEAAAAEAAAACQAAABAAAAAbAAAAJgAAADEAAAA8RUFBemVeXrp6dHTpg31995mVlfuvrKz+ - vr29/8rKyv/MzMz/zc3N/83Nzf/MzMz/y8vL/8nJyf/IyMj/yMjI/8fHx//FxcX/xcXF/8XFxf/ExMT/ - xcXF/8bGxv/Hx8f/x8fH/8jIyP/Av7//trS0/qekpPuSjY34iYSE7XFsbMJAPDyDAAAATAAAAEUAAAA8 - AAAAMgAAACcAAAAcAAAAEQAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAcAAAAOAAAAGQAAACUAAAAyHhwcTFdRUZx7dXXi - hoCA+KKfn/24t7f/ycjI/8zMzP/Ozs7/z8/P/9fX1//e3t7/5OTk/+vr6//x8fH/9fX1//r6+v/9/f3/ - ///////////9/f3/+fn5//X19f/w8PD/6enp/+Li4v/Z2dn/0NDQ/8fHx//Dw8P/w8PD/8TExP/ExMT/ - uLe3/6uoqPyZlJT5joqK52tnZ60ZFxdcAAAASAAAAD4AAAAzAAAAJgAAABkAAAAPAAAABwAAAAMAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACwAAABUAAAAi - AAAALysoKFNnYWGxgnt775eSkvu1srL/x8fH/87Ozv/Ozs7/2NjY/+Pj4//s7Oz/9vb2/+3r6v/a1dP/ - wrq2/66hnP+ei4P/k3tz/4xwZv+JaF7/imZc/4xnXP+Oal//j25k/5Z3bv+ghX3/rJeR/72vq//Tycf/ - 6OPh//Px8f/r6+v/3t7e/9DQ0P/Dw8P/w8PD/8PDw//CwsL/tLGx/6SgoPuWkZHzfXl5wDAuLmgAAABI - AAAAPQAAADAAAAAiAAAAFQAAAAsAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAgAAAAcAAAAPAAAAHAAAACoUExNCZ2Bgq4R+fvGempr8u7q6/87Ozv/Pz8//2NjY/+Li4v/s7Oz/ - 6+nq/83Hxf+qnZj/kHpy/4ZnWv+LYFD/k19L/5leSv+dYEr/o19J/6lfSf+sX0j/r19I/7FfR/+yX0j/ - sWBI/7FeSf+vXkr/rF9M/6leS/+gXUz/lWBS/5pyaf+rkov/xrm0/+Xg3v/t7e3/4eHh/9DQ0P/Dw8P/ - w8PD/8PDw/+3tbX/paGh+5eSkvR7d3e8IB8fWgAAAEUAAAA5AAAAKgAAABwAAAAPAAAABwAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACQAAABMAAAAiAAAAMVNNTYuEfX3qnJiY+728vP/Pz8// - 0dHR/9ra2v/j4+P/5+fn/8O/vf+ai4T/g2VY/4lgUP+PWkX/l1g//55YQP+kWj//p1o//61bP/+wWz// - s1s//7ZdQP+3W0D/ultA/7xbP/++Wj//v1o+/79YPf/AWD7/wFg9/8JWPf/BVz7/v1hA/7pXQv+zWET/ - p1tM/5piVf+kf3f/wbGs/+fk4v/q6ur/2NjY/8XFxf/Dw8P/w8PD/7W0tP+hnJz7koyM7WhkZKAAAABL - AAAAQAAAADEAAAAiAAAAEwAAAAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALAAAAFgAAACY2MTFW - enR0zZGMjPm5t7f/0dHR/9PT0//Z2dn/4ODg/9fW1/+nn5v/gWpg/4RaSf+MV0D/klM5/5tTNv+iVTb/ - pVY2/6lXOP+rWTv/rlk8/7BaPv+xWz7/tFs//7VbP/+3W0D/ultA/7xaP/++Wj//v1o//8FZPv/CVzz/ - w1c8/8ZVOv/GVDj/yFM3/8lRNv/IUDf/xFE5/8BSPP+3VkP/qlpK/5tjV/+sk4z/19HO/+vr6//a2tr/ - xsbG/8PDw//Dw8P/sa+v/5WQkPmDfn7UQD09cgAAAEUAAAA2AAAAJgAAABYAAAALAAAABAAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AAAABQAAAA0AAAAZAAAAKlROToaHgYHvqqen/czMzP/S0tL/19fX/9zc3P/Q0NL/m5GM/3xgU/+CUTz/ - jE81/5NMMP+aTC//nlEw/6NSMv+kVDT/plY2/6lYOP+qWDv/rFk8/69aPv+xWz7/s1s+/7VbP/+3Wz// - uls//7xbP/+9Wj//vlo+/8BZPf/BWD3/w1c8/8ZVOv/GVTr/x1Q3/8lSNv/KUTX/y04z/8tNMf/LTDL/ - xk01/8FTPf+1WEX/nVtN/6eIgP/Sysj/6+vq/9fX1//Dw8P/w8PD/729vf+joKD8jIWF8F1XV5oAAABI - AAAAOgAAACoAAAAZAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADgAAABwAAAAtcWtrtI+Kive+vLz/1NTU/9bW1v/Z2dn/ - 29ra/56Wk/98X1P/f044/4pILP+SSCf/mEgn/5tLKf+dTSz/nk8v/6JSMf+kVDT/plU2/6hXOP+qWDr/ - rFk8/69aPf+xWz3/s1s+/7VbP/+3Wz//uVs//7tbP/+8Wj//vlo//8BZPv/BWD3/w1c8/8ZWO//GVTr/ - x1Q4/8lSNv/KUTX/y08z/8xNMv/NSzH/zUow/81JL//KSzD/xFA3/7dVQf+fXE3/qYyE/9nT0f/n5+f/ - 0NDQ/8PDw//Dw8P/sbCw/42Hh/Vwamq8FBQUTgAAAD0AAAAtAAAAHAAAAA4AAAAFAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAOAAAAHS8sLEd+eHjR - n5ub+czLy//V1dX/2dnZ/9vb2/+3tbT/f2lf/3xNOP+ERCn/jUIh/5NDIf+XRiP/mUgm/5pLKP+cTSv/ - nk4v/6JSMv+kUzT/plU2/6hXOP+qWDr/q1k7/65aPf+xWz7/s1s+/7RbP/+2Wz//uVs//7tbP/+8Wj// - vlo//79ZPv/BWD3/wlc9/8VWO//GVTr/xlU4/8lSNv/KUjb/y080/8xOMv/MTTH/zUww/81JL//NSi7/ - zUkv/8pJL//DUDj/s1dG/5thVP+1o57/7evr/9zc3P/ExMT/w8PD/7u6uv+Xk5P3fXd31Tg1NWcAAABA - AAAALwAAAB0AAAAOAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - AAAABQAAAA4AAAAdQj4+WYN+fuGtqan71tbW/9jY2P/b29v/3Nzc/5OHgv96V0f/f0Qp/4k+Hf+OPRn/ - kkAc/5NCH/+VRSP/mEcl/5tKKf+cTCv/nk4u/6BRMf+jUzP/pVQ1/6dXOP+pVzj/q1k7/65aPf+wWj3/ - sls+/7VbP/+2XT//uV1A/7tbP/+8Wj//vVo//79ZPv/AWD7/wlg9/8VXPP/GVjr/xlU6/8dTN//JUjb/ - ylE2/8tPM//MTTP/zE0x/81MMP/NSi//zUkv/85ILP/NSS3/yEsx/8BTPv+qW0r/n3lw/9DIxf/m5ub/ - zMzM/8TExP/CwsL/oZ2d+oF6euFHRER3AAAAQQAAAC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADQAAABxJRERhhYCA6Lazs/zY2Nj/2tra/93d3f/Hxsf/ - gm5m/3tJM/+DPB7/ijgU/446Ff+QPRn/kj8c/5NCHv+VRSP/mEcl/5pKKP+cSyr/nk0u/6BRMf+jUzP/ - pFQ1/6ZWN/+pVzj/q1g7/65aPf+wWz7/s10//7RbP/+0Wj3/tlo+/7pbP/+9XUD/vltA/79ZPv+/WT7/ - wVg9/8NXPP/FVjv/xlU6/8dUOP/IUjb/yVE2/8pPNP/MTzT/zE0y/81MMf/NSzD/zUow/85JL//NSS7/ - zUku/8tJLf/ETzf/t1hG/5phVP+5q6b/6unp/9PT0//ExMT/xMTE/6elpfuDfX3nVVFRggAAAEEAAAAv - AAAAHAAAAA0AAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAGUpFRWCGgIDp - u7i4/dra2v/c3Nz/39/f/7Svrv98X1L/fEIp/4U4F/+LNRD/jDcR/446Ff+QPBn/kT4a/5JBHf+URSH/ - l0cl/5pIJ/+cSyr/nU4s/59PMP+iUjL/o1Qz/6ZWNv+pVzj/q1g7/6xYOP+lTzL/mkks/5VIL/+QRi// - j0Ur/5FAJ/+bRSn/r1E1/75aPv/AWj//wVk+/8JXPf/DVzz/xVY7/8ZVOv/GUzf/yFM3/8pRNv/KUTX/ - yk80/8xNM//MTTL/zEww/81LMf/NSzD/zUsv/81KL//MSjD/x000/75VQP+jXk//qJCJ/+jl5P/Z2dn/ - xMTE/8TExP+sqan8g3x86VhUVIIAAABAAAAALQAAABoAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAgAAAAkAAAAXRUBAVYeAgOi9urr929vb/9/f3//h4eH/rKaj/3tXR/9/QSX/hzUT/4k0D/+LNQ// - jDYQ/444FP+PPBj/kT4a/5JBHf+UQyD/l0Yj/5lJJv+bSyn/nE0r/59PL/+gUTH/o1Mz/6ZVNv+oVzf/ - pU8w/5tOMv+falb/rIyB/7ujnf/Br6n/vqij/7GTi/+bb2L/hUEv/5I9Jf+1VDr/wls//8FYPf/DVzz/ - xVc7/8ZVOv/GVDj/x1M3/8lSN//JUjX/ylE1/8tPNP/MTjP/zE0y/8xMMf/MTDH/zUwx/81MMP/MTDD/ - zEww/8lMMv/AUz3/q15O/518c//e29n/3Nzc/8XFxf/ExMT/qqio/IR/f+hUUVF6AAAAPgAAACoAAAAX - AAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAABM1MTE/hoCA4bi2tvzc3Nz/4ODg/+Pj4/+nn5v/ - elE+/4E+IP+INRH/iTMO/4kzD/+LNQ//jDYQ/404E/+POxX/kD0Z/5JAHP+TQh//lUUh/5lIJv+bSij/ - nEwr/51OLv+gUTH/o1Mz/6VVNf+iTS7/pGJK/8CooP/Z1tb/4ODh/+Df4P/g39//4t/h/+Tl5v/p6On/ - 0sXC/5RoWv+GNyH/s1M4/8FZPv/BVzz/w1c8/8ZWO//GVTr/x1Q4/8hTN//JUjf/ylI2/8pPNf/LTzT/ - y080/8xOMv/MTjL/zE0y/8xMMf/MTDH/zEwx/8tNMf/JTTL/wlM7/7FdTP+Xcmj/2NPS/9zc3P/FxcX/ - xcXF/6impvuEf3/jSkhIbAAAADsAAAAnAAAAFAAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADwAAACKDfHzR - sK2t+97e3v/i4uL/5eXl/6ujn/98UkD/gz0f/4o0EP+MMw3/jDQO/4szD/+MNA//jDYP/403Ev+POxX/ - kDwY/5E/G/+UQR7/lEMh/5hHJP+aSSf/m0sq/55NLP+fTzD/o1Mz/59MK/+oalH/zsPA/97e4P/Y1dX/ - 1c/P/9XPz//Vz8//1c/P/9bR0f/Y09P/5uXo/+3r7P+ed2v/izcg/7xXPf/CWT7/wVg9/8NXPP/FVjv/ - xlU6/8ZUOv/HVDf/yFM3/8lSNv/JUjX/ylI2/8pPNP/KUTT/y080/8tOM//LTjP/yk4z/8tOM//LTjP/ - yU80/8JTO/+wXk3/lG5k/9jU0//c3Nz/xcXF/8XFxf+hn5/6hYGB1jAwMFUAAAA3AAAAIgAAABAAAAAF - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAIAAAALAAAAHHdxcbKkoKD53t7e/+Tk5P/n5+f/tq+t/4BVQ/+EPyH/izQP/40zDf+MNA3/ - jDQO/4s0D/+MNRD/jDYP/402Ev+OOhT/jzwX/5E+Gv+SQR3/lEMg/5dGI/+ZSSb/mkop/51MK/+eTy// - n0wr/6RZPf/Lu7X/2Nnd/9LMzP/Pysr/z8rK/87Jyf/Oycn/z8rK/9HLy//Tzc3/0szL/+Ti4//q5uT/ - jlZH/6NHLv/DWj//wVg+/8JYPP/DVzz/xVc7/8ZWOv/HVTr/x1Q4/8hTN//IUjf/yVI3/8lSNv/KUjX/ - yk81/8pRNf/KUTT/yk80/8pPNP/JTzT/yk80/8lPNf/AVDv/sF9N/5VwZv/e3Nv/2dnZ/8bGxv/ExMT/ - l5SU93x3d8IhISFNAAAAMgAAABwAAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAVW1VVfJSPj/fV1dX/5OTk/+rq6v/Dvr7/ - h2JR/4RAIP+MNhD/jTMN/40zDf+MNA3/jTUO/401Dv+NNRD/jTUQ/402Ef+OOhT/jzwX/5A9Gv+SQB3/ - lEIf/5dGI/+YSCb/mkoo/5xMK/+eTSz/nUkn/7mLev/V1df/zsrK/8zHx//Lxsb/ysXF/8nDw//Jw8P/ - ysXF/8vGxv/NyMj/0cvL/9HLy//v8fP/waef/448Jf+9WD3/wVk+/8FYPf/CWD3/w1c8/8VWO//GVTr/ - xlU6/8dUOP/IVDf/yFM3/8hTN//JUzf/yVI2/8lSNv/JUjb/ylI2/8lRNf/JUTX/yVE1/8hRNf/HUTb/ - wFU9/61eTf+afnX/6uno/9XV1f/Gxsb/vby8/42IiPVtaWmgAAAAQAAAACsAAAAWAAAACAAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA9DPz9F - joiI78jGxv/k5OT/6+vr/9XU1v+QcWP/gz8i/443Ef+PNA3/jzQO/440Df+NNA7/jTUO/441D/+NNQ// - jTYQ/402EP+OOBP/jzsV/5A+GP+RPxv/k0Ee/5RDIf+YRiT/mUgn/5tLKf+cSij/n1Ex/8Wro//PztH/ - ycLC/8fBwf/GwMD/xb+//8W/v//Gv7//xb+//8fBwf/JwsL/y8bG/83IyP/f3+D/3tPP/5RMOv+1Ujb/ - wFtA/8BZPv/BWD7/wVk9/8JYPf/FVzz/xlY7/8ZWOv/GVTr/x1U6/8dUOP/HVDj/x1M4/8hUN//IVDf/ - yFM3/8hTN//IUjf/x1I3/8dTN//HUzb/xlI3/71YP/+lYFH/ppGK/+vr6//Pz8//xsbG/7Oxsf+KhYXv - VVNTdgAAADkAAAAjAAAADwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAACAAAACQAAABmFf3/MtbGx/OXl5f/r6+v/6urq/5+Kgv+ERiz/jjkU/5A1Dv+QNQ7/ - kDUO/481Dv+NNA7/jTUO/441D/+NNRD/jjYR/442EP+OOBL/jzoV/5E9F/+RPhr/k0Ad/5NCH/+XRiP/ - mUcn/5tKKf+aSCX/n1Q1/8Wzrv/Kycv/xb6+/8K9vf/BvLz/wLu7/8C7u//Bu7v/wbu7/8O9vf/Fv7// - yMHB/8nDw//X1db/493a/5tZR/+yTjL/wFtA/79aPv+/WT7/wFk+/8JYPf/DVz3/w1c9/8VWPP/GVzv/ - xlY7/8ZWOv/HVTr/x1U4/8ZVOv/GVDj/xlQ4/8dUOP/HVDj/xlQ4/8ZTOP/HVDf/x1M3/8VUOP+6WkT/ - nWFS/7erp//n5+f/x8fH/8fHx/+koKD8h4KC1S0tLU8AAAAwAAAAGgAAAAkAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEV1XV3ublZX54eDg/+zs7P/t7e3/ - pJmU/4dQOP+MPRn/kjYP/5E2D/+QNQ//kDUP/5A0Dv+ONQ7/jjUO/481D/+PNRD/jjYQ/442EP+PNxH/ - kDoU/5A8F/+SPhn/kj8c/5NCH/+VQyH/l0cl/5pKKP+aRyT/n1Mz/8Cvqf/Gxcf/wbu7/7+6uv+/ubn/ - v7m5/765uf++ubf/vrm5/8C6uv/BvLz/xb6+/8fAwP/V0tP/49zZ/55dSP+xTzL/v11A/75aP/+/Wj7/ - wFk+/8BZPv/CWT7/wlg9/8NYPP/DVzz/xVc8/8VWO//GVjv/xlY7/8ZWOv/GVTr/xlU6/8ZVOv/GVTr/ - xlU4/8ZVOP/FVDr/xlQ4/8VUOP/CVTr/tl1I/5JjVf/Qysj/3t7e/8fHx//BwcH/kYuL93FsbKIAAAA9 - AAAAJgAAABEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAK - JSIiJZCKiurPzc3/7u7u//Ly8v/FwsL/j2VT/4w+Hv+TNxH/kzcQ/5M3EP+SNg//kTUP/5E1D/+QNg// - kDUP/482D/+PNhD/jzYQ/482Ef+PNxH/kDgT/5E7Ff+SPRn/kz8b/5NCHf+VRSD/l0cj/5lJJv+ZRiX/ - nU4v/76lnf/DwsX/vrm5/723t/+8trb/vba2/7y2tv+8trX/vLa2/763t/+/ubn/wry8/8K9vf/W1tf/ - 4dTR/6JWPv+1VTj/vFs//71bP/+9Wz//vlo//79aPv/AWj7/wFk+/8FZPv/CWT7/wlk+/8JYPf/DWD3/ - w1c8/8ZXPP/GVzz/w1c7/8VWPP/FVjz/xVY7/8NWO//DVjv/w1Y7/8NVOv/CVjr/vlc+/61gTf+WeXD/ - 8O/v/9PT0//IyMj/srCw/4uGhupCQUFeAAAAMwAAABwAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAUAAAARdnBwoKynp/vw8PD/8/Pz//Dw8P+SeW//jEUo/5Q7FP+VOBD/ - lDgQ/5Q3EP+TNxD/kjYQ/5I2D/+RNg//kTUP/482D/+QNhD/kDYQ/5A2Ef+PNxH/kDgS/5E6Ff+SPBj/ - kj4a/5NBHf+VQiD/l0Yh/5lIJf+aSSb/mUUj/7GDcf/CwsP/vLe3/7y1tf+7tLT/urS0/7qzs/+7tLT/ - u7S0/722tv++t7f/wbu7/8C7u//l6er/zKui/6RLMP+6W0D/ultA/7tbP/+8W0D/vVs//75aP/++Wj// - v1o//8BZPv/AWT7/wVk+/8JZPv/CWT7/wlg+/8NYPf/DVz3/wlc9/8JXPP/CVzz/wlc8/8NWPP/DVzz/ - wlc8/8FXO//CVjv/wFU7/7paQv+fYVD/saOe/+np6f/IyMj/yMjI/5qVlfp9eHi5CAgIQAAAACcAAAAR - AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAlDPj41kYuL8trZ2f/09PT/ - 9fX1/6WcmP+LUTj/kz4a/5g6Ev+VOBH/lTgR/5U3EP+TNxD/kzcQ/5M2D/+SNg//kTYP/5A2D/+QNw// - kDcQ/5A2Ef+QNxH/kDcR/5I6FP+SPRj/kz4Z/5M/HP+VQh7/l0Ug/5hHJP+ZSSf/mUYj/6BWN/++q6f/ - vr7A/7qysv+6s7P/urOz/7qzs/+6s7P/urS0/7y1tf+8trb/vLW1/9LS0//o397/rmVP/7FVN/+3XkH/ - t1tA/7pbP/+7W0D/u1tA/71bP/+9Wz//vlo//79aP//AWj7/v1o//8BZPv/AWT7/wVk+/8FZPv/BWT7/ - wlg9/8FYPf/BWD3/wlg8/8FYPP/BWDz/wFc8/8FXPP/BVzz/wFc7/75YPP+zXkn/j2JU/9vX1f/b29v/ - ycnJ/7i2tv+KhYXyUE5OawAAADIAAAAbAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAwAAAA95cnKls6+v/Pf39//4+Pj/4+Hk/4tmVv+QRCX/mTsV/5k7E/+YOhH/lzoR/5c6Ef+VOBH/ - lDgR/5Q4EP+TNxD/kzcQ/5I2D/+RNxD/kTcR/5E3Ef+QNxL/kTgS/5E6E/+SOxf/kz0Y/5NAGv+VQR3/ - lUMf/5hGIf+ZRyX/mkko/5lFIf+nZkv/v7Gu/7++wP+7tbb/ubOz/7ezsv+6s7P/ubOz/7q0tf+9urv/ - 0tPV/+bh4f+8g3D/qlEy/7VdQP+0Wz//tVtA/7ddQP+5W0D/ultA/7tdQP+8W0D/vFtA/71bQP++W0D/ - vls//75aP/+/Wj//v1o//79aP//AWj//wFo+/8BZPv+/WT7/wFk+/79ZPv+/WT7/v1g+/79YPf+/WD3/ - v1g8/75XO/+5WT//pWBO/6GKgf/u7u7/zMzM/8nJyf+dmZn7fHd3vQgICD4AAAAkAAAADwAAAAQAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABzk0NCiRjIzw3t3d//n5+f/5+fn/nJCL/4xOM/+WPhn/ - mzwT/5s7E/+ZOhL/mToS/5g6Ef+XOhH/lzoR/5U4Ef+UNxD/lDcQ/5M2EP+SNxD/kTcQ/5I4Ef+RNxL/ - kjcS/5E4Ev+TOhX/kzwY/5M/Gf+UQBz/lUIe/5hFIP+ZRiT/mkgm/5tKKP+aRSD/pmBD/7qbkP/Bu7r/ - wL/B/7+/wP/Av8H/w8PG/8vLzP/X1dX/18C5/7l4Yf+pUTH/slo9/7NbP/+zWz//tFs//7ZdQP+2XUD/ - t11A/7pdQP+6W0D/u1tA/7xdQP+9W0D/vVtA/71bP/++W0D/vls//75aP/++Wj//vlo//79aP/++Wj7/ - v1o+/79ZPv+/WT7/vlk+/75ZPf++WT3/vlg9/75YPf+8WD3/s11G/5FfT//Tzsv/3t7e/8rKyv+4t7f/ - ioWF8ERDQ2AAAAAuAAAAFwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADGVeXoerp6f6 - +/v7//z8/P/o5+j/jGhZ/5dLKf+cPBT/nDwT/5s8E/+aOxP/mjsT/5k7Ev+YOhL/mDoR/5c4Ef+UOBH/ - lDgR/5Q3EP+TNxD/kjgQ/5M3Ef+SNxL/kjgS/5E4Ev+TOhP/kzwX/5Q+GP+UQBv/lUEd/5hDIP+YRiP/ - mUcl/5pJJ/+cSin/m0ck/55MKf+qaU7/toh4/7yYjP+8mY7/wZ+S/8OYh/+3eWL/qlg6/6hRMf+uWTz/ - r1o9/7FbPv+yWz//s1s//7VdP/+1XUD/tl1A/7ddQP+5W0D/uVtA/7tdQP+7XUD/u1tA/7xbQP+8W0D/ - vFtA/71bP/+9Wz//vVo//75bP/+9Wj//vVo//71aPv++Wj7/vlo+/71ZPv+9WT7/vFk9/7xYPf+9WDz/ - uFk//6ZeSv+ehn3/8O/v/83Nzf/Kysr/mJSU+XRubqoAAAA4AAAAHwAAAAwAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAEAAAAEY6Hh+HY1dX//f39//z8/P+lnJn/lFlB/6JOKv+fPxj/nT0T/509FP+cPBT/ - mzwT/5o8E/+ZOxL/mTsS/5g6Ev+XOhL/lzgR/5U4Ef+VNxD/kzgR/5M4Ef+TOBL/kjgS/5I4Ev+TOhP/ - lDsU/5Q8GP+VPhn/lUAb/5hCHv+YRSD/mEYj/5pIJf+bSSj/nEwp/51MKv+cSCb/nkko/6BMKf+iTSv/ - o04u/6RNLP+kTi7/qVY2/6tZO/+sWTv/rFk8/69aPf+wWj7/sVs+/7NbP/+zWz//tF0//7VdQP+2XUD/ - tl1A/7ldQP+5XUD/uV1A/7pdQP+6XUD/ultA/7tbQP+7Wz//u1tA/7xbQP+7W0D/u1s//7taP/+8Wj// - vFo+/7taPv+7Wj7/u1k+/7pZPf+7WTz/uVg9/7JdRf+MXE3/2tbU/97e3v/Ly8v/tLKy/4mEhOQqKipI - AAAAKAAAABEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHXlhYWpeRkfj39/f//v7+//z8/P+NcGP/ - oVg4/6lRK/+kRyD/nj0U/54+FP+dPRT/nD0U/5w8FP+aPBL/mjsT/5k6Ev+YOhL/mDoS/5c4Ef+VOBH/ - lTgQ/5Q4Ef+UOhH/lDgS/5M4E/+TOhP/lDoT/5Q9F/+UPhn/lT8a/5hCHf+YQx//mEYg/5pHJP+aSCb/ - nEsn/51NKv+fTy7/n08v/6BPMP+iUjD/o1Iy/6VVNf+nVjf/qFc3/6lXOv+qWTr/q1o8/65ZPP+vWj3/ - sFo+/7FbPv+yWz//s1s//7RdP/+1XUD/tV1A/7ZdQP+2XUD/t11A/7ldQP+5XUD/uV1A/7pbQP+6W0D/ - ultA/7pbP/+6Wz//uls//7paP/+6Wj//ulo//7paPv+6Wj7/uVk9/7lZPf+5WT3/t1g8/7VaP/+hXkn/ - pZKL/+3t7f/MzMz/x8fH/46Hh/dkYGCJAAAAMAAAABgAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAL - dm9vqr+7u/3//////////7u2tf+RXEX/qVYz/6pRKv+pTSj/o0Ib/54+FP+ePRX/nT0U/509FP+cPBT/ - mzwT/5o8E/+ZOhL/mToS/5g6Ef+XOhL/lzgQ/5U4Ef+UOhL/lToS/5Q4E/+UOhP/lDoT/5U8Ff+VPhn/ - lT8a/5VAHP+YQh7/mUUg/5lGI/+aSCX/m0on/55MKP+gTiv/n04u/6JRMP+kUjH/o1Iy/6ZUNP+nVTb/ - qFY2/6lXOP+pVzr/qlg6/6tZPP+sWj3/rlo9/69aPf+wWz7/sVs//7JdP/+zXT//tF0//7RdQP+1XUD/ - tV1A/7ZdQP+2XUD/tl1A/7ddQP+3XUD/t1tA/7lbQP+5Wz//uVs//7lbP/+5Wz//uVs//7laPv+3Wj7/ - t1k9/7dZPf+3WT3/tlg8/7RYPf+sXkf/i2JU/+ro6P/X19f/zMzM/6Whofx+d3fCAAAANwAAAB4AAAAM - AAAAAgAAAAAAAAAAAAAAAAAAAAMAAAAPjIWF6OHg4P///////////5SCev+fWz//rVQv/6xRK/+sUiv/ - p0ok/6A/Ff+gPhX/nz4V/54+Ff+dPRT/nTwU/5w9E/+bOxP/mjsS/5o7Ev+ZOxL/mToR/5c4Ef+VOhL/ - lzoS/5U6Ev+VOhP/lTsU/5Q8E/+VPBf/lT0Y/5c/Gv+XQR3/mEIe/5pFIP+bRiT/lD8c/4Y3F/9/NRX/ - gDYY/4E3Gv+COBv/gjoc/4Q8Hv+DOx7/hj0g/5dMLv+nVjf/qFc4/6pYOv+rWTv/q1k7/6xaPf+uWj3/ - r1o9/7BbPv+xWz7/sls+/7JbP/+zWz//s10//7RbP/+0XT//tF0//7VdQP+1Wz//tV0//7ZbP/+2Wz// - tls//7ZbP/+2Wj7/tlo+/7ZaPv+1Wj3/tVk9/7VZPf+1WTz/tFg7/7RYO/+vWkH/lVtJ/72zr//l5eX/ - zc3N/7q4uP+LhYXsMTExSAAAACUAAAAPAAAAAwAAAAAAAAAAAAAAAAAAAAVfWFhTlI6O9/v7+/////// - 8fDx/41mVv+oWjv/r1Ms/65SK/+uUiv/rFEr/6ZHHv+gPxX/oD8X/58+Ff+fPRX/nj0V/509E/+dPRT/ - mzwT/5s8E/+aOxP/mTsS/5k6Ev+YOhL/lzsS/5c6E/+VOxP/lTsU/5U7E/+VOxT/lz0Y/5c/Gv+YQBv/ - mEEd/5lDHv+aQyD/o2lR/5x/cv+UeW7/lXlv/5d7b/+YfHL/mn10/5yBd/+iiH3/lXdq/3lCLP+XSy7/ - qVc4/6hXOP+pVzj/qlg6/6tZPP+rWjv/rFo8/65aPf+wWz7/sFs+/7FbPv+xWz//sls//7NbP/+zWz// - s10//7NbP/+0Wz//tFs//7RbP/+0Wz//tFs//7RbPv+0Wj7/tFo+/7RaPv+0Wj3/tFk9/7RZPf+0WTz/ - s1g7/7NYO/+xWDz/oVtE/5d9c//x8fH/zs7O/8zLy/+Nh4f4ZmFhgwAAACwAAAAUAAAABQAAAAAAAAAA - AAAAAAAAAAdqY2OSs6+v+v7+/v/+/v7/uLOx/5hgSf+uWjb/sFMu/7BSLP+uUiz/rlIs/6tRKf+kQhv/ - oj4V/6A+F/+fPhX/nz4V/549Ff+dPRT/nT0U/5w8E/+bOxP/mjsT/5k7E/+ZOhL/mDsS/5g7Ev+XOhP/ - lzsU/5c8E/+VPBT/lzwV/5c+GP+YPxr/mEAc/5c/Gf+dTiv/x7m1/87R1P/Ny83/zczN/87Nzv/PztH/ - 0tHS/9XU1f/a2t3/3t7f/5JvYf+JPiH/p1U1/6dWN/+nVzj/qFc4/6lYOv+qWDv/q1k7/6xaPP+uWTz/ - rlo9/69bPf+vWj3/sFs+/7FaPv+xWz//sVs//7JbP/+yWz//sls//7NbP/+zWz7/s1s+/7NbPv+zWj7/ - s1o9/7NaPf+zWj3/slk9/7JYPP+yWDv/slg7/7JXOv+xVzr/p1k//4hfUP/n5eT/2dnZ/8/Pz/+fm5v5 - d3FxtQAAADIAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAp7dHTL0s/P/v39/f/9/f3/mYqE/6JdQf+xWTX/ - sVUu/7FULv+wUy7/r1Ms/69TLP+qTij/pEEZ/6I/F/+iQBf/oD8X/6A/F/+fPhX/nz4V/54+FP+cPRT/ - nDwU/5s8E/+aOxP/mjsS/5k8E/+ZOxP/mDoT/5g8FP+YPBT/lzwU/5c8F/+YPxn/mEAa/5c8F/+fUTH/ - ysC+/8zJyf/KxcX/y8XF/8vHx//Mx8b/zcnI/87Kyv/Tzcz/3drd/5p4bP+HPR//plQz/6VUNf+mVTb/ - plY2/6dWN/+oVzj/qVc4/6pYOv+rWTv/q1k7/6xaPP+sWjz/rlo8/69aPf+vWT3/r1o9/7BaPf+wWj3/ - sFo+/7FaPf+xWj3/sVo9/7FaPf+xWj3/sVk9/7FZPP+xWTz/sFg8/7BYO/+wWDv/sFc6/7BXOP+wVjj/ - qlg7/49XRP++t7T/4uLi/8/Pz/+zsbH+gnx82AoKCjgAAAAdAAAACgAAAAEAAAAAAAAAAAAAAAyFfn7u - 6Ofn//v7+//8/Pz/j3Jn/61ePv+1WDL/s1Yv/7NWL/+xVS//sVUv/7BULv+vVC//qk0m/6RBGP+jQBf/ - o0AX/6I/F/+gPhX/nz4V/54+FP+dPRT/nT0U/5w9FP+bPBP/mjsT/5k8E/+ZOxP/mTsU/5g8Ff+ZPBT/ - mDwU/5g8Ff+YPRj/mD8Z/5c8FP+fUS//zMLA/8/Mzf/OyMn/zsnJ/87Jyf/Oycn/z8rK/9HMzP/Vz8// - 3trd/5h4bP+COhz/pFIy/6RTM/+kVDT/pVQ1/6ZVNv+mVjf/p1Y3/6hXOP+pWDr/qVk6/6pYO/+rWTv/ - q1k7/6xZPP+sWTz/rlo8/65aPf+uWj3/rlo9/69aPf+vWj3/r1k8/69ZPP+vWTz/r1k8/69YO/+vWDv/ - r1c7/69XO/+vVzr/rlc4/65WN/+uVjf/rFY5/5hUPf+ci4T/6Ojo/9DQ0P/DwsL/hX9/8CAgID8AAAAg - AAAADQAAAAIAAAAAAAAAAGFbW0mMhob1+fn5//r6+v/g39//k2dW/7VhQP+2WDL/tVYw/7RWMP+zVi// - slUv/7FVL/+xVS//sFUv/6pLJP+kQRj/pEAX/6RAF/+iPxX/oD8X/6A+Ff+ePhX/nj4V/589FP+cPRT/ - nDwT/5o7E/+aPBP/mjwU/5o7FP+ZPBX/mT0V/5k9FP+ZPRf/mD0Y/5c7E/+fTiz/zsK//9LP0f/Ry8v/ - 0cvL/8/Kyv/Ry8v/0cvL/9LMzf/Tzc3/3tzd/6eQh/93NBr/nk0u/6NTMv+kUzP/pFQz/6VVNf+kVTX/ - pFU2/6dWN/+nVzf/qFc4/6lXOP+pWDr/qVg6/6pYOv+rWTv/q1k8/6tZO/+rWTv/rFk8/6xZPP+sWTz/ - rFk7/65YO/+uWDv/rlg4/65XOv+uWDv/rFc6/6xXOP+sVzj/rFY3/6xWN/+sVTb/qlU3/55VPP+KbWL/ - 6unp/9LS0v/R0dH/hoCA9VZRUXEAAAAkAAAADwAAAAMAAAAAAAAAAGliYneemZn19vb2//f39/+7tbP/ - mWBJ/7diPv+2WDH/tVgx/7VXMf+0VjD/tFYw/7NWL/+yVS//sVUv/7BUL/+qSyT/pUAY/6VBGP+kQBj/ - o0AY/6JAF/+gPxX/nz4V/58+Ff+ePRX/nT0V/5w9E/+cPBP/mz0U/5o8FP+aPBX/mj0V/5o9Ff+ZPRX/ - mT0X/5c6E/+dSSX/y7qz/9TS1P/Ry8r/0cvL/8/Jyv/Rysr/0crK/9HLy//Ry8v/2NXW/8O3tP9wOiT/ - kUMk/6RTMf+iUTH/olIx/6NTM/+kUzP/pFQ0/6VUNf+kVTb/plU2/6dWNv+nVjf/p1Y3/6hWN/+pVzj/ - qVc4/6lXOP+pVzj/qlc6/6pXOv+qVzr/q1c6/6tXOv+rVzj/q1c4/6tWOP+rVjj/qlY3/6tWN/+qVTb/ - qlU1/6pUNf+qVDX/qlM0/6JVOv+DWEj/3NrZ/9fX1//S0tL/kYuL82dhYZcAAAAoAAAAEQAAAAQAAAAA - AAAAAG1lZZyxra339PT0//X19f+jmZX/pV9E/7pgPP+3WDH/t1ky/7ZYMv+2VzH/tVcx/7RXMf+zVjD/ - s1Yw/7JWMf+xVjD/qksk/6VBGP+lQRj/pEEY/6NAF/+iPxf/oD8V/58/F/+fPhX/nz4V/549Ff+dPBT/ - nDwU/5s9FP+cPBT/mz0V/5o9Ff+aPhX/mj4X/5k7E/+ZPhj/w6ed/9TU1v/Pysn/z8rJ/87IyP/NyMj/ - zcjI/83HyP/NyMj/zsnJ/9jV1v+Mal3/ci4R/59OLv+iUS//olEv/6NSMf+jUjL/o1Iy/6NTMv+jUzP/ - o1Q0/6RVNf+lVTX/plU2/6dWNv+nVjb/p1Y2/6dWN/+oVjf/qFc3/6hWN/+pVjf/qVY3/6lWN/+pVjf/ - qVY3/6lVNv+pVTb/qVU2/6lVNv+pVTX/qVQ0/6hTNP+pUzT/qFIy/6RUNv+IUz7/xsG//9vb2//T09P/ - n5ub9mtlZbQAAAArAAAAEwAAAAUAAAAAAAAAAG9nZ7jBvr768vLy//Pz8/+XhoD/q2FE/71fPf+6WTP/ - ulkz/7pZNP+3WTP/tlgy/7VXMv+0VzL/s1cx/7NWMf+zVjH/sVYx/6tNJf+nQhn/pUAY/6ZBGf+lQBj/ - pEAX/6I/F/+gPhX/oD4V/58/Ff+ePRX/nT0U/5w9FP+cPBT/nTwV/5s8F/+bPRX/mj0V/5k8FP+XNg3/ - u5CA/9PT1v/Mx8f/y8bG/8rFxf/KxcX/ycPD/8nCwv/Jw8P/ysPD/9LOz//GvLn/cEAr/381GP+gTy7/ - ok8u/6BPL/+gUTD/olEw/6NSMf+jUzL/o1Iz/6NTM/+jUzP/pFQ0/6VUNP+lVTX/plU1/6ZVNf+mVTb/ - plU2/6dVNf+nVTb/p1U2/6dVNv+nVTX/p1Q1/6dUNf+nVDX/p1Q0/6dSNP+nUzT/p1Mz/6dSM/+nUjL/ - p1Ex/6VUNf+LTzj/rqWh/9zc3P/T09P/rqqq+m9pacoAAAAuAAAAFQAAAAYAAAAAAAAAAHBoaMvOzMz9 - 7+/v//Dw8P+TeW//s2VG/71gO/+8WzX/ulo1/7pZNP+5WTP/uVgz/7dYM/+2VzL/tVcy/7RXMv+0VzH/ - s1cw/7FXMf+uTif/p0Ia/6ZBGP+lQRj/pEEY/6NBGP+jQBf/oj8X/6A+F/+gPhX/nz4V/549FP+dPhX/ - nT0V/509Ff+cPhf/nD4X/5s+Ff+YNg3/rm5V/83MzP/JxcX/yMLC/8fAwP/Gv7//xsC//8W+v//Fv7// - xr+//8W/v//U09T/tqag/2k0Hv+ANhf/n00r/6BPLP+fTi7/n08s/6BPLv+gUTD/oFEw/6BRMf+iUjH/ - olIy/6NSMv+jUzL/o1My/6RTM/+kUzP/pFMz/6VTM/+lUzT/pVM0/6VTNP+lUzP/pVMz/6VTM/+lUjP/ - pVIy/6VSMv+lUTL/pVEx/6VRMf+lTzD/pU8v/6NRMv+OUDf/mouF/93d3f/U1NT/urm5/XFpadgAAAAx - AAAAFgAAAAYAAAAAAAAAAHFpadvY19f+7e3t/+7u7v+PcWT/u2hG/75gOP+9XTX/vFs1/7tbNf+6WjT/ - ulk0/7lZM/+3WDP/tlcz/7ZXMv+1VzL/tFcx/7NXMf+zVzL/r1Eq/6lFHP+mQRf/pkEZ/6VBGf+kQBj/ - o0AY/6NAGP+gPxf/nz8V/58+Ff+ePhT/nT4V/549F/+dPhf/nD0X/5w+F/+aNw//ok0p/8OzsP/Hxcj/ - w729/8K9vf/Au7v/wbu7/8C6uv+/urr/v7q6/8C6uv/Cvb3/1tXW/7enoP9qNR3/fTQV/55MK/+gTSv/ - n00r/59OLP+fTS7/oE8u/6BPL/+gTzD/oFEw/6BRMP+gUTD/oFEw/6JRMf+jUjH/o1Ix/6NSMv+jUTL/ - o1Ix/6RSMv+kUjL/pFIx/6NRMf+jUTH/pFEw/6NPMP+jTzD/o08w/6NPL/+jTi//o04u/6JOMP+TTzX/ - inhw/93d3f/V1dX/xcTE/nFra+QAAAAyAAAAGAAAAAcAAAAAAAAAAHJqauXh4OD/7e3t/+3t7f+QbV7/ - wGtI/8BfN/++XTX/vV01/7xbNf+7WjT/ulo0/7pZNP+5WTP/uVgz/7dYMv+2WDL/tVcy/7RXMv+zVzH/ - s1gy/7BTLP+qSB//p0EZ/6ZCGf+lQRn/pEEY/6RAF/+kQBf/oj8X/6M+Ff+fPhT/nz4V/50+Ff+ePhf/ - nT4X/5w/GP+dPRT/mzgO/7SFdP/Dw8f/v7q7/765uf+9t7f/vbe2/7y0tP+7tbX/u7W1/7y2tv+9trf/ - wLu7/9rY3P+9q6b/bjgk/3kwEv+cSij/oEwq/55MK/+eTCv/nk0r/59NLP+fTi7/n04u/59PLv+gTy7/ - nk8v/6BOL/+gTy//oE8w/6BPMP+iTzD/ok8w/6JPL/+iTzD/ok8w/6JPL/+iTy//ok4v/6JOL/+iTi7/ - ok4u/6JNLv+iTSz/ok0r/6FNLf+UTTL/g21l/9zc3P/W1tb/zczM/3JqausAAAAzAAAAGAAAAAcAAAAA - AAAAAHJqauzl5eX/7Ozs/+zs7P+Ta1z/xG1I/8FgOP/AXjb/v142/75dNf+9XTX/vVs1/7tbNf+7WzX/ - u1s0/7paNP+5WjT/t1k0/7ZYM/+1WDL/tFgy/7RYM/+yVTD/rEwl/6dDGv+mQBj/pkIZ/6VBGf+kQBj/ - pEAY/6NAGP+iPxf/oj8X/58/Ff+ePxf/nz8X/54+F/+dPxj/mzgP/6RRLv++sK7/vbu9/7q0tP+6s7P/ - ubOz/7mysv+5srL/ubKy/7eysv+6s7P/vLW2/7+5uf/e3N//zsG9/3hJNf9wKAv/mEYk/59MKf+eSyj/ - nUsp/55MKv+eTCr/nkwr/55NKv+eTSv/nk0s/55MLP+eTSz/nk0u/55MLP+fTS7/n00u/59NLP+fTS7/ - n00s/59NLP+fTSz/n0wr/59MK/+fTCv/n0wr/59LK/+fSyr/n0sp/59LKv+VSi7/gGhe/9zc3P/X19f/ - 0tLS/3Nra/AAAAA0AAAAGAAAAAcAAAAAAAAAAHJqau/p6Oj/6+vr/+vr6/+Xa1r/x29L/8JhOv/BXzb/ - wF83/79fNv++Xjb/vl42/75dNv+9XTX/vF01/7tbNf+6WjX/uVo0/7lZNP+2WTT/tlgz/7VYM/+0WDP/ - tFgz/7BRKf+pRhz/p0EY/6dBGf+lQRn/pUAZ/6RBGP+jQBj/oj8X/6I/F/+gPxf/nz8X/58+GP+ePxj/ - nj8Y/5w3DP+vdV7/vLq9/7ezs/+3srH/t7Gx/7axsf+2sLD/tbCw/7WwsP+3sbH/urOz/7u1tf++ubn/ - 3t7f/+Hc2f+FXUz/ayYJ/5NDIf+fSyj/nUon/51LKP+dSyj/nUsp/51LKf+dSyn/nUsq/51MKv+dTCr/ - nEwq/51LKv+dSyr/nUsq/51MKv+dSyr/nkwq/55MKv+eSyr/nksp/55LKf+eSyr/nkop/55KKf+eSin/ - nkko/51JKP+TSSr/f2Zc/9vb2//Y2Nj/1tbW/3JqavMAAAAzAAAAGAAAAAcAAAAAAAAAAHJqavLq6ur/ - 6urq/+vr6/+abFn/y3JO/8VhO//CXzr/w184/8BfN//AXzb/v182/75fNv++Xjb/vl01/71dNf+7WzX/ - uls1/7tbNf+5WjT/uVkz/7dYMv+1WTP/tVgy/7RYM/+yVS//rEoj/6hCGf+nQhj/pkIZ/6RCGf+kQRj/ - pUEY/6Q/F/+iPxf/oEAX/6BAF/+gPxf/oD8Z/549FP+ePRT/s41//7q7vv+1sLD/ta+v/7Wvr/+1r6// - tK+v/7Wvr/+1r6//t7Gx/7q0tP++t7f/wbu8/97c3v/v7Ov/j2pa/2klCP+UQiD/nkkm/5tIJv+cSCb/ - nEgn/5xKJ/+cSib/m0oo/51KKP+cSSj/nEoo/5tKKP+cSij/nEkn/5tKJ/+cSif/nEoo/5tKJ/+bSij/ - nUko/51JKP+cSSj/nUgn/5xJJv+bSCb/nEgn/5xIKP+TSCn/f2Ra/9vb2//Z2dn/2dnZ/3JqavQAAAAy - AAAAFwAAAAcAAAAAAAAAAHJqau/n5+f/6urq/+rq6v+ba1n/zXNR/8ZjPP/FYTr/xWE6/8NgOP/CXzj/ - wV84/8BfN/+/Xzf/vl82/75dNv+9XTX/vV01/7tbNf+7WjX/ulo1/7daNf+3WTT/tlgz/7VYM/+1WDP/ - s1cy/69RKf+rRx7/qEEY/6ZBGP+mQRj/pUEY/6VBGf+kQBj/o0AX/6JAGP+gPxj/oj8Y/6A/Gf+eOxD/ - o0gh/7aZjv+5ur7/tbCw/7Wvr/+1r6//tK+v/7Surv+1r6//trGx/7qzs/++t7f/w76+/8a/v//g3t// - 8/Dw/5BsXf9qIwX/lUMg/51IJP+bRyT/nEgk/5tHJP+bRyX/m0gm/5pIJv+aSCX/m0gl/5tIJv+aSCX/ - mkgm/5tIJv+aRyX/mkcm/5pIJv+aSCb/m0cl/5tHJf+bRyX/mkcl/5tHJf+bRyX/m0gm/5tIJv+TSCj/ - fmVb/9vb2//a2tr/19fX/3JqavMAAAAwAAAAFgAAAAYAAAAAAAAAAHJqauzi4uL/6urq/+np6f+aa1n/ - znZV/8hmQP/GYTv/xmE6/8VhOv/CYDj/wl84/8FfOP/AXzf/v183/79eNv++Xjb/vl41/71dNf+8WzX/ - uls1/7pbNf+5WTT/uVk0/7dZM/+1WDP/tVcz/7RYM/+zVjH/rk0n/6lFHP+nQhj/p0EY/6ZBGP+lQRj/ - pEAY/6RAF/+iQBj/oj8Y/6I/GP+gQBn/nToQ/6NIIf+3lIj/urq9/7Wxsf+1rq7/tK+v/7Wvr/+1r6// - trGx/7qzs/++ubn/w729/8rDw//LxsX/5uXm//Xx8f+EWUf/cCYG/5lGIf+cRiH/m0Yh/5pGI/+bRiP/ - mkYj/5pHJP+aRyT/mkYk/5lGJP+aRiP/mkck/5lGJP+ZRiT/mUYj/5lGJP+ZRiT/mkYk/5pGJP+aRiT/ - mkcl/5pHJf+aRyX/mkcl/5tHJv+QRin/fmdd/9zc3P/b29v/1dXV/3JqavAAAAAuAAAAFQAAAAYAAAAA - AAAAAHJqauXc29v/6enp/+jo6P+cbVz/zndW/8pqQ//IYTr/yGI7/8dhO//GYTj/w2E4/8NfOP/CXzf/ - wl83/8FfN/++Xjb/vl42/75eNf+9XTX/vV01/7xbNf+7WzX/ulo0/7paNf+3WTT/tlgz/7RZM/+1WDP/ - tFgz/7JUL/+uTCX/qEUc/6dBGP+lQRf/pUEY/6VAF/+kQBf/o0EY/6JBGP+iQRn/okAa/546Ef+jQhr/ - tIh4/7q5u/+1sbP/ta6u/7WwsP+1sLD/ubOx/7u1tP+/ubn/xb6+/8rGxf/Ry8v/1M3O//Dw8f/q4t// - cj8o/3wvDv+cRiH/mkMf/5lDH/+aRSD/mUYg/5pFIP+ZQyD/mEUh/5lDIP+ZQyH/mUMg/5hFIf+YRiH/ - mUUh/5hFIf+YRSH/mUUj/5lFI/+ZRSP/mkUj/5pFI/+aRSP/mkcl/5pGJv+NRin/gWxj/93d3f/c3Nz/ - 0dDQ/3FpaeoAAAArAAAAEwAAAAUAAAAAAAAAAHJqatrU0tL+6Ojo/+fn5/+gc2H/zHdW/81tSP/IYzv/ - yGM7/8hiO//HYTv/xmE6/8VhOv/DYDj/w184/8JfN//AXzj/wF83/8BfN/+/Xjb/vl42/75bNv+8XTb/ - vFs1/7tbNf+6WjT/uVo0/7dZNP+2WTP/tVgy/7VYM/+0WDP/sVMu/6xMJf+oRRz/p0EY/6ZAF/+lQBj/ - pEAY/6NBGP+jQRj/o0AZ/6JAGv+fOxL/oD4T/7OBbf+8ubv/tbO0/7awr/+5sbL/urOz/722tv/Bu7v/ - x8DB/8zHx//TzM3/2NPU/9zW1v//////zLqz/2YoDf+NOBX/nEUe/5lCH/+ZQh7/mUMf/5lDH/+ZQx// - mEIf/5lDIP+ZQyD/mUMg/5hDIP+YQyD/mEMh/5hFIP+YQyD/l0Uh/5dFIf+YRSP/mEUj/5hFI/+ZRSP/ - mUUj/5hGJf+JRSr/hXJr/93d3f/d3d3/y8nJ/m5mZuEAAAAnAAAAEQAAAAQAAAAAAAAAAHFpacrIxsb9 - 5+fn/+bm5v+hemz/ynRS/9J0Tv/KYzv/yWQ8/8pjPP/IYjz/yGI8/8djO//FYjv/xWE7/8NhO//CYDr/ - wWA4/8FfOP/BXjj/wF43/79eN/+9XTb/vV02/7xdNf+7XTX/uls1/7paNP+3WjT/tlkz/7ZZM/+1VzP/ - tVgz/7NYM/+yVDD/rk0n/6lHHf+nQhn/pUAY/6RAF/+jQRn/o0EY/6NAGf+jQBr/oD4U/6A7EP+yeWH/ - u7m6/7m0tf+6s7P/vLW2/8C5uv/Dvr7/ycPD/8/Jyv/Uz8//2tXV/97Y2P/m4uP//////517bP9vJQT/ - mUEc/5pCHf+aQx7/mUIf/5lDH/+ZQx7/mEIf/5lDH/+YQx//mUMf/5hDIP+YQyD/mEMg/5hDIP+YQyD/ - l0Ig/5dDIf+YQyH/l0Mh/5hFIf+YRSH/mEUj/5dGJf+ERCn/joB7/97e3v/e3t7/wb+//WxkZNQAAAAk - AAAADgAAAAMAAAAAAAAAAHBpabW6t7f65ubm/+fn5/+fg3n/ynJP/9R5Vf/LYzz/y2Y+/8tlPv/KZT7/ - ymQ9/8hkPf/GYzz/x2I8/8ZiO//FYTv/w2E7/8JhOP/BXzj/wV84/8FeN/+/Xjf/vl03/75dN/+9XTb/ - vF02/7xdNP+6WzT/uVs0/7daNP+3WDT/tlkz/7VYMv+0WDP/s1gz/7JVMP+vTyn/qkkf/6ZCGf+lPxX/ - pEAX/6RBGf+jQBn/pEEa/6A9FP+gOg//s31p/727vf+7t7n/vrm5/8K9vP/HwcH/y8bG/9LMzP/X0tL/ - 3dfX/+Ld3f/i3d3/9/b3/+nh3v9xNx//iDUS/5xDH/+aQh3/mkId/5pBHv+ZQh//mUMf/5lDH/+ZQh7/ - mEMf/5hDHv+YQh//mEIg/5hDIP+YQyD/l0Mg/5dDIP+XQyD/l0If/5VCH/+VQh//l0Mg/5ZGJf+ARCv/ - nJSS/9/f3//f39//tLGx+mlhYcMAAAAgAAAADAAAAAIAAAAAAAAAAHBoaJirpqb35eXl/+bm5v+uk4r/ - yG5L/9iCYf/NZT3/zGY+/8tmPv/LZT7/y2Q9/8pkPf/JYzz/yGM8/8djPP/GYjv/xWE7/8NhO//DYTr/ - wmA4/8FgOP/BXzf/wF84/79eN/++Xjb/vV02/7xdNv+7XTX/u101/7lbNf+3WzT/uVo0/7ZZNP+2WTP/ - tVgy/7NXMv+zWDP/slYx/69SLP+rTCX/p0Yd/6VBGf+kQRj/pEAY/6NAGf+gPRP/oj0T/7aPgP/CwsX/ - wr29/8bAwf/Lxcb/z8vK/9XP0f/a1dX/4Nra/+Pe3v/o4uH/6eTk//////+lg3b/ciQE/5xDHv+bQx3/ - mkMd/5pBHf+ZQh3/mkId/5lCHv+ZQh7/mUIf/5lDHv+YQh7/mEIe/5hCH/+XQh//l0Mf/5dCH/+XQh// - lUMe/5dCH/+VQh//lUIf/5NEIv9/STL/sqyq/+Dg4P/g4OD/o5+f9mRdXaoAAAAcAAAACQAAAAEAAAAA - AAAAAG9nZ3GYk5P05eXl/+bm5v+3qaX/v2tK/9uHZ//RbEb/zWU9/8xmPv/MZj7/y2U+/8tlPv/KZT3/ - yWQ8/8ljPf/HYzz/x2I8/8ZiO//FYjr/w2E6/8FhOv/BYDj/wV84/8FfOP+/Xjf/v102/75dNv+9XTX/ - vF02/7tbNf+6XTT/uVs0/7daNP+3WTT/t1o0/7ZZM/+0WDP/tFgz/7JXMv+yVzL/sVUw/65RKv+qSyT/ - p0Ye/6VCGv+kQRn/oDoP/6hNKv/Csq//yMbI/8vGxv/Pysr/1M7O/9nU1P/f2Nj/4t3d/+Tg4P/p5OT/ - 6uTk//z8/f/f087/cC8T/5M8GP+dQh3/mkEd/5pCHf+ZQh3/mkId/5lBHf+ZQh3/mUId/5lCHv+YQh7/ - mEIe/5hCHv+YQh7/l0If/5dCHv+XQh//l0Ee/5VBHv+VQh//lUIf/5BBIf96UD7/yMfG/+Hh4f/h4eH/ - kYyM81tVVYkAAAAXAAAABwAAAAAAAAAAAAAAAG1lZUGIgoL05OTk/+bm5v/LxcL/uG5S/92Jav/VdlH/ - z2Q7/89mP//OZj//zWY+/8tmPv/LZj7/y2U+/8tlPf/JZD3/yWQ8/8hkO//HYjz/xWI8/8VhOv/CYTr/ - wV84/8FgOv/BYDj/wV84/75eNv+/XTf/vl02/71dNf+8XTT/ul00/7pbNf+3WzT/t1s0/7dZNP+2WTT/ - tlk0/7VYM/+0VzL/s1Yy/7JXMv+xVjH/r1Qw/6xSK/+pTCb/p0gg/6M7Ef+8jHv/zs7R/87Jyf/Tzc3/ - 2NPT/9zX1//g3Nz/5ODg/+jj4//r5ub/7ejo//Pw8f/8+vn/iVdD/4QuC/+eQx7/m0Ed/5tBHP+bQRz/ - mkId/5pCHf+aQh3/mUIc/5hBHf+ZQh7/mEEe/5hCHv+YQh7/mEEe/5dCHv+XQh3/lUEe/5VBHf+VQR3/ - lUEe/4k+Hv99YVT/29vb/+Li4v/i4uL/gnx89ExGRl4AAAATAAAABQAAAAAAAAAAAAAAAAAAAAOCe3vs - 0tHR/+fn5//f3t7/snRb/9+Ma//dhmT/0WU7/9FoP//PZj//zmY+/81mPv/MZj7/zGY+/8tmPv/KZT7/ - ymU9/8lkPP/IZDz/xmM8/8diO//FYjv/xWE7/8NgOv/BYDr/wV84/8FfOP/AXjf/v143/79dNv+9XTb/ - vF02/7xdNf+6XTT/uls1/7dbNP+3WjT/t1o0/7ZZM/+1WTP/tVgz/7NXMv+zVjH/sVUx/7FWMf+wVjH/ - r1Uw/6pKJP+8dlv/4N3e/97c3P/e2Nj/39nZ/+Da2v/j39//5uLi/+rj4//s5ub/7enp/+/r6/////// - q4l8/3ooBf+dQhv/m0Ec/5tBHP+bQRz/mkEc/5pBHP+aQRz/mkEc/5lCHf+ZQh3/mEAc/5hBHf+YQRz/ - mEEc/5dBHf+XQR3/lUEe/5VBHf+VQB3/lEEe/4M9IP+Ab2j/5ubm/+Xl5f/T0tL/e3R07AAAACQAAAAP - AAAAAwAAAAAAAAAAAAAAAAAAAAF9dXXHv729/ufn5//j4+P/rYNz/9uBXf/ilXn/02tD/9JoP//RaD// - z2g//85oP//NZj7/zWY+/8xmPv/LZT7/y2U+/8pkPf/JZD3/yWQ8/8hjPP/HYjv/xWI7/8ViO//CYTr/ - wmA4/8FgOP/BXzj/wF84/8BeN/++XTf/v102/75dNf+8XTX/u101/7ldNf+5WzT/t1o0/7daNP+2WTT/ - tlk0/7RYM/+0VzL/slYx/7JVMf+xVTD/sFUx/69PKv+3akn/5t/d/+zr7P/t6en/7urq/+3q6v/u6ur/ - 7enp/+7q6v/v6+v/7+vr/+/q6v//////w6ug/3YoB/+bPhj/nEAa/5tAG/+bQBv/mj8a/5pAG/+aQBv/ - mj8a/5lAG/+ZQBv/mUAb/5hAG/+XQBv/lz8b/5c/G/+VPxz/lUAc/5VAHP+VQBz/kUEf/39EK/+Zko// - 6enp/+jo6P/CwMD+cWtrzQAAAB0AAAAKAAAAAQAAAAAAAAAAAAAAAAAAAABwaGiKpqKi+eXl5f/m5ub/ - tqCY/9J1UP/pp43/2HZR/9NmPf/SakD/0mk//9FpP//PaD//zmg//81mP//MZj7/y2Y+/8xmPv/LZT7/ - y2U9/8lkPf/JYz3/x2M8/8diO//GYjv/xWI7/8NgO//CYDr/wWA4/8FfOP/AXjb/wF01/8BeNv+/Xjf/ - vV02/7xdNv+7XTX/ul00/7dbNP+3WTT/t1o0/7ZZNP+2WTT/tVgz/7NXMf+zVjD/slUw/7BOKP+3Zkb/ - 6ODd/+/v8P/v7Oz/8e7u//Tw8P/08fH/9vPz//f09P/28/P/9vHx//Tw8P//////2MnD/4I8Hf+cQh7/ - oEgk/59HIf+eRiD/nUUg/51FH/+cQx//m0Mf/5pDH/+bQx//mkMf/5pDH/+aQyD/mkUh/5pGI/+ZRiP/ - mkcl/5pHJv+aSSf/lEkp/4FXRf/Lycj/7Ozs/+vr6/+ppaX6Y1xcnQAAABcAAAAHAAAAAAAAAAAAAAAA - AAAAAAAAAABvZ2dHjYeH9+Dg4P/p6en/0s3M/8VtSf/rqY//4pJ0/9RmPf/UakH/02pB/9NpQP/SaED/ - 0Wk//89oP//OZj7/zmY+/8xmPv/LZj7/y2U+/8tlPv/KZD3/yWM9/8hjPf/HYjv/xmI7/8ZiO//DYTr/ - wmE6/8FfN/+5VS7/n0gl/59HJP+2VzL/wV83/79eN/+9XTb/u101/7pdNf+6WzX/uVo0/7daNP+3WjT/ - tlk0/7VYM/+0WDP/s1cy/69OJ/+6bEz/7ujo//Px8//z8O//9fHx//bz8//29PT/9vT0//f19f/49fX/ - 9/X1//bz8///////5NnV/4xKL/+iSyf/qFQx/6ZTL/+mUi//pVIv/6RRLv+kUSz/pFEs/6NPLP+iUSz/ - oE8u/6BPLv+gTy7/n04r/6BPLv+fTyz/nk4s/55OLP+cTi3/kk0w/4JoXf/s7Oz/7+/v/+vq6v+LhYX2 - UkxMYQAAABEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACh4GB5sjGxv/q6ur/4+Pj/7GAbv/nknL/ - 8Lql/9VtQ//VakH/1WpB/9RqQf/TaUD/0mlA/9JoQP/PaD//z2Y//85mP//MZj7/zGY+/8tlPv/LZD3/ - ymQ9/8lkPf/IYzz/yGM8/8diPP/GYjv/w2A3/8VjPf/RoI7/xauj/5VkUv+GOx3/pkwo/71eN//AXzf/ - vl43/7xdNf+7XTX/uls1/7daNP+3WjT/t1o0/7ZYNP+1WDT/tlo1/65KIf/KlID/9/j6//bz8//29PT/ - 9/X1//f19f/49fX/+PX1//j19f/49fX/+Pb2//bz8///////5drV/41LL/+jSyb/qVQw/6dTMP+nUzD/ - p1Qw/6VSMP+kUy//pFIv/6RSL/+kUi7/o1Mu/6JRLv+iUSz/ok4r/6BOLP+fTiz/nk0r/55NK/+bTy7/ - iUw0/5OLh//z8/P/8vLy/9bV1f+Ce3vmAAAAHgAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB - e3Nzo66qqvzn5+f/6Ojo/7emoP/YeVT/98m2/+CJaP/VaD3/1WtC/9VrQf/UakH/1GpB/9NqQP/SaED/ - 0WY//9FoP//OZj//zmY+/81mPv/MZj7/y2Y+/8tlPv/KZT3/yWQ9/8lkO//HYz3/wlox/8x5WP/z7u7/ - +f///+rm5v+zl43/hkgw/407Gv+oTSj/uVgz/75dNv++Xzb/vV82/7xeNv+7XTX/ul01/7pbNf+5WTP/ - r0sk/69hQP/q3Nf/+vv8//j19f/49vb/+fb2//n39//59/f/+ff3//n29v/49fX/+PX1//fz8/////// - 4tXR/49KLP+lTSf/qVQv/6hSLv+nUi7/p1Iv/6ZSL/+kUS7/pFEu/6RRLv+kUS7/pFEr/6NRK/+iUSz/ - ok8r/6BOK/+gTiv/n04r/55NK/+YTy//glZE/9HQ0P/19fX/9PT0/7i0tP1tZ2euAAAAFgAAAAcAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb2dnTI+Jiffe3d3/7+/v/9rY2P+/eF3/86uR//C0nv/WaD3/ - 1mxC/9ZrQv/Va0L/1WtB/9RrQP/TakH/0mpB/9JpQP/PaD//z2hA/85oP//NZj//zWY+/8xmP//KZT7/ - y2Q9/8pkPf/IZD3/xVow/89/X//07u3/9Pb3//f3+P/5+/3/3tXS/6+MgP+NUjz/iz4g/5hBH/+lSST/ - rE4o/7FSKv+zUyv/sVIq/6pMJf+gRR//qGJG/+DMxf/9////+fb3//n39//59/f/+ff3//r4+P/69/f/ - +ff3//n29v/49vb/9/X1//Xz8///////1L62/49BIf+qUiv/qlQv/6hTLv+oUi7/p1Iu/6dSL/+nUi7/ - pFEs/6RRLP+kUSz/pE8s/6NPK/+jTyv/ok8r/6BOK/+gTSv/oE0r/59OLP+QTC3/hXRs//n5+f/4+Pj/ - 8PDw/5GMjPdWUFBjAAAADwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYqEhN3Bv7// - 7e3t/+bm5v+5lor/5Yhm//jKt//ghWH/1mg8/9dtRf/XbEP/1mxD/9VsQv/Ua0L/02tC/9NqQf/SakH/ - 0WlA/9FpQP/OaED/zmg//85oP//NZj//zGU+/8tkPv/KZT7/xlsx/9J/X//48fD/+fr7//b09P/39vb/ - +/z9//z9///q5eP/ybSs/6uFeP+calb/lFc9/5JOM/+UTzP/mFQ4/6VrU/+/nI3/7ebl///////7+fn/ - +vj4//r4+P/6+Pj/+/j4//r4+P/6+Pj/+vf3//n29v/49fX/9/T0//Xx8///////x6ea/5M+G/+sVC// - qlMv/6pTLv+pUiz/qVIu/6dSLv+nUi7/plEr/6VPLP+kTyv/pE8s/6NPK/+jTyv/ok8r/6BPK/+iTSv/ - oE0r/5xOLv+HUTv/vLi2//r6+v/6+vr/1dPT/4V/f90AAAAZAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAHBoaHmfmpr65ubm/+/v7//MyMn/0XpZ//W1nf/vsJn/2GxB/9dtQ//YbkX/ - 2G5F/9dtQ//WbEP/1WtC/9VrQv/Ua0L/02tB/9JqQf/RakD/z2lA/89pQP/OaD//zWg//81lPv/MZj// - yFoy/9SAYf/69PT//P3///n39//59/f/+ff3//n39//9/Pz///////3////29PT/6uTh/+PZ1v/h19P/ - 6N7c//b08/////////////z5+f/8+vr//Pr6//z6+v/8+fn/+/n5//r4+P/6+Pj/+ff3//j19f/39PT/ - 9vHx//b09P//////sYBs/51CHf+vVDD/q1Mv/6pTL/+qUy//qlEu/6lSLP+pUiz/qFIr/6ZRK/+lTyv/ - pU8r/6VPK/+kTir/o04q/6NOKv+iTir/n00s/5VLLP+Ga2D/9PT0//z8/P/7+/v/qaWl+mJbW4oAAAAQ - AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlhYRaMhobuycjI//Ly8v/k5OX/ - u5SG/+uRb//4zLv/44hm/9hpP//Zbkb/2G5F/9htRf/XbEP/1mxD/9ZsQv/VbEL/1GtC/9NqQv/SakH/ - 0mpA/9FpQP/PaED/zmg//85oP//NaD//yV0y/9WCYf/89vX///////z6+v/8+vr//Pr6//z6+v/8+fn/ - +/n5//37+//////////////////////////////////9+/v//fv6//37+//9+/v//fv7//z6+v/8+vr/ - +/n5//r4+P/69/f/+fb2//f19f/28/P/8+/v//v7/P/17On/nFQ2/6pOJ/+vVTD/rFMv/6xTL/+rUy// - qlEu/6lRLv+pUi7/qVEr/6hRK/+nUSv/pU8r/6VPK/+kTiv/pE4q/6ROKv+jTir/nk0s/4tPNf+yrKr/ - /v7+//39/f/h39//jYeH7TMvLy0AAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACBenqbpqKi++jo6P/w8PD/z8zN/9ODZf/0spn/9b+r/91xSf/abUX/2W5G/9luRf/YbUX/ - 121F/9dtQ//WbEP/1mxD/9VrQv/TakH/02pB/9JqQf/RaUD/z2lA/89oQP/OaED/y14y/9aCYv/9+Pf/ - //////38/P/9+/v//fz8//38/P/9/Pz//fz8///8/P///Pz///z8///8/P///Pz///z8///8/P///Pz/ - //z8///8/P/9/Pz//fv7//z6+v/7+fn/+/n5//r4+P/49/f/+Pb2//b09P/08fH/8O3t///////Pr6L/ - nUId/7FVMP+vVC//rlQu/6xUL/+sUy//q1Ms/6pRLP+qUi7/qVEu/6lRLP+oUSv/pk8r/6VPK/+lTyv/ - pU4q/6ROKf+jTyv/lk0s/4ptYf/39/f///////7+/v+2srL7dW5uogAAABAAAAAFAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsZWUhjYaG8MjIyP/z8/P/5ubm/7mhmf/pkXD/ - +sq3/+mYev/ZaD7/3G9H/9pvRv/Zbkb/2G1G/9huRf/YbUX/121F/9dsQ//VbEP/1GtC/9NrQv/TakH/ - 0mpB/9FpQf/PakH/zF80/9iEY///+vn//////////////f3///////////////////////////////// - //////////////////////////////////39///8/P///Pz//fv7//z6+v/7+fn/+vj4//j29v/49fX/ - 9vT0//Xx8f/u6+v/+fn6//r08f+rY0b/rkwn/7FVMP+vVC//r1Qu/65ULv+uVC7/q1Qv/6tTLv+qUiz/ - qlEs/6lRLP+pTyz/qE8s/6ZPK/+lTyv/pU4r/6VOKv+hTy3/iVA5/7y4t////////////+Ph4f+Qi4vv - RD8/NQAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - gnt7laKenvrn5+f/8vLy/9nZ2P/Lj3r/8aKD//nHtP/igFv/3GtB/9xvR//abkb/2m5G/9luRf/YbkX/ - 2G1F/9htRf/WbEP/1mxC/9VrQv/Ua0L/02tC/9JqQf/RakL/zF80/9mFZf///Pr///////////////// - //////////////////////////////////////////////////////////////////39///8/P///Pz/ - /fv7//z6+v/7+fn/+ff3//f19f/29PT/9PHx/+/s7P/z8fP//////8aVgf+mRh//s1Yx/7JWMf+wVi// - r1Uv/69UL/+vVC7/rlQu/6xTLv+rUyz/qVIs/6pSK/+qUSv/qE8s/6hPK/+nTyv/pk8r/6VPLP+TSSr/ - k393/////////////////7Ourvt0bm6bAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamNjDY6IiOfAvr7/8PDw/+rq6v/Curj/4ZF0//i6ov/0uaL/ - 3m9G/91tRf/cb0f/3G9G/9puRv/ZbkX/2G5F/9huRf/XbUX/121D/9ZsQ//VbEP/1WtC/9NrQv/Ta0L/ - zl81/9yGZf////v///////////////////////////////////////////////////////////////// - ///////////////////////8/P//+/v//fv7//v5+f/59/f/+Pb2//b09P/18fH/7+3t//Hw8f////// - 2rSl/6pNKP+0VS7/s1gz/7NWMv+yVjD/sVYw/69UL/+vVC//r1Qv/65ULv+sUyz/q1Is/6pSLP+qUiv/ - qlIr/6hPK/+nTyv/p08s/59LKP+NYlL/5eTk//7+/v/+/v7/3Nra/5GLi+crKCggAAAABwAAAAEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFpaWWWkZH3 - 3Nvb//f39//h4eH/w6SZ/+yUcv/3vqj/7J+B/91sP//eb0f/3XBH/9xvR//cbkf/2m5G/9huRv/YbkX/ - 2G5F/9huRf/XbEP/12xD/9VsQ//VbEP/0mQ6/9d3Uf//8Or///////////////////////////////// - //////////////////////////////////////////////////39///8/P/9+/v/+/n5//n4+P/49/b/ - 9vT0//Pw8P/w7u7/+Pv8///////ftqb/r1Mu/7ZWL/+3WTP/tVkz/7RYMv+zVzL/s1cy/7FWMP+xVjD/ - sFUv/69UL/+vVC7/rlEs/6xSLP+rUiv/qlEr/6pRK/+oTyv/pE8s/5BOM/+tpqP//Pz8//39/f/z8/P/ - oJub+GJbW3UAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAGMhobFr6ur/Onp6f/w8PD/29zc/8mdjv/wnHv/+sm1/+qUcv/ebED/ - 3nBH/95wR//db0f/3G5H/9puR//Zbkb/2G5F/9huRf/YbUP/121F/9dtQ//WbEP/1GtC/9JkO//imHr/ - //bw//////////////////////////////////////////////////////////////////////////// - //39//37+//8+vr/+/j4//j19f/18/P/9PHz//j5+v////////bx/9egi/+zUir/uVUu/7pbNf+3WjT/ - t1k0/7VZM/+1WDP/s1Yy/7NXMf+yVjD/sVYw/7FVMP+wVS//r1Mv/6xTLP+sUiz/rFIr/6pSLP+pUCz/ - mEkp/5iHgf/6+vr/+/v7//v7+//DwMD8h4GBxAAAAA8AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxaWkpjoiI7MHAwP/v7+// - 6urq/9DMzf/Zm4X/8aiN//rKuf/oiWb/3mxA/99wR//eb0f/3W9H/9xuR//ab0b/2m5G/9luRv/YbkX/ - 2G1F/9htRf/XbEP/1mxD/9VrQv/RYjb/2HpV/+66pv//7OT///////////////////////////////// - ///////////////////////9/f///f3//fv7//v5+v/6+Pj/+ff4//r6+//////////////49f/pwbL/ - xXFR/7ZRKP+7WjL/vV01/7paNf+6WjX/uVo0/7dZNP+2WDP/tVgz/7RXMf+zVzH/s1cx/7FWMP+xVTD/ - sFUv/69ULv+uUyz/rFMs/61UMP+eTCr/lXNm/+zs7f/4+Pj/+fn5/9za2v+Tjo7tU01NOAAAAAcAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAcWlpZJOOjvXV1NT/9PT0/+Tk5P/KwsL/5Zh7//SpjP/4waz/5YJd/99tQP/fcEf/ - 33BH/95vR//db0f/3G9G/9xuR//abkb/2W5F/9luRf/YbkX/2G5D/9ZsQ//WbEP/0mQ7/9FhNf/WdU7/ - 5JyB//TItv//7+n///////////////////////////////////////////////////////////////// - ///////8/P/339b/4q+a/8p4WP+8Vi//vVYv/79eN/++Xjf/vl42/7xbNf+7WzX/u1o1/7paNP+5WjT/ - uVk0/7ZYM/+1VzL/tVcx/7NXMP+zVjH/slYw/7FVL/+wVC//r1Uw/6RMJv+XaFX/2dnZ//X19f/29vb/ - 6unp/5uWlvZlXl5vAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeBgaeinp744uLi//X19f/g4OD/ - 1cC5/+mXdv/0rpH/9r2n/+aEXv/fbUH/4HFI/99wR//ecEf/3m9H/91vR//cbkf/3G9G/9luRv/ZbkX/ - 2G5F/9htRf/XbUP/1m1F/9VrQv/TZDr/0WA0/9FiN//Uckz/3Idm/+Wmjf/rs53/8cm5//nf1P/64df/ - +eDW//jg1v/54Nf/9tjM/+y/rP/lr5n/3Jd8/855Vv/FYz3/v1Ys/75WLv/BXjb/wWE6/8FeOP/AXjf/ - v143/75dNf+9XTX/vFs1/7tbNf+6WjX/ulo0/7daNP+2WTP/tVcy/7VXMv+0VzH/s1cx/7JWMP+wVzH/ - p08q/5pfRv/Cvr3/8vLy//Pz8//y8vL/rqqq+IB5eaYAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAGMh4fLraur+uXl5f/y8vL/39/f/9G+tv/pm3z/9KyR//fBrP/oi2b/4GxA/+FxR//fcEf/ - 3nBH/95wR//db0f/3G9H/9xuRv/abkb/2W5G/9luRf/YbUX/2G1D/9dsQ//WbEP/1WxC/9VpQP/SZTz/ - z2M3/81fNP/MXTL/zGE2/81lPf/OZj7/zWU9/8xkPf/LZT3/ymI4/8ZaMf/DVyz/xVow/8VdM//FXzX/ - xWA6/8ViO//CYTr/wWA6/8FfOP/BXzj/wF43/75eNv++XTX/vl01/7xbNf+7WzX/u1s1/7paNP+5WTT/ - t1cy/7ZYMv+1VzH/tFcx/7NZM/+rUi3/nV9F/7m0sv/v7+//8PDw//Dw8P+7ubn6iIODyQAAAA0AAAAE - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwaGgejYeH3bazs/vn5+f/8PDw/97e3v/Tvrf/ - 7Jt7//Wqjv/6yrn/7JV1/+BtQf/gb0X/4HFI/+BxSP/fcEf/3nBH/91wR//cb0f/3G5G/9luRf/Zbkb/ - 2G5G/9huRf/XbUX/12xD/9VtQ//Va0L/1GtC/9NrQv/Ta0L/0mlA/89mPv/OZj7/zWU9/81lPf/NZTz/ - zGU8/8tlPv/LZT7/ymU9/8ljPf/IYzz/x2M8/8ZiO//FYjr/w2E7/8JgOv/BYDj/wWA4/8BfOP+/Xjb/ - vl42/75dNf+9XTX/vF01/7tbNf+6WzX/ulkz/7dYM/+3WDP/tVkz/65OKf+hYUf/vri2/+7u7v/v7+// - 7u7u/8TBwfyMhobbUUtLKQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - cWlpNIyGhuS7uLj86Ojo//Dw8P/e3t7/0sS+/96eiP/2pon/+8i0/+6gg//hckj/4G5D/+FySP/gcUf/ - 33BH/95wR//db0f/3W9H/9xvR//abkb/2W5F/9huRv/YbkX/2G1F/9dtQ//XbEP/1mxD/9RrQv/Ta0H/ - 02pC/9JqQP/PaUH/z2lA/85oP//OaD//zmg//8xmPv/LZT7/y2U+/8pkPf/JYz3/yWQ9/8hjPP/GYzz/ - xmI7/8VhOv/DYTr/wmA4/8FgOv/AXzj/wF82/75eNv++XTb/vl41/71bNf+8WzX/uls1/7paNP+5WjP/ - rk4o/6FuWv/AvLr/7e3t/+7u7v/t7e3/yMbG/I2Hh+ReV1c/AAAABQAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqaj+LhYXlure3/Ofn5//y8vL/4ODg/8fBwf/co43/ - 76KD//m+qP/2u6T/5oRe/99sP//hcUf/4HBH/99xR//fcEf/3nBH/91vR//cb0f/2m5G/9puRv/ZbkX/ - 2G5F/9huRf/YbUP/121D/9VrQ//Va0P/1GtC/9NrQf/TakH/0mlB/9FpQP/PaT//zmk//81mPv/MZj7/ - zGY+/8tlPv/KZD3/ymQ9/8ljPP/IYzz/x2M7/8ZiO//FYjv/xWE7/8JhOv/CYDr/wV83/8BfNv+/Xjb/ - vl42/75dNv+9XTX/vF01/7lZM/+sUS7/pnlo/83Nzf/u7u7/7e3t/+vr6//HxcX8jIaG5WJbW0gAAAAF - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByamo/ - jIaG5Lazs/vk5OT/9fX1/+Tk5P/Pzs//zaqc/+6df//5uqD/+say/+2cfP/idkz/4G1B/+BxR//gcUf/ - 33FH/95wR//ecEf/3XBH/9xvR//abkb/2m5G/9luRf/YbkX/2G1F/9dtRf/XbUP/1m1D/9RsQv/VbEL/ - 1GtC/9NqQf/RaUH/0WlB/89oP//OZj//zWY//8xmPv/MZj7/y2Y+/8tkPv/KZD3/yWQ9/8djPP/HYjz/ - xmI8/8VhO//DYTv/wmE6/8FfOP/BXzf/v183/79fN/++XTb/ulYt/65WM/+qkYf/4uLi/+7u7v/s7Oz/ - 6urq/8K/v/yMhobjZF1dRwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcWlpNI2Hh9ytqqr64ODg//Pz8//o6Oj/2trb/8Kwqv/foYn/ - 9qiJ///JtP/2u6X/6Itm/+FwR//gbUH/4HFI/99xR//fcUf/33BH/91vR//db0f/3G9H/9puRv/Zbkb/ - 2W5G/9huRf/YbkX/121F/9ZsQ//VbEP/1WxC/9RrQv/Ta0H/0mpB/9FpQf/RaD//zmY//81mPv/NZj7/ - zGY+/8tlPv/LZT7/y2U9/8ljPf/IYzz/x2M8/8ZiO//GYjv/xWE6/8NgOP/CXzj/wmA4/8FbMv+3Uyr/ - rWxU/7Kmo//r6+v/7e3t/+rq6v/n5+f/t7S0+oyGhttiW1s8AAAABAAAAAEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBoaB6Nh4fL - op6e+NPT0//u7u7/7+/v/97e3v/EwcH/zqaZ/+ifhf/5tJv/+cCr//Cojf/mhWD/4G5D/+BwRf/gcEf/ - 33BH/95wR//ecEf/3W9H/9xuR//abkf/2m5G/9luRf/YbkX/2G5F/9dtQ//WbEP/1mxD/9VsQv/Ua0L/ - 02tB/9JqQf/RakD/0Wk//85mP//OZj7/zmY+/8xmPv/LZj7/y2U+/8pkPf/LZD3/yWQ8/8hjPP/HYzz/ - xmI7/8ZhOv/EYDj/v1ct/7NcOf+yj4P/1NPV/+rq6v/r6+v/6Ojo/9va2v+ppaX4ioSEyFtVVSUAAAAD - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4GBppKNjfXAvr7/5+fn//f39//n5+f/1tXV/7+zsP/Zn4v/ - 8KSH//ixl//4tp3/8KSI/+aGYv/hdUv/4HBG/+BvRf/fcEb/33BH/95wR//dcEf/3G9H/9puRv/abkb/ - 2W5G/9huRf/YbkX/2G1F/9dsQ//WbEP/1WxD/9RrQv/TakH/02pA/9FpP//PaD//0Wg//85mP//NZj7/ - zGY+/8tmPv/LZT3/ymU9/8pkPv/KZDz/yWE3/8VYL/+9WTD/uH9o/762tf/o6en/6+vr/+jo6P/m5ub/ - y8rK/5eSkvaCe3ukAAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqamOOiIjs - rKmp/NrZ2f/v7+//8vLy/+Pj4//Kycz/vquk/9mfi//so4b/9aqO//m1nP/xp4v/6Ixp/+N7VP/hdUv/ - 4G9F/99vRf/ecEf/3m9H/9xvR//ab0f/2m5G/9luRv/ZbkX/2G5F/9htRf/XbUP/1mxD/9VrQv/Ua0L/ - 1GtB/9JpQP/SaUD/0Wk//89oP//OZj7/zmY//8xmPv/MaD//zWY+/8xhN//GWTD/w142/759Zf+6rKj/ - 4+Pk/+np6f/o6Oj/5eXl/93c3P+1sbH8kYuL7mtkZGkAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABxaWkpjIaGxZWQkPe9u7v/5OTk//Pz8//w8PD/4uLi/8rIyf+7rqn/ - yaKS/9+bgP/vo4X/96qN/++fgP/qjGn/5H9Y/+F2Tf/gckn/33BH/91vRv/db0f/3G5H/9puRv/Zbkb/ - 2W5F/9huRf/YbUX/2GxD/9ZsQ//WbEP/1WxC/9RqQf/TaUD/0mlA/9FoP//RaUD/0Wg//89lPf/OYDT/ - x10z/8JqRv/AkYL/vrOw/+Li4//o6Oj/6Ojo/+bm5v/j4+P/xsTE/5qUlPiJg4PDZV5eLgAAAAIAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqamSNh4fm - oJyc+sXExP/m5ub/9PT0//Hx8f/l5eX/1NPT/724t//Bo5n/2ZmA/+WafP/rmXn/7ZJw/+qHYf/mfVb/ - 5XhP/+N0Sv/gcUj/33BH/95vR//db0f/3G5H/9puRf/ZbkX/2W5F/9ltRf/XbUP/2GxD/9hsQf/Wa0H/ - 1Wo//9RoPf/SYzj/zGQ8/8tqRf/JgWT/w6ee/8vIyf/l5eb/6Ojo/+jo6P/l5eX/4uLi/8zKyv+loaH6 - j4qK521lZWkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAABza2sMgnx8lIuFhe+jn5/7xMLC/+Tk5P/x8fH/9vb2/+zs7P/g4OD/ - zs3O/7Wuqv+2npf/w5qK/9aYgf/hjW//4Idl/92AXf/le1T/5HpS/+F3Tv/gdUv/33FJ/95wSP/dcEf/ - 3G5F/9pvRf/abkb/2W1F/9JuSP/Ubkf/0nVT/8uDZ//DlYT/vqih/8W/vv/i4uP/6enq/+vr6//o6Oj/ - 5OTk/+Dg4P/KyMj/qKSk+46IiPB9d3eUUUtLEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNrax+Ce3ub - i4WF7Z2Xl/m7ubn/29vb/+rq6v/19fX/9vb2/+3t7f/k5OT/3d3d/8G+v/++s6//uKqm/7ijnP/KnI3/ - wZOD/76PgP+9jHr/u4l4/7qId/+7iHb/u4d1/76NfP/JmIb/y6CR/7+spv/Ds7D/w7u6/9fW2P/o6ur/ - 6+vr/+/v7//u7u7/5+fn/+Li4v/Z2dn/wsDA/5+bm/qMhobufnd3mmNdXSQAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc2trFHJqaneJg4PdjYeH96mlpfzBv7//3d3d/+np6f/x8fH/ - +fn5//f39//x8fH/6+vr/+fn5//i4uL/39/f/93d3f/b29v/2dnZ/9nZ2f/c3Nz/3t7e/+Dg4P/k5OT/ - 6Ojo/+zs7P/w8PD/9fX1//b29v/v7+//6Ojo/+Pj4//a2tr/x8XF/62pqfyPiYn3ioOD3W9oaHpkXV0W - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - cmpqS3x1daGGf3/li4WF9qKdnfm3tbX+y8rK/9/f3//l5eX/6+vr//Dw8P/19fX/+Pj4//v7+//9/f3/ - ///////////9/f3/+/v7//j4+P/19fX/8fHx/+zs7P/n5+f/4uLi/9zc3P/NzMz/u7m5/qSgoPmMhob3 - h4CA5npycqJvZ2dMAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc2trRXNra4h9dXXFgXp67IaAgPSVj4/z - pKCg9rGvr/q+u7v9xsXF/s7Ozv/T09P/1tbW/9jY2P/X19f/1NTU/8/Pz//Ix8f+v729/bOwsPqloaH2 - lpGR9IeAgPSBenrse3R0xXFpaYlvZ2dHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAHNraz5yampuc2trlXJqarJyamrHc2tr2HNra+Nza2vrc2tr7nNra/Fza2vu - c2tr63Nra+Nza2vYcmpqyHJqarNxamqWcWpqbnBoaD8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAP/////////////////////4AAD///////////+AAAAP//////////gAAAAA - /////////+AAAAAAP////////4AAAAAAD////////gAAAAAAA///////+AAAAAAAAP//////4AAAAAAA - AD//////wAAAAAAAAB//////gAAAAAAAAA//////AAAAAAAAAAP////8AAAAAAAAAAH////4AAAAAAAA - AAD////wAAAAAAAAAAB////gAAAAAAAAAAA////AAAAAAAAAAAAf///AAAAAAAAAAAAP//+AAAAAAAAA - AAAP//8AAAAAAAAAAAAH//4AAAAAAAAAAAAD//wAAAAAAAAAAAAB//wAAAAAAAAAAAAB//gAAAAAAAAA - AAAA//gAAAAAAAAAAAAA//AAAAAAAAAAAAAAf/AAAAAAAAAAAAAAf+AAAAAAAAAAAAAAP+AAAAAAAAAA - AAAAP8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAA - AAAAD4AAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAA - AAAABwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA - AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA - AAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAD4AAAAAAAAAA - AAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH+AAAAAAAAAA - AAAAP+AAAAAAAAAAAAAAP/AAAAAAAAAAAAAAf/AAAAAAAAAAAAAAf/gAAAAAAAAAAAAA//gAAAAAAAAA - AAAA//wAAAAAAAAAAAAB//wAAAAAAAAAAAAB//4AAAAAAAAAAAAD//8AAAAAAAAAAAAH//+AAAAAAAAA - AAAP//+AAAAAAAAAAAAf///AAAAAAAAAAAAf///gAAAAAAAAAAA////wAAAAAAAAAAB////4AAAAAAAA - AAD////8AAAAAAAAAAH////+AAAAAAAAAAP/////gAAAAAAAAA//////wAAAAAAAAB//////4AAAAAAA - AD//////+AAAAAAAAP///////AAAAAAAA////////wAAAAAAD////////8AAAAAAP/////////gAAAAA - //////////8AAAAP///////////wAAD//////ygAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABwAAAA0AAAATAAAAGgAAAB4AAAAj - AAAAJgAAACoAAAAsAAAALQAAAC0AAAAsAAAAKgAAACYAAAAjAAAAHgAAABoAAAATAAAADQAAAAcAAAAE - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAFgAAAB4AAAAm - AAAALgAAADMAAAA2AAAAOAAAADoAAAA7AAAAPAAAAD0AAAA9AAAAPAAAADsAAAA6AAAAOAAAADYAAAAz - AAAALgAAACYAAAAeAAAAFgAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAABAAAAAb - AAAAJgAAAC8AAAA2UFBQbWlpaZ90dHTCenp62319fex+fn72f39//H9/f/5/f3/+f39//H5+fvZ9fX3s - enp623R0dMJpaWmfTU1NcAAAADwAAAA6AAAANgAAAC8AAAAmAAAAGwAAABAAAAAHAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAG - AAAADwAAABwAAAApAAAAMmBgYIZ0dHTCfHx86I+Pj/2np6f/xcXF/97e3v/s7Oz/8/Pz//X19f/39/f/ - +Pj4//j4+P/39/f/8PDw/+Xl5f/MzMz/rKys/5CQkP18fHzodHR0wl5eXokAAAA8AAAAOQAAADIAAAAp - AAAAHAAAAA8AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAQAAAAMAAAALAAAAGAAAACdBQUFVcHBwrXx8fOOWlpb+vLy8/9/f3//t7e3/9PT0//b29v/19fX/ - 9PT0//Dw8P/x8fH/8fHx//Hx8f/y8vL/8vLy//j4+P/8/Pz//f39//v7+//5+fn/6+vr/8bGxv+ZmZn+ - e3t7425ubq46OjpdAAAAOgAAADIAAAAnAAAAGAAAAAsAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQAAAAYAAAARAAAAID09PUxzc3OygoKC7aampv/U1NT/5ubm//Dw8P/l5ef/ - zMzM/66rqv+elZH/hXRu/3tfVv96VEj/fVBB/39MPv+BTT7/gFBC/4FVSf+IZ13/jHdx/6WZlv+/vLv/ - 5ubm//7+/v/+/v7/9vb2/+Tk5P+urq7/gYGB7XBwcLQ1NTVXAAAAOQAAAC8AAAAgAAAAEQAAAAYAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAWAAAAJm5ubpyAgIDlpaWl/9XV1f/h4eH/ - 8fHx/8zMzP+ZlZP/gWxl/3RMPf+DRzL/lEwy/6BRN/+nVzv/rlo//7RbQf+3XEH/ultA/71ZP/+9WD7/ - vFU8/7lQNv+wTDX/n0o3/4pRQv+ZgHn/urSz//7+/v//////9fX1/+jo6P+urq7/fHx85WlpaZ8AAAA7 - AAAANQAAACYAAAAWAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAaVFRUXHx8fMqZmZn9 - ycnJ/9ra2v/u7u7/ysnJ/4p/fP9tSDr/gEEp/5JKL/+dUTT/o1Q3/6hXOv+sWjz/sVs9/7VbPv+3Wz7/ - u1s+/75aPv/AWj3/wlg8/8VVOv/GUzn/yFI3/8hRNv/HTTX/vkoz/6hHM/+GUkb/ppqW/+fn5/////// - 8/Pz/97e3v+cnJz9dnZ2y0dHR2gAAAA3AAAAKwAAABoAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAb - bW1th4ODg+Stra3/1dXV/+Li4v/9/f3/mpCM/3BEMv+EPyP/kUco/5hLK/+eUC//pFIx/6hVNv+sWDj/ - rlk6/7JbPf+2Wz7/uFs+/7xbPv++Wz7/wVk+/8NYPP/GVzr/yFQ5/8pSNv/LUDT/zU8y/81MMf/LSzD/ - x0wx/7RIMf+ITD3/r6Sg//7+/v/7+/v/8vLy/7y8vP99fX3lYmJijwAAADkAAAAuAAAAGwAAAAoAAAAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAgAAAAoAAAAbdnZ2n5CQkPS+vr7/0dHR//Pz8//EwL7/gV5P/3o3G/+LQCD/k0Uj/5lIJv+cSyr/ - oU8u/6RSMf+nVDX/q1g4/65ZOv+yWzz/tVs+/7hbPv+8Wz7/vls+/8BZPv/CWDz/xVc6/8hVOf/JUjf/ - y1E1/85PM//PTC//z0ou/85KLv/MSS7/x0sx/69JM/+HW1D/29fV///////v7+//1tbW/46OjvRra2ul - AAAAOgAAAC4AAAAbAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAae3t7qpiYmPnFxcX/z8/P//////+klpH/bTMa/4Q4F/+MPBf/ - kT8c/5ZCH/+aRyT/nUoo/6BOLf+jUTD/plQ1/6pXN/+tWTr/slo8/7VZOv+2Vzj/uFg5/75aPf/CWz// - wlk9/8NYPP/HVTn/yFQ4/8pSNv/LUDT/zk8z/89MMP/QSi7/z0ku/85JLv/LSS//wks1/5pKOP+rm5b/ - +/v7//Pz8//j4+P/l5eX+W9vb7AAAAA6AAAALgAAABoAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAWfX19qpubm/vFxcX/0tLS//79/f95XVH/ - djIV/4U2Ev+LNxP/kDoV/5M+Gf+VQh7/mUcj/5xJJ/+gTiz/olEv/6VUM/+qVzf/q1Mz/6NMLv+dVDz/ - nVxH/5tXQf+YSC//pUYr/8BYPP/FWT3/xlc6/8hVOf/IUzf/ylE2/8xQNP/OTjP/z0ww/9BLL//QSi7/ - z0ku/81KL//HTTT/rkw4/5BwZ//29fX/8/Pz/+np6f+bm5v7b29vsAAAADkAAAArAAAAFgAAAAYAAAAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAARfX19m5mZmfnDw8P/ - 09PT//n49/+AXE3/fDUV/4UyD/+JMw3/jTYP/5A5E/+SPRn/lEEd/5hFIf+bSSb/nkwr/6FQLv+lUzP/ - pE4s/6diSP+/pJr/0sjH/9nU1P/Z09P/0MLA/6mBdv+SQCj/vVQ4/8ZZPP/HVzn/yFQ4/8lTN//LUjb/ - zFA0/85PM//OTjH/z0ww/89LL//OSzD/zUww/8hONP+3UDr/il9U//Hv7//09PT/6enp/5eXl/lra2ul - AAAANwAAACYAAAARAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAL - eXl5f5WVlfS+vr7/z8/P//r5+P99VUX/fzQU/4c0Df+KMw3/izMM/4w1Dv+POBL/kTwX/5RAHP+XQx// - mkgl/51LKP+hTy3/oUsq/6xtU//UzMr/3t7h/9rV1//Y09P/2dTV/97c3f/s7u//v6ag/5dAKP/DWTz/ - xVg8/8dVOf/IVDj/yVM3/8pRNv/LUTX/zFA0/8xPM//OTzP/zk4x/85OMf/NTzL/yFA1/7hROv+FV0r/ - 8/Hx//Pz8//j4+P/jo6O9GJiYo4AAAA1AAAAIAAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAGa2trTY6OjuS1tbX/ycnJ//79/f9xTT3/gDUV/4kyDf+LMwv/jjML/440DP+ONQ7/ - jzcR/5E8Ff+TPhr/l0Ie/5lGI/+cSSf/nksq/6NSMf/OvLb/19XY/9DKyv/PyMj/zsjI/8/Jyf/Ry8v/ - 08/P/+3v8P+peGv/sEou/8VaPv/FWDz/x1c5/8hVOf/JVDj/ylI3/8pSNv/LUjX/y1E1/8tRNP/MUDT/ - y1A0/8pRNf/GUjj/tlE6/4xjWf/39/b/8PDw/9bW1v99fX3lSEhIZwAAAC8AAAAYAAAABgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD4qKiserq6v/xMTE//39/f+DaFz/fzYV/4s1Dv+OMwv/ - jjMK/440C/+ONAz/jjUO/483EP+ROhT/kj4Z/5VBHf+YRSH/m0gm/5tGIv+ublX/0s/Q/8vGxv/IwcH/ - x8HB/8fAwP/HwcH/ysPD/8zHx//e3eD/y7Os/6VHLP/DWj7/wlk9/8VYPP/GVzr/yFU5/8lUOP/JVDf/ - yVM3/8lTNv/KUzb/ylI2/8pRNv/JUTb/yFI2/8NUOf+xUTv/k3Zt//j4+P/v7+//urq6/3Z2dssAAAA5 - AAAAJwAAAA8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4SEhJGhoaH9vr6+/+3t7f+0p6L/ - ejMV/402EP+PNA3/kDQL/480C/+QNAv/kDUO/481Dv+QNg//kTkT/5I9F/+UPxv/l0If/5lHJP+aQx7/ - rXRd/8rJy//Fv7//wry8/8G8vP/BvLv/wru7/8W+vv/IwsL/1dPV/9K+uP+nSi//wVs+/8FaPf/CWT3/ - xVg9/8ZYPP/HVzr/yFc5/8hVOf/IVTj/yFQ4/8hUOP/IVDf/yFQ3/8hTN//GVDj/wVY8/6ROOf+xpJ// - +Pj4//Ly8v+cnJz9aWlpnwAAADIAAAAcAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmlpaTGTk5Pk - tra2/9LS0v/v7ev/cDQc/484Ff+SNg//kzUM/5I0DP+SNAz/kDUM/5A1DP+QNQ//kDYP/5E4Ev+TPBX/ - lD8a/5dCHf+ZRiL/mUMe/6lnT//GwsP/wLu7/7+4uP++t7f/vre3/764uP/Bu7v/w729/9XX2P/QtKv/ - rUww/79bPv+/Wz7/wFo+/8FaPf/DWT3/xVk9/8VYPP/FWDz/x1c8/8dXOv/HVTr/x1U6/8ZVOf/GVTn/ - xlU4/8NVOf++Vj7/jEk2/+Th4f/39/f/3d3d/3x8fOU2NjZVAAAAKQAAABAAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAaLi4upp6en/8PDw//6+vr/fFlK/406GP+UOBH/lzYP/5U2Dv+UNQz/kzUM/5E1DP+RNgz/ - kTUP/5E2D/+SNxD/kzoU/5Q+GP+VQBz/mEUf/5pHI/+cSij/vaeh/8C/wf+8tbT/vLW1/7y1tf+9trb/ - vre3/8C9vf/i4+X/vH1q/7VTNv+7Wz//vVs//79bP/+/Wz7/wFo+/8JaPv/CWj3/w1k9/8NZPf/FWD3/ - xVg8/8VYPP/FWDr/xVg6/8NXOv/DVzr/v1g7/7RUPf+DXlT/9fX1//Hx8f+rq6v/cHBwswAAADIAAAAb - AAAABgAAAAAAAAAAAAAAAAAAAAF1dXU1mZmZ7Lu7u//d3d3/x7+8/4A2F/+WOhT/mDgQ/5g4D/+XNw// - lTcO/5Q2Dv+TNQ7/kjYO/5I2D/+SNhD/kjcQ/5M5E/+UPRf/lUAa/5hDHv+aRiL/mkMf/6VeQf+/r6r/ - wMDC/7y5u/+8uLj/vbm5/8PDxv/b29z/y6CR/65SNP+3Wz7/uFw//7tcP/+8Wz//vVs//79bP//AWz// - wFo+/8BaPv/BWj7/wlo+/8JaPf/CWT3/wlk9/8FZPf/BWDz/wVk8/79YO/+7WD//m0o0/8G4tf/4+Pj/ - 5ubm/4GBge09PT1ZAAAAJgAAAA0AAAABAAAAAAAAAAAAAAAEjo6OoKmpqf/Hx8f/9fT0/35TQf+TOxj/ - mjoS/5s5Ef+aORD/mTgQ/5g3D/+VNw//lTYO/5Q2Dv+TNw7/lDYQ/5I3EP+TOBH/lTwV/5U/GP+YQRz/ - mkMf/5tHJf+bRSH/o1U2/7WJef/Aq6T/wLKt/8i3sv/MrqX/vX9p/6xSM/+zWjz/tFs+/7ZbPv+3XD// - uVw//7tbP/+8XD//vlw//75bP/+/Wz//v1s+/79bPv+/Wz7/wFo+/8BaPv/AWj3/v1o9/79ZPf+/WTz/ - vFg7/7RYPv9/UUP/8fHx//Dw8P+pqan/bm5urQAAAC8AAAAWAAAABAAAAAAAAAAAAAAAB5mZmeC7u7v/ - 3t7e/8vFwv+ORij/nUEb/506Ef+dOhL/mzoR/5o5EP+ZOBD/mDgP/5c3D/+XNw//lDcP/5Q3EP+TNxD/ - lDgQ/5U5E/+VPRf/mEAa/5lCHv+aRiL/nEkm/51IJf+eRyP/o1Av/6ZVNf+pWDf/p1Ev/6lRMP+uWTn/ - r1o8/7JaPf+0Wz7/tVs+/7ZcPv+3XD//uVw//7tcP/+8XD//vFw//71bP/+9Wz//vls//75bP/+9Wz7/ - vlo+/75aPf+9Wj3/vVk8/7tZOv+4WT7/l0ky/8S8uf/29vb/3Nzc/3t7e+MAAAA2AAAAHgAAAAcAAAAA - AAAAAYyMjG6pqan+xcXF/+/v7/+JaFv/olEv/6dKJf+hPRP/njwS/548Ev+cOhL/mzkR/5o4Ef+ZOA// - mDgP/5c3D/+VOBD/lTgQ/5U4Ef+VORL/lz0V/5c/Gf+ZQRv/mkUf/5tGI/+dSSX/oUwo/6JOK/+kTyz/ - plEu/6lTM/+rVzb/rFg4/61ZOf+vWjz/sFo8/7NbPf+0Wz7/tVw+/7ZcPv+3XD//uFw//7lcP/+5XD// - u1w//7tbP/+7Wz7/u1s+/7tbPv+7Wj7/u1o9/7lZPP+5WTz/t1g9/65VO/+EYFT/8/Pz/+7u7v+YmJj+ - YGBghgAAACYAAAANAAAAAQAAAAKWlpa4srKy/9vb2//e3Nv/iUsw/6lSLv+tUCv/pUUc/6E8Ev+hPRP/ - njwS/506Ef+cOhH/mzkQ/5o5EP+ZOA//lzgQ/5g4EP+XOBH/lzkR/5c6E/+YPRf/mD8a/5pCHf+bQx// - kkAd/4U9Hv+FPSH/hj8j/4hBJf+JQyf/ikIm/6FRMf+rVzj/rVg4/65ZOv+vWjz/sFo9/7NbPf+0Wz3/ - tFs+/7ZcPv+2XD7/t1w+/7dcPv+3Wz7/uFs+/7hbPv+4Wj3/uFo9/7daPP+3Wjz/t1k8/7VYOv+yWTz/ - h0Qw/+Pg3//29vb/u7u7/3R0dMIAAAAuAAAAEwAAAAIAAAAFn5+f5sHBwf/n5+f/r6Kd/5xOLf+vUy3/ - r1Er/61PJ/+kQBj/oj0T/6E9E/+gPBP/njwS/508Ef+cORH/mjkR/5k5EP+ZORH/mDkR/5g5Ev+XOhL/ - mDwU/5k+GP+ZPxj/nUgk/7eaj/+2q6n/taek/7eqpv+5rar/wri2/62Zkf+JRSr/qlQ1/6pXN/+sVzj/ - rVk5/65ZOv+vWTz/sFo8/7JbPf+zWj3/tFo+/7RbPv+1Wz7/tVs+/7VbPv+1Wz3/tVo9/7VaPf+1Wjz/ - tVo8/7VYOv+0WDn/slc6/51MM/+snZf/8/Pz/9/f3/98fHzoAAAAMwAAABoAAAAFjIyMSqurq/3Gxsb/ - 8fHx/41sX/+qVjP/slMt/7JSLP+wUyz/rEwl/6Q/Ff+jPhT/oj4U/6E9E/+gPRL/nTwS/5w6Ef+bORH/ - mzkR/5o5Ef+ZORL/mToS/5g6Ev+ZPRX/mDoT/6BPLv/PyMf/0tDR/9LMzv/T0ND/1NHR/9vZ2//Rysr/ - iUku/6VRMP+nVDX/qVU2/6pXN/+rVzf/rFg5/61ZOf+uWjr/r1o8/7BaPP+yWjz/slo9/7JaPf+zWjz/ - s1o8/7NaPP+zWTz/s1k6/7JYOv+yWDn/slc4/7BXOP+nUzb/hGBU//Dw8P/t7e3/jo6O/VJSUmoAAAAe - AAAAB5aWlomwsLD/1dXV/+no5/+MWEL/slo1/7VVLv+0VS3/s1Qt/7JULf+sSyP/pD8U/6Q+FP+jPhT/ - oj0T/6A9E/+ePBL/nTwS/5w6Ef+bOhH/mzoS/5o6E/+aOhP/mjwT/5g5Ev+hTyv/0cbF/9PP0P/Sy8z/ - 0szM/9POzv/Z09T/0crJ/4NJMf+hTCv/pVIx/6VUM/+mVDX/p1U1/6pXNv+rWDj/rFg4/61YOf+tWTn/ - rlk5/65ZOv+vWTr/r1k6/69ZOv+vWDn/r1g4/69XOf+vVzj/r1c3/65VN/+tVDb/qVQ4/39HNP/n5eX/ - 8fHx/6Ghof9qamqdAAAAIwAAAAqcnJy2ubm5/+Li4v/Mycj/lVE2/7VaNP+3Vy//t1Uu/7VVLf+0VC3/ - s1Qu/6xLI/+mPxX/pT8U/6M/Ff+iPhP/oT0T/6A8E/+ePBL/nToR/5s8Ev+cOhP/mzwT/5o8E/+ZOBH/ - nkgj/9DBvf/V0tP/08zM/9LMzP/SzMz/1M/P/9vY2f+MZFP/kD4c/6ZSMP+kUTD/pVIx/6VTM/+mUzT/ - p1U1/6lVNv+qVTb/q1c2/6tXN/+rVzf/rFc4/6xXOP+tVzj/rVc3/61VN/+tVTf/rVU2/61VNv+sVDX/ - rFM0/6hSNP+IQij/zMfF//Dw8P+6urr/dXV1wQAAACYAAAALoaGh1cLCwv/r6+v/s6up/6FVN/+5WjP/ - uVkx/7lYMP+3VzD/tlcv/7VVL/+0Vy//rUsj/6dAFf+mQBX/pD8V/6I+FP+iPRP/oT0T/6A8Ev+dPBL/ - nToS/5w8E/+bPBP/mzoS/5o6E//Ir6b/09PU/9DKyf/Oycn/zsjI/87Ix//V0tP/uaul/3UzGP+eSif/ - pFAu/6NQL/+kUC//pFEw/6RSM/+lUzP/plM0/6dUNP+nVDX/qVQ1/6lUNf+qVDX/qlQ1/6pUNf+qVDX/ - qlM0/6pTNP+qUzT/qlIx/6lRMf+nUTH/kUUo/6+jnv/v7+//z8/P/3p6etoAAAAqAAAADaampunOzs7/ - 8PDw/6CRjP+pWzv/vFs1/7xZM/+8WTH/uVgx/7hXMP+2VzD/tlcv/7RYL/+vTiX/qUEX/6Y/FP+lQBX/ - pD4U/6M+FP+iPRT/oTwS/548E/+ePBP/nTwU/509E/+ZNQn/u458/9DQ0//KxcX/ycLC/8fBwf/HwcH/ - x8HB/9PR0/+iiX//di8R/55KJv+jTyz/ok8s/6NQLv+iUC7/o1Ev/6RRMP+kUjH/pVIx/6VSM/+lUjP/ - plIz/6ZSM/+mUjH/plIx/6ZRMf+mUTD/plAw/6ZQL/+mUC//pE8v/5ZHK/+XgXj/7Ozs/9vb2/99fX3r - AAAALAAAAA6qqqr11dXV//Ly8v+TgHn/tGA9/79cNf+/WzT/vVoz/7xZM/+7WTH/uVcw/7hXMP+2Vy// - tVcw/7BRKP+qQhn/pj8V/6ZAF/+lPxX/oz8U/6I+E/+hPRL/oD0T/6A9FP+ePRT/mzcL/6lcPf/Hw8X/ - w7+//8K8vP/Au7v/v7m5/8C5uf/CvL3/1NHT/6SKf/91LhH/m0Ui/6NOKv+hTCv/oUws/6FOLP+hTy3/ - oU8t/6FPLv+jUC7/o1Av/6NQL/+jUC//pFAv/6RQLv+kTy7/pE8t/6ROLf+kTi3/o04s/6FMLP+ZSCr/ - iGtf/+vr6//g4OD/fn5+9gAAAC0AAAAPrq6u+9fX1//z8/P/kXx0/7pjP//AXTb/wFw0/79cNP++WzT/ - vVs0/7xaM/+7WjP/uVkx/7dYMP+2WTH/tFQt/6xHHv+nQBX/p0AV/6VAFf+kPxX/oz4T/6I+FP+hPhT/ - oD4V/549FP+dOQ7/uJeK/8DAwv+8trX/vLW1/7u0tP+5tLT/u7W1/7+4uP/Y1dj/tqGZ/3QzGP+UPxv/ - okso/55LJ/+gSyj/oEsq/6BMKv+gTCv/oEwr/6BMLP+hTCz/oUwr/6FMK/+hTCz/oUwr/6FLK/+hSyr/ - oUsq/6FKKP+gSij/mkgo/4VjVv/r6+v/39/f/39/f/sAAAAtAAAAD7Gxsf7Z2dn/9vb2/494b/++ZUH/ - xF42/8JeNv/BXjX/wF01/8BdNf++XDT/vVs0/7xaM/+5WjP/uFkx/7dZMf+1VzD/r04k/6pCGP+nQBX/ - pkAX/6VAFf+kPxX/oz4U/6E/FP+hPhX/njkP/6VPLP+8sK7/ube5/7iwsv+3sLD/t7Cw/7ewsP+7tLT/ - vri4/9zb3f/Lvrj/dzkh/5E8GP+hSSb/nUkl/51JJv+eSSf/nUon/55KJ/+dSif/nUon/51KJ/+dSif/ - nkon/55JJ/+eSSf/nkkm/55IJv+eSCb/nUgm/5lGJf+BXU7/6+vr/93d3f9/f3/+AAAALAAAAA6ysrL+ - 3t7e//j4+P+Re3P/wGhD/8ZgN//GYDf/xV43/8JeNv/BXjb/wF01/79cNP++XDT/vVo0/7taM/+5WTP/ - uFgx/7dZM/+zUiz/rUgd/6lAFf+mPxX/pj8X/6U/Ff+jPxT/oz4V/6I+Ff+eNwv/q2JD/7u1tv+3tbf/ - t7Cv/7awsP+2sLD/uLOz/7+4uP/Dvr7/4uHi/9XKxv92Nx3/kzwY/55II/+cRyP/nEcj/5xHJP+cRyT/ - nEck/5tHJP+cRyT/nEck/5tHJP+bRyT/nEYk/5xGJP+cRiP/nEYj/5tHJP+WRiT/gV1P/+rq6v/a2tr/ - f39//gAAACoAAAANsrKy++Pj4//39/f/kn94/75oRv/IYjn/yGE4/8ZgN//FXjf/w142/8JeNv/AXTX/ - wF00/79cNP+9WzT/vFo0/7taM/+4WTH/t1gz/7ZYMP+yUCj/rEYb/6dAFf+mPxT/pT8V/6Q/Ff+jPxX/ - oj8V/6A3C/+sYUH/u6+t/7i2uP+3r6//t7Cw/7m0tP+/ubj/x8HB/87IyP/s7O3/z764/3MtD/+ZQBv/ - nEMf/5tFH/+bRR//mkUh/5pDIf+aQyH/mkUh/5pDIf+aQyH/mUMh/5pDIf+aRSH/m0Ui/5tFIv+aRiP/ - lUMi/4NhVf/l5eX/2NjY/39/f/sAAAAmAAAAC6+vr/Xl5eX/+vr6/5eIgv+5aEj/yWU9/8piOf/JYTn/ - x2E4/8ZgOP/FXjb/wl42/8FeNv/BXTX/wFw1/75bNP+9WzT/vFoz/7lZM/+4WTH/t1kx/7VXMP+wTyf/ - q0Yc/6dAFf+mPxT/pD8V/6NAFf+kPxf/oTYL/6lVMf+7q6b/uLe5/7iysv+8trX/wby7/8nDw//TzM7/ - 2dTU//n7/f+wlIj/eSgG/51DHf+aQh3/mkId/5pCHf+ZQh3/mkIe/5lCHv+ZQh7/mUIe/5lCHv+YQh// - mEMf/5lDIf+ZQyH/mUMi/5BAIP+Hal7/4uLi/9bW1v9+fn72AAAAIwAAAAqtra3p4eHh//r6+v+rop7/ - smVH/8xnP//MZDz/zGM8/8pjOv/IYjn/x2E5/8ZhOf/DYDf/w143/8JdNv/AXDb/v1w1/75cNf+8XDP/ - u1sz/7laM/+4WDH/t1kx/7VVMP+wUCj/rEcd/6dBF/+kPhT/pD8V/6Q/F/+hOAz/qVIt/7ysp/+8u7z/ - wLi5/8a/v//OyMj/19HR/97Z2f/n4+T/+Pf3/4ZROf+QNhD/nUIc/5pBHP+aQR3/mkId/5pCHf+ZQhz/ - mUEd/5lCHv+ZQh7/mEIe/5hCHv+YQh7/mEIe/5dDIP+KPBz/mIR8/+Xl5f/Ozs7/fX196wAAAB4AAAAH - qqqq09jY2P/5+fn/vbi3/6tmSf/Oa0T/zmU9/85lPf/MZDz/ymM6/8ljOv/IYjn/xmE5/8VhOP/FYDf/ - w143/8JdNv/AXTX/v1w1/71cNP+8WzT/u1oz/7laM/+3WTH/tlkx/7VXMP+yUiv/rUoi/6lDGv+lQBf/ - pD8V/6I2Cv+rWDf/wbm4/8XBwf/Lxcb/087O/9vV1f/j3d3/5+Li//z8/f/Js6v/fCoI/51CHP+bQRv/ - m0Eb/5pBHP+aQRz/mkEc/5lBHP+ZQRz/mUEd/5hBHf+YQR3/mEEd/5dBHf+UQR//gzcY/6memf/k5OT/ - wMDA/3t7e9oAAAAaAAAABaenp7PNzc3/+Pj4/+De3v+gZ0//z3BK/9BlPP/PZj3/zmY9/85lPf/LZDz/ - ymQ8/8ljOv/IYjn/xmE4/8NhOP/DYDf/wl43/8FdNf/AXDX/vlw1/71cM/+8WzP/uVoz/7laM/+4WTH/ - tlcz/7VXMP+0VC7/r1Ao/6tKIv+nRRz/ojYJ/7iFcf/MzM//0cvL/9nT0//h29v/5uLi/+zm5v/y7u7/ - 9vPz/4ZHLP+YOhP/nEEb/5tAG/+bQRv/m0Eb/5pAG/+ZQRz/mUEc/5lBHP+YQRz/mEEc/5dAG/+XQBz/ - k0Ae/3o3G//Au7n/4uLi/6mpqf92dna/AAAAEwAAAAKkpKSFx8fH//f39//z8vL/mnJi/9F3VP/SZjz/ - 0mY+/9BmPf/PZj3/zmY9/8xlPf/LZDz/ymQ6/8liOf/HYjn/xWE4/8NgOP/DXjb/wl43/8FcNf+/XDX/ - vlw1/7xcNP+7WzP/uVoz/7lZM/+3WDH/tlcx/7VXMP+zVTD/slQv/6xLI/+2Zkb/3tnZ/+Db2//i3Nz/ - 5eDg/+rk5P/t6en/8Ovr//////+keWb/jC8I/51BGf+cPxr/m0Aa/5tAGv+bQBr/mkAb/5k/G/+ZQBv/ - mUAb/5hAGv+XQBr/lz8a/5A+Gv96RC7/z87O/93d3f+Xl5f/b29vlgAAAA0AAAABoaGhRcDAwP329vb/ - /v7+/6aOhf/Melr/1GtB/9NpP//SZz7/0Wc9/9BmPf/OZj3/zmU9/8xkPP/LYzz/yWM6/8hiOf/HYTj/ - xWA4/8VgOP/DXTf/wlw1/8NdNf/BXTX/vVw1/7xbM/+5WzP/uVoz/7hZM/+2WDH/tVcw/7RUL/+yUiv/ - tl48/+rg3P/z8vL/8+7v//Tw8P/08PD/9fLy//Xw8P//////vqGT/4kvCf+gQhv/nUAa/5w/Gv+bQBr/ - mj8a/5o/Gv+aPxr/mUAa/5lAG/+YQBv/mEAc/5dBHv+PPRv/iGVX/9jX1//T09P/ioqK/WBgYFoAAAAH - AAAAAAAAAACvr6/k6Ojo//39/f/Gvrr/wXxh/9h2UP/VaT7/1Wk//9RnP//SZj7/0WY9/9BmPf/OZj3/ - zmU9/8xkPP/LYzr/yWI5/8hhOf/GYTj/xWA4/75ZMP+mSib/slAq/8JeNv/AXTX/vVw0/7xbNP+7WjP/ - uVoz/7dZM/+2WDD/tFIr/7dgPP/v5uT/9/X2//j19f/59/f/+/j4//z4+P/79/f//////9O+tv+TPxz/ - qVAr/6VPKv+lTij/pEwo/6NMKP+iTCj/oUso/6FLKP+gSyj/oEwo/55MKv+cTCv/jEEi/6mZk//e3t7/ - xsbG/319fecAAAAWAAAABAAAAAAAAAAAqamps9PT0//8/Pz/8fDw/7CAbf/bhmT/1Wc9/9hqQP/Vaj// - 1Gk//9NnPv/SZj7/0GY+/89mPf/OZT3/zGQ9/8tkPP/KYzr/yGI5/8ZcM//brJr/0MG7/5lgSv+aQBz/ - uFMs/8FcNf/AXTX/vlw1/7xbNP+8WzT/u1kz/7BIHv/HinP//P3+//v4+P/8+Pj//Pn5//z5+f/8+Pj/ - +/f3///////Xwbj/l0Ie/6xTLf+pUi7/qVIu/6ZRLf+lUS3/pVEs/6RRLP+jUCz/o08r/6JOK/+fTir/ - nEsp/4RHLv/Ewb//5OTk/6SkpP94eHi8AAAADQAAAAEAAAAAAAAAAKSkpGbJycn++Pj4//////+xmY// - 2Ipr/9tzSv/Ya0D/2GtA/9hrQP/VakD/1Gk//9JnP//RZz7/0GY+/89mPv/OZT3/zGQ8/8piOf/IXjX/ - 79rS///////y7+//vqKY/5pbQ/+aRSP/pkch/65MJP+yTyX/r0wj/6dHHv+2c1j/9Ozp///////9+/v/ - /fz8//78/P/9+/v//fn5//n39///////y6+j/5tCHP+tUy3/qlEs/6lRLf+nUSz/plAr/6VQK/+lTyv/ - o08q/6NPKv+iTir/oU4r/5ZGJP+Sbl//0dDQ/9HR0f+QkJD+bm5udQAAAAYAAAAAAAAAAAAAAAAAAAAA - sLCw3ubm5v//////5eHg/8SHb//gh2P/2ms//9ttQv/ZbEL/2GxC/9dqQf/VakD/1Go//9JpP//RZz// - 0Wc+/89mPf/OYzz/ymA3//Pa0f/+/////fv8///////29PT/2cnD/7+ekv+wgnD/rXpl/7WGcf/Stqv/ - +/j4/////////Pz///39///9/f/+/Pz//fv7//z4+P/59fX//////76Rf/+jQx3/rVIt/6xRLP+rUSz/ - qlEr/6dQK/+mTyr/pU8r/6VPKv+kTyj/ok4q/6BMK/+MQyT/tqyo/93d3f+7u7v/fHx84QAAABAAAAAC - AAAAAAAAAAAAAAAAAAAAAKioqJjR0dH/+vr6//7+/v+3mIz/3Yxr/952Tv/bbUP/225D/9psQv/ZbEH/ - 2GxB/9VqQf/UakD/02o//9JpP//RZz7/0GQ8/8xiN//23dT////////9/f///f3///////////////// - /////////////////////////////v7///7+///9/f///f3//vv7//35+f/79/f/+Pb2//79/f+rZUj/ - rUwl/65SLf+tUi3/rFAs/6tQK/+rUCv/qVAq/6dPKv+mTir/pU4o/6NOKf+cRiH/kmVS/8vKyv/V1dX/ - mZmZ/3Z2dqIAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAACioqIrtLS06u3t7f//////7Obk/82SfP/ji2r/ - 3W1C/9xvRf/bbkP/221D/9ptQ//YbEL/12tB/9VrQP/UaUD/0mk//9FmPf/PYzj/+ODY//////////// - /////////////////////////////////////////////////////////////v7///z8//35+f/79/f/ - 9vTz///////iysD/pUgi/7JTLP+vUy3/rlMs/61SLP+sUCv/q1Ar/6pPK/+nTyr/pk8q/6ZOKP+kTij/ - k0Qk/7muqf/a2tr/wcHB/4GBgexiYmI4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmpqaDS0tL/ - +Pj4///////ErqX/3JBy/+SBW//ebkP/3W9G/9xuQ//bbkP/221D/9psQv/YbEH/12tB/9VqQP/TZz7/ - 0WQ5//zk2v////////////////////////////////////////////////////////////////////// - //39//37+//7+Pj/9/T0//f3+P/9+/n/tmtM/7JPJv+zVS7/sFQt/69TLP+uUyz/rVIr/6xRK/+sUCr/ - q08q/6dPKv+mTyv/nkMe/553Zv/Ix8f/09PT/5ubm/95eXmoAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACioqIlsbGx4eXl5f/9/f3/+vn4/8efj//jjmz/43dO/+BvRv/eb0b/3W5F/9tuQ//bbkP/ - 221D/9lsQv/Xa0H/1WpA/9JkOf/+5dv///////////////////////////////////////////////// - //////////////////7+//78/P/7+Pj/9vT0//f5/P//////yYtx/7BMI/+2WDH/tVUw/7NVLv+yVC3/ - sFQt/69TLP+uUSv/rVEq/6xQKv+qUCr/pUol/5dSNv/Cvbv/3d3d/7i4uP+AgIDjZWVlLgAAAAIAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKenp4XKysr9+Pj4///////o4Nz/1ZuD/+aNa//jdkr/ - 4XFG/+BvRv/dbkb/3G5F/9tuQ//bbUP/2m1C/9lsQv/UZDj/6aGF//////////////////////////// - //////////////////////////////////7+//78/P/7+Pn/+/v8///////98u7/zIdr/7VOJP+7WjP/ - uFkx/7ZXMf+1VzD/tFUu/7NVLv+yVC7/r1Ms/65RK/+tUSr/q08p/5tGIv+3pZ//z8/P/87Ozv+VlZX9 - enp6jAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArKysv9bW1v/39/f/ - /////9nLxP/Zl33/6Itq/+RzSP/icUf/4W9G/95vRv/dbkX/3G5F/9tuQ//bbUL/2W1C/9VkOP/egF3/ - 9cOy///38v////////////////////////////////////////////////////////////7y7f/ltaL/ - xWZC/7tTKP++XDX/vFs0/7taM/+5WTP/uFgx/7ZXL/+1Vy//tFUu/7NVLv+wUyz/rlMr/6VHH/+si33/ - xcXF/9fX1/+kpKT/f39/wwAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAKSkpDuysrLg39/f//j4+P/+/f3/2cS6/9yTdv/pi2j/5XVJ/+NxR//hcUf/4G9G/95uRv/dbkX/ - 3G5D/9ttQ//abUL/12Y6/9NhNf/Yb0f/45Jz/+63ov/3z7///eTZ///v6v//7uf//+7n//zl3P/10MH/ - 6rek/9qRdP/IZ0H/v1Qq/8JaM//CXjf/wF01/75cNP+9WzT/vFo0/7taM/+5WDH/t1cw/7ZXL/+1Vy// - s1Uu/6pHHv+ufWr/w8HB/9zc3P+0tLT/g4OD4nV1dUEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApqamb7+/v/Lq6ur/+vr6//79/f/Xv7b/3pV4/+qPbP/meEz/ - 43FG/+JxR//hcEb/3m9G/91uRv/cbkX/225F/9ttQ//abEL/2Go//9RjN//RYTT/0WA0/9FlOv/SakH/ - 0Wc//9BpP//OZDr/yFsw/8dZLf/GWi//x142/8ZhOP/FYDj/w143/8JeN//BXTX/v1w0/75cNP+9WjT/ - u1o0/7lYMf+4WDD/t1cv/7BJIP+ud2L/wr++/+Dg4P/Dw8P/kJCQ8319fXQAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiMxsbG+fDw8P/7+/v/ - +fn4/+HNxf/en4X/7JJv/+p+VP/lcUf/5HNI/+FwRv/gb0b/3m9G/91uRf/cbkX/225D/9ptQv/ZbEL/ - 2GxC/9VrQf/UaT//0mc+/9FmPf/RZjz/z2U8/85lPf/OZTz/zGQ8/8pjOv/IYzr/x2I5/8VhOP/DYDj/ - wl43/8FeNf/AXTX/wFw0/75bNP+8WjT/u1cv/7FLJP+1g3D/xMHA/9/f3//Ly8v/l5eX+YCAgJAAAAAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAKqqqprJycn77u7u//r6+v/6+vr/4dbR/96tl//slnX/7Ipj/+Z1Sf/kc0f/43NH/+FvRv/gb0b/ - 3m5G/9xuRf/cbkP/225D/9ptQv/ZbEL/12tB/9VrQP/UakD/02k//9JnP//QZj7/z2Y9/85lPf/MZT3/ - ymQ6/8ljOf/IYjr/xmE4/8VgOP/DYDf/wV42/8BeNf/AXTX/v1gt/7NTLv+3koT/xMLB/+Dg4P/Ly8v/ - m5ub+4ODg54AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqmsbGxvno6Oj/+Pj4//z8/P/r5eP/3r2t/+aaff/vk3D/ - 64FZ/+V0R//kc0f/43FH/+FwRv/eb0b/3W5F/9xuRf/bbkP/225D/9ptQv/ZbEH/12tB/9VrQf/TakD/ - 02c//9FmPv/QZj3/zmY9/85lPf/MZDz/ymM6/8liOf/IYjn/xmE4/8VgOP/FXjX/vVQp/7VmRv/Brqb/ - w8PD/+Hh4f/ExMT/nJyc+YSEhJ0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiMv7+/8t3d3f/29vb/ - //////Hv7//m1Mz/366Z/+uXdv/wj2v/7IBY/+d2Sf/kc0j/4nNH/+FwR//ecEf/3W5F/9xuRf/bbkP/ - 221D/9lsQf/Ya0H/12tB/9RqQP/TZz7/0mY+/9FmPf/PZj3/zmY9/85lPf/MZT3/y2Q8/8pjOf/FWjD/ - vFw3/7qMev/Dvbv/1tbW/93d3f+4uLj/lpaW84eHh48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAKampm+ysrLg1tbW//Pz8//8/Pz/+vr6/+vm5P/hysD/4KuU/+qZef/ukGv/7YZd/+p8Uv/mdkv/ - 43RJ/+JzSP/gcUj/3W9H/91vRf/bbkX/2m5D/9ltQ//XbEL/12tB/9VqQP/UakD/02k//9JpP//Raj// - z2Y9/8liOf+/ZD7/u4Nt/8Gzrv/Hx8f/6enp/9fX1/+wsLD/jY2N4YeHh3AAAAABAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSkO6ysrL/Kysr94eHh//b29v/+/v7/9fX1/+rl4//izsX/ - 4Lek/+Saff/pkW3/7Yli/+uCWv/pfVP/5nlP/+R3TP/idUz/4HRJ/91zSP/ecUj/3XFH/9twR//bcEb/ - 2W9I/9ZuRf/RbEL/xmhD/7xyVv+4jHv/v7Ou/8jGxv/l5eX/4ODg/8PDw/+mpqb9jY2Nv4aGhj0AAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp6enhbGxseDR0dH/ - 5ubm//b29v/+/v7/+fn5/+vp6f/k2tb/2cS7/9WtnP/Xl3//2pBy/9yIaP/ehWL/4IJe/+GAW//gf1j/ - 3X5X/9d8V//ReFb/yndV/8B2Wf+3fmj/s5CD/7qoof/Dvbr/0tLS/+3t7f/k5OT/zc3N/7Gxsf+SkpLh - jY2NhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAACioqIlqampoLS0tOrQ0ND/4uLi//Ly8v/7+/v//f39//f39//l5OT/39va/9bMyP/SwLn/ - yLCn/72il/+6n5T/uZ2S/7adkv+3n5b/vKmi/76yrf/Gv7z/zMvK/9ra2v/s7Oz/8fHx/+Pj4//Kysr/ - tbW1/5mZmeqQkJChjIyMJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACioqIrp6enmK+vr97Hx8f+1NTU/+Pj4//y8vL/ - 9/f3//r6+v/4+Pj/9/f3//X19f/v7+//6urq/+Xl5f/o6Oj/6Ojo/+3t7f/u7u7/7+/v/+3t7f/o6Oj/ - 1tbW/8DAwP+vr6/+mJiY3pOTk5iPj48rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - pKSkZqioqLOurq7kv7+//crKyv/Q0ND/2tra/+Pj4//r6+v/7+/v//Ly8v/x8fH/7u7u/+fn5//b29v/ - 0tLS/8bGxv+8vLz/r6+v/Z2dneSYmJizlJSUZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoEWjo6OFpaWls6ioqNOrq6vorq6u9bCwsPuwsLD+ - r6+v/qysrPuoqKj1pKSk6KCgoNOcnJyzmZmZhZaWlkUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAA///wAAAP/////8AAAAP/////AAAAAP////wAAAAAP///8AAAAAAP///gAAAAAAf/ - /8AAAAAAA///gAAAAAAB//8AAAAAAAD//gAAAAAAAH/8AAAAAAAAP/gAAAAAAAAf+AAAAAAAAB/wAAAA - AAAAD/AAAAAAAAAP4AAAAAAAAAfgAAAAAAAAB8AAAAAAAAADwAAAAAAAAAOAAAAAAAAAAYAAAAAAAAAB - gAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAA - AAAAA8AAAAAAAAADwAAAAAAAAAfAAAAAAAAAB+AAAAAAAAAP4AAAAAAAAA/wAAAAAAAAH/gAAAAAAAAf - +AAAAAAAAD/8AAAAAAAAf/4AAAAAAAD//wAAAAAAAf//gAAAAAAD///AAAAAAAf//+AAAAAAD///8AAA - AAA////8AAAAAP////4AAAAB/////4AAAAf/////8AAAP//////+AAH///8oAAAAMAAAAGAAAAABACAA - AAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAHAAAACQAAAAoAAAAM - AAAADAAAAAwAAAAKAAAACQAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAKAAAAEAAAABYAAAAb - AAAAHwAAACIAAAAlAAAAJgAAACUAAAAjAAAAHwAAABsAAAAWAAAAEAAAAAoAAAAFAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAADQAAABYAAAAg - AAAAKwAAADQAAAA8AAAAQwAAAEgAAABMAAAATQAAAEwAAABIAAAAQwAAADwAAAA0AAAAKwAAACAAAAAW - AAAADQAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA0AAAAY - QEBBRlRUVXxdXV6mZWVmyHR0del0dHX3c3N0/3NzdP9zc3T/dHR1+XV1du1iYmPQVlZWtUVFRpcpKSlx - AAAATgAAAEIAAAA0AAAAJQAAABgAAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAI - ODg4I1paW2tnZ2i3cnJz54KChOGurrL309PT/+bm5v/19fX//v7+//7+/v/+/v7/9/f3/+bm5v/U1NT/ - vLy+/4GBk/Rvb3jxXl5gy0FBQpUUFBRgAAAARgAAADQAAAAiAAAAEwAAAAgAAAACAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAzQ0NBRgYGFncHBx0YKCgtyzs7Xr9PT1/u3t7f/o5+f/6+fl/8vCv/+1p6H/pJCJ/6GIgf+nkIr/ - taOf/8e8uv/f2dj/4uHg/+3t7f/z8/X+rKy49np6iO5paWvfQUFClgwMDFoAAABBAAAALAAAABkAAAAL - AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAEXl5fPG9vcLSEhIXZ1tbW+Pj4+P7U09P/mpWT/2NRSP9tSz7/f1FA/41VQv+ZWkb/ - oV1J/6heSv+nXUn/o1pH/51WRP+SUkT/g1FF/3haVP+knZv/19XV//b2+P/ExM35eXmI7WBgYs0rKyx6 - AAAASgAAADMAAAAdAAAADAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAANnZ2hYdnZ33Lu7u+T7+/v+397e/4qAfP9kRTj/e0k1/4xROf+XVTv/ - n1k9/6ZbP/+sXED/slxB/7dcQP+5W0H/ulpB/7xYP/+6V0D/tldB/65XQ/+dUUL/hFJH/5mIhP/X1dT/ - +vr7/6qqt/RwcHPrPDw9kQAAAFAAAAA2AAAAHgAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmtrbGyEhIXV4+Pj9Orq6v+ZlJH/Yj8w/3dCK/+HSC3/ - kk0v/5pQM/+hUzX/p1c5/6xaPP+yWz3/tlo8/7xbPf/AWz//wFk+/8JXPP/FVTr/xVQ4/8RSOf++Uzv/ - tFNA/6BSQ/+GUkj/raSi/+rq6v/Z2d/8d3d+6kVFRZ4AAABRAAAANgAAABwAAAAKAAAAAgAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbm5va5KSktP4+Pj82tnZ/3FjXf9sPCf/ - fj8j/4lBIv+SRST/mEop/59OLv+jUjL/qFY3/6pSM/+iTjH/n1Y9/51QOf+lSC3/v1c5/8RZPf/GVjr/ - x1M3/8lQNv/JUDX/xk82/75SO/+wU0H/lFNG/5F6df/b2tr/9PT2/n19iOpFRUWeAAAATwAAADEAAAAY - AAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwcHFpk5OU0f7+/v/Ozc3/ - YElA/3M6If+AOhv/iTsZ/48+G/+UQyD/mUgl/55NK/+iUTD/pFIy/690Xv+/p6D/zcTD/8zBv/+zk4r/ - oldC/7tSN//GWDz/x1Q5/8lTN//LUDT/y1A0/8lQNf/DUTn/t1VA/55VRf+GYVv/09HQ//39/f9+foTo - RERFmwAAAEgAAAApAAAAEQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJyc1OIiIjQ - +fn5/M/Pz/9cPjH/eDke/4Q3Fv+JNhL/jDgS/5A7Fv+UQR3/mEck/51MKf+fSSj/rW9X/9bT1P/X19r/ - 1dHR/9fT1P/g4OH/187M/6pXP//DWDv/xFc7/8dWOf/JUzj/ylE3/8pRNf/JUTX/xFI5/7pWQP+hVkX/ - hF1U/9XT0//19ff+dXV46Do6OocAAAA9AAAAHwAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - c3N0L3h4edrm5uby3t7e/2FJQP95OR7/hTcU/4o1D/+MNA//jTcQ/487Ff+TPhv/lkQh/5pJJ/+bRyX/ - v52P/87N0P/IwsL/x8HB/8jCwv/Mx8f/3Nzd/7V+bv+5TzL/w1k9/8RYPP/HVzr/yFQ5/8lTOP/JUzf/ - yFM2/8RUO/+5V0H/n1dH/4ZoYv/g397/0dHX+W5ub+gmJiZnAAAAMAAAABQAAAAFAAAAAAAAAAAAAAAA - AAAAAAAAAABzc3QJdXV2rcbGxt/y8vL/dWRd/3k5Hv+IORf/jDUP/440Df+PNQ//jjUQ/5A5E/+RPRn/ - lUIe/5hGJP+bSCX/vqWd/8TCw/+/ubn/v7m4/8C5uf/Ev7//0M3Q/7uJef+2TzH/wFs+/8FZPv/DWTz/ - xlc7/8ZXO//GVjr/x1Y6/8ZUOv/BVj3/tlpE/5hXSP+ahYD/8PDw/5qaou9aWlu4BwcHQwAAACAAAAAK - AAAAAQAAAAAAAAAAAAAAAAAAAABzc3RRioqL0v7+/v2em5n/czoi/4o8Gv+QORP/kjUQ/5E1Dv+QNQ// - jzUQ/5A4Ev+TPBb/lUEc/5dFIf+YRB//s4p6/8DAwf+8tbX/u7W1/722tv/Au7z/1dXX/79/a/+4VDf/ - vVs//79bP//AWj7/wlo9/8NZPf/DWD3/xlg8/8RXO//CWDz/vFlA/61cRv+PWkz/u7Sx//T09P50dHXq - Nzc3dwAAAC4AAAASAAAABAAAAAAAAAAAAAAAAHNzdBF1dXbF19fX6eXl5f9jQzX/iTwc/5I7FP+VOBH/ - lTcQ/5M3D/+RNw//kTcQ/5A4Ef+TOxT/lT8b/5dEH/+YRCD/oVg6/72uqv+9vL7/vby9/729vv/NzM7/ - 0a2i/7NZPP+3XD7/u1w//7xbP/++Wz//v1s//8BaPv/BWj7/wVo+/8FaPf/BWT3/vlo+/7hcQv+hWkf/ - imRZ/+Tk4/+oqK7zYWFiww0NDUAAAAAbAAAABwAAAAAAAAAAAAAAAHNzdFSMjIzR/f39/YyGhP+APyT/ - kz0X/5g8FP+ZORH/lzkR/5Y4EP+VNw//lDgQ/5Q4Ef+TORP/lT4Z/5dDHf+ZRiP/mkYj/6NaPP+vfGj/ - tIt7/7iOfv+7fmf/rVg5/7FZO/+0Wz//tlw//7hcP/+7XD//vFw//71bP/++Wz//vls//79bPv+/Wj7/ - vlo+/7pbP/+vXET/k1hI/7Glov/y8vL+dHR16Tk5OW8AAAAkAAAADAAAAAEAAAAAAAAAAHNzdKLExMTg - 5+fn/2xIOf+YSir/mz4W/508E/+bOxL/mToR/5g5Ef+WOBD/ljkQ/5U4Ef+UORL/lTwV/5dBGv+YRB// - mUYk/5tGIf+eRB//oUcj/6NJJv+nTiv/rFg5/61aPP+vWz3/s1s9/7VcPv+2XD//t1w//7hcP/+5XD// - uVw//7tbP/+7Wz7/u1s+/7paPv+yXEH/nlpF/4llW//l5eX/kpKW7VZWVqQAAAAuAAAAEgAAAAMAAAAA - c3N0Jnd3eN/39/f7uLWz/49SOP+kUC3/oUIb/589E/+fPRT/nTsT/5s6Ev+ZOhH/lzkQ/5Y5Ef+WORL/ - lTsT/5c9GP+YQRz/mkQf/5pSNP+VWD7/lllB/5lcRf+ZW0P/nlAy/6tYOf+sWTv/rlo8/7FbPf+zWz3/ - tFw//7VcP/+2XD//tlw//7dbP/+3Wz7/t1s+/7daPf+zWz7/p1tC/41XRv/Dvbv/zc3P+mtrbN4XFxdB - AAAAFwAAAAUAAAAAc3N0XpOTlNH6+vr/gHFr/6ZWNf+tUi//rE4n/6M/Fv+hPRT/oD0U/588E/+dOxP/ - mjoR/5k6Ef+XOhP/lzoT/5c7FP+XPRb/nUcl/8Ozrv/HxMb/x8PD/83Ky//Hv77/ikkx/6dTMv+pVzj/ - q1g5/61ZO/+uWjz/r1s9/7JaPf+zWz7/s1s+/7RbPv+0Wz7/tFs9/7RaPf+yWTz/q1o//5NWQv+ZhX7/ - 7u7u/3Z2d+o8PD1nAAAAHAAAAAcAAAAAc3N0h7Kys9ro6Oj/iGNU/61ZN/+yVC//slQu/6xOJv+kPxb/ - oj4V/6E+FP+fPRT/njsT/5s7Ev+aOxL/mTsU/5g7E/+YOhP/nkkm/83Cwf/SztD/0czM/9TR0f/Ry8v/ - hkwz/6FOLf+nVDT/p1Y1/6lXOP+qWDr/rFk6/61ZO/+uWjv/rlo8/69aPP+vWjv/r1k7/69ZO/+uWDr/ - q1k8/5pYQP+IZFj/8O/v/5iYmfFUVFWRAAAAIAAAAAkAAAAAc3N0r8/Pz+nQz87/m19H/7NbN/+2WDD/ - tVYv/7NWL/+tTyj/p0IY/6Q+Ff+iPhb/oD0U/548E/+dPBP/mzwU/5s8FP+ZOhL/m0Ec/8q3sv/U0dL/ - 0crK/9HLy//W1NX/m3pu/48+Hf+lUjH/o1Ix/6RTM/+lVDX/qFY3/6lXN/+qVzj/q1c4/6tXOf+rVzj/ - q1c4/6tXOP+rVjf/qVU3/55VPP+EVUb/z8zL/7W1tfZwcHG+AAAAIQAAAAoAAAAAc3N00ubm5va1r6z/ - q2NG/7hbNv+6WTP/t1gx/7ZXMf+0WDH/rk8n/6hDGf+kPxX/oz8V/6E+Ff+fPRT/njwT/548FP+bPBT/ - mTgP/76Yi//QztH/y8TE/8nDw//MyMj/ycLB/4hQOP+VQh//o1Av/6JQL/+iUTH/o1Iy/6RTM/+lUzP/ - p1M0/6dTNP+nUzT/qFM0/6hTNP+oUjP/pVIy/55TN/+GUT7/yMG+/9bW1v99fX7dAAAAIgAAAAoAAAAA - c3N07vf39/2dkIr/uGhH/7xcNv+8WjT/u1ky/7hYMv+3VzH/tVgy/7FSK/+pQxr/pT8V/6Q/Fv+iPxX/ - oT0U/589FP+ePRX/mjQK/6xuVv/Gx8n/wry8/8C5uf+/uLj/x8LD/7+0sv+CSTL/lT4b/6JOK/+hTi3/ - oU8u/6FQL/+hUC//olEw/6JRMP+jUTD/o1Ew/6NQMP+jUC//ok8w/5xRM/+HTzn/w7ey/+Tk5P9xcXLg - AAAAIQAAAAoAAAAAc3N0/v7+/v+OeXH/wmtI/75dNv++XTX/vlw0/71bM/+7WjP/uFkz/7dZMv+zVC7/ - rEgf/6hBGP+kPxb/pD8W/6E+Ff+gPhX/njsT/6JII/+8qaT/vLm8/7mzs/+4srL/uLKy/8bBw//Iv73/ - k2NP/406GP+hTCj/n0wp/59MKf+fTSr/n00r/59NK/+fTSv/oE0r/6BNK/+gTCr/oEwq/5tNLv+JSzX/ - qpqU/+fn5/9ycnPkAAAAIAAAAAkAAAAAc3N0/v7+/v+Jb2X/yHBM/8JeOP/DYDf/wV43/79dNf++XDT/ - vFs0/7laM/+4WjP/tlgy/7JQKP+rRhz/pz8W/6Q/Fv+jPxX/oT8V/6A6Ef+kUC3/t6ml/7e2uf+1rq7/ - ta+v/7iysv/Iw8T/3Nvb/593Zf+MNxL/oEgl/5tHJf+bSCX/m0gl/5tIJf+bSCb/m0gm/5tIJv+dSCX/ - m0cl/5lIKf+HSjH/nYuD/+fn5/9ycnPjAAAAHAAAAAgAAAAAc3N0/v7+/v+TenH/y3NQ/8dhOf/GYDn/ - w144/8FeN//AXTX/v100/71cNP+7WzT/uVoz/7dZNP+0VjD/rUsj/6lEGv+lPxX/pD8V/6I/Fv+fOQ7/ - ql5B/7ekn/+3tbf/tq+v/7u0tP/CvLz/0s3O/+Tg4f+OVj7/kTkT/5tFIP+aRSD/mkUh/5lEIf+ZRSH/ - mUQh/5hEIf+ZRCH/mUUi/5VHKP+ESTH/oJGK/+fn5/92dnblAAAAGAAAAAYAAAAAc3N08vn5+f2mk4v/ - yXVT/8lkPP/JYjv/x2I6/8ZgOf/DYDn/wV44/8BdN/++XDX/vVs0/7laNP+4WjP/t1kz/7RWL/+tSyP/ - qEIZ/6Q/Ff+jPxb/oTgO/6dOKP+4qaT/uba4/763t//HwMH/0svM/+bk5v/SxL//fjUW/5pBG/+aQx7/ - mEMe/5lDHv+ZQx7/mEMf/5hDH/+YQyD/l0Qh/5NGJ/+BRzD/v7Ou/93d3f5vb3DUAAAAEwAAAAMAAAAA - c3N01+np6fe8sq7/yXNR/8xpQf/MZT3/y2Q8/8ljO//GYjr/xGA5/8JgOP/BXjj/v103/75cNf+7WzT/ - uVsz/7haM/+2WTL/s1Qu/65OJv+pRR3/pEEY/6E5DP+pWDf/vre2/8TAwf/NyMj/2NPT/+Hc3f/7+/3/ - uJaI/480EP+bQhz/mUMd/5lDHf+ZQx7/mEMe/5hDHv+XQx//lkMg/5BGJv98RjD/zMXC/87OzvtsbG2/ - AAAADQAAAAEAAAAAc3N0stLS0unW09L/xHha/9BrRP/NZj3/zWU9/8tlPP/KYzz/yGM7/8ZiOf/DYTn/ - wV44/8BdN/++XDf/vVw0/7tbNP+4WzT/uFoz/7ZZM/+0VjH/rk8p/6pJIf+kPBL/uIJu/87Nzv/U0ND/ - 3tja/+fh4f/y8fL/2srE/4o4Ff+bQRr/mkEc/5lCHP+ZQhz/mUId/5hCHf+XQh3/lUIf/4xFJv93RzL/ - xcLB/7Ozs+xqamulAAAACAAAAAAAAAAAc3N0iLOzs9rs7Oz/uIVy/9h4U//RZT3/0Gc9/85mPf/MZT3/ - y2U8/8pkPP/IYjv/xGI5/8NhOf/CXjj/wV03/8BcNP++XDX/u1w0/7haM/+3WTP/tVgz/7RXMf+vUCr/ - tV48/+Tc2v/p5ub/6+fn/+/q6v/z8PH/7Ofm/4pFKP+bPRX/nUEb/5pBG/+aPxv/mUEb/5hBG/+YQRz/ - lEIf/4lGKf90Tz//4+Li/5mZmuFpaWp8AAAABAAAAAAAAAAAc3N0XZKSk9H7+/v/qZSM/+OYe//UZz7/ - 02g//9JnPv/OZj3/zWY9/8xlPf/KZDz/yWM7/8diOv/EYTr/wV43/65SL/+2Uiv/wF00/71dNP+5WzP/ - uFoz/7dZM/+zUyv/tVs4/+7l4v/39fb/9/X1//n29v/69vf/+/n7/55oUf+gRiD/pE4p/6NNKP+hTCf/ - oEwn/59MKP+eTCn/mE0t/4hNNP+EcWn/9PT0/4CAgd9lZWZJAAAAAQAAAAAAAAAAc3N0Knd3eNz6+vr8 - x8LA/+GkjP/cfVv/1Wc9/9RqP//TaD//0WY+/85mPf/NZj3/y2U9/8lkO//GWzH/04xw/9zRzP+vgG3/ - m0Uj/7NOJv+8WC7/u1gw/7hULf+uSyP/0aOR//v7/P/69/f/+/n5//v39//79/n/+vr6/6NrUv+kSyT/ - qVIv/6dSL/+kUS7/pFEt/6NRK/+gUC3/l1Ey/4FMNf+5trT/4uLi+HNzdN5YWFkaAAAAAAAAAAAAAAAA - AAAAAHNzdKrLy8vg7e3t/8mRe//lknP/1Wc9/9dsQv/Wa0L/1GpB/9JoP//QZz7/zmc+/81mPf/IWS// - 3J2D//7////3+vv/zbmz/7J/a/+0cFb/s2pM/7VtUP/Knoz//Pz9//38/f/8+vr//Pr6//z5+f/69/n/ - 8u7u/6BYO/+qTyj/qlEt/6hRLf+lUCv/pE8r/6JPK/+eUS7/lFM3/39YSP/l5eT/q6us4W5ub40AAAAC - AAAAAAAAAAAAAAAAAAAAAHNzdFuQkJDO/v7+/L20sv/npo7/3npV/9psQv/abkT/12xD/9VsQ//Ua0H/ - 0mg//9FoP//LWzH/4J6F///////+/f7////////////7+/v/+vn5//z7/P////////////78/P/9+/v/ - /Pr6//v39v/6+/z/5tTO/6dOKf+tUi3/rFIu/6tRK/+pUCv/p1Ar/6JQLP+dUzL/jVI4/56Sj//7+/v+ - goKD2W1tbkkAAAAAAAAAAAAAAAAAAAAAAAAAAHNzdBR2dnfI3Nzc6u3t7f/HopT/65h6/9ppP//bbkX/ - 2m5E/9htRP/WbEP/1WtB/9NqQf/NXDL/5KGI//////////////////////////////////////////// - //7+///9/f/9+/v/+/n5//Xz8///////0aKO/6xLI/+vUy7/rlMt/6xSLf+rUCv/qVAs/6JRL/+XVDj/ - f1RB/+Xk5P/Ozs7odHR1vWtrbA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3RdkZGRzv7+/v3Kx8b/ - 5auV/+eObf/baj//3G9G/9puRf/YbUT/12xD/9ZsQ//QYDP/56WL//////////////////////////// - //////////////////7+//78/P/79/f/9vX2//z////dtqf/sVMu/7RUL/+yVC//r1Qu/65TLf+rUSz/ - qFMu/59VNf+MUjr/samn//39/f6GhofUcnJzTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3QM - dnZ3sMrKy9329vb/xK6n/+upkP/ifVX/3WxD/91vRv/bb0X/2m5F/9htRP/VZjz/3oVj//3n3/////// - //////////////////////////////////////7////+////+vf2/+fCtP+7XTj/uFYu/7dZM/+1VzH/ - s1Yv/7BUL/+sVDD/pVU2/5VSNv+OeG//9PT0/8HBwd11dXamc3N0CAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAc3N0OHt7fNPq6urx6enp/8iupf/vrZP/43xU/95sQv/ecEb/3W9G/9tuRf/bbkT/ - 12o//9ZoP//lmXv/9cm3//vh2P//7uf///f0///59f/+8/D/+ebf//PYzv/pvq3/zXxc/75XL/++WjL/ - vVw0/7taNP+5WTT/tlgy/7FYM/+qWjj/m1c6/4ZlWf/m5uX/6Ojo8nl5ethzc3QxAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNzdFyOjo/L+vr6/Ofn5//Rqpv/8K6U/+WCXP/fbEL/ - 4HBG/95wRv/cbkX/225E/9hsQv/VZDn/02M5/9RoPv/Ta0L/03FL/9NxTP/Rb0j/zGU9/8liOf/DWjD/ - wlsy/8NeOP/BYDj/v101/75cNP+7WzX/tVo2/65bOv+gWTz/iF1L/9jY2P/5+fn8ioqKz3NzdFMAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3Rzn5+gzP7+/v/o6Oj/ - yrGq/+ysk//pkG3/321A/+BvRP/fcEb/3W9G/9tuRf/bbkT/2G1D/9drQf/UaD7/0WU8/9BlO//OZTv/ - zGQ7/8tjO//KYzz/yWM7/8ZiOv/DYTn/wWA4/75eN/+6Xzn/sV8+/6FZPP+PaFn/2dnY//7+/v+dnZ7M - c3N0cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - c3N0c56en8z6+vr87+/v/8K1sP/nsp3/7pl6/+V7VP/fbUP/4G5E/95vRv/cbkb/225F/9puRP/YbUP/ - 1mxC/9RrQv/Saj//0Wc+/85mPf/NZT3/y2U8/8ljPP/FYzv/wmM9/7tiPv+wXz//oF1D/5+IgP/n5+f/ - +vr6/J+fn8xzc3RzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAHNzdHKOjo/M6+vr8vn5+f/Oy8v/zKyh/+uslf/sknH/5H1V/99vRf/fbkT/ - 3m9G/9xuRv/bbkX/2m5E/9dtQ//Wa0L/1GpB/9FnP//PZz7/y2dA/8hnQf/CZkH/umVE/6xgQ/+bblz/ - vbi3//b29v/q6urxjo6Py3NzdHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3Rbe3t81MvLzN7+/v797u7u/8C8uv/Pp5n/ - 6aaO/+uVdP/lfFT/4HFI/91vR//bbkf/2m1F/9huRP/YbUX/1GxF/9BsQ//MaUT/x2lF/71lQ/+0ak3/ - pm5a/7Klof/p6en//v7+/crKy917e3zUc3N0XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3N0N3Z2d7CRkZHO - 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 - h4eI7OHh4f/BwL//ek47/4ozDP+POhX/lEIf/5tKKP+hUDD/plMz/7J3YP+6koX/toJy/69UPP/EVTj/ - yVQ4/8tRNf/NTzL/zksw/9FKLv+wTTb/wrKt/+Hh4f+Hh4jsamprQwAAAAAAAAAAAAAAAAAAAAAAAAAA - amprIoODg9jT09P/wMC//39OOP+LMAf/jDQN/444E/+TQB3/mUck/51KKP+4iHf/1NPU/9bW2P/Z2t3/ - w6uk/7RSOP/GVjv/yVQ4/8pSNv/MUTX/zFAz/81PM/+3TDT/w7ay/9TU1P+Dg4PYamprIgAAAAAAAAAA - AAAAAAAAAAB8fHyYt7e4/NnZ2f99VUP/jjAF/480DP+ONA3/jzcS/5E9Gf+WRCD/nU4s/8W1r//HxMb/ - w76+/8bCwv/W09T/tmhT/8JWOv/EWT3/xlY7/8lUOP/JVDf/yVM3/8pTN/+tTjb/19HP/7i4ufx8fHyY - AAAAAAAAAAAAAAAAamprQIiIifLt7e3/hnVu/5EyCf+TNg7/kTUN/5A1Df+QNg//kjsV/5RBHf+aSCT/ - uaCX/7+/wv+6trf/v7y//9HJx/+4Zkz/vlk8/8BaP//CWj7/xFk9/8VXPf/FVjv/xFY7/8VVOP+gYU// - 7Ozs/4iIifJqamtAAAAAAAAAAAB1dXaev7+//rm4uP+NRij/mTcP/5c4Ef+UNg//kjYO/5E2D/+SOBP/ - lkAb/5hCHv+jXkH/uaGY/761tP/FtrL/v4Nv/7RXOv+4XD//u1w//75cP//AWz//wFs+/8FbPv/BWj7/ - wFo9/7xQM/+5pZ//wMDA/nV1dp4AAAAAamprJXh4efLr6+v/jntz/6M/Fv+dOxL/mzsS/5g4Ef+WOA// - lDcP/5Q4Ev+WPRf/mEQf/5lEH/+bRiH/olIy/6VRMf+rUjL/sFs9/7RcP/+3XD//uVw//7pcP/+7XD// - u1s//7tbPv+7Wj3/u1k7/55bR//q6en/eXl68mpqayVqamtgn5+f+dTU1P+bYkr/rU8o/6NAGP+ePBP/ - nTwT/5o6Ef+YOhH/lzgS/5Y8FP+XPhj/nU8t/6FxXv+hc2H/o3dl/51XPf+rVjf/rlo8/7FbPf+yXD// - tVw//7ZcP/+2Wz//tls+/7ZaPf+2WTz/rFAz/83Cvv+goKD5amprYGpqa5TAwMD+pqKg/65ZN/+yVCz/ - rU8o/6NAF/+hPhT/nj0U/5s7Ev+ZOxL/mTsT/5Y2Dv+oZ0z/0M7R/9HQ0//U1Nf/oG1a/6NOK/+nVjf/ - q1k6/61aO/+uWjz/sFs9/7BbPf+wWjz/sFk7/7BXOv+wVDX/ooBz/8HBwf5qamuUamprwNra2v+ViIL/ - t1Us/7dWMP+1VjD/rlAo/6VBF/+iPhT/oD0U/508E/+bPBP/mDYO/6ZdP//Tzs7/0czM/9XT1f+oh3r/ - lEEe/6VTMv+kVDT/p1U2/6hWN/+qVjf/q1Y4/6tWOP+rVjf/q1U1/6xUNf+TWUT/2tra/2pqa8Bqamvh - 7e3t/5R2a//AWzP/u1oz/7hZMv+2VzL/sFEp/6dEGf+kPxX/oj4V/6A9FP+cOxP/oEUf/8S2sf/Gw8T/ - xL+//8S+vv+YZ1T/lkAd/6JPLP+iUTD/olEx/6NSMv+kUjL/pVIy/6VSMf+lUTH/pVAw/5NPNf/t7e3/ - ampr4Wpqa/j7+/v/mHBh/8dgNv+/XTX/vlw0/7tbM/+4WjT/tFQu/6tHH/+mQBb/oz4U/6E+Ff+dOA7/ - rXVf/7y8wP+4tLT/u7a2/8TBwf+id2X/kj4c/55KJ/+eSyr/nkwq/55MKv+eTCr/oEsq/6BLKf+eSin/ - lEsv//v7+/9qamv4ampr+Pv7+/+fdGP/zGQ7/8RfN//DXjb/wF01/75cNP+7WzT/t1kz/7JSKv+rSCD/ - pkAX/6I9FP+hPRT/rHRe/7exsf+2sbL/v7q6/9bU1v+1koX/kDwY/5xFIP+aRiL/mkUi/5lFIv+ZRiP/ - mkUi/5pGI/+QSSv/+/v7/2pqa/hqamvh7e3t/6ODdv/QZz7/ymM7/8djO//EYDj/wl83/8BdNv++XDX/ - ulw1/7dZM/+yUiv/rEkh/6VAFv+hNwz/q2hO/7q0tf/Dv8D/1tDR/+zs7f+kclz/kzgS/5lCHv+ZQh7/ - mEIe/5hCH/+XQiD/mEQh/4pHLP/t7e3/ampr4Wpqa8Da2tr/pZSO/9VuR//NZDv/zGY9/8lkPP/GYTv/ - xGA4/8JeNv+/XTb/u1w1/7pbNP+3WjP/tFQu/61MJP+lPhP/uId1/9HQ0//e2Nj/7+7v/9XCu/+ROxf/ - mj8Z/5lBHP+ZQR3/mEEd/5dBHf+WQBz/i1lE/9ra2v9qamvAamprlMDAwP6wqqj/2oJe/9RoPv/PZz3/ - zWY+/8tlPf/JYzv/xWE6/8NfOP++VzD/uVQr/7xcM/+5WzT/t1o0/7BPJ/+/eFv/6+np/+/s7f/08fL/ - 8evr/5tQMf+dQRn/nEId/5tCHv+ZQh7/mUQg/5Y9F/+jin//wcHB/mpqa5Rqamtgn5+f+dbW1v/OmIT/ - 3XVO/9RnPf/TaD//z2Y+/8xmPf/KZDz/xl82/8+Qef+4hXD/rlIt/7RQJ/+0UCb/rUgf/86ZhP/6/P3/ - +vj4//z4+f/39vX/qGVI/6ZPKP+lUSz/o1As/6JPK/+hTiv/l0ck/9LNy/+goKD5amprYGpqayV4eHny - 6+vr/7Sjnf/ojWv/12k+/9dqQf/UaUD/0Gg//85nPf/KXjT/6sS3//r////aycL/xZuL/8KNd//Rqpn/ - +PPy///9/v/9+vr//Pr6//Lq6P+qWTj/q1Aq/6hRLP+mUCz/pE8q/6BKJP+YZlD/6+vr/3h4efJqamsl - AAAAAHV1dp6/v7/+w8PD/+Gnkv/ielP/2WpA/9htRP/Wa0L/02g//85hNv/uxbb///////////////// - /////////////////vz8//r4+P/9////2biq/6xMJv+uUiz/rFEs/6hQK/+mTyr/nEIe/7+1sf+/v7/+ - dXV2ngAAAAAAAAAAamprQIiIifLt7e3/urGu/+2aev/fb0X/221E/9luRf/Xa0L/0WM3//HDsf////// - ///////////////////////////9/v///P///+3a1P+6ZkT/slIr/7BVLv+vUyz/rVEr/6VHH/+hdmX/ - 7e3t/4iIifJqamtAAAAAAAAAAAAAAAAAfHx8mLe3uPze3t7/2sC3/+yRbv/fbUL/3W5F/9tuRf/Yaj// - 3XxW//LBrv//8ev///////////////////z6//jq5//jtaP/wmhE/7lVLP+4WjP/tVcx/7RWMP+uTCT/ - pF1A/9zb2/+3t7j8fHx8mAAAAAAAAAAAAAAAAAAAAABqamsig4OD2NPT0//Ozs7/6ce6/+2ScP/icUb/ - 3m1C/91vRv/YaT//1mU4/9hwSP/bgl//35By/92Qcv/Wf17/y2pE/8JZMP/BXDP/wV42/7xcNP+6WzT/ - tVEp/65ePv/LxsX/09PT/4ODg9hqamsiAAAAAAAAAAAAAAAAAAAAAAAAAABqamtDh4eI7OHh4f/Ozs7/ - 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 - nDsS/5k6Ev+XOBH/tHhh/9nd3//MwL3/nE4u/6dUM/+qVzj/rVo7/69aPP+vWjv/rVo8/6JYPv+rjIL/ - zMzM92xrbK5sa2zY6Ojo/p+Cd/+zXDn/tVgz/65OJ/+lQRf/oT0U/508E/+ZNAr/r2ZI/9jZ3f/Tzs// - p21W/5tGIv+jUTH/pFMz/6VUNP+nVDT/plQ1/6BVOf+TZlX/6Ojo/mxrbNhsa2z1+fn5/551ZP+7YT3/ - u1w1/7laM/+0VC3/qkUc/6M+FP+eOA7/pU0q/8fCwv/Gxcb/y8bH/6h8av+bQBv/oEwq/55MKv+eTCv/ - n0wr/5tOMP+JVUH/+fn5/2xrbPVsa2z1+fn5/6V5aP/DZkH/wV83/79dNf+7XDX/tlYw/65LJP+mQhn/ - oDoO/6hNKf/Cu7n/yMbH/9jW1v+oaE3/lz4X/5lFIf+ZRSL/mEYj/5VIKf+FUz7/+fn5/2xrbPVsa2zY - 6Ojo/q6Ogv/HaEP/yGQ9/8VgOP/CXjf/v101/7pbNP+2VjD/rk4m/6Y+E/+oUS7/z8rK/+Ph4//Yy8X/ - kkEf/5k/Gf+YQR3/l0If/5JGJ/+LYE7/6Ojo/mxrbNhsa2yuzMzM97ippP/Lb0z/zGY//8tlPP/HYTv/ - w2A4/79cNP+3VCz/uVcw/7VULf+sSyP/2cO8//Dv8f/09PX/qmZJ/5k7FP+aQh3/l0Qg/5BGJ/+li4D/ - zMzM92xrbK5sa2x4o6Oj5tDNzf/NiG7/0WlB/9BoQP/NZj7/yV40/9N3VP/Qjnb/tmdI/7FWMf/Gbkz/ - 9Orn//38/f/8/f7/unph/6JHIf+jUCz/n1Iv/5BPMv/Tzcr/o6Oj5mxrbHhsa2w4eHd43ujo6v/Cp5z/ - 13tY/9VqQv/VakH/zV4y/9yGZv//////9vPz/+/k4P/69vX///////7+///y7Ov/rlo4/6tPKf+mUS7/ - nU4u/5hyZP/v7+/+eHd43mxrbDgAAAAAbGtsmLGwtO7Lysr/z5iC/9dvSP/YbET/1GQ5/9x/W//24Nf/ - //////////////////////n4+f/KiXD/sVEp/69UL/+oVDL/mFE0/87Jx/+4uLjrbGtsmAAAAAAAAAAA - bGtsPXZ1dtXW1dn7wb28/9mTev/acUn/2W1E/9ltQ//fhmT/6amQ/+y2of/psp//4qKL/8hwTf+7WDH/ - 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 - - - - CenterParent - - - Help - - - HelpDialog - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Bottom, Left, Right + + + + 12, 12 + + + ForcedVertical + + + 560, 304 + + + + 0 + + + + + + richTextHelp + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Bottom, Right + + + 472, 325 + + + 100, 25 + + + 1 + + + &OK + + + MiddleRight + + + ImageBeforeText + + + buttonClose + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 584, 362 + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAB3d3h3h3h3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAB3eIj//////////4iHd3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAHeIj/+PiIiIiIiIiI////+IdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAB3iP+PiIiIiPiPj4+Pj4iIj///+HcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAB4j/iIiIiPj4+IiIiIiPj///iIj///h3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB4+PiIiI+PiHd3Z3Z8d3dneHiP//iP//+HcAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAB4+IiIiPiIdnR8Z8fHx2xsfHx2d4iP//j///dwAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAB4/4iIj4h3ZHx2dnx2fHfHfHfHx8bHd4j/////93AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4+IeI/4dnRlZ2x8fHx8dsjHfHbHx8fGx3eP/////3cAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4+IiI+IZWVsfHx3x2dnx3x2fGfH58dnx8fGd4j////4cA + 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 + +I9wAAAAAAAAAAiIiHZnTGfGRlZWx0fGR0VsZHx0ZWfGVsZ0fGx2fHZ2dnx2fHx2d8dox2fIZ2x3x2fH + Z8dnd4+I9wAAAAAAAACIiPhHx2ZcZWxkbHRkZMbGRlZGR2xkdGdlbHZ2x2fHx8fHZ8dnx8dnx2fHbHyG + x2x8dsdsfHx/iPcAAAAAAAAAiIj2fGx8ZkZWVsZGR0dGVkfGVsZHR8bFbHZlx3x8dnx2fHx2fHZ8fHbH + Z8hnx3x3yGd8d8dnf4j4AAAAAAAAAIiIh8d2x0fGxsZWVsbGRkbGRsZWRsZ0dkZFRmRkZGVnx2dnx8d8 + doZ8hshsfHx2x2x8fHx2x2j4iHAAAAAAAAiIj3Z8ZWfGR0ZWRsZWR8fHR0dGR8dHRsd3d3d3d3d0Z2x8 + fHZ8dnx8dnx8d2dnyGfHfHZ+fHx3+I9wAAAAAAAHiIh8Z8bHbHRsbHR0bGRkZGRsZWRkZGVoiIiIiIj4 + hHx3x2fHZ8fHZ8fHdnx8fHbHfHZ8fHZ3R4iPgAAAAAAACIj4d8dnbHbGVlZGxlZWR0bHRkbHR8fGWIiI + iIiIiIZWx2fHZ8dnZ8dnfHx2fHZ8jHbHx2fHxnyPiIcAAAAAAAiI98Z8bHfHbGxsfGRsbGxlZMdHRsZG + dGiIiIiIiIiFZ2fGfHx2x8dsfHZ2x8dnx2fHZ2fHbHx2j4j3AAAAAAB/iId2x3x8Z8dlZkZWVlZWRsdk + bGR0dGx4iIiIiIiPhkfGfHZ2fHZ8d2fHx3Z8fHbHZ8fHbHdnZXiI9wAAAAAAiIj2fHbHZ8Z0fGVsbGxk + bHRkR0ZWRsZWSIiIiIiIiIVsdHZ8bHZ8dnx8dnx8dnZ8d8dnbHfHx8dviPgAAAAAAIiIh8fHbHx2x8ZG + x0dHRlbGVsbHTGVkbHiIiIiIiIj3R2fHx3Z8dnx2dsfHZ8fHx2x2x8dsdnx2WIiIcAAAAACIj4Z2fHZ2 + x2dnx2xsbGxkdMZWRmVsZWRoiIiIiIiIiEZWZWbHx2x2x8d2dsdnZ2fHZ3x2d8fHbHf4j3AAAAAAiIh8 + fHbHx2x8fHxlZ0dHxsZ0bHTGR0bHx4iIiIiIiIh0bHx0dnx2x3Z8bHx2x8fHZ8fHbHx2bHZniI9wAAAA + CIiPd8fHbHx2x8Z2xsbGxnR0bHRmVsbHRkiIiIiIiIiIhHR2Z8dGdWfHx3Z2fHZ8dsdsdnx2bHdld4iP + cAAAAAf4j2dnbIZ2x3Z8dndHR2TGRsdGx8ZWRkdGiIiIiIiIiIdGR8dsfGx8Z2xsfHZ8dnx8d2x2x3x8 + fGX4j3AAAAAIiIh8fHbHx2x8Z8fGxsbHZWx0bHRkZWxsbIiIiIiIiIiIdHRsdlZ2dlx2d8dsdsfHZ8Z8 + d2x2dkdmiIiAAAAACIj4Z8fl7HyGx2x2x3Z0fGxlbHRkfGx2VlaIiIiIiIiIiPdGVlZsfHxnZcZ2Vnx2 + dsdnx2x2XGVsdI9/gAAAAAiIiHx2x8dnx2fHZ8fHxsZWbGZGxkZWRsZGWIiIh4h4iIiIdGfHx2VnbHZ0 + bHxnR8dlx2R2XGdsdlaIiIcAAAAIiPhnyGx2x2x8fsdsdnx2x0fHx0fGRsdHxsiIeIiHiHh4iPdEZnRm + x0dMfHZ2Vsdkdmx8fGdsdlZ0iIj3AAAACPiIx2x3yGx+dsfHx2x2fGRsZGRsdHxkZHRmiIeHiIeIh4iP + hFZHx0dsdmdHx8dkfGx2VmdHx0fGx3+IhwAAAAiI93fIxnx3x8fHZ2yGx8dsdlbHxmxnR8bGXHiIiHh4 + h4iHiIhkdHbGVmXGfGZ0fGd0fGfGx2R2ZWSIiPcAAAAIiPfIZnx+x2x2fHx2x2x2fHxsdkdHTGR0dGZI + eHiIh4h4iIiPh0bHR8fGdGVlbGdGx2VkdWR8bHx2f4iHAAAACPiIZ8fIx2yGyMfnx3x3x8dnx0bGxmfG + xmx8ZYiHh4h4h4eIiPhkdGZkdGfGVsdHx2RsdsZ8Z0dGVniIhwAAAAiI93yG52x3x2x2x2x2x2x2x2xl + ZWXGR2XGR0bIeIeHh4iIeIiPhUZWVsfGdGdkdmR8dlZ0Z0Z8dkWIiPcAAAAI+Pdox8x3xnyGx2x2yGx+ + x2x3xsbGZWxkZ8bGZ4h4iIh4yIiIiPhkZcdmVkfGVsfHRlbGVsdMdkdmeIiHAAAACIiIyGyGyGfHx+x3 + yGx2x3x3xndnZcbHR8ZHR8TIh4d4eIiIiIiPhHZkdGVsdGx0ZHxlZWx0dkfGVIiI9wAAAAj4+Gd8d8bI + bnx3x2x2fIxnxnxsfHxnRsZHxsZGZIiIiIh4h4iIj/dEfGXGdGx2R0fGdGx2RsdGVmWIiIcAAAAIiIjI + yM53x8fHx2yGyMdnx2fHfHbHbHx2xkdlbHxnh4yIiIiIiIj/dGR2bGVnR8bGdGx2R0dkfGx0iIiAAAAA + CPj4doZ8fIbH58aMaMZ8fHbHbHbHfHZmx0fGxlZGxIiIh4h4iIiIj4ZHxHR8ZGRnR0ZWR0bGVmVnRoiI + gAAAAAiIiGfHx+fIbHx8dnx8fnbIbIbIbHbHx2xsZWxsdHxnh4iIiIiI+Pj3RmVsZ0fHRlbHZHxlZWx2 + RlaIj4AAAAAH+Ph8jnx8bIZ8hnx2fsfHbHbHbHbIZ8fHdnxlZ8ZkxniIeIiIiIj4/0VkZ0bGdGxnRsZH + bHZHTHRliIiAAAAACPiPd3x8fnfHx+x+x8d8fIbIZ8fIbHx2fHxnbGRlx2x4iIiIiI+Pj492R8ZWVkZW + VsdHbHRsZGdGV4iPcAAAAACPj3yOfsfH7IbHx3x8dsfHbHyGfHZ2x8dnx8dsdmRlxoiIiIiIiPj/hGR0 + bGVsfGRkfGVkdHx0Z0eIiIAAAAAAj49+fHx8jHfHfIxoznyGfIZ8bHbHx2dsfHZ8d8bHxmWIiIiI+PiP + j/dGxlZGx2R8dkdGRkdkbHRoiIhwAAAAAI+IjIjIZ8dsjOdnxnx2x+fHx37HZ8fHx2fGx2x3x2XGeIiI + iI+Pj4j4R0fGfHRkZ0bGR8dsZWVkd4iIAAAAAACIj4fIbIyMhmfHyGfIx+x8fOfHbIx+fH7HZ8fHbHbH + bHiIiI+I+Pj/+EZGZWRkfHRlZWZGVlbGRliIiAAAAAAAj4/3eIx+Z8jH7Hzsdnx3x2fHbIx2x8Z8fHx2 + fHbHZ8fPj4/4+Pj4iP9GXHxlbHZGxlbHR8ZGdHR4iPcAAAAAAA+I986MfHznx8hnd8jHx2yMfIbHZ8dn + x2fHbHbHZ8dmePj4+P+Pj/+PdGZGRnRsdHRsdGxlbHRneIiIAAAAAAAI+Ph3jnyGx+fHx8fsfnyGx+fH + fHx+x2x8Z8fHZ8fGx8+Pj4+P+Pj4/3R8dlxsdGxnx2R2VnRnRoiIgAAAAAAACPj4zoyGyMfH5858d8fH + x+x8fOfGZXx+dnx+fHx2d8dvj4//j4//j492Z8dndnx3x2R8fGfHx0eIiIAAAAAAAAj4j4eIyMfnyMd8 + fsdn5+x3x2fHiGRnx8fHbHbHbHx8iP/4+P/4+P//dMdsfGx2R2R8Z2dGZWZ3iI9wAAAAAAAAj4+MiHyM + fIx858d8jMfHx2fHaIj4Rnx8flbIbHbHZo+Pj/+Pj/+Pj3Z8dnZWx2x8dnxsfHZWWIeIgAAAAAAAAI+P + h8iOZ+fH58d8fsd8d+yM58j/j4dGZ8fIbHfIbHj4//j4//j4//98Z8bHx2VnZlbHZWdMdniI+AAAAAAA + AAAPj/h+jIx8jHyM58d858fHx3xoj4/4h8ZmfHbHbHaI/4+P/4+P/4+PZ8dlZ2x8fHxnZWx8dmV4h/cA + AAAAAAAACPj4d4jHyG58dnyM58fnyGx+yP/4//+IVkZHbHZ4+Pj/+Pj/+Pj4/0dkfHx2dmVnx8Z2Z0dH + iHiAAAAAAAAAAAj/j3eI5+x8fsjIZ8d8fIZ+x3iPj4+P//+Ih3h4/4//+P//j4/4//hsfHZsfGx8bHZW + x8Zsd4iPgAAAAAAAAAAA//+MiIx3yMd8fOyM58jGx3zI///4+Pj///////j/j/+Pj//4/4/3VnbHx2Vn + x2dGx2VldliHiHAAAAAAAAAAAI+P9+iHyMhnyOd8d8fnyHx36Pj4////j4+Pj4////j///j4/4+P9sfH + Z2VsfGfGfHbHbGV4iIgAAAAAAAAAAAAP//h8iOx+yOx8d858fHznx8j///j4////////j4//j4+P/4+P + j4dsdsfGdnZWfHZHbHZWiHj3AAAAAAAAAAAACP//iIh3x3x8fshnyMhox+x4+Pj///j4+Pj4///4///4 + /4+P+P98dsfHbHxsfGfHx8dHZ4iIgAAAAAAAAAAAAAD//4aIjIznyMd8jIZ87Hx3yP//+P////////j4 + //j4/4/4+Pj4bGdnbHbHfGfGZ2Z2x1iIiIAAAAAAAAAAAAAAj//4yIjnyGjOfH7HyHyGyGj4+P/4+P+P + j/j///j//4/4/4+P9lfHx8fHbHZ8dHxcZWZ4h/gAAAAAAAAAAAAAAA///3joyMfOfIbHfnx+yGx4//// + /////////4//+Pj4/4/4/3xnxnxnbHbHxnxnZ8dHiIiHAAAAAAAAAAAAAAAI//+HeIyOfIx3jHx+x3yM + 5//4+P/4/4/4/4//j////4/4j/fHxnx2fHZ8dnxnxsZ2eIh/gAAAAAAAAAAAAAAAAP//+HeIx8jIzsjI + x3yMdsiP///4////////j/+Pj4/4+P98dnx2x8Z8Z8ZWfHZ8dIiHiAAAAAAAAAAAAAAAAAAP//+OiI58 + hnyG587Ibsh8j/////+P+P+P//+P/4/4+P+Hxnx2x3x2x8dnxsdsdkeIePcAAAAAAAAAAAAAAAAACP// + h3iHyM58jHyHx8d858eP/4///////4+P/4/4///4xnbH5Wx2Z8dsfHdsdlZ4iIiAAAAAAAAAAAAAAAAA + AAD///h3iIyMjH7Ix+d8hnyMbIj///j/j////4/4//+Ixnx8hsd+x8dsdsdsdlbHiIeIAAAAAAAAAAAA + AAAAAAAAD///h+iOfOfIfOfHyMfIZ+fIaI/////4//////iHxnx2dsdsfHZ8d8dnx8bHd4h4+AAAAAAA + AAAAAAAAAAAAAAj/j/h3iMjIbIZ8jIbn7Hx8jGx8iIiPj/j4iIfHxnx2yMdnx2fHx8Z8fGdndoiHj3AA + AAAAAAAAAAAAAAAAAAAAj///h8j37IzsjIbsfHfIaM5358bGx8fHx8bH7HyGyGx8jHx8dnx2x2fHxseI + ePgAAAAAAAAAAAAAAAAAAAAAAAj/j/iOiIyHd8jHyMjI7Hx3x8fIaMhn5858jHdnx+x2fsdufHxn7HbH + bHeIiIiAAAAAAAAAAAAAAAAAAAAAAAAA//j/iMiIzsjOfnyGfHfnznyMjHx+x8d8d8fOyGx3yMdsfHbI + bHfHbHdniHiIAAAAAAAAAAAAAAAAAAAAAAAAAAj/j4iI6IfIaMfIyMjOXIyGfmfnx8jOx85+fHx+x2x8 + d8fIbHbHbIbHiIeI8AAAAAAAAAAAAAAAAAAAAAAAAAAA/4j/iHiIjHyMhnbnx358fHyMx+fHfIaMfHfI + x3x+fGfnbHbIbIbHeIiIiIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4j/iMiIjnyM7Ix3yMfn58dox8jOfH + x8fOdnxox8jHx8fIbHfHd4iHiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iPiI54h+yHyM7Ix8fHyMjI + yGfH58hufHx+x8dsfsdn7HfGfHiHiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iP+HjIiHznyHfsjn + yGfsfnzsjHyGx8fIx3yMhsd8fHfGjHiIiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iP+IiHiIyM + 7HyMfIyMd8fHd8jH7IyGjHbH5shsfsfGfGiIh4iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj/iI+I + joeIhoyMfnyGyM58jOyG58d2x858hsd8d8d8jHiIh4iIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + iP+I/4jI6Ih358fIznZ8hud8fHyM5358fsd8fsfsdmeHiHiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACP+Ij/iHjIiHjI58jIyMjHyOfIZ8fHx8d8hsd8d8iIiIeI+AAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACI/4iP+IjoyI6MjH7IbsjIx8jOyMjIaMfsd858h4iIeIiIAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAIj4iPj4h4eMiOd3yMd8fnyGfIx+fOx8d851iIiIeIj4AAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAIj/iIj4iIeO13yOyMjsfIznyGx8d8jsd3iIiIeIiIgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiP+IiP+Ih4yOeH58h358jIyOeMhseIiIiIeIiIgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI//iIj/j4iIx3d8jHyGfnx8eOiIiIiIeIj4gAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP+IiIj/iPiIiHiIeIeIiIiIiIiHiIj4cA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI/4iIiIj4+Ij4iIiIiI+IiIiIiP + iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP/4iIiIiIiIiIiIiIiI + iI+PiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiP/4+IiIiIiI + iIiIj/+IhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIj/ + ////////j4dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAACHd3d3d3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////wAAH////////////////+AAAAD/// + ////////////4AAAAAH//////////////wAAAAAAP/////////////wAAAAAAAf////////////wAAAA + AAAB////////////wAAAAAAAAH///////////wAAAAAAAAAf//////////wAAAAAAAAAB//////////w + AAAAAAAAAAP/////////4AAAAAAAAAAA/////////4AAAAAAAAAAAH////////8AAAAAAAAAAAA///// + ///+AAAAAAAAAAAAD////////AAAAAAAAAAAAAf///////AAAAAAAAAAAAAD///////gAAAAAAAAAAAA + Af//////wAAAAAAAAAAAAAD//////4AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD//////AAAAAAAA + AAAAAAAf/////gAAAAAAAAAAAAAAD/////wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAH////8AAA + AAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAH////gAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAP// + /8AAAAAAAAAAAAAAAAB///+AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAA + AAA///8AAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP//wAAAAAAAAA + AAAAAAAAD//8AAAAAAAAAAAAAAAAAAf/+AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAA//wAAAA + AAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/ + 4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAA + AAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAA + AAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAA + AAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/ + gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAA + AAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAA + AAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAA + AAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAD/ + wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAA + AAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAA + AAAAAAAAA//4AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//8AAAA + AAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAB// + /wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAA + AAB////AAAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////wAAAAAAAA + AAAAAAAD////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAA + AAAAAAAAAAAAH/////8AAAAAAAAAAAAAAD//////gAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAf/// + ///gAAAAAAAAAAAAAP//////8AAAAAAAAAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAAAAA + D////////gAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAA + AAAAAf/////////4AAAAAAAAAAf//////////AAAAAAAAAAP//////////8AAAAAAAAAP/////////// + wAAAAAAAAP////////////AAAAAAAAP////////////+AAAAAAAf/////////////4AAAAAAf/////// + ///////4AAAAA////////////////4AAAH/////////////////+AB//////////KAAAAGAAAADAAAAA + AQAEAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAA + wMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHd3d3d3d3d3cA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3iIiIiIiIiId3dwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3eIiIiIiIiIiIiIiIiHd4AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAB3eIiIj4////////j4+IiIiHeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeIiI + j/+Ph3d3d3d3iIj/+IiIh4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd4iIj/+Hd2VnxsbHxsdHd3 + j/j4iIh4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHiIj4+HdlZWfHZ3fHZ8fGx8Z3iPiIiHeAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAd4iPiIdlZWx8dsfMdsfHyMfHzHx3/4iIh3AAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAh4//iIjIh3zn7IyGjOfOfOyM58foiPj4iHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeP/4iI + d4h8jIzsfl58jIx8fIiI+PiIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3iP/4iH6HjOd3yMfIyGjo + iPj4+Ih4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeIj//4iIiIjIhoh4iIiI//j4iHgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeIj//4+I/4j4j4iPj/iPiHcAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAACHd4iP/////////4+IiHeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + CHd3eIiIiPiIiHh3eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh3d3d3d3d4AA + AAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////////////// + ////////////////////////////////+AAD////////////gAAAP//////////8AAAAA//////////g + AAAAAP////////+AAAAAAD////////4AAAAAAA////////gAAAAAAAP///////AAAAAAAAH//////8AA + AAAAAAB//////4AAAAAAAAA//////wAAAAAAAAAf/////gAAAAAAAAAP/////AAAAAAAAAAD////+AAA + AAAAAAAB////8AAAAAAAAAAB////4AAAAAAAAAAA////wAAAAAAAAAAAf///gAAAAAAAAAAAP///gAAA + AAAAAAAAH///AAAAAAAAAAAAH//+AAAAAAAAAAAAD//+AAAAAAAAAAAAB//8AAAAAAAAAAAAB//4AAAA + AAAAAAAAA//4AAAAAAAAAAAAA//wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/gAAAAAAAAAAAAAP/gAAAA + AAAAAAAAAP/gAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAD+AAAAA + AAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB+AAAAA + AAAAAAAAAB+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD/AAAAA + AAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAP/wAAAA + AAAAAAAAAP/wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/4AAAAAAAAAAAAA//4AAAAAAAAAAAAA//8AAAA + AAAAAAAAB//+AAAAAAAAAAAAD//+AAAAAAAAAAAAD///AAAAAAAAAAAAH///gAAAAAAAAAAAP///gAAA + AAAAAAAAP///wAAAAAAAAAAAf///4AAAAAAAAAAA////8AAAAAAAAAAB////+AAAAAAAAAAD/////AAA + AAAAAAAH/////gAAAAAAAAAP/////wAAAAAAAAAf/////4AAAAAAAAA//////+AAAAAAAAD///////AA + AAAAAAH///////wAAAAAAAf///////4AAAAAAA////////+AAAAAAD/////////wAAAAAf/////////8 + AAAAB///////////gAAAP////////////AAH//////8oAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A + /wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHd3d3d3d4AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACHd4j//////4h3eAAAAAAAAAAAAAAAAAAAAAAAAAAAd3j//4+P+P////+HeAAAAAAAAAAAAAAAAAAA + AAAAAHeP/4h3d2VnR2d4j//3eAAAAAAAAAAAAAAAAAAAAACHiPiHdlZlZ8dsfHR3j//3eAAAAAAAAAAA + AAAAAAAAB3j/h3RlZ8fHbHx8fGx0iP/3cAAAAAAAAAAAAAAAAAh4+PdkZWx8dnx8d8fHx8bHj/+HgAAA + AAAAAAAAAAAAh4j4dGVsdnbHx2jGfOfGfHxlj/h4AAAAAAAAAAAAAAh4j3RkZHbHx2x8fHzlx8fHxsdo + /4eAAAAAAAAAAAAAh4j3RkdGx0Z8dnZ2x8dsjGx8fMdv/3cAAAAAAAAAAAh4j3RkRsdGfGZ4iIiGfIxs + jOx2x8f/94AAAAAAAAAAB4j2RGRkZGxlZYj4+PjHx8fHx8fHx0/4eAAAAAAAAAB4j3RkR0R8dHx4+IiI + j3bH7Hx8fOx8dv+HAAAAAAAACIj3RGRsZGRkZs+IiIiPjHx3znznx8fHf/hwAAAAAACHj3RkZUZEfGXH + eIiIiIiGfGx8fHx8fsfI/3gAAAAAAHiPZGTGRGxkZGR4iIiIiIx8hnx2x8fHx2T/hwAAAAAIiPdGVkbG + VkVsfGiIiIiPfHbIx8jH7Hx8fH/4cAAAAAeIhGxGxHRkbGVmx4iIiIjHyGx+fHx3x+x2ePhwAAAAiI90 + ZGR0ZMZGRsdGx4eIxnZsd8fH58Z8dsfG/4cAAACIiGTHxkxkZFbHRkdGxsZ8fHfGfHx8fH7HfHaPhwAA + AHj3x2RsZGx0bGRkfGfHbHbHx2fHZ8dnx3x8fH/4gAAIiPR2xkdGVkxkRlxmxGR0fHZ8fH7HbIx8Z8dn + T/dwAAiPdsfHxGxsZGVsZkWIiIh2fHbHZWyGx2fHbHx3/3AACI92fGZGx0ZHxkZFbIiIj4R8Z2fHx8ds + fHx+x2ePcACIiHxnx8dGxGxkx8bHiPiI9GfHx2x2fHfHZ8dsfP94AIiIZ8Z8bGxlZMZGRkaPiPj3xnxs + d8fHbH7HbHfGj4cAiPjHx8dnx0xsdGx0bIiIiIhGx2fGdmx2x2x2xnSPhwCI93bHbHxmxnRsdGxkiIiI + iHR2x2x8dsdsdsd8Z3j3AIj3x2x8Z8dsbGRsZHxoiIiI90ZWx2bHfHZWfGfEf4cAiPdshsjGfHbHxsZc + ZGiIiIiIhGx2x2xnxsfHRnZ49wCI93xnxnznx2xlZGbGxYiIiIiIZGVsdHRnRmx8TH+HAIj3yM5858fG + x2xsfGVkaIeHiI+FbHRsbHxlZWZ2X4cAj/dmfHx8fHfHx2xkRsbHiIiIiPhGRlZ0ZHxsbEZ49wCI93x8 + fsdmznx8d8fGVsTIh4iIj3RsbGR8ZHR0dHj3AIj4yM7HfHx8dmfGbHxsZkaIiIj490dHRsZWxkbGf4cA + iPhnZ3xn58fHznx2fHbHxMiIiP/4RsbHRsZWx0aIhwCI/3yMaMx8fnx8fHxnx2xnZ4j4j49kdGR0dGR0 + ZY+HAIj/dsjGjH7Hznx+x8Z8dsfHj4/4/3xsfGxkbGRkiHgACP94znx+x8dsdsdsjGx8dsb/+P//dGRk + ZWx0fHePcAAI/4aMdsfIbIx8fHbH58fHbP////+Gx8fGdGxmSIhwAAiP98jIyGyMfshoh2x8fmx4///4 + /4R2Z2xnx2Vo+HAAAI/4fs58jOfHbHj/hsbHxnj/////jGx8dHxnxniHAAAAiPh3x858fIyM6P//iHd4 + //////92fHxsdsZWiIcAAACI/4eMjH7H7GfP//////////+P/2x8Z2fGfGWPeAAAAAj/iM52yMjHfH// + ///////////4x8Z8xnxnSPhwAAAACI/4jIyM587Iz///////////+PdsdsdsdHx4iHAAAAAAj/9+fOfI + yGbo//////////j/fGfHbHbGx4+HAAAAAACI/4h4yM58jHj///////////fGx2x2x2dIiHgAAAAAAAiP + +H7Ix8jIzHj////////4xnx8dsfGxoiIcAAAAAAAAIj/iHaM585+xsiIj/+Ih8Z8fsfHxnx3iIcAAAAA + AAAACP/4d8jIx8d37Gx8bHxsfOfHbH58Z8j4cAAAAAAAAAAIj/+I52fnfOx3yOyM58hnx8Z2x8fIj4eA + AAAAAAAAAACI//iIyMfnyMjGfH5WfOx858jGxoiIiAAAAAAAAAAAAAiI/4iOfHyM52jIx8jHyMfHxnyI + j4hwAAAAAAAAAAAAAIj//4iHfsjIx+yOx+yG58hseIiIeAAAAAAAAAAAAAAAAIj/+Ih4dozsfHyMdsfH + 7HiI+IcAAAAAAAAAAAAAAAAACIj/+Ih353jI5853dox4iIiIgAAAAAAAAAAAAAAAAAAAiI//+IiHd+fI + d8jIeIiPiIgAAAAAAAAAAAAAAAAAAAAAiIj//4iIiIeIiIiP+IiIAAAAAAAAAAAAAAAAAAAAAAAAiIj/ + ///4+Ij4//iIiAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIj4///4iIeIAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAIiIiHh4iIgAAAAAAAAAAAAAAAAA/////////////////////////wAD///////wAAA//////8AA + AA//////AAAAA/////wAAAAA////+AAAAAB////gAAAAAB///8AAAAAAD///gAAAAAAH//8AAAAAAAP/ + /gAAAAAAAf/+AAAAAAAA//wAAAAAAAD/+AAAAAAAAH/wAAAAAAAAP/AAAAAAAAA/4AAAAAAAAB/gAAAA + AAAAH8AAAAAAAAAPwAAAAAAAAA/AAAAAAAAAB4AAAAAAAAAHgAAAAAAAAAeAAAAAAAAABwAAAAAAAAAD + AAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAA + AAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAOAAAAAAAAAB4AAAAAAAAAH + gAAAAAAAAAfAAAAAAAAAD8AAAAAAAAAPwAAAAAAAAA/gAAAAAAAAH+AAAAAAAAAf8AAAAAAAAD/wAAAA + AAAAP/gAAAAAAAB//AAAAAAAAP/+AAAAAAAB//4AAAAAAAH//wAAAAAAA///gAAAAAAH///AAAAAAA// + //AAAAAAP///+AAAAAB////8AAAAAP////8AAAAD/////8AAAA//////+AAAf///////AAP///8oAAAA + MAAAAGAAAAABAAQAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAA + gIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + B3d3d3d3cAAAAAAAAAAAAAAAAAAAAAB3eI////iId3cAAAAAAAAAAAAAAAAAAHeP//h3d4j//4d3AAAA + AAAAAAAAAAAAeI+IR0dnx2VlZ4+HcAAAAAAAAAAAAAAHj/dlZ2XHbHx2V3ePh3AAAAAAAAAAAAB/90dG + VsdsjHbHxsdoj3cAAAAAAAAAAAj4dGR0Z2x3ZsjHx8fHePdwAAAAAAAAAI+GR0ZHxleIiHx858fHx493 + AAAAAAAAB/hHRkZGfHiIiIbHx8Z8dnj3gAAAAAAAf4dGRGVsZoiIj4jHbIx8fHf4cAAAAAAIj3RkZUZH + RYiIiIhsjHznx8d/dwAAAAAH90ZFZGxkbHiIiIfHZ8fHx2x49wAAAAB/9lZGRkR8dmiIiIx8fH5efHZ2 + +HAAAACPdGRsZGxkbFZ3fHZ8fsfHx8fHf3AAAAiIdGx0R8ZHRmzGx2x+V8dsdnx2eIcAAAf4ZWRsZEdE + bFZ3Z8fHxnx3x8fHyIcAAAj3RsfGVsZGx2iIiGdnbHbHZ+dnd/cAAIiHZ8ZGxkbHRGiI+Fxsd8d8fHzH + x/eAAHiHx8fHRsdEbHiIiHZ8fHbHbHZ8dohwAH+Gx2dsbHRsZMiIiIxnZsdsdsfGdIiAAH93x8bHfGxk + dkeIiIhUx2x2x2dlZ49wAH98fnx8Z8ZcbGyIiIiHbHbHZcbGxn9wAH93x8fnxnxmxlZIiIiIdkdkdmVn + R39wAH92fOXGfHbHRsbHeIiI9GxWxsbHxn9wAH93x8dsfGfHx0ZMaIiI+EZsdHR0ZYhwAH+M52fIZ8fs + dsdsbIiI/4RWRsZGVoiAAHj3fHzsfIx2x2x2VniPj4bGx0fGZYhwAIj3yOd8hsbHx8fHxs/4/4RlZGRl + ZvgAAAj3jMx+x+fIbIbHZ8////fGfHx8dfcAAAf4jn7Hx8fIiGx+xo//j/dsdmZnSPcAAAiPd8d8jIzo + /4dneP////R8bHxWeIgAAAB/iHyM58fI/////////4xnZWZ8f3AAAACI+OyGyOx+///////4/4bHxsfH + +HAAAAAI+IjIx8jI////////+Mdsdnx39wAAAAAHj3jOfsfnj///////jGx2x8d/iAAAAAAAf/iMfIx8 + eIj/+PiMZ2fHx2ePcAAAAAAAB/iI58jOzOx8fHxnx8fHZ2j3AAAAAAAAAI/4h+yHd8jOfOfH7H5sfP+A + AAAAAAAAAAj4iHfOyM58d8dsd8fHj/gAAAAAAAAAAAB/+IiMjIx3znyMfHZ4+IAAAAAAAAAAAAAHj4iI + 587Ix8hn53j/hwAAAAAAAAAAAAAAh/+IiId+d+yMiI+IcAAAAAAAAAAAAAAAAHiP+IiHd4iP/4hwAAAA + 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 + wPEbmP0G/n+7sMqt4AflUwAAAABJRU5ErkJggigAAACAAAAAAAEAAAEACAAAAAAAAEAAAAAAAAAAAAAA + AAEAAAABAAAAAAAAXCQMAF8qFABmJw0AYysUAHMtEQBpMhsAdzcbAGk6JwB3OyQAbUAtAHdBKwBrRzcA + d0k2AH1RPgBxT0EAeVVGAH5dUQB8Y1kAfGpkAH19fgCLOxgAkz0ZAIM9IgCNQB4AmUEdAKBFHgCLQyUA + lUcnAIVLNACYTjAAilE6AJxSNACiSCMAplAtAKZPOQC4TzgAp1c3ALZbOgC7YT0AxE00AMFTOQDEYzwA + iFhGAJlYRQCFXlEAml1RAKpbQgC2W0IAoF5SAJVhSwCJZFYAk2ZTAJpkVACWZ1oAm2RYAJVqWwCbalwA + pmNHALxkQgCma1YAtG5TAKdyXQC7c1cAiWxjAJNuYQCebmIAjXNoAJRyZQCYcGQAknVrAJJ4bwCaeWwA + hnl3AJR7cgCcfHAApG1iAKRxZQCpdmIAoHNoAKhyaAChe20ArXxqALV7ZgCpe3EAyGlEANFuSQDLcE0A + 1XBKAMJvUADGdlcA1nhVAMJ7YADRf2AAnIN6ALiCbACphXgAuIl3ANuBXwDNg2YA2YdnAMmMdgDUjXEA + 2pN4AOKLawDgj3AA45Z5AH9+gACAf4AAg4ODAIuDgwCHiIgAi4uLAJmNjACdk44Ajo6QAJOPkACTk5MA + mpSTAJeXmACXmJgAmpqbAKSKgACrjYMAtI6CAKuSiAC1lYkAppuZALSclAC5m5MAsp6ZAKqgnAC5oJUA + taOdALukmwCfn6AAoJ6gAKSiowCrpKQArKmmAKumqACuqakAtKWgALumoACyq6YAuqqlALKsrAC9raoA + urSsAK6usACzrrAAtbGxALq0tAC+uLYAtrW4ALq2uAC9ubkAx5iHANibgwDHnpMA5J2CAN2ijADCo5oA + 2amXAOajiQDlqpQA5LCcAMSspQDFua0Aw7WxAMy3sADCu7QAy7q0AMK8vADKv7sA0ry1AOm6qQDHwK4A + xsG0AMnCtQDEwLsAy8O8AM3KvADTwrsA1si/AO3ArwDsw7QA8cu9ALy9wgDCvsAAv8DAAMXBwQDJxMQA + zcjEAMnGyADNysoA08bAANLMxADdysEA0czNANrOyQDU0cUA1NLKANvTzADMztAA0s7QAM7Q0QDV0tIA + 2dTUANbY1gDc2dUA2dbYANfY2ADd2toA78zAAPDOwQDl1swA8tLGAODW0gDi29QA6dzUAOHd3QDz29IA + 5eLUAOji1gDk4dwA6uTcAOvo3gDy4doA39/gAOLf4ADl4+MA6eXlAOfo5QDs6uMA5uboAOjn6ADn6ewA + 7OrqAPPm4gDx6+QA8O7tAPLw5gD08uwA+PTuAPn47gDt7vAA8e7wAO3x8gD08vIA+PX0APv59QD09vgA + +fb4APb4+gD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + b29wdXV3d3h4eHh4dXV1cG8UbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAb3Bwib/O3fn7+/v7+/v7+/v7+/v799XOlXVwFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAHBweL3R8fr56N3Sx8K/v729vb+/wsLOzdXn8f37+/v2zolwFAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAcHCVx/b66N3CmZiYmL3Cx9HR3d3d5t3d3d3Rz8fOws3R5vn7+/v2mnBsAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAcInH8fHdwpeWl67N3ebj8NvLyMbExMSvxMTIyNji8PDw8efRzc/V9vv7 + +/eVb28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdZzn8dW9lpCZy+fw4tjEhoF7UUVFNjc1NTc1NzZMT1R+gaev + 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 + KSkpKVkpKSkpKVkpKTApKTApMDFF2Pu/zfuXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeMe9itLx + QQsXFRYVFRUVFRUVFRUVFRUVFRgYGBgYHBwbHhweHh5gtpqUl5iYl5iXmJiYmJiYmb2u7H4dMDAwMDBZ + MDAwMClZKTApMFkpKSkwKSkwKSkpMCkpKTAwMCxK8ey95vtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACXt469+34LFxUVFhUVFRUVFRUVFRUVFRUVFRgYGBwbHBwbHh4eG2C2l5qclJeXl5iUlpeYmJiZvb33 + fB4wMDAwMDAwKVkpMCkwMDApKTAwKVkpMCkwMDApMDApKSkwMTGA+8+9/tUUAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAg82XlvS3DhsVFRUVFhUVFRUVFRUVFRUVFRUWGBgYGBwbHhseHh4bPpyalJSWlJaWlpaW + l5eYmJiYvfZMIzAwMDAwMDAwKTEpMDAwKVkwKTAwKSkwWSkpMCkwKTApMDApLDO3+7/H+4wAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAC9v4rP9DMLFRYVGRkVFhYVFhUWFRUVFRUWFRUWGBgcGxscGx4bHh4gkJqU + lZaWlpaWlpaXl5eYmJjV0SAvMDEwMDAwMDAwWSkwWSkwMDAwKTAwWSkpKTAwKTBZKTApMDAwLkfx7L3m + +W8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAiceWnPuBCxsWFhkVFhYVFhYVFhUVFhUVFRUWFRUYGBgYHBwb + HBweGx5StJWWlpaWkJaQlpaXl5iYvflgIzowMDAwMD0wMDAwMSkwMDAwMDAwKTApMDAwMFkpMCkwMDAp + MDAsLn37x739lwAAAAAAAAAAAAAAAAAAAAAAAAAAAADCmYro4BAbGBYWFRkVFhYVFhUWFRYVFhUWFRYV + GBgYGBgcHBwbHhweHh5+mpSWkJaWkJaWlpeXl5nrqiMvMDowMDEwMDA9KTAwMDAwWSkwKVkwMDAwMDAp + KTEpMDAwMCkwMDAxNtL0vdH5bwAAAAAAAAAAAAAAAAAAAAAAAAAAiceWvftgCxgYGRkVGRYWFhYWFhYV + FhUWFRUVFRUVGBkYHBgcHBwbHhweHiB+mpSWkJaQlpCQlpfC56ovLy8wOjA6MDAwMDAxMDAwMDAwMDAw + MDAwMDAwMDAwKTAwMDAwMDAwMCwsXvrNvfqcbwAAAAAAAAAAAAAAAAAAAAAAAADCmZbixQ4bGBkZGRkZ + FhYWFhYVFhYWFRYVFhUWFRUZGBgYGBwbHBwcHhweHiBgl5yal5eUmJy/z8udLy8vLy8wLzAwMTAwMDAw + MDAwMDAwWTAwMDAwWSkwMDAwMDAwMCkwKTAwMDEtt/u90flvAAAAAAAAAAAAAAAAAAAAAAAAiceWrvVg + DRgZGRkVGRUZFhYWFhYWFRYWFRYVFhUZFRUZGBwcGRwcHBweHB4eHhwvUoSXmZm9rqd8OiUsLy8vLy86 + MDowMDEwMDA9MDAwPTAwMDBZMDAwMDAwMDAwMDAwMDAwMDAwLyte9ce9+pcAAAAAAAAAAAAAAAAAAAAA + AAC/vZDoxS0gGRkZGRkZGRYWFhYWFhYWFhUWFhYWFRUZFRUZFhkYGxwcHB4bHh4eHh4cJS8vJS86LyUl + Ly8lLy8vLzAvMDowMDA8MDAwPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAvMS23+pjS9m8AAAAAAAAA + AAAAAAAAAAAAg8eWvfV7HyAiGRkZGRkWGRYZFhYWFhYWFhYWFRYWFRUZFRgYGBgcGRseHB4eHB4eICAe + Hh4sICAgLyUlJS8vLy8vLy86MDo6MDAwMDAwMDEwMTAwMSkxMDBZMDEpMDAwMDAwMDAwMC8vK176x736 + eAAAAAAAAAAAAAAAAAAAAACWwpDd2zMsIiIaGRkZGRkZGRkWFhYWFhYWFhYWFhYWGRUZFhkYHBkbHBwc + HBweHB4eICAgJSAlJSUsJSwlLC8sLy8vLy8vMDowOjEwMTAwMDAwMDAwMDAwMSkxKT0wPTAwMDAwMTAw + JC8sM9j2l+jRbwAAAAAAAAAAAAAAAAAAiceYmPSBDiUiICIZGRkZGRkZGRkZFhYWFhYWFhYVFhUWFRkV + GBkYHBkcHBwcHh4eHh4eICAgICAsHiUlJSwvJSUvLy8vLy8vLzowMDowMDEwMDA9MDEwMDAwMDAwMDAw + MDAwMTAwJC8vLzErffW9wvpwAAAAAAAAAAAAAAAAAACMypbH9kEsICAiIiEZGhkZGRkZFhkZFhYWFhYW + FhYWFhkVGRYWGBwZGBkcHBwcHB4cHh4eICAgICAgLCAsJSwlLywvLy8vOi8vLy86MDowMDEwMDAwMDA9 + MDEwMDAwMDEwMDAwMC8vMC8kMSxA8NKY+ZcAAAAAAAAAAAAAAAAAAJzCluKuKyUgIiUiIhoZGhkZGRkZ + FhkWGRYWFhYWFhYWFhkVGRYWFhgcGBscHBweHBUHBwcHBgYJCQkHCQsgJSwlJTolLy8vLy8vLzAvOi86 + MDEwMTAwMTAwMDAwMTAxMDAxMC8vMC8wLy8vLCuu8ZjV3W8AAAAAAAAAAAAAAACJx5i99HsfLyIlJSIl + IhkZGhkZGRkZGRkZGRYWFhYWFhYWFhkVFhgYGRgcGRwcHBkgSENDQ0NKSkpKSl5KDgkgLCUsJSwlLywv + Ly8vLy8vMDowMDowMTAwMTAxMDEwMDAvMC8vMC8vMC8jMC8jK171wr36cAAAAAAAAAAAAAAAAJXHlsro + QSUlJSUlJSIiIhkaGhkZGRkZGRYaGRoWFhYWFhYZFRkZFhkZGRgZGBwcHoa2tr6+w7a+wMPDytGUCB8l + IDolJTogJywlLy8vLy8vLy86Ly8wOi8wLzAvMC8vLy8vMC8vLzAsMC8vLy8sM+jbl/mWAAAAAAAAAAAA + AAAAl8WX4sIrOiUiJSIlJSIiGhoZGhkZGhkaGRYZFhYaFhYWGRYZFRkWGBYYHBkcGRwesb6+tr60vr6/ + tMDAwsANHiUgIC8gLyAsJTovLy8vLy8vLy8vLy86Ly8vLy8vLy8vMC8vLy8vLyQvLyMjLywQrvCX3c9v + AAAAAAAAAAAAAADCvZzwhCsvIiYiJiIlIiUiGhoaGhkZGhkaGhkZFhYaFhYWGRkZFRkWGBkZGBkYGB6x + vr6+tL6+v7+0wMDMvwocLCAvIDogOiUvIC8gLywvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8jMC8l + LB9y9ZzC9m8AAAAAAAAAAAAAeNiYzuhRLC8mJiYiJiUiJiIiGhoaGhkaGRkZGhYaFhYaFhkWFhkZFhwZ + GRkbGRsZHrK+tr6+v7+/v8DAwMyuDR0gICAgICwlICwlLDolJSwlLy8vLy8vLy8vLzovLy8vLy8vLyMv + Iy8vIy8lIy8lK0DwxZj6dQAAAAAAAAAAAACVzZjR20EvJSYgJiYiJiImIiYiGRoaGhkaGhYaGhkaGRYa + FhoWGRkWGRYZGBkZHBketMC+wL+/v7/AwMDBw8EQFyAgIC8gIDogJTolIC8sJS8sJSUlLC8vLy8vLy8v + Ly8jLy8vLy8vLyUvJS8vJSwfLcvVlvGWAAAAAAAAAAAAAJzHmOS9KzolJiYiJiImIiYlICIiGhoaGhka + GhkaGRoWGhYaFhkZGRUZFhkZGBkYGRyxwMDAwL/Cwr/AwMHBz0gGHiAgICAlICAgICA6IDolIC8sLywl + LyUlLC8lLyUvLy8lLyMvJS8lLyUvJSUlJSwOmOKW3cdwAAAAAAAAAAAAv8KY8I8yOyUmJiYlJSYiJSYi + JiIiGhoaGhoaGhkaFhoWGhYaFhkZGRkWGRkYGRgZG4/MtMDAv7+uv7/Av8DMgwYdJSAgLCAsJTogICAl + ICwlJSAlLyAvJSwvLywlLCUvLCUvLCUvIC8gLyAlIC8gIA599JjH5m8AAAAAAAAAAADHrr/jeiw6JiYm + JSYiJiUmIiUmJiAhGhoaGhoaGhoaGhoZGRkZGRkZGRYYGRkZGRgZfsPAwMC/v7+/v7+/v8LOEAYeICUg + ICAgICAvICwlIDogOiAvICwvJSUlJS8lLCUlLCUlJS8jLCUjJSwjJSMsH0fwvb30cAAAAAAAAAAAiN2Y + zt9GOjslJiYiJiYlJiYmJiUiJiYiGhoaGhoaGhYaGRoZGhkWGRkZGRkZGRgZGRVfw7TAvr+9v729mb+9 + vcGFBgkeICAgICAgICAgICAgICAgLCUgJSAsJSUsIC8lLCUlJSwjLCUlLCUgJSMsIh4rEtLBmPl1AAAA + AAAAAAB43ZjP5kU6OiYmJSYlJyYmIiYiJSUmJSIiGhoaGhoaGhoaGRoZGRoZGRkZFhkZGRkZFjrDtr6+ + nJm9mZm9nJm9vcpeAgseICAgICAgICA6ICAsJSAlIDogLCUgLCUlLCAlLCUsJSAlICIlICUgJR4lIB8t + 28qW+XgAAAAAAAAAAJbPm9vKNDo7JicnJiYmJiYmIiclJiYlJSYiGhoaGhoaGhoaGRoZGRkZGRkZGRkZ + GBkZHpS+nJy9nJycnJeZmZycvcxDAgscICAgICAgICAgICAgICAgICAlICAlIB4vICUgJR4lICAlLB4l + ICAgJR4gHw7B0ZbolwAAAAAAAAAAnNGZ25w0OjsmJiUmJiYmIiclJyYmJSYiJSYiIRoaGhoaGhoaGRoa + GRkZGRkZGRkZGRkWfLaanJiXl5eXmZeYl5icv8pGBBceHh4gICAgICAgICA6ICAgICAgLCUgJR4gICAg + JR4lLB4lHiAjIB4eIx4fDZjbkN2/AAAAAAAAAAC9z5zmkzo9JyYnJyYlJyYlJyYiJSYiJSYmIiYmIRoa + GhoaGhoaGRoZGRkaGRkZGRkZGRY6nJqUmJiXqZeXl5eXl5eXwtJGAhceHh4eHiAgICAgICAgICAgICAl + ICAgICUgICAgLB4iHiIsHiAiLCIeHh8NituW3cdwAAAAAAAAAL3RmeKQMj0nJicmJicmJiciJycmJiYm + JiYlJiImISEaGhoaGhoaGhoaGRoZGRkaGRkZGRl+nJqUlJSWlpeTlpaTlJeXv+FeAgYeHh4eHh4eICAg + ICAgICAlICAgICAgHiAgIB4iHh4sHiIeHh4eHh4iHw2D35bPz3AAAAAAAAAAv9GZ4o46PScnJyYmJyYm + JicnJSYlJiUmIiciJSYmIiEaGhoaGhoZGhoaGhkZGRkZGRkZFjqUlJWWlpaQlpCWkJWWlpeXv+uFCAYb + Hh4eHh4eHh4eHiAgIB0gIB0gICAeHiAgHh4sIh4eHiIeHiIeHh4eDX/blsjTbwAAAAAAAAC9z73jgyw/ + JycmJycnJicnJScmJyYmJiYlJyUnJSYmIiIaGhoaGhoaGhoZGhoZGhkaGRkaFmCalpaMlpCWjJCMkJaQ + lpeYv+uzCgYbIR4hHh4eHh4eHh4eHh4eHh4eHiAeHiAeHh4eHh4eHh4eHh4eHhwLf+CWx89vAAAAAAAA + AL/RmfCAOj8nJycnJicnJiYnJiYlJSclJyYlJyYiJSYmJSIaGhoaGhoaGhoaGRkaGRkcGhkZGoCVlZCW + io6VjJaKkJaWl5SYv+nSDgIbHh4cHiEeHh4cHh4eHh4eHh4cIB4eHh4eHh4hHh4hHh4hHiEeHAty35bH + 0WwAAAAAAAAAv9Gu8H86WicnJycnJicnJSclJycnJSclJyYlJiclJiInJyIiGhoaGhoaGhoaGhkaGhkZ + GRoZIJSVjIyQlY6MkJWKlpCWlpicv+nfDgMbHBweHB4cHB4cHh4cHiEeHhwcHh4cHh4aHh4hHh4eIR4c + HhwfC3LmkMfRbwAAAAAAAADC0b3wfTpcJzsnJyonJycnJycnJSonJyUnJiYlJyYmJSYiJyYiIRoaGhoa + GhoZGhoaGRoZGRkZL5SMkJWKlYyMkJCMlpaXmL29v+nhDAYbHBwcHhwhHhweHBweHB4cHh4cHB4cHh4e + HB4bHBwcHhweHh0Lct+Qx9FsAAAAAAAAAL/YveODOlxVJyo7JycnJycnJycnJyUnJyUnJiYmIiclJiYm + IicmISEaGhoaGhoaGRoaGRoaHBkWL5CUipaKkJaKloyWkJiYnJm/wvHSCAUbIRweHBwcHBweHBwcHBwe + HBweHBwcHB4bHB4eHB4cHhwcHAty25bH0W8AAAAAAAAAv9W98IMvXFU7OyonJyonJycnJycnJycnJyYl + JScnJyUlJiYmIiYlJiEhGhoaGhoaGhoZGhkaGhkWIISVlZCKkIqWkJaXl5i9v67BzvmzBAcbHBwcHBwe + HBwcHBwcHBwcHBwcHhseGB4cHBweHBweHB4fC3fYkMfPbwAAAAAAAADC1b/jjjpcWSo7KjsnJyonJycn + JyUnJScnJycnJiUmJyYlJSYmJiYlJiIiGhoaGhoaGhoZGhoZGhoZIn2XlZCVipaQlpeXmZm/v8630vuA + AhgcHBwcHBwcHBwcHBwcHBweGxwcHBweGB4cHBwcHBweHB0LiNKQ0c1wAAAAAAAAAL/dwuKTOlxZKjsq + OyonKicnJycnJycqJycnJycmJScmJyYmJSUlJiYmJSciIhoaGhoaGhoZGhocGhwZHH6XlY6WlpaQl5iZ + vb/CwcfP5/4zAxscHBwcHBwcHBwcHBwcGxwcHBwcHBwcHhgeHBweHBwcHQyDyorRxwAAAAAAAAAAvd2/ + 5qg6XFwqVTsqKioqOyonJycnJyclJyUnJyUqJScmJiYnJiUmIiYmIiYmJSIhIRoaGhoaGRoaGRoZGnyX + lZaQlpeYmb29rsHOx8/P+d8GBxkcHBwcHBwcHBwcHBwcHBwcHBwcHBwYHhwbHhscHB0dDJbIjt2/AAAA + AAAAAACV3a7mzDpcXSo7KlU7Oyo7Kic7KicnKicqJycnJycnJSclJyYnJyUmJSYmJiYiJyIiIRoaGhoa + GhoaGRoZGnyXlpaWmJiZvb/CwsfH0dHV+30CGBwcGRwcHBwcHBwcHBwcHBscHBwbHBwcHBwcHB4cHBsM + vcGM6JYAAAAAAAAAAHjxwubfPD9jVVU7VVUqOyo7Ozs7KicnJycnJyclJycnJyUnJiUmJyUmJSYmJSYm + JiYmJSEhGhoaGhohHBoZGYGXlJiYmL29rsHHx8vR0dX29ggHGRkcHBwaHBwcGRwcGRscHBwcHBwcGxwe + GxwbHBsdCxHBworxeAAAAAAAAAAAivHB0uZOWWZVVVU7O1U7OztVKjs7Oyo7JycnJyonJyUqJyUnJyYm + JyclJiUmJiUlJSIlJiUiIRoaGhoaGhoZIZCYmJy9va7BzrfPz9HV1d37fgEbHBwcGRwZHBkbHBwcHBwZ + GxwcGxwcGxwcGB4bGBwLEsWZlvl1AAAAAAAAAAAA58fK8GA7ZVlVKlVVKlVVVSo7Ozs7OyonJycnJycn + JycnJyclJyUnJicmJyUlJiUmJSYmJSUlJh4iGhwaGhoZPZycvb29wsLHx8/V2NXV3fnbBhUcGRwcHBwZ + HBwcHBwcGRwcHBkcHBwcGxwYGB4cGwtJyZiY8XUAAAAAAAAAAADK5s70gTpkY1VVKlU7VSoqO1VVOyo7 + KjsqJycnJycnJycnJycnJyYmJSYmJicmJSYmJiIlJiIlJSYiIiEhGhkhor69va7BxcfR0dHV1dXd6PtA + BRwZGRwZHBwcHBwaGBwcHBwYHBscHBwYHBwcGB4dCHLSkMLRcAAAAAAAAAAAAL/owvCcO1xnVVVVVVU7 + VVkqKjtVOypVJzs7KicnJycnJycnJSclJyUnJScmJSYnJiInJSclJiUmJSYmJSUgIhlfzr3CwcfHys/P + 1dXV5uTl+4QDGxwcGRwZHBkcGRwcHBwYHBwcHBwYHBwYHBwYGx0Kla6M0scAAAAAAAAAAAAAlejC8Mo9 + XKFXVVVVVVUqKllVVTtVO1UqVScnOycnJycnJycnJycnJycnJScmJiUnJSclJyUlJiYlJSUmJSYiIj3P + 0cvPx9HP0dXV1d3d5ub50QcVGhwZHBwZHBwcGBwaHBkZGxwZHBwcHBgcHBwbCw+0torolQAAAAAAAAAA + AACK+cfV8E5Znl1VVVVVVVUqVSo7VTtVKic7VSdVJzsnOycnJycnJycnJScnJSclJScnJSciJyUmIiUm + JSUiJiUiL8vd1d3d3d3k1d3d3d3m5vHwCBUcHBoZGRwZHBkcGhgcHBwcGRsZGBgcHBgYHBsJE7aYlvF1 + AAAAAAAAAAAAAADn3c/1fVdnnlVVVVUqVVVVO1VVO1U7VVUnVSdVJzsnJycnJycnJycnJycnJycnJSUn + JyUnJyUnJSYlIiUiJiUlyefn3ejo5uzm7+jo6Obm7PorBxwZHBwcGRwaGBkYHBkYHBkcHBgcHBkcHBwc + HQp0yZa98HUAAAAAAAAAAAAAAM72zvSZWV2wVVZVVVVVVVVVVVU7VTs7VSo7VSdVJyo7JycnJycnJycl + JyUnJScnJyYlJyUnJScmIiUmJSUmJSbL5+fn5+jo6Ozs7Ojv9+/s+1EXIiAeISAcHhweHB4cHhwcHB4c + HhweHh4gIB4dD4y2itLNAAAAAAAAAAAAAAAAnPHH6OZZWrBmVVZVVVVVVVVVVVVVVSpVVTtVJ1U7VScn + OzsnJycnJSEeJScnJyUnJSclJyYmJSclJyYlJiImOtjr5+fo7Ojs7O/u9+zs7Pn7ehcgICYgJSUlICIl + JSUeJSUeJR4lHiUeHh4eHR0Ss7+K8ZcAAAAAAAAAAAAAAACX+dLR9XtXoaZWVVZVVVVVVVVVVVU7VTtV + VSdVJyc7VSo7Jyc7JydhfisHHiUnJycnJScmJSYmJSciJyUmJSFf7uno9uj26PHs9uzs7+7s7Pt7FyAm + ICAgICAlICUeICUgICAgICAeHh4eIB4gDW+2lJj5dQAAAAAAAAAAAAAAAADS9sf7mVln3ltVVVZVVlVV + VVVVVVVVVSpVO1VVVSdVOypVJycnZePy330LGB4lJycnJSclJyYlJyciJyUmJbby8Ovo8Pbo9uzv9+zu + 7uz5+3sYJSAgJSUiJSAgICUeHiAeICAgHiAgICAeHh8Pi7OKz9V3AAAAAAAAAAAAAAAAAJz9x/DwPlu5 + pVVWVVZVVVVVVVVVVVVVO1UqVSdVO1UnOztVJyej6enp6bY0CxgeJSUqJyclJyUnJScnIh6d8vbp9vbo + 9vD29uz27Ozs7Oz7URsgIiUlICUlICUeJR4lICAgHiAeJR4gIB4eDhKztIz2lwAAAAAAAAAAAAAAAAAA + APvnz/uEWp7ZWFVWVVZVVlVWVVVVVVVVVVVVVVU7VVUqOyonJ6Pp6enp6emxRAsYHB4lJSUnJSclJR4e + fvLu7vD28Pbw9ujx7O/27/bs+f4rHiIlJSAlHiUgICAgICAgICAiIiAeHiAeIB4MdbOVnPF1AAAAAAAA + AAAAAAAAAAAA0/nP+89aZNekVVZWVVZVVlVWVVVVVVVVVTtVVVUnVTtVVScno+np6enp6fPpyYA0HRsb + GBgcGBwdPrH17u7x8fb28Pb29u/27Oz26Ozx7x0iJSAmICIiJSUgIiAiICIgIiAgICAgICAgHxGUs4nS + zAAAAAAAAAAAAAAAAAAAAACX++f2+3xioddYVVZWVlZVVlZVVVVVVVVVVVU7VVVVVSdVKieh+PP46fPp + 8/jy8+nftoV9enp9hsny9e7u8/Hx9vb29ujx9ujx7Ojs6P7IHSIlICAiJSIlHiIlICAiIiIgICAgICIi + Hh8Nb7GUlfCHAAAAAAAAAAAAAAAAAAAAAAD5/ef7wV1k16FYVVhWVlZVVlZWVVZVVVVVVVVVVTtVVSdV + J6H48/ju8fjp8fj4+Pjz8/X19fX19fP48fPx8fH28fD28fbo8ezx6Ojo+4EVJSUiJiUlIiIiJSAiIiIg + ICIgIiAgIB4eHxCUsovA5ngAAAAAAAAAAAAAAAAAAAAAAJz7+fv7e2ak11tYVVhWVlZVVlVWVVZVVVVV + VVVVVVVVVSono/jz8fHx8fHx8e7u8/P48fHx8fH48fPx8/jx8fHx9vHw9ujx6Ojo6Pb7NyIlJSIgJiAi + JSUlICUiJSAgIiAgIiAhIB4ObbGUi+OVAAAAAAAAAAAAAAAAAAAAAAAAAPv7+fvBXWm6pVhYVVZWVlZW + VlVWVVVVV1VVVVVVO1VVKiqj/vjx8fHx8fHx9fHz8fH48/j1+PT48fj48fj09vbx9uz26Pbo6Ojm+8ge + IiUlJSImJSUlICIiJSAiIiAgIiAgICAeHw6UsYu26XgAAAAAAAAAAAAAAAAAAAAAAAAAwvv7+/uBZ2rk + ZFhYVlZWVlVWVlZWVVVWVVVVVVVVVVVVJ6P+8fj5+Pn4+fj4+Pj49fj1+Pn4+Pn5+fn49Pbx8fbw9ujw + 6Ojo5/b7Uh4lIiUlIiUlJSIiJSUgICIiICIgIiAhICAOb7GUi+maAAAAAAAAAAAAAAAAAAAAAAAAAAAA + +/v7+9Ffaqa5WFdWVlZWVlZWVVVVWFZVVlVVVVVVVVUqpvX1+Pn5+fn5+fn1+fX49fj5+fn5+fn49PH4 + 8fH28Pbo8ezo6Ofd+8YeIiYlIiYiJh4lIiIlICIlIiUgIiAiICIgHxKxsYm26XUAAAAAAAAAAAAAAAAA + AAAAAAAAAADC+/v7+5dnadekVlZYVlZWVlZVWFVVVVZVVVVVVVVVVSej/v759fn59fn1+fn5/vj5+fX5 + +fn5+fn4+fHx8fH26Pbo6Ojn3f7xLyIlJiUiJSImJSIlIiUiJSAlICIiIiAgICAOcrGLi+mVAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD7+/v78nxqpN5kVlhYVlZWVlVVW1hVWFdXV1dVVVVVKqb++fn++f75+f75 + /vn5+f75/vn5+fn5+fT28fHx9uj26Ojo5935+18iLyYlJiUmJSUlIiYiJSIlIiUiIiAiJSAgHUOxsYnJ + 5XgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL/7+/v7ymVqpblYWFhYVlZYWFhVWFVYVlZVVlVVV1Uqpf71 + +fn5+f75+f759f75+fn5+fn1+Pn4+fHx8fbw9ujo6Ofn+PthIiYlJiImIiYlIiIlIiUlJSIlIiIlIiAi + IB4Ri7GLlemLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOv7+/v7mWppuaZYWFhWVlVYVVhVWFhVV1VX + V1dVVipk9f7++f71/v359f7++f75/vn++f74+fnx+fH29ujo6Ojn5/v5ZSImJSYlJiUmJiUmJSYiJSUl + IiUiIiIlIiAgDnKxlIvfzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7+/v0gZ5q16BYWFhYWFhY + WFhVWFdXWFhVVlVWVVWe9fv7/v75+v3++f75/vn5/vn5+fn59/n29ujw9ujo6Pn75D8iJiYmJiYlJiUm + JSIlJiInIiUlJSIlIiUgIB9tsbGJvul4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwvv7+/vpnaBq + 5GlYWFhYWFhYVVtWVldYVVhVVlVWVVVduvn7+/v++f75+f35+/n5+fn5+Pn29vHx9ujo9vn7+aMvJSYm + Ji8mJiYmJiUmJSYiJyUlJSUiJSUiJSAeE7GxiZTplQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 6/v7+/vPnaSg2WhYWFhYWFhYVVhYVlVYVlZWVlVWVSoqXabv+/v7+/v9+f35/vn5+fn59vHx9vD2+fv7 + 76M6JiYnJyYmJiYlJiUnJiYiJSclIiYlIiciIiUlHhKQsYuL384AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA+/v7+/vHZ2qk12JYWFhYVlhYWFZYWFZWVlZWVlVWVlVVKlVksNz6+/v7+/v7/vv+/v77 + /vv7+/3vsGUwJiYqJicmJiYnJScnJSclJSYlJiInJSUlIiclJSAri7GUi8nlhwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAC++/v5+/vEaqCku2RYWFhYWFhVWFZWV1ZWVlZVVlZWVVVWVSoqKldnprC6 + 4vHw8PDv8OTYsKadWTsmJicnJycnJycmJycnJiYnJiYmJScmIiciJSclIiUgH3KxlIey+IcAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADM+/v3+/uqpGqlu2RYWFhYWFhYWFhYVlZWVlZVVlVWVVZV + VlVWKlUqJioqVlZZVllVVVUmJikqJzsnJycnJycnJyYnJiYnJiYmJSYmJSciJyUmJSclJR9ysbGLlOmV + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV+/7n+/WopGqk2WpYWFhYWFhYWFhXWFZW + VlZWVlZWVVZVVlVWVSoqVlVVVSpVJlUnKioqKjsqKlUnJycnJycnJzsnJSclJiYnJiYnJSciJyUlJSUf + crGxiZTpvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2+/fl+/SopKCg3qRYWFhY + WFhYWFhYVlZWVldWVlZWVVZVVVZWVlZVVVVVVVVVVVU7VVU7VTs7JzsqJzsnJyY7JicnJycmJiclJyUn + JiciJiUlIHKxsYmV39EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr++vV+fnE + nqRq2aZYWFtYWFhYWFhWWFZWVlZWVVZWVVZWVVVZKlZVVVVVVVVVVVU7VTsqVVVVJztVJycnOycnJycn + JicmJycmJyYmIiclJTSDsbGJld/RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD2++XP9PXMnaRqubtoWFhYWFhYWFhYWFhWV1hYVlZYVVZXVlVWKlZVVVVVVVVVVVVVVTtVJztVJyc7 + VSc7OycnJycmJycnJyUnJiclJyU0i7GxiZXf0YcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAADr+9XO9vvSn6Vppd6kWFhYWFhYWFhYV1hYVlZWVlZYVVZWVVZWVVVVVVVVVVU7VSdV + VSdVVSdVOyonOycqOycnJycmJycnJyYmJyU6SouxlImV386HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAADV++fB5vvjlKSkaru7aFhYWFhYWFhYWFhXWFZVVlZYVVZWVVZWVVZV + VVVVVVVVVVU7VVUnVVUnVTsqOzs7JzsnJycnJycmJyUlOnCxsZSJlOnJAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV+/bB1Pvus56laqXepWJYWFhYWFhYWFhYWFhWVlZY + VVZWVVZWVlZVVlVVVVVVVVUnVVUnVTsqVScqOyo7JycqJycnJyclJz6HsZSVibLpvgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC++/nOx/T10YakpKC5u6BYWFhYWFhY + WFhXWFhWVlhWVlZYVVZVVlVVVVVVVVVVVVVVKlVVVTtVVTsqOyo7JycnJycnIjpyi7GUi4u2+JUAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACc+fnPwOX16bKEpKCg + ublqWFhbWFhYWFhYWFZWVlhVWFVYV1VWVlZVVlVVVVVVVVVVO1U7VSdVKjsqOyoqKicnJSdLi7GxlIuU + 0emLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/z/vn + wszx89GnnqSgpLC5amJYWFhYWFhYWFhWWFhWWFVYV1VWVlZZVVVVVVVVVVVVKlVVKjtVVTsqOyo7KiU/ + g5SxlIuLvunKhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAwvv5yr/V9fLJkZ6kpGqkuaRoWFhYWFhYWFZWWFZWV1ZWVlVWVVVWVlVVVVVVVVVVKlVVVTtV + VVU7Oyc9g5SUsZWLlcrplAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAl9X79r/A4fPptqedpKSkoKSkaWJYWFhYWFhWWFhWVlZWWFVYVlVWVlVWVVVV + VVVVVVUqVVUnKiZShpeUsb6Li7bpyocAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJzr+9W/wOnu48mUfmakpGpqaWliW1tYWFhYVlhWVlZWWFVY + VlVYVVVWVVVVVVVVVVUqJj18lL6UspyLi7Tf6ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL/O9fnRv7Tp6fLftoZlampqamliYltbWFZY + WFhWVlZWV1ZWVlVWVlVWV1hWVSo7VWGPnJqxtJyVibTf676JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVzvv50r+2zunp8tG2i2Fh + ZmloaWhoYmJbW1tbW1hYWFtYW1tbWFhVVVVSnZacnLG/v5eMi7Tf8cKHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl8z5+eHA + nLbR3/Lj38myi51hTlxiXV1aXVlZWllZWVlXVz9gYZ+Umr6atLO2nJCMlMHw8MKHAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAJea6fjxyr6+vsnR6ePf38nOtpSLg3l/eYODeIOIkJeYv76cv7PBxa6cloqWv9v28LyHAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAlczx+O7KvrKcvrbR39Hp39HfycnKycnJycnBycnKxcXCmZSVjJjC5vT5z4kA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqaw/j1+OnKvr6XlZSytr7Dw7bDwcHCrr+cmJaWkJScwt3w + +vnPlYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIuazOn+8fHu6cy/v7ScnJSamJicvb/B + 0d3o9vrxz5uJlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJWVmszM4fj1/vv1 + 9fn6+vv5+ezVx5iVgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAlYl4eHV1dXV3eImVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////wAAH////////////////+AAAAD///////////////4AAAAAH///////////// + /wAAAAAAP/////////////wAAAAAAAf////////////wAAAAAAAB////////////wAAAAAAAAH////// + /////wAAAAAAAAAf//////////wAAAAAAAAAB//////////wAAAAAAAAAAP/////////4AAAAAAAAAAA + /////////4AAAAAAAAAAAH////////8AAAAAAAAAAAA////////+AAAAAAAAAAAAD////////AAAAAAA + AAAAAAf///////AAAAAAAAAAAAAD///////gAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAD//////4AA + AAAAAAAAAAAAf/////+AAAAAAAAAAAAAAD//////AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAD/// + //wAAAAAAAAAAAAAAA/////4AAAAAAAAAAAAAAAH////8AAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAA + AAH////gAAAAAAAAAAAAAAAB////wAAAAAAAAAAAAAAAAP///8AAAAAAAAAAAAAAAAB///+AAAAAAAAA + AAAAAAAAf///gAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAA///8AAAAAAAAAAAAAAAAAH//+AAAA + AAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAAf/ + +AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAA + AAAD//AAAAAAAAAAAAAAAAAAAf/gAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAA + AAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAA + AAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/ + gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAA + AAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAA + AAAAAAAAAD+AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAA + AAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/ + gAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAA + AAAAf8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAA + AAAAAAAAAP/gAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAAf/gAAAA + AAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAA//4AAAAAAAAAAAAAAAAAAP/ + +AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAA + AAAP//4AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAAf//8AAAAAAAAA + AAAAAAAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAA////4AAA + AAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAH////wAAAAAAAAAAAAAAAD////+AAAAAAAAAAAAAAAA/// + //gAAAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAP/////gAAAAAAAAAAAAAAH/////8AAAAAAAAAAAAA + AD//////gAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAf//////gAAAAAAAAAAAAAP//////8AAAAAAA + AAAAAAP///////gAAAAAAAAAAAAH///////8AAAAAAAAAAAAD////////gAAAAAAAAAAAB////////8A + AAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAAAAAAAf/////////4AAAAAAAAAAf///// + /////AAAAAAAAAAP//////////8AAAAAAAAAP///////////wAAAAAAAAP////////////AAAAAAAAP/ + ///////////+AAAAAAAf/////////////4AAAAAAf//////////////4AAAAA////////////////4AA + AH/////////////////+AB//////////KAAAAGAAAADAAAAAAQAIAAAAAAAAJAAAAAAAAAAAAAAAAQAA + AAEAAAAAAABqJQcAdSgHAHEuEgBpNB0AejQXAG44JABxPCYAe0IpAHxKNQB6UD4Ae1VEAHxfUgB+ZFkA + dm5uAHdwcAB6c3MAf3h4AIQuCwCMNA4AkjUOAIo4FACXOxQAoDoPAKE+FQCGPCEAkj0lAJdBHQCkQRgA + iUUpAJpIJgCfUS8Aik00AJVNMgCIUToAm1Q3AKVNKgCwTigAqVItALNULQCiTjAAsU4yAKhVNgC3WTcA + u2A7AMxJLgDEVy0Ay00yAMRXOQDIYzwA02Y8AIFWRACMVkMAhFlHAI9aRQCEWkkAjFxNAJJaQwCcW0QA + k11LAJxcSwCIX1AAol1DAK1cRACjXUsAq11KALVWQwC8VkEAtVxAALpbQACxXkoAmmBJAIdiUQCMYlMA + hGZZAItmXACBaF0AjGlcAJNjUwCbYVMAl2hVAJ1qVgCSa1sAmmtZAKhiSAC1ZEQAu2hGALFgSAC3akkA + vGtLAKdqUwC4blIAr3VeALl2WwCCbGIAi21iAIBvaACVbmIAjXBlAIVzawCTcWUAlnVqAJx0agCUeW4A + mnlsAIp4cACDfHwAk3tzAJt8cgCid2cAt3tkAKR/dwDAW0AAy2pDANdsQwDKck4A3XBHAMt2VQDUeFQA + 4G1CAOBySADkfFQAjoB7AJuDeQCxgG0ApYN2AK2DcwCghX0Aq4V4AKKIfQCriXwAuIh3ANyAXQDkgl0A + yoJlANmFZADLj3oA3Jd8AOWIZQDrkW8A6JZ3APCcewCGgIAAi4SEAI6JiQCVhoEAmIeBAJOLhwCbioMA + kYyMAJqRjACWkZEAmZSUAJ2ZmQCoioEAt4+BAKeQhwCqkYcApZGKAKuSigC4looArJeRAKOZlACinZwA + qp2YALickwCsop0At6KbAKWhoQCppaUArampALWmoAC3qqYAvKqkALOurQC7rakAvLGuALWxsQC6tLQA + vbi2ALu3uQC8uroAxZaGANqbhQDBn5IA6Z6BANihiwDGpZkA66SIAPOnigDjr5kA86yRAO2xmwD2s5sA + xayjAMOyrADctaUAw7SxAMW5tQDLurMAwry8ANK+tgDtvKkA9rulAMrAvgDUwboA+MCrAOnBsgD4ybYA + vr7AAMC/wQDEw8MAysTEAMfFyADKxsgAzMrKANLFwgDRyMYA2MnDANLMzADc0s4Azs7RANPP0QDO0dQA + 1NPTANnU1ADX1tgA29vbAODMxQD22MwA4tvaAPjf1QDl4N4A6eHeAPng1gDe3uAA4d/gAOTj4wDp5OMA + 5uXoAOjn6ADl6eoA6+rqAPTt7AD58OwA7+/wAO/x8wD08vMA+PX1AP749gD39/gA+ff4APf4+gD9/f0A + AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + FhUeFh4bHh4jrbWztK+0tLS0tLTe6UZCREVFRUNwcHBwQzBwMHAwcHAwQ0NDMEMwMENDRkni49e0lQAA + AAAAAAAAAAAAAAAAqa74/e1JHRYWFhQWFBYUFhQWFBYTFhUWFRYbGxseHh4eVMW1tLSur6+0tN/ugylE + RERERUVFcENwcHBDQ3BDMENwMENwQzBDQ0MwQ1Sa9tTXo5kAAAAAAAAAAAAAAAAAl+L995YiFhYWFhcW + FhYUFBQUFBUWExYVFhYVHRsbHh4eHj64s7XT0tPW4c1dKUREREREV0VFRXBwQ0NwcHBDcHBDcDBwQ3Aw + QzBDQ1c43uzXtJAAAAAAAAAAAAAAAACqqv398k0eFhgYFhYWFxYXGxQWFhQWFBYVFhYbGxsbHh4eHh4e + WoOgoLu2bkQkREQqRERERERXRUVFcHBDQ3BwcHBwcHBDMENwQ0NDK0VUe/bX15ijAAAAAAAAAAAAAACY + 4f39ozkfGBYYFhcWFhYUFhQWFBYTFhUUFhYVFhsbGx4eHh8eHiQfJB8kJB9EH0REPitERERERVdFRUJW + cENDQ0NDQ0NDcHBDQ0VFRUNXONzs17GYAAAAAAAAAAAAAACY9v39YiomHBgYGBYYFhYWFhYWFBYUFhYW + FRYWGxsbGx4bHh4fHx8fHx8fRB9EPj4qRERERERERERXRVVFRUJwQnBwcHBCcENFRUMrQytEVJb219OV + qgAAAAAAAAAAAKPI/f20OSomJhgWGBgWFxYXFhYXFhYUFhQWFhYWFRsbGxseHh4eHyQfHyoqH0QfKipE + H0Q+KkREREREREVXRVVFVkJCRUVFRUVFREIrRCtCP0nx4tepmAAAAAAAAAAAAJft/f17OiYmJiYYGBgY + FhgWFxYWFxQWFhYWFhUWFhsbGxseHhsVFQUVGRkZGRkhKipEPipERCpERERERERERERXRVdFV0VXRURC + K0RCK0IrRDav8d20lQAAAAAAAAAAAJf9/fZJRCYlJSYcGBgYGBYcFhYWFhYWFxQWFBYWFhYbGxsbG1po + Z2dnZ2x7e2cIIR8qKkQqKkQqRCpEREREREREREREREREQitERCtEKyorKlRs9tfXla4AAAAAAAAAqa79 + /bRHKicnJycmHBwYHBgXFxwWFxYXFhYWFhYWFhYbFhsbHsff193d3d3i4uxhHSoqKio+Kj4qRD4qRCpE + KkRERERCK0REK0QqRCsqQkQrKj438eLdo6MAAAAAAAAAl979/ZQ+KicnJiYnJhgYHBwcHBgYGBYYFhcW + GBYWFhYWGxsWH8zX19fX1NfX3uJoGR8qKioqKioqKkQqRCpERCpEKkQqREQqREQqRCpEKisqQio5tObd + sZUAAAAAAAAAkO79/WI/JycnJycnJyYcHBwWHBgYFhgWFBgWFhYWFhsWFhsWH8zX1NTU19nZ3uZoGR8f + Kh8qKipEKio+Kj4qRCpEPipEKkQqRCpEKkIqQiorKkIjlPLd05AAAAAAAAAAlf384lMsKycrJycnJyck + GBwcGBgYGBgYGBYWFhcWFhYWGxYWH8zg29vb29ng2eycBR8fHyoqKiMqKioqKioqPioqRCpEPipEH0Qq + RCoqKioqKiojYvLg3ZAAAAAAAAAAo/b9tEcsJysnKycnKicnJRgcHBwYFhgYGBgWFxsWFxsWFhsWHsfg + 2tfZ29nZ3uLGBhoqHx8qKioqIyoqKioqKioqKj4qKkQfRCoqKiorKiorKioqC+Li4JejAAAAAACprvb2 + pFQsKycrJysnJycnJyYcHBwcGBgWGBYYFxYYFhgWGBYXG7vg19vX19fX1NfhTQMfHx8fHx8fKiojKioq + KioqKioqKh9EH0QfKioqKiooKiYqNNPj4KOYAAAAAACV0/b4e1QsJywrJysnLCcrJycmHBwcHBwYGBgY + GxcYFhcYFhYWFpvg19TU1NTM1MzgxgcVHx8fHx8fKh8qHyoqKioqKioqKioqHyoqKioqKiopHyofIqfs + 3a6QAAAAAACQ1vf2Z1csLC4sKysrJycrJycnJhwcHBwcGBgYGBgWGBsXGxgYFFvX18zMzMzMzNPG4qsE + BR8fHx8fHx8fKh8jHyojHyoqKiofKh8qKh8qJB8fJigfI5Ps3bWOAAAAAAAR4vPyYlYsLisrKysrKycr + JysnJyccHBwcHBwYGBgYGBgYGBsXFh7D17W1tbW1tbW10+KrBAUeJCQkHx8fHx8fHx8fKh8fHx8fKh8f + KiQoKCgoKCkoIWni4tNqAAAAAAAR7fL2TXEsLCsuKy4rKysrJysnKycnJRwcHBwcGBgYFhgbFhgbFxd+ + 17W1xsbGscazs7XiwwYFHiQhHh8hHx8fHx8fHx8fHx8fHyokJCgoJCgkJCEkIGDs4tcRAAAAAAAQ7fby + UnEsLiwsLC4uLi4sLCcrJywnJyUcHBwcHBwcGBgYGBsXGBYmsLXGsbGxsbGxxbOz7MkJAhokHh4kHh8k + Hx8eHx8hHyQoJCQoISQhJCQhJB4kIUzi4uAQAAAAAAAQ8vLyYXEsLCwsLiwsLCwnLiwnLCcrJycnHBwc + HBwcHBgYGBgYGxgUXLWxsbGxsbGxsbSzs+ziSAEbHx4eJB4eHiEeHx4eJCEkISEeJCEeJCEeHiQeIQzs + 4uIPAAAAAAAQ8vLyU3MxLDIuMS4sLiwuLCwsJywnLCcsJyUcHBwcHBwcGBgYGBgYGJu1sbGxsbGxrq60 + s9Hm8lIBGx4eHh4eHh4eHh4kHh4eHh4eHh4eHh4eHh4eGkzi4+IPAAAAAAAQ7fLyU3UxMSwsLDEsLCwu + LCwnLiwnLCcnLCcnHBwcHBwcHBgYHBgcFhyltbGwsK6wsLGxs8jT5vZSARseHh4eHh4eHh4eHh4eHh4e + Hh4eHh4eHh4eIUrs4uIQAAAAAAAQ7fLyUXUxMTEyLCwsLiwsLiwuLCwsJywnJycsJyccHBwcHBwcHBwY + HBYeoLWxrq6usbGxs9PM1PH3MwIeHB4cHh4eHh4eHh4eHh4eHh4eHh4eHh4eGkzj4+IQAAAAAAAR4vLx + U3VxMTEuMTIuMTEsLCwsLiwnLiwsLCcnLCcnJxwcHBwcHBgcHBwXHH61sa6xsbHFtdPU29v36QcFGxse + GxweHB4bGxweGxweGx4cHhweHB4eIUzs490RAAAAAACQ3vLxbXVxMTExLDIuLCwuMSwsLCwuLC4sJywn + LCcsJycnHBwcHBwcHBwcGBh8tbGxsbG1xtPU2+Hh/ccBFRwbHhsbGxseGx4bHhobHB4eHh4eHh4eHWPi + 7NcRAAAAAACQ0/HmbXV2MTExMSxxMTExLC4xLC4sLiwsLiwuLCcnLCcnLiUlHBwcHBwcHBYYXLWxxsW1 + 08zb3uHi7v1sAhsbGxseGxsbGxsbGxseGxsbGxobGx4aGXrs7LWOAAAAAACYs/Lye3N2MTEyMTIsMTEx + MSwsLiwxLC4sLCwsJywsJywnLCcnJRwcHBwcHBwYF3y1tbW109Te3ubm5v3pBhMbHB4bGxweGxseGxsb + HhsaGxsbGhseHZjs7LGQAAAAAACpqe3xnXOEMTJxMXExcSwxMTExMSwsMSwuLiwsLiwnLCcsJycnLCcn + JhwcHBwcGBib09PTzNne4ebm7u79fQIbGxscGxsbGxwbGx4bGxsbHhsbGxsdCa7s7KiYAAAAAAAAme3x + r1aHcjFxMTIxMTIxMTEsMS4xLCwsLC4sLCwsJy4sJywnJycnJycmJhwcHBcfw9PU2eDh5ubt7u793AUW + GxsbGxscHhsbGxsbGx4bGxsbGhsbCtXs7ZepAAAAAAAAkO3tzFuKdjIyMTJxcTIxMTExMTEsMSwxLCwu + LiwsLCcsLCcsJywsJywnJycmHxwcg+DX3uHi5ubu7vL3+DMSHB4bHBsbGxsbGxsbGxsbGxsbGxsZDOPt + 7Y4AAAAAAAAAkN7y5lyLhzEycjExMXExMTExMTExMS4xLDEsLiwsLCwsJywsJywnJywmJycnJyclXePm + 4+bm5vHu8vLz/YICGxwbHBsbHBsbHB4bGxsbGxsbGxsZYPHt4I4AAAAAAAAAmNHx7X6EiXIycTIycTEx + cTExMjExMTExLC4sLDEsLiwuLCcsLCcsJywnLCYqJycmWOny8vLy8vLy8vPu/cICHBsbGxwbGxwbGxsb + GxsbGxsbHRsIl/Lx05AAAAAAAAAArqnt8adzvHYyMnJxMjJxMjEyMTExMTExMTExLC4sLiwuLCwsJywn + LCcsJywnJycmWOnz8vT39/T49Pj2/doZGx4cHhweGx4bHB4cGxweHh4eGyEL1/LyqZkAAAAAAAAAAJDm + 8dtzvIwycjIyMnJxMTJxMnEyMTExMTExMSwxJxweLC4sLCwsLCcnLCcsKicnVvL09PT09/f4+Pj4/eYg + HicqHycfJx8fHx8fHx8kIR4fHyFK8vbykwAAAAAAAAAAAJXX8u18jMpycnJyMnEyMnFxMTExMjExMTEx + MSwxusJQFSYsLiwsJywsJywnLCcliPf39/f3+Pj4+Pj2/eYdJiYnHyofHx8nHx8fHyQkHx4fHiKT9Prg + kAAAAAAAAAAAAKmq8fGndtCHMnJycjJyMjIycTEycTFxMTExMS519PfyoB0WJicsLiwsLCwnLCUs6f33 + 9/33/fj4+Pj4/dwhJCYfJx8nHx8fJyQmJB8eHyQfHwve9/axmQAAAAAAAAAAAACV4vfiXb/BcnJycnJy + cnEyMjJxMjExMTExMS6G8/f39+CbIhUcHicnJScmHD7k/Pf9+Pj9+Pj4+Pf2/c0bJiYnHx8nHycfHyQk + JB8kJCEeIWP49/SXAAAAAAAAAAAAAACY0/LyoIrQhzJycjJycjJycTJxcXEycTFxMS6H8/j3+P338sOb + UCMgIB9RuPL4/fj4/fj4/fj4+Pj3/bsbJiYmJx8nHx8mHyYfJCQeHyYkIrP9/eCXAAAAAAAAAAAAAAAA + o+331ITBwHJycnRycnJyMnIyMjJxMjJxcS6H9P34+P33+P349PLc5unz+P34/f34/fj9+Pj49/j3/Xwb + JyYnHycfJiYmJSQkJB8kJB4hTPf9/KmqAAAAAAAAAAAAAAAAldT28ZuL0IpydHJ0cnJycnJycTIycXEy + Mi6H9P39/fj9/fj9/fj9+Pj9+P39+P39+P34+P33+PT98yMlJiomJx8nJx8lHyYmJCQkJB4grv395pcA + AAAAAAAAAAAAAAAArqny9taHwc50cnJ0cnJycnJyMnJyMnEycTKE+P39/f39/f39/f39/f39/f39/fj9 + +P34+Pj39/b9whwrJicnHycfJx8mJSYeHyUfHx5i9/39tKMAAAAAAAAAAAAAAAAAAJXU9vKni9C5cnRy + dHRycnJycnJxcnJxMi6H+P39/f39/f39/f39/f39/f39/f34/fj4+Pf39vj0VSYnJyYqJycfJiYmHyUf + JR4mJCC1/f3tlwAAAAAAAAAAAAAAAAAAALGp8ffiiLzOhXJ0cnR0cnJycnJycXIycjGH+P39/f39/f39 + /f39/f39/f39/f39+Pj4+Pf39/22HCsmKycnJycnJyQmJR8lHyUfHnr9/f2uqQAAAAAAAAAAAAAAAAAA + AACX0fbys4zLwXR0dHJ0dHRycnJycnJxcjKH+P39/f39/f39/f39/f39/f39+P34+P339/f2+MQmJysn + JyonHycfJx8mJSYmJiYeSO39/eKZAAAAAAAAAAAAAAAAAAAAAAAAmOL47buLzrlydHR0dHNycnJycnJy + cjF49P39/f39/f39/f39/f39/f39/fj9+Pj39/f9xCcnKycrJysnKycnJyYmJiUmJiQgq/j99qMAAAAA + AAAAAAAAAAAAAAAAAAAAqa7y9uK4jdCLcnh0dHR0dHJycnJycnIyjPT9/f39/f39/f39/f39/f39/fj4 + +Pb4/fi6Jy4rKysnKycqJyonJycmJicmJh579/3906MAAAAAAAAAAAAAAAAAAAAAAAAAAJfT8vLet73Q + i3J3dHR0dHRycnhycnIycXnK9P39/f39/f39/f39/f39+P39/f34z3MnLissLisrKysnKycqJycnJicf + HmT09/3imQAAAAAAAAAAAAAAAAAAAAAAAAAAAACX3/jtzLm9zoV3eHR0dHR0dHJyeHJyMnEydLnQ9P39 + /f39/f39/f39/f395751Ky4sLCsrKysrKysnKycnKycnJycmUOD39/aZAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACuqeb37cmMv86Fd3h0dHR0dHJyeHJycnIyMjEycoq+wNDq6urq6uXPwIl1MS4uLCwuLC4sLi4u + LCcsJywnJyonJx9HzPb0+qqpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo67x9+bJub3Oind4eHR0dHhy + cnhycnJyMnIyMjEuMTEyMjIxMTIuLi4uMTExLCwxLCwsLiwsJywrKysnKycsHz6x9Pb2taMAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJmx8fbsyY290Ix3d3h0dHh4dHJycnhydDJycjJ0MjIyMTFxMjIxMjEx + MTExLDEsMTEuLC4sLiwrLisrKywlPrX08fTTmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYs/H3 + 49q6vdCNeHh4dHh4dHh4cnJ0dHRycnJyMnJxcnEycTFxMXEyMTExMiwxMS4xLCwuLC4uLC4sJyVRtfTx + 9tOYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl7Px9+zMvLzOy4V3eHR4eHh0dHR0cXR0cnJy + cnFycnEyMXExMTExMTIxMTExLCwsLCwxLiwsLCwnJ23X9vTx15cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAJeu7fTx3buNy9CNeHh4dHh0dHR0dHRzMnRycnJyMnJycjJyMXIxcTExMjEsMjExMSws + MS4sLicnnfL08fHTlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZru328uPDub3Qy4p4 + eHh4eHR0dHJ0dHR0dHJycnJxcnFyMXExMXEyMTIyMTExMTIsLDEuJ1yr8fHx8bGZAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo6Pd9PTj07u8wc69hXh4eHhydHR0dHRzMnR0cXJycjJycjIy + MjFxMTExMTIsMS4xLC4nneDx9PHjq6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AK6X0fH68uDDur2/wb2FeHh4eHR0dHRydHRzcnRycnJxcnEycTIxcTIxMjExMTEuLnyz8fTx8deYqgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl6rj9Pbt18K6vL3BvYp5eHh4dHR0 + dHJ0MnRycnJyMnJyMnJxMjFxMTExMS6GrPLx8fHgsZYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAKiXte309u3Xrbu5vL+Ni3l4dHR0dHR0dHR0cnJycnJxcjEycnEyMTExtrDt + 8vLt7cyZqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl6jT8vb2 + 8tuzu4m5jIuKhXh4dHR0dHR0dHJycnIycnIyMjJxhrvU8fHt8uPXppgAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALGVo9Py9Pb049esp7aJi4qHeXl5dHR0dHR0cnRz + cnaGtqfT5vL28e3s16aXsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAsZOZtePx9vf28uPTsavCtrabg4Obm4ODtrvDw8ji8fL29vHm4tOZla4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl5Om0+Px9Pr09vTx + 7e3j7ePg4+Pt7fLy9/b49vLm4tSulZcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqlZOosdfr8fH29vf4/f39+P339/Tx8ubs1tGjl5WpAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACxmY6Ql6ixtdfd4OLi4uLe17WxqZmQjpmuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqZk45qEBAQEBFqjpOY + qgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////// + ////////////////////////////////////////////////////////////////+AAD//////////// + gAAAP//////////8AAAAA//////////gAAAAAP////////+AAAAAAD////////4AAAAAAA////////gA + AAAAAAP///////AAAAAAAAH//////8AAAAAAAAB//////4AAAAAAAAA//////wAAAAAAAAAf/////gAA + AAAAAAAP/////AAAAAAAAAAD////+AAAAAAAAAAB////8AAAAAAAAAAB////4AAAAAAAAAAA////wAAA + AAAAAAAAf///gAAAAAAAAAAAP///gAAAAAAAAAAAH///AAAAAAAAAAAAH//+AAAAAAAAAAAAD//+AAAA + AAAAAAAAB//8AAAAAAAAAAAAB//4AAAAAAAAAAAAA//4AAAAAAAAAAAAA//wAAAAAAAAAAAAAf/wAAAA + AAAAAAAAAf/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAP/gAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAA + AAAAAAAAAH/AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAA + AAAAAAAAAD+AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAAAAAAAAAAAB8AAAAA + AAAAAAAAAB8AAAAAAAAAAAAAAB+AAAAAAAAAAAAAAB+AAAAAAAAAAAAAAD+AAAAAAAAAAAAAAD+AAAAA + AAAAAAAAAD+AAAAAAAAAAAAAAD/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/AAAAAAAAAAAAAAH/gAAAA + AAAAAAAAAP/gAAAAAAAAAAAAAP/wAAAAAAAAAAAAAP/wAAAAAAAAAAAAAf/wAAAAAAAAAAAAAf/4AAAA + AAAAAAAAA//4AAAAAAAAAAAAA//8AAAAAAAAAAAAB//+AAAAAAAAAAAAD//+AAAAAAAAAAAAD///AAAA + AAAAAAAAH///gAAAAAAAAAAAP///gAAAAAAAAAAAP///wAAAAAAAAAAAf///4AAAAAAAAAAA////8AAA + AAAAAAAB////+AAAAAAAAAAD/////AAAAAAAAAAH/////gAAAAAAAAAP/////wAAAAAAAAAf/////4AA + AAAAAAA//////+AAAAAAAAD///////AAAAAAAAH///////wAAAAAAAf///////4AAAAAAA////////+A + AAAAAD/////////wAAAAAf/////////8AAAAB///////////gAAAP////////////AAH//////8oAAAA + QAAAAIAAAAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAHgqCQB1LhEAbTMaAHYyFQB9NBQA + czQaAHo3GwB3OSEAekQuAG1IOgBwRDIAf0c0AHJMPQB/TD4AfVJCAHpUSAB8WUoAel5TAH9/fwCKLwgA + hjMOAIwzDACUNg0AgTUUAI02EQCEOBcAjjkUAIM3GACFPR4AjDsaAJI2EACTORMAmzoRAJM+GQCZPhkA + oTYKAKI+FACFPiIAlUEdAJlBHACnQhgAsEgeAIpBJACDRSsAikQoAIlJLgCUQyIAmkUiAJxJJgCTQygA + kkovAJtKKgCeUC8AhUUxAINJMQCKSjMAgU0+AIhMPQCVSjIAnUo0AJpKOACGUTkAllE2AJ1RNACdVDwA + pkchAKRJJACtSyMApUYrAKJNKgCqTyoAsUwlAKRQLQCsUSsAtFQtAKhHMwCuSjEApE45AK5MOACySjMA + vkozAKVSMgCqVDUAqlg3AKdXOwCsVjgArVk5ALVWMAC4VTEAtlgxALtaMwCzVDkAu1Q7ALRaPAC7Wj0A + uWE9AM1JLgDQSi4AxlkuAMZMMwDNTTEAyVE1AMFdNQDIXDIAxVU5AMhUOADCWTwAyWI6ANJmPQCDUUQA + ilFCAIxYQgCDVkkAgF1OAJtXQQCbW0UAhVxSAIpfVAClXkEAtVtBALpbQACZYEoAhGFUAIpkVQCKZVsA + hWldAIpqXQCSaVgAq2FCAKNkSwCqZkoAuGdGAK1tVACtdF0AuXJXAIFsZQCFdG4Aj3hvAJBwZwCcdGQA + k3ZtAIx3cQCKf3wAkXx1AKp5ZgC6fmkAxmhCANlsQgDPcEoA3HFIAMd3WADWeVQA4G9GAONzSADnfVQA + wXxhAJWAeACYgnoAtYFtAKmBdgCjiX8ArIt9ALaHdQC+kX8A3oBdAOeBWgDIh20A24hnAMiKcgDNknwA + 2pN3AOeLZwDwj2sA65FtAOiWdwCDg4MAioqKAJeIggCakIwAk5OTAJuVkgCbm5sApo6FAKCRjAC0lYkA + pJaRAKWZlgCrmpQAqZ6ZALmekwCtop0AvaGVALSjnQC+o5kApKSkAK+koACrq6sAuaqmALyxrgCzsrIA + u7S0AL24twC4trgAu7q6AMefjwDZnYQAy6CRANutmQDpoYUA4KuUAMatpADFsqsA1berAMO8ugDUvrYA + 57ajAMTAvgDUwboA9sm4AMC/wQDEwsMAycTEAM7IxwDMy8sA0MTCANPJxgDZysMA0svLANLP0ADT09MA + 2dTUANbW2ADY1dgA3NvbAOHLwgDm1MwA9dDBAOPa2AD029IA5+DdAPvj2gDe3eAA4+PjAOvl5ADp6OcA + 6+vrAPXt6wD98u0A7e/wAPPz8wD69vYA+fj3APf3+AD3+fwA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAw7SxsbETExOxE7GxtMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAxbSxscPe8vX5+vr9+vr68+DFtLG0xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC2sbTc8vn6/fr6+vr6+vr6+v39/f313raxtgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAALaxw+jz+vPgxbqJEhAPDg4PcX+Qvdn1/f3988WxtgAAAAAAAAAAAAAAAAAA + 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 + oUolAKxMJACiTSoArE8oALNOJgCnUS0AtFQtAKJOMAC3TzEApFIyAKlUNACrWDcAp1c5AKpXOAChWTwA + rVk7ALVWMAC5UzcAtVgyALtbMwC+VDoAtFs9ALtbPgC7Yj4AyFkvAMZPNgDHUzcAyVE1AMFcNADMWzEA + xFU6AMhTOADCWjsAyGM7ANNnPQCDUkYAjVZEAIZSSACLW0sAk1NEAJ1URACWWUEAmltEAJhXSACTWEgA + hF1UAKFVQwCuV0MAoltEAKxcQgCkXUkAqF5KALRUQAC5VkAAtFtBALlaQQCTY08AiGNUAIZjWgCJZFkA + j2hZAJxrVgCrYUQAt2dHAKhtVgC1bVAAr3ReALhxVQCHa2MAhnNrAJ14aQCOeXEAknpzAK98aAC2fWkA + x2hCANltQwDIcEwA2XBIAMl1UwDaeFMA4G5EAOBwRwDjfFQAioB8AJmFfgCvgG0AuIJuAKaIfgC2iXkA + 3YBeAOWCXADehWMA1YxwAMmRewDnjm0A6ZBtAOiWdwB+foAAg4OEAIyGhACEhIkAioqLAJqFgACciYIA + nZGMAIWFkgCPj5AAkpKTAJmUkgCXl5gAm5ucAKWLgwCrkIcApJGKAKmUjACzk4oAuJaIAL6ajQCqmpQA + pJ2bALOflwC2o58Au6ScAKOjpACtpKIArq6vALKloQC8p6AAtKmmALqppAC1rq4Ava6qAL2yrgCsrLEA + ra26ALKyswC6tLMAvbi3ALe2uQC5trgAvLq7AMibiQDcnYMA4J6FANGijgDLpJYA0aaWAOWkiwDqq5MA + 8K6UAOeynQDIraQA0a2iAMayrADdtqcAwraxAMq3sgDDurYAzbmzAMK8uwDIv70A6b6tAMXBvwDKwb4A + 0sS/AOfCtAD1ybcAv7/AAMXBwgDKw8MAzMjHAMXGywDNy8sA0svLANzRzADOzdAA0M3QANTS0wDY1NQA + 19faANva2gDm1M4A89jOAOHd3AD75NwA5OTkAOrm5QDr6+sA9e7sAPT09AD79vUA//n1APb2+AD69/kA + 9/r7AP39/QD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + lkAbAJNAHQCVQB0AmUIdAKVAFgCjRBsAq0cfAK1IHwCGQSMAi0YqAJZEIQCZRSEAnEklAJJKLQCdSyoA + jk82AJNPNQCbUDEAnVc9AKBKJACsSiMAok0qAK1PKACwTycApFAsAKxRKwC0UCYAslMrALlTKgCtTjYA + s0w1AL1LNACiUTEApVExAKJTNACmVTUAq1Q1AK5ZNwCsVTkApl0/AKpZOQCtWTkArlo8AK5ePgCzVTEA + u1MyALdZMwC7WzQAslU5ALBZOwCwWj0Atlo9ALJcPwC1XD8Au1s+AMlFKwDRSi0AzU0xAMxQMwDKUjYA + zVA0AMlUNwDCXDQAyl40AMRVOgDJVDgAw184AMBaPQDEWT0Ax2A2AM1hNgDFYTkAy2Q8ANFjNwDTZTsA + 2Gc7ANNoPgDZaj8Aj1VDAItZRACJXEwAlFVDAJNZRACUWEcAnltHAKNeQQCkXUAAoFhHAKJfTwC6XEAA + m2JKAIFhVACBaF0AiGleAJhmUgCWZlkAoGFPAKhmSgCraE4AumZEALhmTACgbVoAtmhTAKJxXQCsdF4A + s3BVAL94WwCGdW4Am3JiAJR2awCOe3MAoXVkALJ3YADAXEAAwmhEAMtqRADVakEA221DANpySwDMdVMA + 3XxWANZ/XgDgbUEA4nFGAOV2TADielMA6HxTAL+DbwCigXQApIZ+AKiHegCjin8AtoJyALiGcgC4iHcA + vol4ANqCXgDCjXcAwI59AM+QeQDekHIA6Y1qAOyRbgDtknAA7Zp6AH9/gACOjo8AlYiCAJ2OiACPj5AA + lZWVAKWUjgC1koUAuZOFAL+YigC5oJcAtKOdALmjmwChoaEApqKgAKioqQC6p6IAsKqoALSvrQC6sa4A + sLCwALaxsQC7tbQAt7e4ALi4uAC/uroAv76/AM6YhADFmYkA756BAMqnmgDRqpkA362bAOGnkgDEqqIA + w7OuANm4qgDDtrIAw76+AOO1owDptaEAwcC/AM7CvgDawLcA1cK7AN/IvwDywa4A7MS2AOnHugDxw7EA + vb3BAMO/wADAwMAAxcHBAMbDxADHxMYAy8XEAMvIxwDMzMwA0cnGANrJwgDSzcsA0c3NANfRzwDQztEA + 0tLTANbQ0QDV09QA1NTVANjS0ADW1tgA2dnZAN3Z2QDZ2t0A3d3dAO3a1ADh4eEA6urqAO3s7QD46ucA + 8erpAP/x6wD18/MA+PPyAPr6+gD8+fkA//z6APr9/gD+/v4AAAAAAP///wAAAAAAAAAAAAAAAAC0pgQD + AwSmtAAAAAAAAAAAAAAAAAAAAAAAAAAAALQEstns8/n58+zZsgS0AAAAAAAAAAAAAAAAAAAAALmm2fPj + qHFkYmVnc5Xg89mmuQAAAAAAAAAAAAAAAACqvPO3byM2PUhthVhVUDNrtfO8qgAAAAAAAAAAAAAAqebs + cBwWIjY6OTFBWFRQTkxLbOrmqQAAAAAAAAAAAKnxzgEHDRYiNjaErZg6VFVQTk5MMsjxqQAAAAAAAACq + 5s4BBwcNFh8gmubq7sdEVFVQTk5OMsrmqgAAAAAAubzsAgYHBwwQHyLK3NjZ63pUWFRVUFVQMeq9uQAA + AACm838ICAgICA0WIK/YvdjgeFdYWFhYVFhUdPOmAAAAtL29HQsJCAgMDhYWa6+7ypNEV0lthYVYWFdB + sdm0AACl84IYDw8PDAgODh8fHzY5LT1JSW1XSW1XSFdo86UAALLmbioYDw8PDw4OESJ7e4MmOj1JP0lJ + SEhXRDnPsgC02bI5LyoYEw8PDw8Kdebm5nksPD09PUlIPT1EOZTYtKbspzBCLy8YExMPDwtq4+Pmlh82 + Njw8Njo6OjkxZeymBPOBUkJCMS8aExMPDxnK2dzLchAsNDQ2NjY2LCwk8wQD+YBZUlJSQi8aGBgTD3zX + u7vZgxAiIiwgLCcsIiH5AwP5g1xSUlJSQkIvKBMTE3y5u8vmrBAXFxcXIhYXJPkDBPOUYFxcXFJSUjlC + LygYEna72Ofzew4XFx8WFxcd8wSm7KuKXFxcW1tSUlJCQi8oE5nn7PPREBEXFxcfFmTsprTZtpxgXFyG + XFxbQjBCQkIvfvPz9/M0HxEXFxcQl9m0ALLmwIpgYFxcXFKfmi8vMBrA+fn6+HQoLCwsLBfjsgAApfOw + omCJYGBcWtT54cGdxPj5+fnzOSoqNiwgcvOlAAC0vdnGkWGJYGBa1Pn5+fn5+fn5+ckrKioqLB/KvbQA + AACq87ikiYmKYGDW+fn5+fn5+fnwhi85Kiong/OqAAAAALS98dCjiY+JYYzW9vn5+fn2zIYwOUI5K2rs + u7kAAAAAAKrm5dWjj4mJiV+KnKCgnIdSUlJCUi5I3OaqAAAAAAAAAKnx5dLCko6JiYlhX19cXFxcXFIw + fd7xqQAAAAAAAAAAAKnm8d7NopCOiYlgYGBfXFpSUq3s5qkAAAAAAAAAAAAAAKq589/RxaGQjo6JX19c + i67c872qAAAAAAAAAAAAAAAAALmpvfPszsjDnpvBx8rs886puQAAAAAAAAAAAAAAAAAAAAC0pbLZ7PP5 + +fPs2bIEtAAAAAAAAAAAAAAAAAAAAAAAAAAAALSpBAMDBKa0AAAAAAAAAAAAAAAA//AP//+AAf/+AAB/ + /AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAAABgAAAAYAAAAHAAAADwAAAA+AAAAfwAAAP+AAAH/wAAD/+AAB//4AB///wD/8oAAAA + GAAAADAAAAABAAgAAAAAAEACAAAAAAAAAAAAAAABAAAAAQAAAAAAAHs/JABxcHEAkjYOAJk0CgCWOA8A + njgOAI83EACJORYAjToVAI46GACQNxMAlTkSAJM8FgCXPhcAmToSAJw7EgCdPBMAmTsUAJI8GACXPxkA + mT8ZAKA6DgCmPhMAoj4UAIE9IACSQR8AlkEeAJtAGwCZQR0AnUIdAKVBFwCmQhkAqkUcAIlBIQCBRSsA + k0UkAJlFIgCVSCkAnkwqAJ1NLgCfUi8Aik40AJBPMgCbTjAAhVM+AJ1SMgCYUTQAmVU7AJ1WOgCZWDwA + okchAKxLIwCuSyQArk4mAKJMKgCpTikApFAtAKxRKwCoUS4Ar1QvALRTKwCqTzIAvU8xALJOOgCjUTEA + pFMzAKJUMwCnVDMAoVU2AKZUNACoVDIAqlc1AKBVOQChVj0Ap1Q9AKlVOACsVzgAolg+AK5aOgCuWjwA + tFYwALlXMAC4UTQAtVgzALFaNQC7WzQAtFI4ALFRPQC7VD4As1w5ALZbPgCyXD4Atlw/ALhdOAC9Wj8A + ulw/AL5cPwC/YjsAu2E9AMJeNgDKXTMAwVA6AMVTOQDCVDsAxVQ5AMFXPQDCWT0AxWA5AMtkPADSZDkA + 1mg+AIlVQQCkXEAArF9AALNaQgCyXEEAullBALxYQACLYE4AgmJUAJFgUQCWYFEAk2ZVAJJtXwCrY0cA + oWFJAKpmSQCvZkgAqGhNALZnSAC7a0wAomtUAKdtVgClZlkAoGxfAItsYACbbWAAmHJkAJ51ZACleWgA + qHxqALR4YQC6emEAw2ZBAMdoQwDMaUIAxm5MAMtvTADTakIA2WxEANdvSADIcE0A13BJANpxSQDTd1QA + 2XlVANd7WADcf1sAn4J3ALOGdQC6hXEAvYp3AM2IbgDdhmUAyolwAMGLfQDTjnUA2ZN6AIKBggCJiIkA + jIuMAJ2PigCdlZIAmpqaAKWLgACrjIIAro6CAKKPiAC9locAsZCIAKuemAC2mJAAt5+YALKhmwC/opgA + o6OkAKSjpACnpqcArKysALippAC2tbkAv7y7ALu7vAC+vr4AxpCAAMSYhwDPmIIA1pqDAMCdkQDCp5wA + yqmfAOKiiwDpqZAA6bKfAMKrowDIrqcAwbWxAMK7uQDBvbwAxL+8AOy2oQDGwL0AysG/AMzAvQDZw7wA + xsPEAMrGxgDOyccAy8rKAM3KyQDNzcwA0MbDANXIxADYy8UA0MvJANPNygDWzcoA0c3OANjOywDa0M4A + 09LSANbS0gDY1tYA1tXZANjZ3QDZ3d8A3NzdAPbg1wDe3uAA4+HjAOTk5ADv5OAA6OjoAOnp7ADv7+8A + 9OrnAPLs6wDu7vAA8O/xAPHx8QD28/MA9PT1APr29QD4+PgA////AAAAAAAAAAAAAK6pAgKprgAAAAAA + AAAAAAAAAAAAALyqvd3z/v7z3b2qvAAAAAAAAAAAAAAAqsLz4rJ8eXmHtOb6wqoAAAAAAAAAAAC879R4 + KjBKTD52WUCG3/G8AAAAAAAAALzzrAEiJih9zslXaWlpQLb+vAAAAAAAqu+tGQgKGkXe7/qmP2lpaVi3 + 8aoAAAC8wsIjCAcHFC7V3ejDU2traXZK5cK8AACq9IgUDAMHDBtxucRMW3Z2dnZzifqqAAC93TAdEBAQ + DBQwhH5IUFtdXVtzceK9AK7dtUg6GBAQDBCO79UoRUhQUFBQcbDdrqnzn1tRNiAYEASA6+KFJUVFRUhF + RXnzqQL+i2NWVj0hGAY32MLijRw3Nyg3LHD+AgL+jJBkVlZRNSAWNtHZ6YAMJR0aJi3+AqnzsJFtbGxW + VlE1GEjZ8d8aHR0lGnfzqa7dvpRtbWxsVlJWPTXX+fp/EB0aJq/drgC94qWVlW1lm6ddUZP2/v6PNzk5 + KuK9AACq9MidlZVlpP7+8v7+/vpbNTkpi/iqAAC8v93Fl5Zunu7+/v7+/qU9Okgv2sK8AAAAqurRqJqW + lqTL09PLmFZRWym476oAAAAAALzz1MaclpZub21lZWNjcrj4vAAAAAAAAAC86t3Op5yalZWRkIOg2u+8 + AAAAAAAAAAAAqr/z6M/HoqGzzujzwqoAAAAAAAAAAAAAALyqvd3z/v7z3b2qvAAAAAAAAAAAAAAAAAAA + AK6pAgKprgAAAAAAAAAAAP+B/wD8AD8A+AAfAPAADwDgAAcAwAADAIAAAQCAAAEAgAABAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAQCAAAEAgAABAMAAAwDgAAcA8AAPAPgAHwD8AD8A/4H/ACgAAAAQAAAA + IAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAenl6AJsyBwCQNA0AljcOAJk4DwCPOhYA + kDUQAJM4EACVPBUAnjsRAJg8FgCWPxoAoTwSAKZBFwCsQhYApkUdAJpFIgCaRyQAnkooAJ1QMACgRyEA + pEkiAKxJIACiTy0AsU8oAKJQLwCtUSsAq1IvALVSKgCpVjYArFU2AKRaPAChXT8Arlo8ALdXMAC+VDcA + u1s0AL5dNgCwWjsAu1s/AMZOMgDAXjYAxFo9AMRgOQDKYjoA1GM3ANFmOwDZaT0Atl1AALpdQACaYksA + nWRMAK5hQwClYEgArWJMAKdoTgCzYkEAvGZDALhnRgC+Y0sApmpTALxuVgCqc18ArXNcALV0WgC+eFsA + rH1rALV3YQC/c2EAtnpiALB7ZADBZ0MAzGlDANBpQgDUakIA1nBKAMd9XwDKeFkAwnZjAMd0YQDKhWoA + zohtANiCZADZjG8A145zAOSZfACLiYkAkJCQAJuXlwC6k4IAuZ6TAL2glAC8pp4ApaGgAKSkpACxsLEA + vrm3AMCajQDLnIkAy5yRAMOjlwDWq5oA4aiTAMSupwDUr6EAx7GpAMK3swDMtrAAxLi1AMa7uADFvboA + x7+9ANHAuwDSwrwA78S1APDDsgDNxsMA0MnIANfNyQDf09AA0dbaANLY3gDf3N4A5cvCAOHZ1gD67+sA + +PPyAPn4+QD5/P0A/v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + vLd9JGbdee98htjClwGvE1L+KZ+BXZ0BFEIppRAzBcAFWzDlQCUc4IM1ILgTCOAkC4EAVgTrXErseXs9 + v2t/x/4u/4P/ZSDnPfBeYstudD4GO5+n/FM+A+Uz8DnPQKwUbI4B7gMC4Ew5YHERAAkwTQCqKQyURk1i + r4t/l79lfxdrzv8ykPP/DeiWniuD/XN+yeVfK5+Bz3sGigoCMJqiAKCIKYzdHe31MbDt79n/+bzvs/x7 + 5TNQPgPlM1A+A+UzUD4D5TNQPgPlM1A+A+UzUD4D5TNQPgPlM1A+A1/SGfj/BBff+U1oCsQAAAAASUVO + RK5CYIIAAAAoAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAB + AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB + AAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAC + AAAAAgAAAAIAAAACAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAQAAAAEAAAACAAAAAwAAAAUAAAAHAAAACgAAAA4AAAAOAAAAEAAAABIAAAAT + AAAAEwAAABMAAAATAAAAEwAAABEAAAAQAAAADgAAAAwAAAAJAAAACAAAAAUAAAAEAAAABAAAAAMAAAAD + AAAAAgAAAAIAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAYAAAAKAAAADQAAABIAAAAX + AAAAGwAAAB4AAAAiAAAAJAAAACcAAAAnAAAAKAAAACoAAAArAAAALAAAAC0AAAAtAAAAKgAAACsAAAAp + AAAAKAAAACYAAAAgAAAAGgAAABgAAAASAAAADAAAAAkAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAAB + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAF + AAAACgAAAA4AAAAUAAAAGQAAAB0AAAAkAAAALAAAADMAAAA7AAAARwAAAFAAAABWAAAAXQAAAGIAAABk + AAAAZgAAAGcAAABnAAAAZQAAAGIAAABdAAAAWAAAAFIAAABJAAAAQwAAAD8AAAA3AAAAMwAAADEAAAAq + AAAAJQAAAB0AAAAUAAAADQAAAAkAAAAGAAAABAAAAAMAAAACAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAQAAAAQAAAAJAAAAEgAAABYAAAAbAAAAJQAAAC8AAABBAAAAUgkICWYdHR19 + JyYnjTk6OqBdXV2zb25vwHl5e8uCgYHShISF14iIiNqJionciYiL3IiHh9qEhYbXgYOC1Hp6fM5ycnLD + X2BhuD8/P6coKCiWHx8fiAsLC3gAAABkAAAAWAAAAEoAAABBAAAAOQAAADMAAAAtAAAAJAAAABoAAAAP + AAAACgAAAAYAAAAEAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAgAAAAPAAAAEwAAABoAAAAo + AAAAPAAAAFYZGBl1LCwsk1taW7N0c3TMmJaX4MC+vvPRz9D/4+Lh//Xy8v//+vr///7+//////////// + ///////////////////////////////////////////+/v//7+3u/9vZ2//LysvzpaWn5Hp7etFiYmK7 + Li4vnhsbG4UAAABtAAAAWQAAAEsAAAA/AAAAOAAAADEAAAAlAAAAGQAAAA4AAAAIAAAABgAAAAQAAAAD + AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + AAAABQAAAAsAAAAQAAAAFgAAACQAAAA+DAwMYyorK4xdXF22ioiJ1ry6vPHZ2Nf/8O3t//f09P/y7+// + 6ubm/+Xf3//c2Nf/0MvL/8nDw//Evr7/wr29/8C7u//Au7v/wby8/8K9vf/Evr7/xcDA/8nEw//MyMj/ + 083N/9nX1v/o5OT/8+/v//v4+v/////////////////q6uv/zs7P9JSTldtlZWbALi4ung0ODnsAAABf + AAAATQAAAEAAAAA6AAAALgAAACAAAAAVAAAACwAAAAYAAAAEAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAsAAAARAAAAFwAAADAHBwdaKysrimNiYrqioaHj + 0tDQ/+3q6v/28fH/6+Xm/9/Z2P/Mx8b/v7m5/7q0tP+6tLX/u7a2/8K7vP/JxcX/0c3N/9jU0f/d19b/ + 39vZ/+Le2//i3dz/4+Dd/+Pf3f/i393/4d7b/9/b2v/c2Nf/1dLT/8/LzP/MyMj/zMnJ/9DLy//V0dH/ + 4d7f//Ty8//////////////////n5un/sbK05m1sbcUwLzGdCAgIdwAAAFkAAABGAAAAPQAAADMAAAAl + AAAAFgAAAA0AAAAHAAAABAAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAP + AAAAGgAAADsWFhZtTU1Np5eVltzRz8//8O7u//Ht7f/g3Nz/ysTE/7i0tP+1r6//ubSz/8XAv//Vz9D/ + 4dzZ/+bj2//r6OH/7+rj/+Tc1f/d1M7/2s7I/9fKxP/UxsD/1MS+/9LBu//SwLr/08K9/9bHwP/XysT/ + 3NDK/+HX0f/p4dn/9PDn//Px6P/x7uf/8Ozo/+Xj4f/b19b/0c7O/9HNzf/a1dX/7Orq//////////// + /////+np6/+mpqfiV1dYtxsbHIkAAABlAAAATQAAAEIAAAA2AAAAJgAAABYAAAALAAAABwAAAAQAAAAD + AAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAGAAAAD4mJSZ/cXBxw7i4uPHm5eT/8Orr/97Y2P/Ev7// + tK2t/7OsrP/Aubr/1tLR/+Xj4P/x7un/6uXd/9/Wzv/Swbr/u6Wc/7WakP+sjoP/nXxw/5dyZv+XbmH/ + l2pc/5dnWf+YZlj/mGVX/5plVv+aZlj/m2ha/5xrXv+ebmL/oHNo/6Z+dP+0j4X/vZuT/8Onn//Vwrv/ + 5NnS//Hr4f/49u//9vTv//Dt6//n4+T/4+Li/+vp5//6+fn/////////////////z8/Q9X5+gM8uLi+b + AAAAbAAAAE4AAABCAAAAOAAAACUAAAAWAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAJAAAAFAAAADooKSl/ + eXh5x8bExPvs6Oj/6OPj/83IyP+1r6//r6mq/724uP/Z1NT/7url//Dr5P/j2tL/x7St/7edkv+ggXb/ + lG9i/4xiUv+IWEb/i1ZD/45UQP+TVUH/mFdC/51ZQ/+hWkT/o1pE/6ZaRP+nWkT/qFpD/6lZRP+oWUP/ + qFhD/6ZXQ/+jV0P/oVVC/55VQ/+cV0b/m1pL/59kWP+lcWb/r4R7/8Gelv/Ot7D/6N7V//Xw6//8+/r/ + ///8//f19f/19fX//f38/////////////////+Pj5P6Li47TLy8wmgAAAGoAAABOAAAAQgAAADQAAAAg + AAAAEAAAAAgAAAAFAAAAAwAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAQAAAAGAAAACgAAACwfHx9xcnFyw8rHx/vt6ur/4t3d/8O7u/+tqKj/s62s/83Iyf/r6OT/ + 9PHq/+LWzv/DrKP/p4uA/5FuYP+FWkn/hFI//4lQO/+TVT3/mlg//55ZQP+hW0H/plxC/6dcQv+pXEP/ + rF1D/65eRP+wXUT/sl1E/7NdRP+0XUP/tlxD/7ZcQv+2W0P/t1pC/7ZaQv+3WUH/t1hB/7ZXQP+0VkD/ + r1U//6pTP/+kUkH/oFZF/6BgUv+ncmf/t46E/8qupv/p3NT/+PTx//39/f////////////////////// + ///////////k5OX8hISH0CcnKJYAAABhAAAASQAAAEAAAAAuAAAAGAAAAAoAAAAHAAAABAAAAAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABgAAABgPDg9YZmVmtsG/v/bp5+f/ + 3dnZ/763t/+upqT/ubGy/9jV1v/38+//7ubf/8izq/+nin7/i2ZX/4BTQf+CTDf/jFA4/5ZUOv+aVjz/ + n1c8/6FZPv+lWz//pltA/6lcQf+qXEL/q11C/61dQ/+vXUP/r11D/7FdRP+zXUT/tF1E/7VcQ/+3XEP/ + uFxD/7lbQv+5W0H/u1lA/7xZQP+9WD//vVc+/75WPf++VT3/vVU9/7tUPf+6Uz3/s1I9/6xRPv+kUkL/ + n1pL/6VtYv+2joX/z7ex//Dp4v/7+vn/////////////////////////////////39/g/HR0d8gVExWE + AAAAVwAAAEcAAAA6AAAAJAAAABEAAAAIAAAABQAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD + AAAABAAAAAcAAAAzQD8/kKakpObk4OH/4tvb/7+6uv+tpaX/trGx/9vY1//28ez/5drS/7yjmf+TcmT/ + f1NB/35JM/+KTDT/klA2/5hTOP+cVTj/n1c6/6BYO/+jWTz/pFo+/6ZbP/+nW0D/qVxB/6pcQv+rXUL/ + rl1D/65dQ/+vXUP/sV1D/7JdQ/+0XUP/tVxD/7dcQ/+4XEP/uVtC/7pbQv+6WUD/vFlA/71YP/++Vz7/ + vlY+/8BVPP/BVDz/wlM6/8FSO//BUjn/wFE5/7xROv+3UDv/rU88/6NSQf+hXlH/rHtx/8ann//q3tX/ + +vj3/////////////v3//////////////////8HCwuxLS0yuAAAAagAAAEwAAABCAAAALgAAABcAAAAL + AAAABgAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAARFRQVWnd1dcLV0ND/6OPj/8fCwv+tpaX/ + samq/9jT0//38+3/5trS/7GXjP+KZlb/eks2/4BHL/+MSzD/k04y/5dQM/+ZUjT/nVQ2/55UN/+fVjn/ + oVc7/6NZPP+kWj7/pVo//6dbP/+oXEH/qVxC/6tdQv+tXUL/rl1D/69dQ/+xXUP/sl1D/7RdQ/+1XUP/ + tlxD/7dcQv+4W0L/uVtB/7paQf+8WUD/vVg//75XPv++Vz7/v1Y8/8BVPP/CVDv/wlM6/8NSOP/EUDf/ + w1A3/8NPNv/BTjf/u084/7RPOv+oUD7/oVhK/6hyaP/DoZn/6t7U//r49////////Pv7//v6+f////// + //////v7/v+Hh4nRFxgYiQAAAFQAAABHAAAANwAAAB8AAAAMAAAABwAAAAQAAAACAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAD + AAAAIzs8PIqvrK3r5uHi/9TOz/+zraz/q6Wj/8vGx//69/T/7OLb/7OZjf+FYFD/eEcx/4BEKv+KSSz/ + kUot/5VNLv+YTzD/mVAy/5pSNP+cVDX/nVQ3/59WOf+hVzv/olg8/6RZPf+lWj7/p1tA/6hcQf+pXEH/ + q11B/61dQv+uXUP/r11D/7FdQ/+yXUP/s11D/7VdQ/+1XEP/t1xD/7hcQv+5W0L/ulpB/7tZQP+9WUD/ + vlc//75XPv+/Vj3/wFU8/8FUO//CUzr/w1I4/8RROP/EUDf/xU42/8VNNf/ETTX/w001/8BON/+4Tzn/ + rFA8/6FWSP+mcWb/waCY/+7l3P/8+/r///////X19P/39vb////////////LzM3xRERGqwAAAGYAAABH + AAAAPgAAACUAAAASAAAACAAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAQEBDtjYWGtzszM/+Lf3//Cu7v/qaOi/7izs//q5uf/ + 8+zp/8WupP+LZ1j/dkUw/35BJ/+IRSj/j0gp/5JJKf+VSyz/lk0u/5hPL/+ZUDL/mlE0/5xTNf+eVTj/ + n1Y5/6BXOv+iWDz/pFk9/6VaPv+mWz//qFtB/6lcQf+rXUL/rV1C/61dQ/+vXUP/sF1D/7JdQ/+zXUP/ + tF1D/7VcQ/+3XEP/uFtC/7lbQv+6WkH/u1pA/7xZQP+9WD//vlc+/79WPf/AVTz/wVQ7/8JTO//DUjn/ + w1I4/8RQN//ETzb/xU41/8VNNP/GTDT/xUwz/8RMNP/ATjb/uU84/6tQPf+gWEv/q3lw/8+1rv/17+v/ + /v7+//Pz9P/t7Ov/+fn5///////39/n/dHN0xwEAAXMAAABNAAAAQwAAACoAAAATAAAACQAAAAUAAAAD + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAUSERFT + ioqKzt7a2v/Y0tL/tK+t/6qjo//Oysv/+ff0/+HTyf+aemz/d0k0/3o+Jf+FQST/jEQk/49GJv+SSCj/ + k0kp/5VLLP+WTS7/l04v/5lQMv+ZUTT/nFM1/51UN/+fVjn/oFY6/6JYPP+jWT3/pVo+/6ZbP/+nW0D/ + qVxB/6tdQf+sXUL/rV1D/69dQ/+wXUP/sV1D/7NdQ/+0XUP/tVxD/7dcQ/+4W0L/uFtC/7paQf+6WUH/ + vFlA/71YP/++Vz7/vlc9/79WPf/AVDv/wVQ7/8JSOv/DUjj/xFE3/8RQNv/FTzX/xU41/8VNNP/FTTT/ + xksz/8VLM//ESzP/wE42/7dPOv+oUUD/oF9T/7WLgv/m2M7/+/n4//n4+f/n5eb/7Orq//////////// + nJye2xUVFIgAAABPAAAARQAAAC8AAAAXAAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAIAAAALJCQkaqOhoeLj39//y8XF/6ylpf+zrK3/5eLi//Tt6v+5oJX/ + fVVD/3Q9Jf+BPSD/iEAg/4xBIP+PRCP/kEUl/5FGJ/+TSSn/lEor/5ZMLf+XTjD/mE8x/5pRM/+bUjX/ + nVQ3/55VOP+gVjr/oVg8/6NZPf+kWT3/pls//6dbQP+oXEH/qlxB/6tdQv+uXUL/rl1D/69dQ/+xXUP/ + sl1D/7NdQ/+1XEP/tlxD/7dcQ/+4W0L/uVpC/7paQf+8WUH/vVlA/75YPv++Vz7/v1Y9/79VO//BVDv/ + wVM7/8NSOv/DUjj/xFA4/8RQN//FUDb/xU41/8VONP/FTDT/xUwz/8ZMM//FSzP/w001/75POP+yUDz/ + olRF/6RuY//Gq6T/9e/t//7+/f/l4uP/4d7c//b09f//////wMHC7CgoKJgAAABUAAAARwAAADUAAAAY + AAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAADzw8PIG2tbXy + 39nZ/8C6uv+ooqD/vLe5//v59v/o3db/mnpt/3RFL/95OyD/hDsc/4k+Hv+MQB7/jUEg/49DI/+PRST/ + kUcn/5JIKf+USSv/lUwt/5dOL/+YTjD/mlAy/5tSNf+cVDb/nlU4/59WOv+gVzv/olg8/6RZPf+lWj7/ + p1tA/6hcQf+pXEH/q11C/61dQ/+vXkP/sF5D/7JeRP+zXkT/tF1D/7VdQ/+2XEP/t1xD/7hbQv+4W0L/ + ulpB/7tZQf+8WUD/vVg+/75XPv+/Vj7/v1Y8/8BUO//BVDv/wlI6/8JSOf/EUjn/xFA3/8RQNv/FTzX/ + xU40/8VNNf/FTTT/xkwz/8VMM//FSzL/xEwz/8FNNv+4UDv/qVJA/59eUv+0joX/7OHY//z8+//k4uX/ + 2NTT/+jm5f//////2dfZ9zw7PacAAABcAAAARwAAADYAAAAXAAAACgAAAAYAAAADAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAAAQAAABBFREWKx8TE+97a2v+5tLT/p6Ch/8rGyP/49vL/1cK4/4ZgUP9yPCT/ + fzob/4U7Gv+JOxr/iz4c/4w/Hv+NQSD/jkIi/49FJP+RRib/kkgo/5RKKv+VTC3/lkwu/5hPMP+ZUDL/ + mlI0/5xTNf+dVDf/n1Y5/6BXO/+iWDz/pFk9/6VaPv+nW0D/qFtA/6lcQf+qXEH/qFpA/6VXPv+iVDz/ + o1U8/6VVPf+qWD//r1tC/7RcQv+3XEP/uFxC/7hbQv+5W0L/u1pB/7xZQP+8WUD/vlg+/75XPv+/Vj3/ + v1U8/8FUO//BUzv/wlM6/8NSOf/DUTj/w1A3/8RQN//FTzb/xU41/8VONf/FTTX/xU00/8VNNP/FTDP/ + xEw0/8JNNf+9UDn/sVI//59XSP+penD/3crB//r49//n5ef/z8zM/97b2///////6Ojp/U1MTrIAAABf + AAAARwAAADUAAAAYAAAACgAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAQT05Ok8vGx//X0tH/ + tq+u/6mhov/Y09b/9/Lx/7qhlv93Tjz/djsh/4E5Gv+GOhj/iDsY/4k8Gf+LPRz/jD8e/41BH/+OQiH/ + j0Qj/5BGJv+SSCj/k0oq/5VLLP+WTC7/mE4w/5lQMf+aUTT/nFM1/51UN/+eVjj/oFc6/6JYPP+jWT3/ + pVo+/6ZbP/+kWT7/m1A2/41HL/+ISTP/hko2/4NKOP+BSDX/gEMw/4A9KP+JQiz/m003/6pWPv+1W0L/ + uFtC/7lbQv+6WkH/u1lB/7xZQP+9WD//vlc+/75XPv++VTz/v1U8/8FUPP/CUzr/wlM6/8JSOf/DUTj/ + xFA4/8RQN//EUDb/xU82/8VPNv/FTjX/xU40/8VONf/FTjT/xU40/8NONf/AUDj/t1M+/6RWRf+faV7/ + yK6n//j18//s6uv/zsvL/9nV1P///v7/8PDy/1hYWbkAAABeAAAARwAAADMAAAAXAAAACgAAAAUAAAAC + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAABAAAACkxNTZDKx8b/1tHR/7KsrP+spaX/3dra//Tt6v+tkYT/dUg0/3s9IP+COBj/ + hjgY/4g6F/+IOhf/iTsY/4o8G/+MPx7/jEAf/45BIP+PRCP/kEYl/5FHKP+TSSn/lEsr/5ZMLf+XTi// + mFAx/5pRM/+bUjX/nFM2/55VOP+gVjr/oVg7/6NZPP+kWT3/nFE2/5BONf+XaVj/p4yC/7ekoP/Dt7T/ + yL+9/8e8uf++ran/rZOM/5NtYf95QDD/fzso/5xOOP+wWED/uVtC/7lbQf+6WkH/vFlA/71ZQP++WD7/ + vlc+/75WPf+/VTz/wFU8/8FUPP/BVDr/wlM6/8NTOf/DUTn/xFE4/8RQN//EUDf/xE82/8RPNv/FTzb/ + xU82/8VPNf/ETzX/xE81/8NPNv/AUDj/uVM9/6hVQ/+dY1j/v6GZ//bw7P/y8PD/0MvM/9bS0f/++vv/ + 8fHy/1FRUrQAAABeAAAARgAAADAAAAAUAAAACQAAAAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAANBQUF+yMPD/9bR0P+yrKz/ + rKem/+Tf3//y6uf/oIJ0/3JDLv98Ox7/hDkY/4Y4F/+HOBf/iDkX/4g6F/+JOxj/ijwa/4s+HP+MQB7/ + jUEg/49DI/+PRST/kUYn/5JIKP+USir/lUwt/5dNLv+YTzH/mVAy/5pSNP+cUzb/nlU4/59WOf+hVzv/ + oVc7/5hOMv+calj/va2n/9LPz//Y19j/19TV/9XS0//V0dH/1tLT/9nX2P/f3+D/4uDg/8/Ewv+Vb2T/ + dDYk/5FHMv+uVj//uVtC/7pbQf+6WUD/vFlA/71ZP/++WD7/vlc+/79WPv+/Vjz/wFU8/8FUPP/CVDr/ + wlM6/8JSOv/DUjn/w1I4/8NROP/EUTf/xFA3/8RQN//ETzb/xE82/8RPNv/ETzb/xE82/8JQN//BUDj/ + vFM9/6tWQ/+cYFP/uJmR//Ps5v/19PL/z8rK/9TQ0P/9+/z/6uvs/0ZGRq0AAABZAAAARAAAACwAAAAS + AAAACAAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAADMTAwab28vPnW0tL/tK2s/6ynpf/l4uL/8Ojh/5h5bP9xPyn/fjod/4U4F/+HORX/ + iDgX/4g5F/+IORf/iDoX/4k7GP+KPBn/iz0c/4s/Hf+NQR//jkMi/49FJP+RRib/kkco/5NKKv+VSyz/ + lkwu/5dOMP+ZUDH/mlE0/5xTNf+dVDf/n1Y5/59WOf+ZUDT/rIV3/9DLzP/U0tP/0MzM/87Jyf/Oycn/ + zsnJ/87Jyf/Oycn/zsrK/8/Ly//Szc7/393e/+rp6v+0nJX/dDop/5JHMv+yWD//ultC/7paQf+7WUH/ + vFlA/71ZQP++Vz7/vlc+/79WPv+/VTz/wFU8/8FUPP/BVDv/wlM6/8JTOf/DUzr/w1I5/8NSOP/DUjj/ + w1E4/8NROP/EUDf/xFA3/8NQN//EUDf/w1A3/8NQN//BUTn/vFM9/61WQ/+aXFD/r42F//Hq4v/18/L/ + zcnK/9XQ0P///v7/4+Pk/TMzM6AAAABQAAAAQgAAACgAAAAQAAAABwAAAAMAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh0bHFKopKXp2NPS/7Wvr/+rpKT/ + 4N3d//Hp5P+YeGr/c0Aq/4A5HP+GOBf/iDkV/4k5Fv+JORb/iDkX/4g4F/+JORf/iTsX/4k7Gf+LPRv/ + jD8d/41AH/+OQSH/j0Qk/5BFJf+RRyj/k0kp/5RLK/+WTC7/l04v/5hPMf+aUTP/m1I1/51TNv+eVTj/ + mlAy/6+Ief/Qz9D/z8zM/8zHx//Lx8f/ysbG/8rFxf/KxcX/ysXF/8vGxv/Lxsb/zMfH/83IyP/NyMj/ + 1dHS//Hy8/+1nZb/djYk/59OOf+3W0L/uVtC/7paQf+7WUH/vFlA/7xYP/++Vz7/vlc+/75XPv+/Vjz/ + v1U8/8FUPP/BVDv/wVQ7/8FUO//CUzr/wlI6/8JTOf/DUjn/w1I5/8NSOP/DUjj/wlE4/8NROP/DUTj/ + w1E4/8JROP/AUjn/u1Q9/65XRP+ZW07/rYyE//Lr5f/z7+7/y8bH/9bT0v//////ysnL8hoZGo0AAABN + AAAAPwAAACEAAAAMAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEPDg41l5WX19jT0/+7tLT/qKCh/9nV1//17uv/nH1w/3NAKv+BPR//hzgX/4k4Ff+JORX/ + iTkV/4k5Fv+IORf/iTkX/4k6GP+JOxf/ijsZ/4o8G/+MPh3/jEAe/41BIP+PQyP/j0Uk/5FHJ/+SSCj/ + lEoq/5VMLf+WTS7/mE4w/5lQMv+aUjT/nFM2/5pPMP+ncl7/zcrK/8zIyf/JxMT/ycTE/8fCwv/HwsL/ + xsHB/8bBwf/GwcH/x8LC/8fCwv/Iw8P/ysXF/8vGxv/Lxsb/1tLT//Dw8P+VbmP/hT0p/69XP/+6W0L/ + ulpC/7paQf+8WkD/vFlA/71ZP/++WD7/vlg+/79XPv+/Vj3/wFY9/8BVPP/AVDz/wVQ8/8FUO//BVDv/ + wlQ6/8JTOv/CUjr/wlM6/8JTOf/CUjn/wlI5/8JSOf/BUjn/wlI5/8JSOf/AUzr/ulU+/61XQ/+aXVD/ + spOL//Tu6P/s6+v/yMTD/9jV1f//////r66v5gwMDH8AAABHAAAAOAAAABgAAAAKAAAABQAAAAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFnNxcbPY09P/wbu6/6qiov/SztH/ + +PTy/6iLf/9zQSz/gT0f/4c5GP+JOBX/ijgV/4k5Ff+JORX/ijoW/4o6Fv+JORf/ijoY/4o6GP+KOxj/ + ijwa/4s+HP+MQB7/jUEg/45CIv+PRCT/kUYm/5JIKP+TSSr/lEss/5ZMLv+XTjD/mE8x/5pRNP+bUTT/ + nFI1/8CrpP/Lysv/x8LC/8bBwf/FwMD/xL+//8O+vv/Dvb3/wr29/8K9vf/Dvr7/w76+/8XAwP/GwcH/ + yMPD/8rFxf/JxMT/5eXl/9TIxf97PSz/o1E6/7hbQv+5W0L/uVtC/7paQf+7WkH/vFlA/71ZQP++WD// + vlc+/79XPv++Vz7/wFY9/8BWPP/AVTz/wFQ8/8FVPP/BVTz/wVQ7/8FUOv/BVDv/wVQ7/8JUO//CUzr/ + wVM6/8FTOv/BUzr/wVM6/8BTOv++VDv/ulY//6tYRf+YX1L/uZ2W//j19P/l4uP/x8HB/+Dd3f////// + h4eH0wAAAGkAAABFAAAAMAAAABMAAAAIAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAJSUFOMysTF/8jCwv+spKT/xL2///v49/+3npP/dUUw/4E+IP+IORf/ijkW/4s4Ff+KOBX/ + ijkV/4o5Fv+KORb/ijoW/4o5F/+KOhj/ijoY/4o7GP+LPBr/jD0c/40/Hv+NQR//jkIh/49EJP+QRSb/ + kUco/5NJKf+USiv/lkwt/5dOL/+YTzH/mlEz/5hNL/+nbFX/yMPC/8bBwv/Dvr7/wr29/8G8vP/Au7v/ + v7q6/8C6uv+/urr/v7m5/7+6uv/Au7v/wby8/8O9vf/Ev7//x8LC/8jDw//Szs7/7uzs/41cT/+XSDP/ + tltC/7hcQv+5W0L/uVpC/7taQf+7WkD/vFlA/7xZQP+9WD//vlg+/75YPv++Vz7/v1c9/79WPf+/Vj3/ + v1U8/8BVPP/AVTz/wFQ7/8BVO//BVTv/wVQ7/8FUO//BVDv/wVM7/8BTO//AUzv/wFQ7/8BUOv+9VTv/ + uFY//6hYRv+YY1f/xK2m//v5+P/a1tn/xsLC/+zp6P/19Pb/WltbuQAAAFkAAABBAAAAJwAAAA8AAAAH + AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKCopWLSxsvbSy8z/r6in/7iys//8+/b/ + yriv/3dKN/+BPiH/ijoY/4s6Fv+MOhb/jDkW/4s5Ff+KORX/ijkW/4o6Fv+LOhf/ijoX/4o6F/+KOxj/ + ijsY/4s8Gf+LPRv/jD8d/41BH/+NQiD/j0Mj/5BFJf+RRib/kkgo/5RJKv+VSy3/lk0u/5hPMP+ZUDL/ + l0kq/7GGdf/Ixsf/wr29/8G7u/+/urr/vri4/723t/+8t7f/vLe3/7y3t/+9t7f/vLe3/724uP++ubn/ + wLq6/8K8vP/Dv7//xsHB/8nExP/u7/D/rIqA/49BLP+0W0L/uFxD/7hbQv+5W0L/ulpC/7pbQv+7WkH/ + u1pB/71ZQP++WD//vlg//75YPv++Vz7/v1c+/75XPv+/Vj7/v1Y9/79WPf+/Vj3/wFY9/8BWPP/AVTz/ + wFU8/8BVPP/AVTz/v1U8/79VPP+/VTz/v1U8/79VPP+9Vj3/tlhB/6RZR/+WZ1z/08O7//38+//QzM7/ + ysXE//r4+f/d3N38JSUllwAAAE0AAAA8AAAAHQAAAAsAAAAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQYGBiOOi4rO1c7O/7exsf+vp6b/8e7r/+nc1P+AWEf/fT8j/4k8Gv+MOxf/jToW/406Fv+NOhb/ + jDoW/4s5Fv+KORb/ijoW/4s6F/+LOhf/ijoY/4s7Gf+LOxj/izwZ/4s9Gv+MPh3/jkAe/45BH/+OQiH/ + kEQk/5BFJv+RRyf/k0kq/5RKLP+WTC7/l04v/5hPMf+WSSn/r4l6/8TExv+/urr/vri4/7y3t/+7trb/ + urW1/7m0tP+5tLT/ubS0/7q0tP+6tLT/u7W1/7y2tv+9uLj/wLq6/8G7u//Dvr7/xcDA/+nr7P+ylIv/ + jEAq/7RcQv+3XEP/t1xD/7hcQv+4W0L/uVtC/7paQv+7WkH/vFlB/7xZQf+9WUD/vVhA/75ZP/++WD// + vlc+/75YPv+/Vz7/v1c9/75XPv++Vz7/vlY9/75WPf++Vj3/v1Y9/79WPf++Vj3/vlY9/75VPf+/Vjz/ + v1U8/75VPP+8Vj3/tFhC/59ZSP+YcGX/49nQ//78+P/Fw8P/087O//////+ko6ThBQUFdgAAAEQAAAAw + AAAAEwAAAAgAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWVlZks7Hx//CvLv/q6Wl/9vZ2f/07+r/ + km9g/3c+Jv+JPh//jjsY/487F/+NOxf/jToX/406F/+MORb/jDoW/4s6Fv+LOhb/jDoX/4w7F/+MOhj/ + izsY/4s7GP+LOxj/jD0a/40+HP+NQB7/jkEf/49CIP+PQyL/kEUl/5FGJ/+SSCj/k0kr/5VMLf+WTS7/ + mE8w/5ZJKP+thnj/wcHD/7y3t/+7tbX/ubS0/7m0tP+5s7P/uLKy/7eysv+3srL/t7Ky/7eysv+5s7P/ + ubS0/7u2tv+9uLj/v7m5/8K9vf/Dvr7/6Onq/7OVjP+PQyv/s1xC/7ZdQ/+3XEP/t1xD/7hcQv+5W0L/ + uFtC/7pbQv+7W0L/u1pB/7tZQf+8WkD/vFlA/71ZQP++WUD/vlg//75YP/++WD//vlc+/75YPv++Vz7/ + vlc+/75XPv++Vz3/vlc9/75XPf++Vz3/vlc9/71WPf+9Vj3/vlY9/71WPf+6Vz//sFpE/5dYSf+ce3H/ + 8u7m/+vo6P/Dvrz/4N3d//z6+/9naGjBAAAAXwAAAD8AAAAlAAAADgAAAAYAAAADAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAASgpKVGxrq72zsfH/6+mpv/Bu73/+/n3/6+UiP91QSv/hz4g/448Gf+PPBj/jzsX/487F/+OOhf/ + jToX/446F/+NOhf/jDoW/4w6F/+MOxf/jDsX/4w7F/+LOxj/izsZ/4w8GP+MPBr/jT4c/40/Hf+OQB7/ + j0Ig/49DIv+QRST/kkYm/5JIKP+TSSn/lEss/5ZMLv+XTi//lUgn/62Edf/AvsD/urW1/7qzs/+4s7P/ + t7Gx/7axsf+3sbH/trGx/7axsf+2sbD/trGx/7exsv+4srL/urOz/7q2tv+9uLj/wLu7/8O9vf/s7e7/ + s5GH/5ZHLv+0XUP/tV1D/7ZcQ/+2XEP/t1xD/7hcQ/+4XEP/uVtC/7pbQv+6W0L/u1tB/7taQf+7WkH/ + vFpB/7xaQP+8WUD/vVlA/71ZQP++WUD/vlg//75YP/+9WD//vlc+/71XP/+9Vz//vlc+/71XPv+9Vz7/ + vVc//71XPv+9Vz7/vVc+/7tXP/+3WED/qVlG/5FcT/+2nZX/+/r5/9TR0v/Dv7//9vP0/9rY2v4nJyiZ + AAAASgAAADgAAAAZAAAACgAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMXfnx8vNPNzf+3sbH/squs//Xz8P/WyL// + e047/4RAI/+PPRr/kDwY/5A8GP+QPBj/kDsX/487F/+OOhf/jjoX/446F/+NOxf/jToX/4w7F/+MOxf/ + jDsY/4w7GP+MOxn/jTwZ/4w8Gf+NPRr/jj4d/45AHv+PQSD/kEMi/5BFI/+QRiX/kkgn/5NJKf+USyr/ + lUwt/5ZNLv+VSSr/qHJd/725uf+4tLT/t7Ky/7awsP+2sLD/ta+v/7Wvr/+0rq7/tK+v/7Svr/+1r6// + trCw/7exsf+4srL/urS0/7y3t/+9uLj/xsLC/+3t7f+hcGH/o1E4/7RdRP+zXUP/tV1D/7ZdQ/+2XUP/ + t1xD/7hcQ/+3XEL/uFxC/7hbQv+6W0L/ultC/7tbQv+7W0L/u1pB/7taQf+7WkH/vFlA/71ZQf+9WUH/ + vVlA/7xZQP+9WUD/vVlA/71YQP+9WED/vFg//7xYP/+8WD//vFg//7tYPv+8Vz7/u1g+/7pXP/+0WUP/ + olpI/45jWP/Sxr7//v76/8XCwv/Qy8v///7//5mYmdoAAABsAAAAQQAAACsAAAAQAAAABwAAAAMAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAUZFRXbDv7//xcDA/6ylpf/Z1dX/8+7m/4xoWP99PyX/jT8d/5E9Gf+SPRn/kT0Y/5E8GP+QPBj/ + kDwY/487GP+POxf/jjsX/447F/+OOhf/jTsX/4w7F/+NOxj/jTsY/407Gf+NOxn/jDwZ/409Gv+OPhz/ + jj8e/49BH/+PQiH/kEQj/5FFJf+SRif/k0ko/5RKKv+VSyz/lk0t/5ZNLv+aUzb/uaml/7i1tv+1sLD/ + ta+v/7Wvr/+0rq7/s66u/7Ourv+zra3/tK6u/7Surv+1r6//trCw/7exsf+5s7P/u7a2/7u1tf/Z2dn/ + 4NbT/5dSPP+tWkD/sl1E/7JdRP+zXUP/tF1D/7VdRP+2XUP/t11D/7dcQ/+3XEP/uFxD/7hbQv+5W0L/ + uVtC/7pbQv+6W0L/u1tC/7tbQv+6WkL/vFpB/7xaQf+8WUH/u1lB/7tZQP+7WUD/u1lA/7tZQP+7WUD/ + vFhA/7xZQP+7WUD/u1k//7pZP/+7WD//ulg//7hYQP+uWkT/l1hJ/5d1a//w6+L/6+jo/7+6uv/l4OD/ + 8O/w/0dGR6sAAABRAAAAOQAAABkAAAAKAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDgwllJGR1NLKy/+xrKz/vre5//z79v+1nZP/ + dkIr/4tAIv+SPhv/kz0Z/5I9Gf+SPRn/kjwY/5E8Gf+QPBj/kDwY/5A7F/+POxf/jzsX/447F/+NOxf/ + jTsX/408F/+NPBj/jTsZ/407Gf+NPBn/jTwZ/44+G/+PPx7/j0Ef/5BCIP+QQyL/kUQk/5JGJf+SSCf/ + lEkp/5RLKv+VTC3/lk0u/5VJKf+rfWv/u7q8/7Wvr/+0rq7/tK2t/7Otrf+zra3/s62t/7Otrf+zra3/ + s66u/7Surv+1sLD/trGx/7izs/+4s7P/w7+//+7w8f+ziHr/oE82/7BeRP+xXkT/sV1E/7JdRP+zXUP/ + tF1E/7VdRP+2XUT/tl1D/7ZdQ/+2XEP/uFxD/7hcQ/+5XEL/uVxD/7lcQv+6W0L/ultC/7pbQv+6W0L/ + ulpC/7pbQv+7WkH/u1pB/7taQf+6WkH/u1lA/7paQf+7WkD/ulpA/7lZQP+6WUD/ullA/7pZQP+5WT// + uFlA/7VaQv+oW0b/jFpM/6+bk//7+/n/z8vM/8TAv//8+fr/ra2u5wsLC3sAAABBAAAAKwAAAA8AAAAH + AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAUpJSn3Iw8P/wrq6/66nqf/q5uX/6eDW/4JZR/+GQSX/kUAd/5Q+Gv+UPhr/kz4Z/5I+Gf+SPRn/ + kjwZ/5E9Gf+RPBj/kDwX/5A8GP+PPBj/jzsX/447F/+OPBf/jjwY/448Gf+OPBn/jTwZ/408Gv+NPRn/ + jj0b/48/HP+PQB//kEIf/5BDIf+RRCP/kkYl/5JHJv+TSSj/lEoq/5VLLP+WTC7/lkwt/5lPMf+0mI7/ + urm7/7Ourv+zraz/s62t/7Otrf+zra3/s62t/7Otrf+zra3/tK+v/7WwsP+2sbH/trCw/7+7u//k5+n/ + zrWu/55SOv+tXEL/r15E/69eRP+wXUT/sV5D/7JdRP+zXUT/s11E/7RdRP+1XUT/tl1E/7ZdRP+3XUP/ + t11D/7hcQ/+3XEP/uFxD/7hcQ/+4W0L/uVxC/7lbQv+5XEL/ulxC/7pbQv+6W0L/uVtC/7lbQf+6W0H/ + uVpB/7laQf+5WkH/uVpB/7lZQP+5WUD/uVpA/7laQP+4WT//t1lA/7FaQ/+cWUj/jmhd/+LZzv/28u// + v7q6/9vX1//18vb/VlZWtQAAAFMAAAA4AAAAGwAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREREsl5SW2NDKyv+yq6n/xsDB//n48v+jhXj/ + eUAo/49CIv+VPxz/lT8b/5U/Gv+UPhn/lD4Z/5M+Gf+SPRn/kj0Z/5E9Gf+RPRj/kTwY/5A8GP+QPBj/ + jzsX/488GP+OPBj/jjwZ/448Gf+OPBn/jTwa/449Gv+OPhr/jz4c/49AHv+QQR//kEMg/5FEIv+SRST/ + kkcm/5NIJ/+USSn/lUor/5ZLLf+XTS//lkss/5tSNP+0mI7/u7m7/7aysv+yra3/sqys/7GsrP+yraz/ + s62t/7Otrf+zrq3/s66u/7eysv/HxMX/4uTl/9C4sf+iW0L/qVk+/65eQ/+uXUP/rl1D/69dRP+wXkP/ + sV5E/7JdRP+zXUT/s11E/7NeRP+1XUT/tV1E/7ZdRP+2XUT/t11E/7ddQ/+3XEP/t1xD/7hcQ/+3XEP/ + uFxD/7hcQ/+4XEP/uFxC/7lcQv+5W0L/uFtC/7lbQv+4W0L/uFtC/7hbQv+4W0L/uFtB/7hbQf+4WkH/ + t1pB/7haQP+3WT//tFpB/6pbRv+OWEn/oIZ9//n38f/V0tL/v7u7//r39/+4uLjsERERgAAAAEEAAAAr + AAAADgAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAUxMTX7JxMX/wLq6/7Gqq//t6eX/1svD/31RPv+JQiT/lEAd/5dAG/+XPxv/lj8b/5U+Gv+VPhr/ + lD4Z/5Q9Gf+TPhn/kz4Z/5I9Gf+SPBj/kTwY/5E8GP+QOxj/kDsY/448GP+OPBj/jz0Z/489Gf+OPBr/ + jzwa/449Gv+PPRv/kD8d/5BAH/+QQh//kUMh/5FEI/+SRiX/k0cm/5RIKP+VSSr/lksr/5dNLv+XTi// + l0wt/5pQMf+ugnD/u6+t/7u7vf+4t7j/trKz/7Wxsf+1sLH/t7O0/7y4uf/Fxcb/1NXX/9nRz/+/l4n/ + olg9/6hZPf+rXUL/rF1C/61dQ/+tXUP/rl1D/69dRP+wXkT/sF5E/7FeRP+yXkT/s15E/7NdRP+0XUT/ + tF5E/7VeRP+2XUT/tl1E/7ZdRP+2XUP/t11E/7ddQ/+3XUP/t1xD/7dcQ/+3XEP/t1xD/7hcQ/+3XEL/ + uFxC/7hbQv+4W0L/uFtC/7dbQv+3W0H/t1tB/7dbQf+3W0H/t1pB/7daQf+1WkD/sFtD/55aR/+IYFT/ + 0ce///n38v/Au7r/2tXV//Xz8/9ZWFm3AAAAVAAAADUAAAAZAAAACgAAAAQAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAkko+Q0NHLy/+zra3/x8PD//f17f+hhHf/ + gUky/5NDI/+XQBz/mEAb/5dAG/+WQBv/lj8b/5U/G/+VPxr/lT4a/5Q+Gv+UPhn/kz0Z/5I9Gf+RPRn/ + kT0Z/5E8GP+ROxj/kDwY/489GP+QPBn/kD0Z/488Gv+PPRr/jj0a/489Gv+QPhz/kEAe/5FBH/+RQyD/ + kUQi/5JFJP+TRib/lEgn/5RJKf+VSiv/lkws/5dNLf+YTjD/mE4v/5hLK/+fXED/roFw/7idlP/As6// + v7a0/8C4tv/Fvbv/y7+7/8eupv+7j4D/qWZN/6JTN/+nWj7/qVxB/6pcQf+rXUL/rF1C/6xdQ/+tXUP/ + rl1D/69eQ/+vXkT/sF5E/7FeRP+xXkT/sl1E/7NdRP+zXkT/tF5E/7ReRP+0XUT/tV1E/7VdRP+2XUT/ + tl1E/7ZdQ/+2XUP/tl1D/7ZdQ/+2XEP/t11D/7ZcQ/+2XEP/t1xD/7dcQv+3XEL/t1xC/7ZcQv+2W0L/ + tltC/7ZbQf+1W0H/tVpB/7ZaQP+0WkH/qltF/49XSP+dgnn/+Pbu/9bR0/++ubn/+PT2/6+vr+gKCgp2 + AAAAPgAAACcAAAAOAAAABgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAERERW7FwL//xL2+/7Crq//p5uP/183H/4heTP+TUTT/mUYi/5lAG/+ZQRz/mEAc/5dAG/+XQBv/ + l0Ab/5Y/G/+VPxr/lT4a/5Q+Gf+UPhr/kz4Z/5I9Gf+SPRj/kT0Z/5E8GP+RPBj/kD0Z/5A9Gf+RPRn/ + kDwa/488Gv+PPRr/jz4a/5A+G/+QQB3/kUAf/5FCIP+RQyH/kkUj/5NGJf+URyf/lUko/5VKKv+VSiv/ + lkwt/5hNL/+ZTzD/mVAx/5lOMP+ZSyv/nVI0/6BaPv+hXED/oVxB/6NeQ/+kXUL/olc6/59RM/+jVzr/ + plo//6ZbP/+nW0D/qFxB/6lcQf+qXUL/q11D/6xdQ/+tXUP/rl5D/65eRP+vXkP/r15D/7BeRP+xXkT/ + sV5E/7JeRP+zXkT/s15E/7NeRP+zXkT/tF1E/7ReRP+0XUT/tV1E/7VdRP+1XUT/tV1D/7ZdQ/+2XUP/ + tVxD/7VcQ/+1XEP/tVxD/7ZcQ/+2XEL/tVxC/7VcQv+1W0L/tVtC/7VbQf+0W0D/tVtA/7NaQP+uW0P/ + nlpG/4dfU//Qx8D/9vPu/723t//b2Nb/7Ovt/0NDQ6kAAABMAAAAMgAAABUAAAAIAAAAAwAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBAMNfXl7t9TOzf+1rq3/xL+///r37/+ojYP/ + ilI8/59VNv+eSyr/mkId/5lBHP+ZQRz/mUAc/5hAHP+XQBv/lkAb/5Y/G/+VPxr/lT8a/5Q+Gv+UPhn/ + kz4a/5M9Gf+SPRn/kj0Z/5I8GP+QPRn/kD0Z/5E9Gf+QPRr/jz0a/5A9Gv+PPhr/kD4b/5E/HP+RQB7/ + kUEf/5JDIP+SQyL/k0Yk/5RGJv+USCf/lEko/5VKKv+WSyz/l00t/5hNLv+ZTzD/mlAy/5pRNP+bUTT/ + m1Ez/51SNP+eUzX/nlQ3/6BVOP+hVzr/olg8/6NZPf+lWj7/plo//6dbP/+nW0D/qFxB/6lcQf+qXEL/ + q11C/6tdQ/+sXUP/rV1D/65eQ/+uXkP/r15E/7BeRP+wXkT/sV5E/7FeRP+yXkT/sl5E/7NeRP+zXkT/ + s15E/7NdRP+0XkT/tF1E/7RdQ/+0XUT/tF1E/7RdRP+0XUT/tF1D/7RdQ/+0XEP/tFxD/7RcQv+0XEL/ + tFxC/7RcQv+0W0L/tFtB/7NbQf+zW0D/s1pA/7FaQf+nWkT/jFZH/5+Gff/6+e//z8vL/8K8u//6+Pj/ + jY2O1gABAmkAAAA4AAAAIQAAAAsAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAACgnKEe0r6/5y8TE/7Cqqv/j4N7/493X/41kU/+WVDn/o1Qz/6NRL/+dRyL/mkEc/5pCHP+aQhz/ + mUEc/5hBHP+YQBz/l0Ab/5ZAGv+WPxv/lT4a/5U+Gv+UPhr/lD4a/5M9Gf+TPhn/kj0Z/5I9GP+RPRn/ + kT0Z/5I+Gf+RPRr/kT0a/5A+G/+QPhv/kT4b/5FAHf+RQR//kUIg/5JDIf+TRSP/lEYk/5RHJv+USCf/ + lUop/5ZKK/+WTCz/mE0t/5hPL/+ZUDH/mlEy/5tSNP+cUjX/nFQ2/51VNv+eVTj/n1Y5/6BXOv+hVzv/ + olk8/6NZPf+lWT7/pVs+/6ZbQP+nXED/qFtA/6lcQf+qXEL/ql1B/6tdQv+sXUP/rV1D/61eQ/+uXkP/ + r15E/69eRP+vXkT/sF5E/7BeRP+xXkT/sV5E/7JeRP+yXkT/sl5E/7JeRP+zXUT/s11E/7NdRP+zXUT/ + s11D/7NdQ/+zXUP/s11D/7NcQ/+zXEP/s1xD/7NcQ/+zXEL/s1xC/7JbQf+yW0H/sltB/7JbQf+xWkD/ + sVpA/6tbQ/+YWEX/imRY/9/Y0f/t6uf/ubSy/+Xi4v/V1db+KSoqlAAAAEMAAAArAAAAEAAAAAcAAAAC + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXFtbjdHNzf+8t7b/ura2//Py6/+ynpb/ + iFQ+/59XOP+kUzH/pVIw/6JNK/+cQx//m0Ic/5pCHf+ZQR3/mUEc/5lAHP+YQRz/l0Ac/5ZAG/+WQBv/ + lj8b/5U+Gv+VPhr/lD4Z/5M+Gf+TPhr/kz0Y/5I9Gf+RPhn/kT4a/5I+Gv+RPRv/kT4b/5E+G/+RPhv/ + kT8c/5JBHv+SQiD/kkMh/5JEI/+TRSP/lEYl/5VIJ/+VSCn/lUoq/5ZLK/+XTC3/mE4u/5pPL/+bUTL/ + m1Ez/5xSNP+dUzX/nlQ2/55UN/+fVTj/oFc6/6FXO/+iWDv/olg8/6RZPf+kWT7/pVo+/6ZbP/+mW0D/ + p1xB/6hcQf+pXEH/qlxB/6tdQv+rXUP/rF1D/61eQ/+tXkP/rl5D/65eQ/+vXkT/r15E/69eRP+wXkT/ + sF5E/7FeRP+xXkT/sV5E/7FeRP+xXkT/sV1E/7FdRP+yXUT/sl1D/7JdQ/+yXUP/sl1D/7JdQ/+yXUP/ + slxD/7JcQv+xXEL/sVxC/7FbQf+xW0H/sVtB/7FbQf+wWkD/rVpB/6JbRP+HVkj/qZaP//n47v/Fv8D/ + ycTE//r3+P9paGjBAAAAVwAAADMAAAAYAAAACQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABARER+UkpLN083N/7KsrP/Szs//7+3m/5ZzZP+SVDr/pVY1/6ZTMP+mUjD/pVIw/59IJf+bQhz/ + m0Id/5tCHf+aQh3/mkIc/5lBHP+ZQBz/mEAb/5dAG/+XQBv/lj8b/5U+Gv+VPhr/lT4a/5Q+Gv+UPhn/ + kz0Z/5I+Gf+SPhr/kj4a/5E+Gv+SPhv/kj4b/5E/G/+RPxv/kkAd/5JBH/+SQiD/k0Mh/5NEI/+URiT/ + lUcm/5VIJ/+WSSj/lkoq/5dMLP+YTC3/l00u/5dOL/+XTzD/l1Ay/5lQM/+aUTT/mlI1/5tTNv+cVDf/ + nVU5/51VOf+fVzr/olg8/6NZPf+kWT3/pVo+/6ZbP/+nW0D/p1xA/6hcQf+oXEH/qVxB/6pdQv+rXUL/ + q11D/6xdQ/+tXUP/rV1D/61eRP+uXkP/rl5D/69eRP+vXUT/r15E/69eRP+wXkT/sF5E/7BeRP+wXkT/ + sF1E/7FdRP+xXUP/sV1D/7FdQ/+xXUP/sV1C/7FdQv+xXEL/sVxC/7BcQv+wXEL/sFtB/7BbQf+wW0H/ + sFtB/69aQP+uWkD/qFtC/5JXRf+NbmP/8O7j/97a2f+5srL/9PHx/62uruYPDw93AAAAOAAAACEAAAAM + AAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAxUry4uP/LxMT/tK6u/+vm4f/Nwr3/ + iVtI/59XOv+lVTP/p1Mx/6dUMf+mUzH/o1Au/55FIP+cQh3/nEIe/5tCHf+bQh3/mUIc/5lBHP+ZQBz/ + mEEb/5dAG/+XPxv/l0Aa/5Y/Gv+VPxv/lT8a/5U+Gf+TPRn/kz4Z/5I+Gv+TPhr/kz4a/5I+G/+SPhv/ + kz8c/5E/G/+SQBz/kkAd/5JBH/+TQyD/k0Mi/5NFJP+URiT/lUcm/5VIJ/+WSSr/k0Ym/4Q8Hf93Nhr/ + czUa/3Q1HP90Nh3/dTcd/3U4Hv92OCD/dzkg/3c6If93OSH/eDoi/4JELP+UUDb/oFc7/6NYPf+jWT3/ + pFk9/6VbPv+mWz//p1tA/6dcQf+oXEH/qVxB/6lcQv+qXUL/q11C/6tdQv+rXUL/rF1D/61dQ/+tXkP/ + rV5D/65dQ/+uXkP/rl5D/69eQ/+vXkT/r11D/69eQ/+vXUP/r11D/69dQ/+vXUP/r11D/69dQ/+vXEL/ + r1xC/69cQv+vXEL/r1xB/69cQf+vW0H/r1tB/69bQP+vWkD/rlo//65aP/+rWUD/nFlE/4NZTP/Kv7n/ + 9PDq/7iztP/e2dn/3t/f/zY2Np0AAABFAAAAKwAAABAAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAFgX1+R1c/P/7u1tf/BvL3/8e/p/6iPhP+NVT7/pVk6/6hVMf+oVDL/qFQx/6dTMf+nUzH/ + o00q/51EHv+cQx7/nEMe/5tCHf+aQhz/m0Ed/5pBHf+ZQRz/mUAb/5lBHP+XQBv/l0Ab/5Y/G/+WPxv/ + lT8a/5U+Gv+UPhr/lD4a/5M/Gv+TPhv/kz4b/5I/G/+SPxz/kj8c/5I/G/+SPx3/k0Ee/5NCIP+TQyH/ + lEQi/5RFJP+VRiX/lUgn/5VGJf+ZWT7/m3hr/5B1a/+OdGr/j3Rr/491a/+Rdmz/kXdu/5J4b/+UenD/ + lnxz/5iAdv+XfXL/dkw8/3g/KP+YUzj/olg8/6NZPf+jWT3/pFk9/6VaPv+mWz//pltA/6ZcP/+nXED/ + qFtB/6hcQf+qXUL/ql1C/6pdQv+rXUL/q11D/6xdQ/+sXUP/rV1D/61dQ/+tXkP/rV5D/61dQ/+uXUP/ + rl1D/65dQ/+uXUP/rl1D/65dQ/+uXUL/rl1C/65cQv+uXEL/rlxC/65cQv+uXEH/rlxB/65bQf+uW0H/ + rltA/61aP/+tWj//rVo//6tZQP+jWUL/h1ND/6CJgP/49uv/yMPD/8S/v//69vj/bm5uxQAAAFcAAAAw + AAAAFgAAAAgAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQHZKPkMfUz8//ta6u/9bS0f/p5+L/ + lG5f/5hZP/+pWTf/qlUz/6lVMv+pVDL/qFQy/6dTMf+nVDH/oUom/51CHf+dQx7/nEIe/5xDHv+bQh3/ + m0Id/5pBHf+aQR3/mUEc/5hBHP+YQBv/mEAb/5c/G/+WPxv/lT8b/5U/Gv+VPhn/lD8b/5M/Gv+UPxv/ + kz4b/5M/HP+TQBz/kj8b/5JAHP+TQB3/k0Ef/5NDIP+UQyH/lEQi/5VGJP+URiT/l0op/7qknf/Fxcf/ + xMLE/8TCxP/Fw8T/xcPE/8bExf/Hxcf/yMbI/8vJyv/NzM7/0M/Q/9bV1/+4q6f/cD4q/5FNM/+hVzv/ + oVg7/6JZPP+iWT3/o1k9/6RZPv+lWj7/pls//6ZbP/+nW0D/p1xA/6hbQP+oXEH/qVxB/6ldQf+pXEL/ + ql1C/6tcQv+rXEL/q11D/6xdQ/+sXUP/rF1D/61dQ/+tXUP/rV1D/61dQ/+tXUL/rV1D/61dQv+tXUL/ + rVxC/61cQv+tXEL/rVxB/61cQf+tW0H/rVtA/61aQP+sWj//rFo//6xaP/+sWT7/q1k+/6ZZQP+RVkP/ + i2ld/+nm3f/f2tj/uLKx//Lu7/+opqjlCwwMcQAAADUAAAAdAAAACgAAAAQAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAhICBBtbGy9NDKyv+2sK//6OPf/87Hwv+LXUr/ol1A/6lXNf+rVjP/q1Uy/6pUMv+pVDL/ + qFQy/6hUMf+mUjD/oEgj/55DHv+dQx7/nUMe/5xDHf+bQh7/m0Id/5tCHf+aQh3/mkEc/5lBHP+YQRz/ + l0Ac/5c/G/+WQBv/lj8a/5U+G/+VPxv/lD8b/5U/G/+UPhz/kz8c/5Q/HP+UQBz/k0Ac/5NAHf+TQB3/ + k0If/5RDIP+URCL/lEQj/5REIv+ZTi//wLi2/8K/v//BvLz/wbu7/8G7u//CvLz/wr29/8O+vf/Ev7// + xcDA/8fCwv/Iw8P/zcnJ/8vFxP91RDH/j0sx/6BWOf+gVjr/oVc7/6JYPP+iWDz/o1k9/6NZPf+kWT7/ + pVo+/6VaPv+mW0D/p1tA/6dbQP+nXED/qFxB/6hcQP+pXEH/qVxB/6pcQf+qXEL/qlxC/6tdQv+rXUL/ + q1xC/6tdQv+rXUL/rF1C/6xdQf+sXEH/rFxC/6xcQv+sXEL/rFxB/6xcQP+sW0H/rFtB/6tbQP+rW0D/ + q1pA/6taP/+rWj//q1k+/6tZPv+rWT7/p1g9/5hXQf+BV0n/x765//Dt5v+2sbH/49/e/9TS0/0jIyOM + AAAAPQAAACUAAAANAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAExMTXbLx8j/w76+/724uf/w8Of/ + sp2V/49YQf+pXkD/q1c1/6tXM/+rVzP/q1Yz/6pWM/+qVjL/qVUy/6hVMv+lUi//n0Yh/55DHv+dRB// + nUQe/5xDHv+cQx7/m0Id/5tCHf+bQh3/mkIc/5lBHP+YQRz/mEAc/5dAG/+XQBv/lz8b/5Y/Gv+VPxv/ + lUAb/5U/G/+UPhv/lD8c/5RAHP+UQBz/k0Ab/5RAHf+TQR7/lEMg/5RDIf+URCL/lEIh/5hNLv/CuLf/ + xcHC/8S/v//Dvr7/xL6+/8S/v//EwMD/xcDA/8bBwf/Hw8L/yMTE/8vFxf/Oysr/ycLC/3JCL/+OSy// + oFY4/59WOf+gVjr/oFc7/6FYO/+hWDz/olg8/6NZPf+kWT3/pFk9/6VaPv+lWz//pls//6ZbP/+nXED/ + p1xA/6hcQP+oXED/qFxB/6lbQP+pXEH/qVxB/6lcQf+pXEH/qlxC/6pcQv+qXEH/qlxB/6pcQf+qXEH/ + q1xB/6tcQf+qW0H/qltA/6pbQP+rW0D/qlo//6paQP+qWj//qlo//6pZPv+qWT7/qVk9/6lYPf+nWD3/ + nlhA/4FRQP+mk4v/9vXq/765uv/KxsX/7u7u/1NTU68AAABMAAAAKgAAABEAAAAHAAAAAgAAAAAAAAAA + AAAAAAAAAAAkJSYEY2JiodzW1f+6s7P/zsjI/+ro4/+bfG//mVxD/61fPv+uWDX/rVg0/61YNP+sVzT/ + q1c0/6tXNP+qVjP/qVYz/6lWNP+mUC3/oEUg/59EHv+eRB//nkQe/51DHv+cQx7/nEId/5tCHf+aQhz/ + mkEc/5lBHP+ZQRz/mEEc/5hAG/+XQBv/lj8b/5ZAG/+VQBv/lT8b/5U/HP+VPxz/lEAd/5VAHP+UQBv/ + lEEd/5RAHf+UQh//lEIg/5REIf+UQh//mU0t/8W7uf/Hw8T/xsHB/8bAwf/GwcH/xsDB/8bBwf/GwcH/ + x8HC/8jDw//JxMX/y8bG/8/Ky//Kw8P/ckQy/4hGLP+eVDf/nlU4/59VOP+fVjn/oFY6/6BXO/+hVzv/ + oVg8/6JYPP+jWTz/o1k9/6RaPv+kWj7/pVs//6VaP/+mWz//pls//6dbQP+nW0D/p1tA/6hcQP+oW0D/ + qFxB/6hcQf+oXEH/qVxB/6lcQf+pXEH/qVtA/6lbQP+pW0D/qVtA/6lbQP+pWj//qVo//6laP/+pWj// + qVk//6lZP/+pWT7/qVk9/6hZPf+oWDz/qFg8/6dYPP+hVz7/i1NA/4xxZv/t7OD/zsvK/7u1tf/69vf/ + dnV2ywAAAFwAAAAtAAAAFwAAAAgAAAADAAAAAQAAAAAAAAAAAAAAABITExmVlJTM19DQ/7ixsf/e19b/ + 4N3Y/5NqWP+iYEX/sFw8/69ZNv+uWDX/rlg1/61YNf+sWDT/q1c0/6tXNP+rVjT/qlYz/6lWM/+lTyv/ + oEUf/59EH/+fRB//nkMe/51EHv+dQx3/nEIe/5xCHf+bQh3/mkId/5pCHf+aQRz/mUEc/5hBHP+YQBv/ + lz8b/5ZAG/+WQBv/lkAc/5Y/HP+VQBz/lUAd/5VBHf+VQRz/lUEd/5VBHv+UQh//lUMh/5RBHv+ZTCz/ + xry6/8nFxv/HwsP/x8LC/8fCwv/IwsL/x8LC/8fDwv/Hw8P/yMPE/8rFxf/Lxsb/zsnJ/87IyP98VUX/ + fT4l/5tSNf+eVDf/nlU3/59VOP+fVjn/n1c5/6BXOv+gVzr/oFc7/6FYO/+iWDz/o1k8/6NZPf+kWj7/ + pFk+/6VaPv+lWj7/pVo+/6ZbP/+mWz//pls//6dbQP+nWz//p1s//6dbQP+nW0D/p1tA/6dbQP+nWz// + qFs//6haP/+oWj//qFo//6haPv+oWT7/qFo//6hZPv+nWT7/p1k+/6dZPf+nWTz/p1c8/6dYPP+nVzv/ + p1c8/6FWPf+RVED/g15Q/9vX0P/f29f/ta6u//Ds7f+qqanlERAQcgAAADEAAAAZAAAACgAAAAMAAAAB + AAAAAAAAAAAAAAAAGxwcNbe0tO7Szc3/uLOz/+Xi2//Fvbn/jl5K/6plSP+vWjn/sFk2/69ZNv+uWDb/ + rlg1/65YNf+tVzT/rFc0/6xXNP+rVzT/qlYz/6lWM/+kTir/n0Qf/59EH/+gRR//n0Qf/55EHv+dRB7/ + nEMe/5xDHv+bQx3/m0Id/5tBHf+aQRz/mUEc/5lBHP+YQBz/l0Ab/5dAHP+WQBz/lkAc/5Y/HP+VQB3/ + lkAd/5ZAHP+VQR3/lUEe/5VBHv+UQh//lEEe/5hKKP/FtrH/ysjJ/8jExP/Iw8P/yMPD/8jCwv/HwsL/ + yMPD/8jDw//Iw8P/ycTE/8rFxf/Lxsb/1NHS/5J2a/9tMxz/lE4y/55UNv+dVDb/nlQ3/55VN/+fVjj/ + n1Y5/59WOf+fVzr/oFc7/6FXO/+hWDv/olg8/6JZPP+jWTz/o1k9/6NZPf+kWT3/pFk9/6VaPv+lWj7/ + pVo//6VaPv+lWj7/plo//6ZaPv+mWj//plo//6daP/+nWj//p1o//6daPv+nWj3/p1k+/6dZPv+nWT7/ + plk+/6dZPP+nWTz/plg8/6ZXPP+mVzv/plc7/6ZXOv+lVjn/o1Y7/5ZUPv97UUL/vLOv/+jk3f+1r6// + 4d3d/8/OzvsjJSWIAAAAOAAAACAAAAALAAAABAAAAAEAAAAAAAAAAAAAAAAwLy9TwsDA/8/IyP+8tbb/ + 8fDn/7ypof+QW0X/r2VH/69bOP+wWjf/r1o2/69ZNv+vWTX/rlg1/65YNf+tWDT/rFc0/6xXNP+sVzT/ + q1Y0/6pWNP+lTir/oEUg/6BFH/+gRR//n0Qf/55EH/+dRB7/nUMe/5xDHf+bQh3/m0Id/5tCHf+aQR3/ + mUEd/5lBHP+ZQRv/l0Ab/5dBHP+WQRz/l0Ac/5dAHf+WQR3/lkEd/5ZBHf+VQR3/lUEe/5VBHv+UQR7/ + l0Uj/8Cpof/Lycv/yMPD/8jDw//Iw8P/x8LC/8fBwv/HwcH/x8LC/8jBwv/HwsP/yMPD/8jDw//Qzc7/ + s6Sf/2YzHv+GRSv/m1Iz/51TNf+dUzb/nVQ2/55UN/+eVTj/n1U4/59WOP+fVjn/n1Y6/59WO/+hVzr/ + oVc7/6FYO/+iWDz/olg8/6NYPP+jWDz/o1k9/6RYPP+kWT3/pFk9/6RZPf+lWT3/pVk+/6VZPv+lWT3/ + pVk+/6VZPv+lWT3/pVk9/6VZPf+lWD3/pVg9/6VYPP+lWDz/pVg8/6VYPP+lVzv/pVc7/6VXOv+lVjr/ + pVU6/6VWOf+iVDn/mlQ8/31OPf+smpP/8/Dl/7mztP/Tz8//397e/zc3OJ4AAABAAAAAJAAAAA0AAAAF + AAAAAQAAAAAAAAAAAAAAAFVUVHfVz8//xb29/8bBwP/q6eD/o4l//5ldRf+xZEX/sFs3/7FbN/+xWzf/ + sFo3/7BZNv+wWTb/r1k2/65ZNv+tWTX/rVg1/61YNf+sWDX/q1g1/6pXNf+mTir/oEUg/6BFH/+gRSD/ + n0Uf/55EHv+eRB//nUMe/5xDHf+bQx7/m0Md/5tCHf+bQh3/mkEd/5lBHf+ZQBz/mEAc/5dBHP+XQRz/ + mEAc/5dBHf+WQR3/lkEd/5ZCHf+WQh7/lkEe/5VBHv+TPxv/uJaK/8vLzf/Hw8P/x8LC/8fCwf/GwcD/ + xsDA/8XAwP/FwMD/xb/A/8XAwP/FwMD/xsHB/8jDxP/Oysr/e1ZI/240HP+SSy//nVI0/5xSNP+dUzT/ + nVM1/55UNv+eVDf/nlQ3/55UN/+eVTf/nlU4/55WOf+fVjr/n1c6/6BXOv+hVzv/oVc7/6JYO/+iWDv/ + olg8/6JYO/+iWDz/o1g8/6NYPP+jWTz/o1g8/6RYPP+kWDz/pFg8/6RYPP+kWDz/pFg8/6RYPP+kVzv/ + pFc7/6RXO/+kVzv/pFc7/6RXOv+kVjr/pFY5/6NVOf+kVTn/o1Q4/6JUN/+cVDr/gk47/5J7cv/r6d// + w76+/8O8u//z8vL/YWFktgAAAEwAAAAmAAAADwAAAAYAAAACAAAAAAAAAAAeHh8EYV9fmOHc3P+8t7b/ + z8vJ/+Lh2v+Wdmr/omFJ/7NjQ/+zWzj/sls4/7NbOP+yWzj/sVo3/7FaN/+wWjf/r1k3/69ZN/+uWTb/ + rVk2/61YNv+sWDb/q1g1/6tXNf+mTyr/oUYg/6FFH/+gRR//oEUf/6BFH/+eRB//nkQe/51DHv+cQx7/ + nEId/5tCHf+bQh3/mkId/5pBHf+YQRz/mEEc/5hBHP+YQBz/mEAd/5dAHf+WQR7/l0Ed/5ZBHf+WQR7/ + lkEe/5I5FP+vgnD/zMvN/8bBwv/FwMD/xMDA/8S+vv/Dvr7/wr6+/8K9vv/Cvbz/wr28/8O9vf/Dvr7/ + xL6+/83LzP+1p6L/YzId/3o9JP+VTjD/nFIz/5xSM/+cUjT/nVI0/51TNf+dUzb/nlM2/55UN/+eVTf/ + nlQ4/55VOP+eVTn/nlY5/59WOf+gVjr/oFc6/6BXOv+hVzr/oVc6/6FXO/+iVzv/olc7/6JXO/+iVzv/ + olc7/6JXO/+iVzv/o1c7/6NXOv+jVzv/o1c7/6NWOv+jVjr/o1Y6/6NWOf+jVTn/olU5/6JVOP+iVTj/ + olQ4/6JUOP+iVDf/oVM2/5xTOP+JUDv/g2hd/+Hf1v/Nx8b/urOy//j19f93d3bKAAAAVQAAACgAAAAS + AAAABwAAAAIAAAAAAAAAADc4OBFvbW2039vb/7u1tf/Y1NP/5ePc/5hvXv+lZUv/s2ND/7RcOv+0XDn/ + s1s5/7NbOf+yWzj/sVs4/7FaN/+wWjf/r1k3/69ZN/+uWTb/rVk2/61ZNv+tWDX/rFg1/6pYNf+nUCz/ + okYg/6FFH/+hRSD/oEUf/6BFH/+fRB//nkQe/51DHv+dQx7/nUMe/5xDHf+bQh3/m0Id/5pCHf+aQRz/ + mEEd/5hBHf+ZQR3/mEAd/5hBHf+XQR7/l0Id/5dCHf+WQh7/lDwX/6dpT//Hw8P/xcDA/8O9vv/Bvr7/ + wby8/8G7u//Bu7v/wLu6/7+6uv+/ubr/v7u7/8C7u//Au7v/wr29/9HOz/+dhnz/YCwW/39AJv+WTTD/ + nFAy/5xRMv+bUjP/m1I0/5xTNP+dUzX/nVM1/51UNv+dVDf/nVQ2/51UNv+eVDf/nlU4/59VOP+fVTj/ + n1Y5/6BWOf+gVjn/oFY5/59WOv+gVjr/oFY6/6FWOf+hVjr/oVY6/6FWOv+hVjr/oVY5/6FWOf+hVTn/ + oVY5/6FVOf+hVTn/oVU4/6FUOP+hVDj/oVQ3/6FUN/+hVDf/oVM2/6FTNv+hUzX/nFI3/4tQO/+AXk// + 4d/V/9fS0P+yq6v/8/Hx/4iIidkAAQFhAAAAKgAAABYAAAAIAAAAAgAAAAAAAAAAExQUHJyamsnY09T/ + vre3/97a1v/Szsv/k2ZT/6tnS/+2YkL/tV06/7VdOv+zXDr/s1s5/7NbOP+zWzj/slo4/7FaOP+xWjj/ + sFk3/7BZN/+uWTf/r1k2/65ZNv+tWTX/rFk2/6xYNf+oUS7/o0ci/6FGH/+hRR//oEUf/59FH/+fRR// + n0Qe/55EHv+dQx7/nUMe/5xCHv+cQh3/m0Id/5pBHP+aQR3/mUId/5lBHf+ZQh3/mUEd/5dCHv+YQh7/ + mEId/5hDHv+WQRz/m0oq/8G0sP/Cv7//wLu7/8C6uv+/urr/vri4/723t/+9uLf/vLe3/7y3t/+9t7f/ + vbe3/724uP+9uLj/wr6+/9HOz/+NcWX/YCsV/39BJv+WTS7/m1Ax/5tRMv+bUTL/m1Iy/5xSM/+cUjP/ + nFI0/5xTNf+dUzX/nFM2/51UNv+dVDb/nlQ3/55UN/+eVDf/nlU3/55UN/+eVTj/n1U4/59VOP+fVTj/ + n1U4/59VOP+gVTn/n1U4/6BVOP+gVTj/oFU4/6BVOP+gVTj/oFQ3/6BUN/+gVDf/oFQ3/6BTNv+gUzb/ + oFM2/6BTNv+fUjX/n1I1/59SNP+bUTb/jVA5/3lTRP/NycP/3dfT/7Kqq//q5+f/q6qs5xISEnEAAAAt + AAAAGQAAAAgAAAADAAAAAAAAAAAbHBwosK6v29jR0f+9t7j/4N3X/7+5tv+TYUz/r2pN/7ZhP/+2Xjr/ + tl46/7VdOv+0XTr/tFw5/7NcOf+zWzn/sls4/7JaOP+xWjj/sFk4/7BZN/+wWTf/rlk3/65ZNv+tWTb/ + rVk2/6xZN/+pUzD/pEok/6JFH/+hRSD/oUUg/6BFIP+fRR//n0Qf/55EH/+dRB//nUMe/5xDHv+bQx3/ + m0Id/5tCHf+aQhz/mUId/5pCHf+ZQR7/mUIe/5hBHv+YQh7/mEIe/5hCHv+WPhn/tJGD/8HAw/+9uLj/ + vLe3/7y3t/+7tbX/urS0/7q0tP+5tLP/ubS0/7mzs/+5s7P/urS0/7u1tf+7trX/xMDA/9XS0v+Qc2f/ + YCsU/39AJf+VTC7/m08w/5tPMf+bUDH/m1Ay/5tRMv+cUTP/nFIz/5xRNP+cUjT/nFI1/5xTNf+cUzX/ + nFM1/5xTNf+cUzX/nVM2/51TNv+eVDb/nlQ2/55UN/+eVDf/nlM3/55UNv+eVDf/n1Q3/59UN/+fVDb/ + nlM2/55TNv+eUzb/n1M2/55TNf+eUjX/nlI1/55SNf+eUjX/nlI0/59RNP+eUTP/nlEz/5tQNP+QUDf/ + dk08/7iyrv/e2tH/squr/+Tf3v/Cw8LyHyAgfAAAADAAAAAZAAAACQAAAAMAAAAAAAAAAB8fHzS8urrr + 2NLS/764uf/k4dn/uLCt/5dgSf+0bE//uGA9/7deOv+3Xjr/tl46/7ZdOv+0XTr/tFw5/7NcOf+zWzn/ + sls4/7JbOP+xWjj/sVk3/7FZN/+vWTf/r1k3/65ZNv+tWTb/rVk2/61ZNv+qVjL/pUsn/6JGIP+hRSD/ + oUYg/6FGH/+gRSD/n0Uf/59EH/+fRB7/nkQe/5xDHv+dQh3/nEMd/5tCHP+aQh3/mkId/5lCHf+aQR7/ + mUIe/5hCHv+YQh7/mUIe/5Y9F/+kY0j/vrm6/7q2tv+5tbX/ubOz/7izs/+3srL/t7Kx/7exsf+2sLD/ + tbCw/7WwsP+2sLD/uLKx/7mys/+5s7P/xcDB/9rX2P+Tdmr/XyoU/3s8I/+TSy3/mk8w/5tPMP+bTzD/ + mk8x/5pPMv+bUDL/m1Ey/5tQMv+bUjP/nFEz/5tSNP+bUjT/nFI0/5tSNP+bUjX/nFI0/5xTNf+cUzX/ + nVI1/51TNf+dUzX/nVM1/51TNf+dUjX/nVM1/51TNf+eUjX/nlI1/55SNf+eUjT/nlI0/55RNP+eUTT/ + nlE0/55RM/+eUTP/nVAz/51QMv+dUDL/m08y/5BPNv93Sjj/raaj/+Ld0/+zra7/3tja/8/NzvsmJiaG + AAAAMQAAABkAAAAKAAAAAwAAAAEAAAAAISEhQMG/v/rY09P/v7q6/+nl3f+yqab/m2BI/7dvUv+5YD7/ + uV87/7heOv+3Xjr/t106/7VdOv+1XTr/tFw5/7NcOv+zXDn/s1w5/7NbOP+yWzj/sls4/7FbOP+wWjj/ + r1k4/69ZN/+uWTb/rVk2/61ZNv+sVzb/p08q/6NHIf+iRiD/oUYg/6FFIP+gRSD/oEUf/59FH/+fRB7/ + nkQe/55DHv+dQx7/nEMd/5xCHf+bQh7/mkMd/5pDHv+aQh7/mUIf/5lDHv+ZQx7/mUId/5hAGv+0l4z/ + ubi6/7exsf+2sbH/tbCw/7Wvr/+0r6//tK6u/7Strf+0rq7/tK6u/7Ourv+0rq7/ta+w/7eysv+3sbL/ + xcHC/+De3/+iiYH/YCwW/3Q3Hv+PSCv/mU0u/5pOL/+ZTzD/mk8w/5lPMP+aUDD/mlAy/5tQMv+aUDL/ + m1Ay/5tRMv+bUTL/mlEz/5tRM/+bUDP/m1Ez/5tRNP+bUTP/m1E0/5xRNP+cUTT/nFEz/5xRM/+cUTT/ + nFE0/5xRNP+cUTP/nFEz/5xQM/+cUDP/nFAz/5xQMv+cUDL/nFAy/5xPMv+cTzH/nE8w/5xPMP+bTjH/ + kU41/3dHNP+ooJ3/4+DV/7Otrf/a09P/1NLS/yorKo4AAAAyAAAAGwAAAAoAAAADAAAAAQAAAAAjIyNJ + w8HB/9fS0v/Aurn/6+je/6+koP+eX0b/unBS/7lhPP+6Xzv/uF87/7hfO/+3Xjr/t146/7ZeOv+2Xjr/ + tV06/7VdOv+1XTr/tF06/7NcOf+yXDn/slw5/7FcOf+xWzj/sFs4/69aOP+uWjj/rlk3/65ZN/+tWTf/ + qVMw/6RJJP+iRSD/okUg/6JGIP+hRSD/n0Ug/59EH/+fRB//nkQf/55DHv+dQx7/nUMe/5xDHf+bQx7/ + mkMe/5tDHv+bQh//mkMe/5lCH/+ZQx//lz0X/6RgRP+4s7P/ta+w/7Surv+zrq7/s62t/7Ksrf+yraz/ + sqys/7GsrP+xrKz/says/7GsrP+zrKz/tK+v/7exsf+3sbH/xMDB/+bl5/+3pZ3/YzMf/24yGv+MRin/ + mEwt/5pNLv+aTi7/mU4v/5lOL/+aTy//mk8w/5pPMf+aTzD/mk8w/5pPMf+aUDH/mk8y/5pPMv+aUDL/ + mlAy/5pQMv+aTzH/mlAy/5pQMv+aUDL/mlAy/5tQMv+bUDH/m1Ay/5tQMv+bUDL/m1Ay/5tPMf+bTzH/ + m08x/5tPMf+bTzH/m04w/5tOMP+bTjD/m00v/5pOMP+RTTP/eEQw/6Oalv/m4tb/s62t/9bP0f/W1Nb/ + LS4ulAAAADQAAAAaAAAACgAAAAMAAAABAAAAACMjI07FwcH/2NLS/8C7vP/t6uD/raCb/6BfRf+9c1X/ + umI+/7tgO/+6YDv/uWA8/7hgO/+4Xzv/t187/7dfO/+3Xjv/t146/7ZdOv+1Xjr/tF06/7NdOv+zXDr/ + slw5/7JbOf+wWzn/sFs5/7BaOP+vWjj/rlo3/65ZN/+uWjj/q1Yz/6ZMJ/+jRiD/okYg/6JGIP+hRiD/ + oEUg/6BEIP+fRR//n0Qe/55EH/+dQx7/nUMe/51DHv+cQx7/m0Qe/5tCH/+bQh//mkMf/5pCH/+aQx3/ + mT4X/6+HeP+1tLf/sqys/7KsrP+xrKz/saur/7Gqqv+wq6v/sKqq/6+qqv+vqqr/sKqq/7Grq/+zrKz/ + tK+v/7exsf+3srL/w76//+nq6//Lv7v/bD8t/2kuFf+JRCf/l0ss/5pNLf+ZTS3/mU0u/5lOLv+ZTi7/ + mU4v/5lOL/+ZTi//mU4w/5lOMP+ZTy//mU8w/5lPMP+ZTzD/mE4w/5lOMP+ZTjD/mU4w/5lPMP+ZTzD/ + mU4x/5pPMP+aTzD/mk8x/5pOMP+aTjD/mk4v/5pOL/+aTjD/mk0v/5pNL/+aTS//mk0v/5pNL/+aTC7/ + mEwu/5FMMP92Qy//oZeT/+jk1v+0rK7/083N/9jX1/8uMDCXAAAANAAAABoAAAAKAAAAAwAAAAEAAAAA + IyMjUcXBwf/Y09L/wby8/+/s4f+rnZf/omBF/791V/+8Yj7/vGE9/7tgPf+7YD3/uWA8/7lgPP+4YDv/ + t187/7dfO/+3Xzv/t187/7ZeOv+1Xjr/tV06/7RdOv+zXTr/s1w5/7JcOf+xXDn/sVs4/7BaOP+vWjf/ + r1o4/65ZN/+uWTf/rVg2/6hRLf+kSCP/o0Uf/6NGIP+iRiD/oUYg/6BFIP+fRSD/n0Uf/59EH/+eRB// + nkMe/5xCHv+bRB7/m0Qe/5xDHv+bQx//m0Mf/5pDIP+ZQRv/nEck/7Gbk/+ysLL/sKur/7Crq/+wqqr/ + r6mq/6+pqf+wqan/r6mp/6+pqf+vqan/sKqq/7Grq/+zra3/tbCw/7izs/+6tbX/wr29/+jo6v/c1dL/ + dk08/2YrE/+IQyb/l0sr/5lMLP+YSyz/mEwt/5hMLf+YTC3/mE0u/5lNLv+ZTS3/mE0u/5hNLv+ZTS7/ + mU0v/5hNLv+YTi7/mE4u/5hNLv+YTS7/mE0u/5hNLv+YTS7/mE0v/5lNLv+YTS7/mE0v/5lNL/+ZTS7/ + mU0u/5hNLv+ZTC7/mUwu/5hMLf+YSy3/mEst/5hLLf+XSy3/kUsw/3ZCLP+elI//5+TV/7Osrf/Rysz/ + 2dbX/zAwMZkAAAA0AAAAGgAAAAoAAAADAAAAAQAAAAAjIyNSxcLC/9nU1P/Cvb7/7+zh/6qblf+kYEX/ + wHda/75iPv+8YT7/vGE+/7xhPf+6YDz/umA8/7pgPP+5YDz/uGA7/7dfO/+3Xzv/t187/7deOv+2Xjr/ + tV06/7RdOv+0XTr/tF05/7JcOf+yWzn/sVs4/7FbOP+wWzj/r1o3/65aN/+vWTf/rlo4/6tVM/+mTCf/ + o0Yg/6NGIP+iRiD/oUYg/6BFIP+gRR//oEUf/59EH/+fRB//nkQe/51EHv+cRB7/nEQe/5xDHv+cQx// + m0Mf/5tEIP+ZPxn/olY3/7Wppv+wrrD/r6mp/6+pqf+vqan/r6mp/6+pqf+uqan/rqmp/6+pqf+vqan/ + saqr/7KsrP+0rq7/t7Gx/7u2tv++uLn/w76+/+jn6P/j3tv/dk09/2YrEv+KQyb/l0oq/5hLKv+XSyv/ + mEsr/5hLLP+YTCv/l0ws/5dMLP+XTCz/mEwu/5hMLf+XTC3/l0wt/5hMLf+XTC3/l0wt/5dMLf+XSy3/ + l0wt/5dMLf+XTC3/l0wt/5dMLf+XTC3/l0wt/5hLLf+YSy3/mEst/5hLLP+YSyz/mEss/5dLLP+YSyz/ + mEst/5dLLP+RSzD/dUEs/52Tj//n49b/s66s/9DJyv/Y1tj/MDAxmQAAADMAAAAaAAAACgAAAAMAAAAA + AAAAACQjI1HGw8P/2tXU/8O+vv/u7eH/q5uV/6VhRv/CeFv/v2RB/75iPv+9Yj7/vWI+/7xhPf+7YT3/ + u2A9/7pgPf+5YDz/uGA8/7hgPP+3YDv/t147/7deO/+2Xjr/tl46/7RdOv+0XTr/tFw6/7NcOv+yXDr/ + sVs5/7FbOf+wWjj/sFo4/69aOP+uWTf/rlk4/61ZNv+pUi7/pUkk/6NFH/+iRiD/okUg/6FFIP+gRR// + oEUg/6BFH/+eRB//nkQe/51EHv+dRB//nEMf/51DH/+cQx//nEMg/5tEH/+ZPhf/pWFE/7Wrqf+wrrD/ + r6io/6+pqf+vqan/r6mp/66pqf+uqKj/rqmp/6+pqf+vqqr/says/7Surv+3sbH/u7W2/7+6uf/Cvb3/ + xsHA/+np6v/l4N7/dEs5/2gsE/+LRCb/l0op/5hKKf+XSir/mEsq/5dKKv+XSir/l0or/5dLK/+WSyz/ + lksr/5ZLK/+WSyv/l0sr/5dLLP+WSyv/lkss/5dLLP+XSyz/lkor/5ZLLP+WSiz/lkss/5ZLLP+WSyv/ + lkor/5ZKK/+WSir/lkor/5ZKK/+WSiv/l0or/5dLLP+XSyv/lksr/49LL/90QCv/nJKO/+Xh0v+yq6v/ + 0cvL/9jW1v8wMDCYAAAAMgAAABoAAAAKAAAAAwAAAAAAAAAAJCMkTMbDxP/c1tX/w76//+7s4v+tnZj/ + pmJH/8J6Xv/AZ0T/v2I//75iP/++Yj7/vWI+/7xhPf+7YT3/u2A9/7pgPf+6YDz/uWA8/7hgPP+4Xzv/ + t187/7dfO/+3Xzr/tl46/7VdOv+1XTr/s1w6/7NdOv+zXDr/sls5/7JbOf+xWzj/sFs4/69aOP+uWTf/ + rlk3/65aOP+sVzX/qE8s/6RII/+iRh//okYg/6JGIP+hRSD/oEUf/6BFH/+fRB//n0Qf/55EHv+dRB// + nUMf/5xDH/+dQx//nEMf/5tEIP+ZPBb/pWBD/7appv+ysLL/r6mp/6+pqf+vqan/rqmp/6+pqf+vqan/ + r6mp/6+qqv+yrKz/tK6u/7eysv+7tbX/v7m5/8O+vv/GwcH/ysXF//Dw8f/d1NH/ajso/28wFv+ORSX/ + l0ko/5dJKP+XSSj/lkkp/5ZJKf+XSSn/lkkp/5ZJKf+WSir/lkoq/5ZJKv+WSir/lUkq/5ZJKf+WSir/ + lkoq/5VJKv+VSSr/lUkq/5VJKf+VSSr/lUkq/5ZJKv+WSSr/lkkq/5ZKKv+WSir/lkor/5ZKK/+WSiv/ + lkor/5ZKK/+WSiv/jkou/3NBLf+elZH/5N7R/7KrrP/Sy8z/1tXW/y8vL5UAAAAxAAAAGQAAAAkAAAAD + AAAAAAAAAAAjIiNGx8TE/93X1//EwMD/7uvh/66fm/+nY0n/wntf/8JrSP/AY0D/v2I//79jP/++Yj7/ + vmE+/7xhPf+8YT3/vGA9/7tgPP+6YDz/umA8/7lgPP+4YDz/t187/7dfO/+3Xzr/tl46/7ZdOv+1Xjr/ + tF06/7RdOv+zXDr/s1w5/7JcOf+xWzn/sFs4/7BaOP+vWjj/rlo3/65aOP+tWTj/q1Yz/6dOKv+jSCL/ + okYg/6JGIP+hRiD/oEUf/6BFH/+fRB//n0Qe/55EHv+dRR//nUUf/51DH/+cRB//nEQg/5xEIP+aPhf/ + pFc3/7Oel/+zs7X/rqmp/6+pqf+vqan/r6mp/6+pqf+vqan/saur/7OtrP+1sLD/uLKy/7y2tv+/urr/ + w7+//8jDw//Lxsb/0MvL//f4+f/OwLv/YCwW/3c3G/+SRiX/l0gn/5ZIJ/+WSCf/lkgn/5ZJKP+WSSj/ + lkgo/5ZJKP+VSCj/lUgp/5VJKf+VSCj/lUgo/5VIKP+VSCj/lEgp/5VJKf+VSCj/lUgp/5RIKf+USCn/ + lEgp/5VIKf+VSCn/lUgp/5ZJKv+WSSr/lkkq/5ZJKv+WSir/lkor/5VKK/+NSi//ckIv/6CYlv/g3M3/ + sqqq/9TNz//U1NX/LC0tjwAAAC8AAAAYAAAACQAAAAMAAAAAAAAAACIiIjzGxMT43tra/8TAwP/t6d// + saSg/6dkSv/Ce2D/xG5N/8BkQP/AZD//wGM//79iP/+/Yj7/vmI+/71iPv+8YT3/u2E+/7tgPf+7YDz/ + umA8/7lgPP+4Xzv/t187/7dfO/+3Xzv/t186/7ZeOv+2XTr/tV06/7RdOv+zXDn/s1w6/7NcOf+yWzn/ + sFs4/7BbOP+vWzj/r1o3/65aN/+uWTf/rlk3/6tVMv+mTir/o0ci/6JFH/+hRR//oUYg/6FFH/+gRB// + n0Qf/59FH/+eRR//nUUf/55FIP+dRCD/nEQg/5xEIP+aPhj/oE0q/7KWi/+0tLf/r6mq/6+pqf+vqan/ + r6qq/7Crq/+xrKz/s66t/7awsP+5s7P/vLe3/8C7u//EwL//ycTE/83IyP/Pysv/19PT//7///+xmpH/ + XCQM/4I9IP+VRib/lkcm/5VHJv+VRyb/lkcm/5VIJ/+VRyf/lkgn/5VHJ/+URyf/lUcn/5VHJ/+VRyj/ + lUcn/5RHJ/+USCj/lEgn/5RIKP+VSCj/lEgo/5RIKP+USCj/lEgp/5RIKf+VSCn/lEgp/5VIKf+VSCn/ + lUgp/5ZJKv+WSSr/lEkr/4tJL/9wQzH/pJ2b/9vXzP+vqar/19HR/9PR0/8pKSuHAAAAKgAAABcAAAAI + AAAAAgAAAAAAAAAAHx8fMcK/wOnf29v/x8HB/+nm3v+6rKf/p2VL/8F5Xf/FclL/wWVA/8BlQP/AZD// + wGM//79jP/+/Yj//vmI+/71iPv+9Yj7/vGA9/7xgPf+7YDz/umA8/7lgPf+5YDz/uWA8/7hgPP+4Xzv/ + t187/7deO/+2XTr/tV47/7VdOv+0XTr/tFw6/7NcOf+yXDn/sVs5/7FbOP+wWzj/r1o3/69aOP+uWjj/ + rlk4/61ZN/+rVTL/pk4q/6NHIv+iRR//okUf/6FFIP+gRSD/n0Qf/59EH/+eRR//nkUf/55EIP+eRCD/ + nUQg/5xEIP+bQBr/nkgi/7OTh/+1s7X/r6qq/6+qqf+xq6v/squs/7Osrf+0r67/t7Kx/7q1tf++uLn/ + wry9/8XAwP/KxMX/zcnJ/9LNzf/Tz8//4t/f//v6+v+HY1T/ZykP/4xBIv+XRyT/lUcl/5VGJv+VRiX/ + lUcm/5VHJf+VRyb/lUcm/5RHJv+URib/lUcn/5VHJ/+VRyf/lEcn/5RHJ/+URyf/lEcn/5NHKP+USCf/ + lEcn/5RHKP+TSCf/k0go/5RIKf+USCj/lEgp/5RIKf+VSCn/lEgp/5VIKf+TSCr/iEgv/29EM/+po6H/ + 1tLJ/6+pqf/b1df/zcvM+yUmJn4AAAAmAAAAFAAAAAcAAAACAAAAAAAAAAAdHR0jtLO02eHd3f/HwsL/ + 5+Td/8O3s/+lZUv/wHhc/8h4WP/DZUH/wmVB/8FlQP/BZED/wWRA/8BjQP/AY0D/v2M//75jP/+9Yj// + vWI//7xiP/+7YT7/u2E+/7phPf+6YD3/umA9/7pfPf+5Xzz/uF88/7dfPP+2Xjv/tl47/7VeOv+1Xjr/ + s145/7NdOv+yXDn/slw5/7FcOf+wWzj/sFo4/69aOP+uWTf/rlk3/61aOP+tWTf/q1Uz/6dOK/+kSSP/ + oUYf/6FFH/+gRSD/oEUf/59EH/+eRSD/nkUf/55FIP+eRCD/nkQg/51FIf+bQhz/nkQe/7KOfv+0tLb/ + sKur/7KsrP+zra3/tK6v/7ewsf+6s7T/u7a2/7+7uv/Ev7//yMLD/8vHx//Pysr/087O/9bS0v/X0tL/ + 8fHy/+Lb1/9nNiD/eDYZ/5NFJP+WRiT/lkYk/5ZHJf+VRib/lUcm/5VHJv+VRyX/lEcm/5VGJv+VRyb/ + lEcm/5VHJv+URyb/lEcn/5RHJ/+URyf/lEcn/5RHJ/+URyf/lEcn/5NGJ/+TRyj/lEco/5RIKP+TSCj/ + lEgo/5RIKP+USCj/lEgp/5FIKv+FSC7/a0U1/7Svq//Vzsf/rqio/9/b2//CwcLxHR4dcwAAACMAAAAR + AAAABgAAAAEAAAAAAAAAAG9wcRqRkZLF49/f/8fCwv/l49//zczI/59mUf+/dVj/y31f/8RmQf/DZkL/ + w2ZB/8NlQf/CZUH/wWVB/8FlQP/AZUD/v2Q//75kQP++Yz//vWM//71iP/+8Yj7/u2I+/7phPf+6YD3/ + umA9/7pgPf+5Xzz/uF88/7dfPP+2Xjz/tl47/7ZeO/+1Xjv/tF46/7ReOf+zXTn/sl05/7FcOf+xXDn/ + sVs5/7BaOP+vWjf/rlo3/65ZN/+uWTj/rVk4/6tXNP+oUC3/pEol/6JGIP+hRR7/oEQf/59EH/+fRSD/ + nkUg/59FIP+eRCD/nkQg/51FIf+bQhz/nkMd/7KPgv+2tbj/sq2t/7Our/+1sbH/uLKz/7y2tf++ubn/ + wby8/8XAwP/KxcX/zcjI/9DLy//U0ND/2NPT/9nV1f/e2tr//////6mQhv9iJg3/iUAh/5ZGJf+WRiT/ + lkYk/5ZGJf+VRiX/lUYm/5VGJv+VRyb/lUcm/5VHJv+URyX/lEYl/5RHJv+URyb/lEYm/5RGJv+USCf/ + lEcn/5RHJ/+TRyb/k0cn/5NHJ/+TRyf/k0Ym/5NHJ/+TRyf/k0cn/5RIJ/+USCj/kEgq/4JGLf9pSjz/ + wsG7/9DLxv+spqb/6OPk/6inqeQQERFkAAAAHgAAAA4AAAAGAAAAAQAAAAAAAAAAMzMzD3Rzc67t6Oj/ + yMLC/+Pg3//f3tf/p25Y/75xUv/NhGf/xWdC/8NnQv/DZ0L/w2ZC/8NmQv/DZkL/wmVB/8FlQf+/ZUD/ + wGRA/79jQP+/Yz//vWM//71iP/+8Yj//vGI+/7thPv+6YD3/umA9/7pgPP+5Xz3/uF88/7hfPP+4Xjz/ + tl47/7ZeO/+1Xjv/tV46/7ReOf+zXTn/s105/7JcOf+xXDn/sVs5/7BbOf+wWzj/r1o3/65aN/+tWTf/ + rVk3/61ZN/+sVzX/qVMw/6VNKP+iRyL/oUQe/6BEHv+fRR//n0Ug/55FIP+fRSD/nkQg/55FIf+cQRz/ + n0Yi/7OWi/+2trj/trCw/7izs/+7tbX/vbi4/8C7u//Ev7//yMPD/8vGxv/Pysr/087O/9bR0f/Y1NT/ + 3NfX/9zX1//t6+v/7+vq/3BALf94NBj/lEUk/5dGJf+WRiT/lkYk/5ZGJP+WRST/lUYl/5VGJf+VRyb/ + lUYm/5VGJf+VRyb/lEcl/5RHJf+URib/lEYm/5RGJv+URyb/lEcm/5RHJv+TRyf/k0cn/5NHJ/+TRyb/ + k0cm/5JGJv+SRib/kkYn/5JGJ/+PRyn/fkUt/3RYTP/QzsX/ycTC/62npv/x7e3/hoWG1AAAAFMAAAAb + AAAADAAAAAQAAAABAAAAAAAAAAAdHh4BZWNjkvHs7P/Nycn/2tfV/+Pi2f+vdV7/umxP/9KMcf/Ia0f/ + xWdC/8RnQv/DZ0L/w2dC/8NmQv/DZUH/wmVB/8JlQf/BZED/wGRA/8BkQP++Yz//vmM//71iP/+8Yj// + vGI+/7xiPv+7YT3/umE9/7phPf+6YDz/uWA9/7lgPP+3Xjv/t187/7deO/+1Xjv/tV47/7ReOv+0Xjr/ + s106/7JdOf+xXTn/slw5/7FcOf+wWzn/sFs4/69aN/+tWjf/rVk3/61ZN/+tWTf/rFg2/6pVM/+nUC3/ + o0om/6FGIP+gRR//n0Uf/59FIP+fRSD/nkQg/55FIP+cQBr/oU4t/7ippf+6t7j/urW1/724uP/Aurv/ + w76+/8fCwv/Lxsb/zsnJ/9HMzP/V0ND/19PT/9rV1f/d2Nj/3tra/+Dc3P//////qpCG/2YmDP+NQSH/ + l0Yk/5ZGJP+WRyT/lkYk/5ZFJP+VRiT/lkYk/5VGJf+VRiX/lUYl/5VGJv+VRiX/lUcl/5RGJf+URiX/ + lEYl/5RGJv+TRib/k0cm/5NGJv+TRib/k0Ym/5NHJv+SRiX/k0Ym/5JGJv+SRib/kUYm/4xGKP94Qyz/ + fWVa/9DNwv/Burr/tKyu//Tw8P91dXXEAAAARAAAABcAAAALAAAABAAAAAAAAAAAAAAAAAAAAABaWVpu + 5uLi/9XQ0P/Uz8//7+7l/6mCdP+5aUr/0Ipw/8t1VP/GZ0P/xWdC/8RnQv/EZ0L/w2dC/8NmQv/DZkL/ + w2VB/8JmQf/BZUD/wGRB/8BkQP+/ZED/v2NA/75jP/+9Yz7/vWM+/7xhPv+7Yj7/umE+/7phPf+6YD3/ + umA9/7lgPf+4Xzz/t147/7deO/+2Xjv/tV46/7VeO/+0Xjr/tF06/7JeOf+zXTn/sVw5/7FcOf+xWzn/ + sVw5/7BbOP+vWjj/rlo4/65ZN/+tWDf/rFg2/6xZN/+rVzX/qVQy/6ZPK/+jSib/oEYh/59FH/+fRB// + n0Qg/55FIP+cPhf/rG1W/767vP++ubn/wbu7/8O+vv/GwcH/ycTE/83IyP/Qy8z/1M/P/9bS0v/Z1dX/ + 29fX/97a2f/g29v/39vb//Hw8f/j3Nr/aDMc/4I6HP+XRST/l0Yj/5ZFJP+WRiT/lkYk/5VGJP+WRiT/ + lUYk/5VFJP+URiT/lUYk/5RGJf+VRiX/lEYl/5RGJf+URiX/lEYl/5RGJf+TRiX/k0Ym/5NGJf+TRib/ + kkUl/5NFJf+SRSX/kkYm/5JGJf+RRib/ikYp/3E/Kv+GeHP/19PF/7mysv+7t7b/7uvr/19eXq0AAAA4 + AAAAEwAAAAkAAAADAAAAAAAAAAAAAAAAAAAAADIyMkvT0ND/4t7e/83IyP/39uz/tJ6W/7poSf/Nhmv/ + z4Fj/8dnQ//GZ0L/xmdC/8VnQv/FZ0L/xGdC/8NnQv/DZkL/w2ZC/8JmQf/CZUH/wWVA/8BlQf/AZED/ + v2Q//75jP/++Yz//vWM//7xiPv+7Yj7/umI+/7pgPf+6YT3/umA9/7lgPf+5Xzz/uF87/7dfO/+3Xjv/ + tl47/7VeO/+1Xjr/tF45/7RdOf+yXTn/sl05/7FcOf+xXDn/sVw5/7BbOf+vWjj/r1o4/65ZOP+tWTb/ + rVg2/61XNv+sWDb/rFg2/6pXNf+oVDL/pVEu/6JMKP+gSCT/n0Ug/55DHv+gRSH/u6Sc/8G/wf/Dvr7/ + xsHB/8nFxP/NyMj/0MvL/9POzv/W0dH/2NPT/9rX1//c2dn/39rb/+Hd3f/h3d3/5uPj//39/f+NaFn/ + cy0R/5VEIv+YRiT/l0Uj/5dFJP+XRSP/lkUk/5ZGJP+WRiT/lUYk/5ZGJP+VRST/lUUk/5RGJP+VRiX/ + lEYl/5RGJf+URSX/lEUl/5NGJf+TRiX/k0Yk/5NGJf+TRST/k0Uk/5JFJf+SRSX/kkUk/5BFJv+HRSr/ + bUAs/5yVk//Z1cj/r6mq/8vGxv/a2dn/NDQ0kQAAACgAAAATAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAA + MzU1K8G+v+rp5OT/y8fH//Ht5//AtbL/sWZJ/8yBZP/WkXb/yGhD/8hoQ//HZ0P/xmdC/8ZnQ//FZ0L/ + xGdC/8NnQv/DZ0L/w2ZC/8NmQv/CZUH/wWVB/8FlQP/AZUD/wGQ//79jQP+9Y0D/vmI+/71iPv+7Yj7/ + u2E+/7phPv+6YT3/umE9/7pgPf+5Xzz/uF88/7hfPP+3Xjv/t147/7VeOv+1Xjr/tF46/7ReOv+zXTr/ + sl05/7FdOf+xXDn/sVs5/7BcOf+wWzn/sFo4/69aOP+tWTf/rlg3/6xYNv+sWDb/rFg2/6tXNv+rWDb/ + qVc2/6hWM/+lUi//pE4r/55BHP+0gGz/ysnL/8fCwv/JxMT/y8bH/8/Kyv/Szc3/1NDQ/9fT0//a1tb/ + 3djY/97a2v/g3Nz/4t7e/+Pf3//i3t7//f///7aflv9pKA3/kEEg/5hFI/+XRSP/l0Uj/5dFI/+XRSP/ + lkUj/5ZFI/+WRiT/lkYk/5VGJP+VRSP/lUUk/5VGJP+URST/lEUk/5RGJf+URiT/lEUl/5RFJf+TRSX/ + k0Uk/5NFJP+SRSX/kkUk/5JFJP+SRST/jkUm/4JEKv9nRDT/rKmn/8/Jw/+spqX/3NbW/8vJyvkiIiN3 + AAAAHgAAABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAABoZ2gXlZOUxO7p6f/Lx8f/7Ojm/9bV0P+ybFD/ + yHhY/92jjf/Lbkv/yWlD/8hpQ//HaEP/x2dD/8ZnQv/FZ0L/xWdC/8RnQv/EZ0L/w2dC/8NmQv/CZkL/ + wmZB/8FlQf/BZUD/wGVA/79kQP+/Yz//vmM//71jP/+9Yj//vGE+/7tiPv+6YT7/umA9/7pgPf+5YD3/ + uV88/7hfPP+4Xjv/t147/7ZeO/+1Xjv/tV46/7ReOv+zXjn/s106/7JdOf+xXTn/sVw5/7FcOf+xWzn/ + sFs4/69bOP+vWjj/rlk3/61ZN/+tWDb/q1c2/6tXNv+rVzX/qlc2/6lYNv+pWDb/p1Iw/7NuVP/Y09P/ + 2NXV/9bT0//V0ND/1dDQ/9XQ0P/X0tL/2dXV/9vX1//e2dn/39vb/+Hd3f/i3t7/49/f/+Pe3v/z8/T/ + 3NLO/200HP+LPh3/mUYj/5dFI/+XRSP/l0Uj/5dFI/+WRSP/lkUj/5ZFI/+WRSP/lkUj/5ZFI/+VRiT/ + lUYk/5REJP+URCP/lEUk/5RFI/+URST/lEUj/5NFJP+TRST/kkUk/5JFJf+SRST/kkQk/5JFJP+MRCb/ + fEMq/3FTR//Ewbn/ycO//6ukpP/o5OX/paSl4A0NDlsAAAAXAAAADAAAAAQAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAABtbWyY9fLy/9HOzv/f29z/6urh/6l2Yv/HcE//256H/9OBYv/KaUT/yWlE/8lpRP/IaEP/ + x2hD/8ZoQ//FaEL/xWdC/8VnQv/EZ0L/w2ZC/8NmQv/DZkL/wmVB/8FlQf/BZUH/wGVA/8BkQP+/Y0D/ + vmM//71jP/+9Yz//vGI//7tiPv+7YT3/umE9/7phPf+6YD3/uV89/7lfPP+4Xzz/t148/7deO/+2Xjr/ + tl47/7ReOv+0Xjr/s145/7JdOv+yXTn/sVw5/7FcOf+xXDn/sFs5/7BbOf+vWjj/rlo4/61ZN/+sWDb/ + rFg2/6xXNv+rVzX/qlc2/6pXNv+pVTP/rF4+/9jOy//f3t7/4N3d/+Hd3f/i3t7/4t7e/+He3v/h3d3/ + 4Nzc/+Hd3f/h3d3/4t7e/+Pf3//k39//5N/f/+3q6//w7Or/cDsk/4U6Gv+YRSL/mUUi/5hFIv+XRSP/ + l0Qj/5ZEI/+XRSL/lkUj/5ZFI/+WRCP/lkQi/5ZFI/+VRSP/lUUj/5VFI/+URSP/k0Uj/5NEI/+TRCP/ + k0Qj/5JEI/+TRCP/kkUj/5JEI/+SRCP/kEMi/4pEJ/90Pyn/fWxm/8/Nvv+8tbT/ta2t//Pv8P9yc3TE + AAAAPwAAABQAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNTVWbl4uP/39vb/9PQ0P/5+O3/ + sZWL/8ZtS//Xk3n/2pl//8tqRf/KakX/yWlE/8hpRP/IaUP/x2hD/8doQ//GaEL/xWdC/8VnQv/DZ0L/ + w2dC/8NnQv/DZkL/w2VC/8JlQf/CZUH/wGRB/8BkQP/AY0D/vmRA/75jP/++Yj//vWI+/7xiPv+7YT7/ + u2E+/7thPv+6YT3/umA9/7lfPP+4Xzz/uV88/7hfO/+3Xjv/tl47/7VeO/+0Xjr/tF46/7NdOf+yXTn/ + sV05/7FcOf+xWzn/sVw5/7BbOf+vWjn/r1o4/65ZN/+tWDb/rVg2/6xXNf+rVzX/q1c1/6pVM/+sXT3/ + 2c3I/+Lh4v/i39//4+Dg/+Xi4v/m4+P/5+Tk/+jl5f/p5eX/6ebm/+nm5v/o5eX/6OTk/+fk5P/n4uL/ + 6ebm//f29v+EV0T/gDYX/5lFI/+ZRSP/mEUi/5hFIv+YRSL/l0Qi/5ZEIv+WRCL/lkQi/5ZDIv+VQyL/ + lUQi/5VEIv+VRCL/lUQi/5REIf+URCL/lEQj/5NEI/+TRCP/kkQk/5JFJP+TRCX/k0Ul/5NGJ/+RRyj/ + iUgu/25BLv+TjIv/08/C/7Grq//Evr//6ujq/1FRUZ4AAAAsAAAAEQAAAAgAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAISEhNMzKye7v7Oz/z8rL//Xy7v/IvLf/vGtM/9GGaf/ltaP/zW1I/8xqRf/LakX/ + ympE/8lpQ//JaUP/yWhD/8hoQ//HaEP/xmdD/8VnQv/FZ0L/xGdC/8RnQv/DZkL/w2ZC/8NmQf/CZUH/ + wWVB/8FkQf/AZED/v2M//79kP/++Yz//vWM//7xiP/+8YT7/u2E+/7phPf+6YD3/umA9/7pgPP+3Xzz/ + tl47/7hfO/+3Xjv/tl47/7VeO/+1Xjr/tF46/7NeOf+zXTn/sl05/7FcOf+xXDn/sVw5/7BbOf+wWzn/ + r1s4/65aN/+tWTf/rVk2/6xYNv+sVzX/q1Uz/61cO//bzsv/5eTl/+Ti4v/l4uL/5+Tk/+jl5f/o5eX/ + 6Obm/+rn5//q6Oj/6+jo/+vo6P/r6Oj/6+jo/+vo6P/s6en//P39/558bv+CPSD/n1Ex/59QMP+eTy// + nU8t/5xNLP+bTSz/m0wq/5tMKv+aSyr/mUsq/5lLKv+YSir/mUsq/5hKKv+YSir/mEsr/5hLLP+YTCz/ + mEwt/5hNLv+YTi7/mE8v/5lPMP+ZTzH/mFAx/5VQM/+GTTT/bk0//6+tqf/NyMH/q6Sk/97Z2v/S0NL9 + ICEgdQAAABoAAAAOAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkWpaOkvvXx8f/Szcz/ + 6+fn/+Pi3P+8b1P/zHZV/+W5p//XjG//zGpF/8xqRf/LakX/ympF/8ppRP/JaET/yWhE/8hpQ//HaEP/ + xmhD/8ZnQv/GZ0L/xGdC/8RnQv/DZ0L/w2ZC/8NmQv/CZUH/wmVB/8FkQf/AZEH/wGRA/79jP/++Yz// + vmM//71jP/+8Yj7/u2I+/7tiPv+6YDz/r1Ux/5pIKP+XSiz/plU2/7NcOv+3Xzv/t147/7ZeO/+2Xjv/ + tV46/7NeOv+zXjr/s106/7JcOf+xXDn/sVw5/7FcOf+xWzn/r1o5/69aOP+uWjj/rlk3/6xYNv+rVTL/ + rmFC/+DY1v/n5uf/5uPj/+fl5f/p5ub/6efn/+rn5//q6Oj/6ujo/+vp6f/r6en/7Onp/+vo6P/r6Oj/ + 6+jo/+zp6f/8/v//p4h7/4M+If+iVTX/o1Y1/6JVNf+iVTX/olU1/6FVNf+hVTT/oFQ0/6BUNP+gVDT/ + n1Q0/59UNP+dVDP/nVM0/51TNP+dUzT/nVM0/5xTM/+cUjL/nFIz/5tSMv+bUjL/mlAy/5lQMf+YUTH/ + k1A0/4FNOP98ZFn/xsG4/8K7uf+tpqb/7+rs/6imqN4JCQlUAAAAFgAAAAsAAAAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABlZWWB9vT0/9vZ1//a1tf/+fnv/6uKf//NdFL/36ON/+Sxnv/Ma0b/ + zGtF/8xqRf/MakX/y2pF/8pqRf/JaUT/yWlE/8hoRP/IaEP/x2hD/8dnQ//FZ0P/xWdC/8RnQv/EZ0L/ + w2ZC/8NmQf/DZUH/wmVB/8FlQf/AZUH/wGRA/8BkQP++Y0D/vmM//71jP/+9Yj//vGI9/7phP/+9iXT/ + spGD/4taR/98PCL/lUsu/6xaOP+2Xjv/uF88/7deO/+2Xjv/tV47/7ReOv+0Xjr/s1w6/7JcOf+xXDn/ + sVw5/7FcOf+wWzn/sFo5/69aOf+vWjj/rlo4/6lPK/+7hG7/6enq/+nm5v/p5ub/6ufn/+ro6P/r6Oj/ + 6+np/+zp6f/s6en/7Onp/+zp6f/s6en/7Orq/+vp6f/r6Oj/7Onp//z+//+nh3n/hD4h/6NUNP+kVTX/ + olU0/6FVNP+hVTT/oVU0/6FUNf+gUzT/n1Qz/59UM/+fVDP/n1Mz/55UM/+eVDL/nVMz/51SMv+dUjL/ + nFIy/5xRMf+cUTL/m1Ey/5tRMf+aUDH/mlAx/5hQMv+RUDX/d0o2/42FhP/Oyb3/tK2t/7y0tv/18vP/ + bGxttwAAADIAAAASAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg4OEHY19f8 + 7+vr/9HMzv/59/L/v7q4/8JvUP/XjXD/8trR/9J8Wv/MbEb/zGtG/8xqRv/MakX/zGpF/8pqRP/KakT/ + ymlE/8loRP/HaET/x2dD/8dnQ//GZ0P/xWdD/8VnQv/EZ0L/w2dC/8NmQv/DZkL/wmZC/8JmQf/BZUH/ + wWRA/8BkQP+/Yz//v2NA/71iP/+7XDb/y494/+fp7P/q7e7/3djX/62SiP93Pij/gz4j/55RMv+vWzn/ + tl87/7hfPP+2Xjv/tl47/7VeOv+0Xjr/s106/7JdOv+yXTn/sVw5/7FcOf+xWzn/sFs5/7BbOf+vWDb/ + pVMy/9W+tv/t7u//6ufn/+vp6f/r6Oj/7Orq/+zq6v/s6ur/7erq/+zq6v/s6en/7erq/+zp6f/s6en/ + 7Onp/+vo6P/s6en//f///6mIev+GQCH/o1Y1/6RVNf+iVDP/o1U0/6JVNP+iVTT/oVU0/6BUNP+fVDP/ + n1Mz/59TM/+fUzP/n1My/55UMv+eUzL/nVMy/51TMv+dUjL/nFEx/5xRMf+bUTH/m1Ex/5pRMf+aUDH/ + l1Az/4pPN/9xT0H/rKum/8rEvv+qpKT/2NTU/93c3f80NTWEAAAAHAAAAA4AAAAGAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmFaenqcD89/f/1M/P/+vn5//n59//snVd/9Z/XP/pvq7/ + 4qeR/85sRv/Oa0f/zGtG/8xrRf/MakX/y2pF/8tqRf/LakT/yWlE/8loRP/JaEP/yGhD/8doQ//GZ0P/ + xmdC/8VnQv/FZ0L/xGdC/8NnQv/DZkL/wmZC/8JmQf/BZUH/wWVA/8BkQf+/Y0D/v2RA/7taM//TpZT/ + 6u7x/+Xj4//n5+f/6urs/87Cvv+Ua1z/eDsj/4U/I/+cTzD/q1g4/7NdOv+2Xjv/tl86/7VfO/+1Xjv/ + tV46/7RdOv+zXTr/sl05/7JcOf+yXDr/rlg1/55KKP++l4f/7vDx/+zp6f/s6ur/7Orq/+zq6v/t6ur/ + 7evr/+3r6//t6+v/7evr/+3q6v/t6ur/7Onp/+zp6f/r6en/6+jo/+zp6v/7/P3/n3lp/41FJf+kVjT/ + pFY0/6NVM/+jVDP/olQz/6JUNP+iVDT/oVQ0/6BTM/+fUzP/n1Mz/59TM/+fUzP/n1Iy/55TMf+eUzH/ + nVMy/51TMf+dUjH/nFEx/5xRMf+cUTH/m1Ex/5lQMf+TTzP/gUw2/3xpYv/Hwbf/v7m3/62lpf/u6uv/ + rKqq3w0NDVUAAAAVAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + YmBifPr4+f/i39//2dbW//779P+snJf/zHhX/+CehP/x08j/0HBL/85sR//NbEb/zWtG/8xrRv/Ma0b/ + zGtF/8trRf/La0T/ympF/8lqRf/JaUT/yGlE/8doQ//HaET/xmhD/8VnQ//FZ0P/xWdC/8RnQ//DZkL/ + wmZC/8NlQf/CZUH/wWVB/8BkQP/AZED/vFs0/9SmlP/s8fL/6Obm/+fl5f/o5eX/6+vs/+no6P/GtbD/ + mXFj/31DLf9/OyD/jkQn/55PMf+nVTX/rVk3/7BcOf+yXDn/s105/7JdOf+vWzj/q1g1/59NK/+VSy3/ + uZOE/+zr6//u7e3/7erq/+3r6//t6+v/7evr/+3r6//t7Oz/7uzs/+7r6//t6+v/7erq/+3q6v/s6ur/ + 7Onp/+ro6P/p5+f/7evr//f29v+OXEj/lkoq/6dWNP+lVjT/pFY0/6NUM/+jVDP/olQz/6JUNP+iVDT/ + olQz/6BTMv+fUzP/n1My/59TMv+fUjL/n1Iy/55SMf+eUjH/nVIx/51SMf+cUTH/nFAx/5xRMf+cUDH/ + mVEy/49QNf90Szr/k4+Q/8zGu/+xq6r/vLW4//Lu8P9mZmewAAAALAAAABEAAAAIAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvMS811dPU8ff09P/X0tH/+/n4/9bV0f/EclT/ + 2IRl/+7Lv//gn4b/z25I/85tR//ObEf/zm1H/81sRv/NbEb/zGxG/8xsRv/La0b/ymtG/8pqRf/KakX/ + yWpF/8hpRP/IaUT/x2hE/8ZoRP/GaEP/xmhD/8VnQ//FZ0P/xGZC/8NmQv/DZUL/wmVB/8FlQf+9WzT/ + 16eV/+/z9f/r6Oj/6ujo/+ro6P/p5+f/6ujo/+/v8P/s7O3/183K/7GXjf+WbFz/gEgy/4JEK/+EQCT/ + hj0g/4pBI/+NQiP/jEEi/41EJ/+NSzD/oHBc/8+9t//x8vP/7+7v/+7s7P/u7Oz/7uzs/+7s7P/u7Oz/ + 7+zs/+/s7P/u7Oz/7uzs/+7r6//t6ur/7erq/+zp6f/r6en/6ufn/+jm5v/x7/D/8Ozr/4VJMf+dTy// + p1Y0/6VVNP+kVTT/pVUy/6RUMv+jVDP/o1Qz/6JUM/+iVDP/oVMy/6BTMf+gUjL/n1Ix/59SMv+fUjL/ + nlIx/55SMf+dUjH/nVIx/5xSMf+dUDH/nFAx/5tQMf+WUDT/iFA5/3lbT/+5tq3/xb66/6miov/b1Nb/ + 0M/P/SYnJ3UAAAAXAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAA4ODwSNjY2o/////+Th3//s6ur//f32/7OOgv/YgmL/4aWN//DPwv/Qb0r/z25I/89uSP/Pbkj/ + z21I/85tSP/NbEf/zWxH/8xsR//La0b/y2pF/8tqRf/KakX/yWpE/8lqRf/IaUT/x2lE/8ZoRP/GaET/ + xmhD/8ZoQ//EZ0L/xGZC/8RmQv/DZUL/wmVC/75bNf/YqJf/8fX4/+3r6//t6+v/7Orq/+zq6v/s6ur/ + 7Onp/+zq6v/v7+//8vT1/+3r7P/f2dj/z8G8/7ukm/+ukIX/qop+/6uJff+tjoL/v6ed/9rPzP/u7u7/ + 9PT2/+/t7f/v7Oz/7+3t/+/t7f/v7e3/7+3t/+/t7f/v7e3/7+3t/+7s7P/u7Oz/7evr/+3q6v/s6ur/ + 6+np/+vn5//q5+f/5+Tk//f4+f/c0Mv/ikgs/6NSMf+nVTX/pVU0/6VVNP+lVTT/pVQz/6VUMv+kVDL/ + o1Qy/6NUMv+iVDL/oVMy/6BSMf+gUjH/n1Ix/59SMv+fUjL/n1Iw/55SMf+dUjD/nVIx/5xRMf+cUDD/ + mlAy/5JRNv98TDn/jIOB/8vFt/+0rq//sqqr/+7q6/+Hh4nKAAAAPgAAABMAAAAJAAAAAwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFQUVvv7e//+vj4/+Xj4v////// + zMjE/8l2V//cimr/78zA/+GhiP/Qbkn/z25J/89uSP/Pbkj/z25I/85tR//ObUf/zmxH/8xrRv/MbEb/ + y2xG/8trRv/La0b/yWpF/8lqRP/IakT/yGlE/8dpRP/GaUT/xmhD/8ZoQ//FZ0L/xWZC/8NnQv/DZkL/ + v1s2/9mqmP/z9/r/7+3t/+7s7P/u6+v/7uzs/+7s7P/u7Oz/7uzs/+7r6//u7Oz/7u3t//Dw8P/z8/T/ + 9ff4//b4+v/19vf/9Pb3//b4+v/3+Pn/8/P0//Hv8P/w7u7/8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/ + 8O3t/+/t7f/v7e3/7uzs/+7s7P/t6+v/7erq/+zp6f/r6Oj/6ufn/+jm5v/n5OT//////7qbjv+NQCD/ + qFU0/6hVNP+nVTT/plU0/6VVNP+lVTT/pVQz/6VTM/+kVDL/pFQy/6NUMf+jVDL/oVMx/6BSMf+gUjH/ + oFIx/6BSMf+fUTD/n1Ew/55RMP+eUTD/nVEw/5tQMP+YUTP/jFI5/3dXSP+wrab/yMC7/6qkpP/Lxsf/ + 4t/g/0FAQI0AAAAZAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAKSgpFKqrqsD/////7uzs//r5+f/8/fb/sIt+/96MbP/io4v/8dPH/9R2Uv/Qbkn/ + 0G5I/9BuSf/Pbkj/z21I/89tR//ObEf/zWxH/81sRv/MbEb/zGxG/8trRv/Kakb/ympF/8lqRf/JakT/ + yGlE/8hpRP/GaET/xmhD/8ZoQ//GZ0P/xWdC/8RnQv/AXTb/26uZ//T4+//w7u7/8O7u//Du7v/w7u7/ + 8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/8O7u//Du7v/w7u7/8e/v//Hv7//x7+//8e/v//Hv7//x7+// + 8e/v//Hv7//x7+//8e/v//Hv7//x7+//8e7u//Du7v/w7u7/8O3t/+7s7P/u7Oz/7uvr/+3q6v/s6ur/ + 6+jo/+rn5//p5ub/5uPj/+zq6v/7+/v/m2dS/5xNKv+pVzT/qFY0/6dVNP+nVTT/p1U0/6ZVNP+lVDP/ + pVMz/6RTM/+kVDP/pFMy/6RTMf+jUzH/olMx/6FSMf+gUjH/oFIx/59RMf+fUTH/n1Ew/59RMP+eUTD/ + m1Ax/5RSNf9/TDb/in9+/8fEtv+3sbH/rqen/+nl4/+mpqbeBwcHSgAAABQAAAAKAAAAAwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcZ/z9/v////// + 8O/v///////LxsT/0X9g/9+Ob//swrP/5auV/9JvSv/Sbkn/0W5J/9BuSf/Pbkj/z25I/89tSP/ObUj/ + zm1H/81sRv/MbEf/zGxH/8trRv/La0b/ympF/8pqRf/JakX/yWlE/8dpRP/HaUT/xmhE/8ZoRP/GZ0P/ + xmhC/8FdNv/crJr/9fr9//Hv7//x7+//8e/v//Hv7//x7+//8e/v//Hv7//x7+//8e/v//Hw8P/x8PD/ + 8u/v//Lv7//y8PD/8vDw//Lw8P/y8PD/8vDw//Lw8P/y8PD/8vDw//Lw8P/y8PD/8fDw//Hv7//x7u7/ + 8O7u/+/t7f/v7e3/7+zs/+7s7P/s6+v/7Orq/+vp6f/q5+f/6efn/+jl5f/l4uH/+fr7/93Oyf+QRyn/ + p1Uy/6lXNP+pVjT/qFY0/6hWM/+nVjT/p1U0/6ZVM/+lVDL/pVMy/6VUM/+kUzP/o1Mz/6RTMv+jUzH/ + oVIx/6BSMf+gUjH/oFIx/6BSMP+fUTD/n1Ew/51RMP+aUjP/jlE3/3pWR/+wrKb/xb+7/6ulpf/IwsL/ + 5+Xm/1JSVJ0AAAAcAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDIYtLS2yf/////5+Pj///////399/+tl5H/3JF1/+GZfv/14Nf/ + 2odo/9JuSv/Sbkn/0W5J/9FuSP/Qbkn/z25I/89tSP/PbUj/zm1I/85tSP/ObEf/zWxG/8xsRv/La0b/ + ymtG/8prRf/JakX/yWpF/8hqRf/IaUT/x2hE/8ZoRP/GaEP/wl02/92um//3+/7/8vDw//Lx8f/y8fH/ + 8vDw//Lx8f/y8fH/8vHx//Lx8f/y8fH/8/Hx//Px8f/z8vL/8/Ly//Px8f/z8fH/8/Hx//Px8f/y8vL/ + 8/Hx//Px8f/z8fH/8vHx//Lw8P/x8PD/8e/v//Hv7//w7u7/7+3t/+/t7f/u7Oz/7evr/+zq6v/r6en/ + 6ujo/+nm5v/n5OT/5eLi/+ro6P/+////rX5r/55KKP+rVzX/qVY0/6lWNP+pVjT/qFY0/6dWM/+nVjP/ + p1Uz/6ZVM/+lVDL/pVMy/6VTMv+kUzL/o1My/6NSMv+iUjH/oVIx/6BSMf+gUjH/oFIx/59RMP+gUS// + nVEw/5ZTNv9+TDb/jIWG/8nCtf+3sLD/rqam/+nj4/+vrrHjDA0NUAAAABMAAAAKAAAAAwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcXF1l + ///////////6/Pv//////9fX0/++hG7/5pd5/+ewnP/svq3/029K/9JvSv/Sb0r/0W9J/9FuSf/Qbkn/ + z21J/89uSP/Pbkj/z21I/85tSP/ObEf/zWxH/81sR//Ma0b/y2tG/8prRv/KakX/yWpF/8hqRf/IaUT/ + x2lE/8dpRP/DXjf/3q+d//j9///z8vL/8/Ly//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/ + 9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/z8vL/8/Ly//Px8f/y8fH/8vDw//Lw8P/x7+// + 8e/v//Du7v/v7e3/7+zs/+3r6//s6ur/7Onp/+ro6P/p5ub/5+Xl/+Xj4//j4OD//P3+/9fCuf+YSir/ + rFY0/6xYNv+qVzT/qVY0/6lWM/+pVjP/qVYz/6hWM/+mVjP/p1Y0/6VVMv+lVDL/pVMy/6VTMv+kUzL/ + pFIy/6NSMv+iUjH/oVIx/6BSMf+hUjH/oFEx/59RMf+aUjT/jE80/3xhWP+5tav/wru6/6qjpP/HwsH/ + 5eTk/05PTpgAAAAYAAAADgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4uLxC1tLXF/////////////////////7qqpf/Yj3T/ + 4JFz//DNwP/joYj/029K/9NvSv/Sb0r/0m5J/9FuSf/Rbkn/0G5I/89uSP/Pbkj/z21I/89tSP/ObEf/ + zWxG/81sRv/Ma0b/y2xG/8trRv/Ka0b/yWpF/8lqRf/IaUX/x2lE/8NfN//fr53/+f7///Tz8//08/P/ + 9PPz//Tz8//18/P/9fPz//Xz8//18/P/9fPz//Xz8//18/P/9PPz//Xz8//08/P/9PPz//Tz8//08/P/ + 9PLy//Ty8v/08vL/8/Hx//Px8f/y8PD/8vDw//Hv7//w7u7/8O7u/+/t7f/t7Oz/7Orq/+vp6f/q6Oj/ + 6efn/+fl5f/l4+P/4t/f//T09f/y7ez/o2FG/6dRL/+tWDf/rVg2/6xYNv+qWDT/qlc0/6lWNP+pVjT/ + qVYz/6lWM/+oVjP/plUz/6ZVMv+lVDL/pFQy/6VUMf+lUzH/pFMy/6NSMf+jUjH/olIx/6FSMf+gUjH/ + nVEy/5VSNv9+Tjr/mpaV/8nDtv+xrK3/r6qq/+rk5f+lo6TdCAcHSAAAABIAAAAJAAAAAwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAF9eX17/////////////////////7O7n/7KOgv/pnYH/4puA//Ta0P/bhmb/1G9K/9RvSv/Tb0r/ + 0m9K/9JvSf/Rbkn/0W5I/89uSP/Pbkj/z25I/89tSP/ObUj/zm1H/81sR//NbEb/y2xH/8trRv/Ka0b/ + ympG/8pqRf/IaUX/xV84/+Gwnv/6////9fPz//Xz8//19PT/9fT0//X09P/19PT/9vPz//b09P/19PT/ + 9fT0//X09P/19PT/9fT0//X09P/18/P/9fPz//Tz8//08/P/9PLy//Ty8v/z8vL/8/Hx//Lw8P/y7+// + 8e/v//Du7v/v7e3/7evr/+3q6v/s6ur/6ujo/+nn5//n5eX/5eLi/+Lf3//v7u///Pv7/7WAa/+kTSr/ + r1o4/61ZN/+tWTf/rVg3/6xYNf+rWDT/qlc0/6lWNP+pVjT/qVY0/6lWM/+oVjP/p1Uy/6ZUMv+mVDL/ + pVQy/6VUMf+lVDH/pFMx/6NSMf+iUjH/olIx/6BRMf+bUzb/iEoy/4R1dP/CvrD/vLa1/6mjo//Qycr/ + 4+Dh/0BBQokAAAAXAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fBJ6goKf///////////////////// + z83K/8WLd//nm37/562W/+3Csv/VcUr/1XBK/9RvSv/Tb0r/029K/9JuSv/Sb0n/0W5J/9BuSf/Qbkj/ + z25I/89uSP/PbUj/zm1I/85sR//NbEf/zWxG/8xrRv/Ka0b/y2tG/8pqRf/GYDn/4KuW//v////18/P/ + 9fPz//b09P/29PT/9vT0//b19f/29fX/9vT0//b09P/29fX/9fX1//X09P/19PT/9fT0//X09P/19PT/ + 9fPz//Tz8//08/P/9PLy//Py8v/y8fH/8vDw//Hv7//w7u7/7+3t/+7s7P/t6+v/7Orq/+ro6P/p5+f/ + 6OXl/+Xj4//j4eH/8fLz//z7+/++jHf/pU8r/7FbOP+wWjf/rlo4/65aN/+uWDf/rVg2/61YNv+rWDX/ + qlc0/6pXNP+pVzT/qVY0/6lWNP+oVjL/p1Qy/6dTMv+mVDH/pVQx/6VUMf+lUzH/pFMx/6JSMf+hUjL/ + nlM1/5NQNf9+XVH/sa6n/8a/uv+rpab/t7Ky/+/r6/+Ojo/IAAAAMAAAABAAAAAIAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAANDQ0NOHh4e7/////////////////////v7Cr/92UeP/hj3H/7cCv/+iumP/VcUr/ + 1HBK/9RwSv/TcEr/0nBK/9NvSv/Sbkr/0W5J/9BuSf/Pbkj/z25I/89uSP/Pbkj/z21H/85sR//ObEf/ + zWxG/8xsR//Ma0b/y2tF/8lmP//Thmf/+PLv//r8/v/29PT/9vT0//b19f/29fX/9vX1//b19f/29fX/ + 9vX1//b19f/29fX/9vX1//b19f/29PT/9fT0//X09P/18/P/9PPz//Tz8//z8vL/8/Hx//Lx8f/y8PD/ + 8e/v//Dt7f/u7e3/7evr/+zq6v/r6en/6efn/+jl5f/k4uL/5+Xl//j7/P/38vH/v4hx/6hQLP+yWzj/ + sVs4/7FbOP+wWzj/r1o4/65aN/+tWTf/rVk3/6xYNv+sWDX/rFg1/6pYNP+qVjX/qVY0/6lWNP+oVTL/ + qFQy/6dUMv+mVDH/pVMx/6VTMf+lUzH/o1Iw/6BTMv+YUzf/gk45/5uVlP/IwrX/sqyu/6ulpf/f2tr/ + zMvL+SMjJGkAAAAUAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4eJev////////// + ///////////w8ez/sp6Z/+GehP/hkXP/8tLF/+Oeg//VcUr/1XFK/9VwSv/UcEr/1G9K/9JvSv/Sbkr/ + 0m5K/9BuSf/Qbkn/z25I/89uSP/Pbkj/z21H/85tSP/ObUf/zWxH/81sR//La0b/y2tG/8pnQf/bmoH/ + +fLw//3////5+vv/9vX1//b19f/29fX/9/X1//f19f/29fX/9vX1//b19f/29fX/9vX1//b09P/29PT/ + 9fT0//Xz8//08/P/9PLy//Py8v/z8fH/8vDw//Hv7//w7u7/7+3t/+7r6//s6ur/6+np/+nn5//n5OT/ + 6OXl//Dx8v/9////6tnR/7p3XP+sUSz/tF05/7RcOv+yXDn/sVw5/7FbOP+wWzn/r1s3/69aOP+tWTf/ + rVg3/61ZNf+sWDX/q1g1/6tYNf+rVzX/qlc0/6lWNP+oVTP/p1Uy/6dUMv+nVDH/plQx/6VUMf+jUzL/ + nVQ3/4lNNP+KgIH/wr+v/721tP+po6P/xsLC/+rn5/9gYGCiAAAAGgAAAA4AAAAGAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAA6OjsNra2vwP///////////fz7///////k5OD/xpSB/+ijiP/imHv/ + 9d3U/+CRc//WcUv/1XFK/9VwSv/UcEr/1G9K/9NvSv/Sbkr/0m9J/9FvSf/Rbkn/0G5J/9BuSf/Pbkj/ + z21I/89tSP/ObEf/zmxH/8xsR//MbEf/y2tF/8llPv/RfVz/6MCx//n08//+////+/3///j4+P/39vb/ + 9/X1//b19f/39fX/9vX1//b19f/29fX/9vX1//X09P/19PT/9fPz//Tz8//z8vL/8vLy//Lw8P/x8PD/ + 8O7u/+/t7f/u7Oz/7Orq/+ro6P/p5+f/6+nq//P09f/9////9e3q/9Kkkv+yXTv/slcy/7VeO/+1XTr/ + tFw6/7NcOv+yXDr/sVw5/7FbOf+xWzn/sFo4/69aN/+uWjf/rlk2/61ZNv+tWTb/rFg1/6tYNf+rVzX/ + qlc0/6pXNP+pVTP/qFUy/6dVMv+nVDL/pVQz/6BVN/+RTjL/hmtk/7m2rP/Dvbj/q6Wl/7ewsP/r6Oj/ + np2e0wQEBDoAAAAQAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NTU4 + 5OTk7f/////+/f3//fv8///////R0M//xZWF/+Wghf/jnoP/89PH/92IaP/WcUv/1nFK/9VxSv/VcEr/ + 1G9K/9NvSv/Tb0r/0m9K/9FuSf/Rbkn/0G5J/9BuSf/Pbkj/z25I/89uSP/PbUf/zm1H/81sR//NbEf/ + zGtG/8lmQP/IYz3/0Hxb/+Gumv/z4dr//Pr5///////8////+fr7//j3+P/39fX/9vX1//b09P/19PT/ + 9fT0//X09P/08/P/9PHx//Px8f/y8PD/8e/v//Du7v/v7e3/7uzs/+7t7f/w7/D/9PX2//r////8/f7/ + 8eTf/9SmlP+7a0z/tFUx/7ddOf+3Xzz/tl87/7ZeOv+1Xjr/tF06/7RdOv+zXDr/sls5/7JbOf+xWzn/ + sVs5/7BaOP+vWTf/rlk3/65ZNv+tWTX/rFk1/6xXNf+rWDX/q1g0/6pWNP+pVjP/qFYy/6dVM/+jVjb/ + l1M2/4NiV/+sqqT/x8G4/6+pqv+upaf/4t3d/9DOz/ghIiFiAAAAEwAAAAoAAAAEAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+fn9s+fn5///////29fb//Pv8///////Oycj/ + 25J3/+Wafv/lo4r/8cy+/9yCYf/Xckv/1nFL/9VwSv/VcEr/1G9K/9RvSv/Tb0r/029J/9JuSv/Sbkn/ + 0W5J/9BuSP/Qbkj/0G5I/89uSP/Pbkf/zm1H/81sR//NbEf/zGxH/8xrRv/KZ0H/x2I6/8pqRf/Thmj/ + 4rGe/+/Yz//48u///Pz8//7////+/////f////r9/v/5+/z/+Pr7//j6+v/4+fr/9/n6//f4+f/3+fr/ + +Pz9//v////8////+/7///n19P/y5eH/4Lqs/8uMc/+6Y0H/tVYx/7ldOf+6YD3/uV88/7hfPP+4Xzz/ + t187/7ZeOv+1XTr/tF06/7RcOv+zXTr/s1w5/7JcOf+yWzn/sVs4/7BbOP+wWTf/r1k2/65ZNv+tWTX/ + rVk2/6xYNf+sWDX/q1c0/6pWNP+pVjX/pVc3/5tVN/+LV0H/o6Cg/8fBs/+0rq//q6Sk/9LMzf/i4eL/ + U1RUlAAAABUAAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACMjI2Y///////////w7+3//v3+/////P/Rvrj/4Jh8/+SZfP/mp47/78i5/9yDYf/Xckv/ + 1nFL/9ZxS//WcEr/1HBK/9RwSv/Ub0r/029K/9JuSv/Sbkr/0m9J/9BuSf/Qbkn/0G5I/89uSP/PbUj/ + z21I/85tR//NbEf/zWxH/8xsR//Ma0b/y2lE/8llP//GYDj/yGpF/8txT//UjnP/3quX/+GwnP/ow7X/ + 8N3V//To4//05+P/8+fi//Pn4v/z5+L/9Ojj//Hh2//r0cj/4LOi/9ytmv/UmYP/w3JR/75mQ/+5WjX/ + uVs1/7tgO/+7YT3/umE9/7phPf+6YDz/ul89/7lfPP+4Xzz/t187/7deOv+2Xjr/tV06/7VdOv+0XTr/ + s1w6/7NcOf+yXDn/sVw5/7FbOP+vWTf/r1k3/69ZN/+tWTb/rlk2/6xZNv+sWDX/qlc1/6ZXOP+fVzn/ + jVQ9/52Vlf/JwrP/uLKx/6miov/CvLz/8u/v/39/f7oAAAAhAAAADgAAAAYAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMTFBO7u7zC//////v6+//r6er/ + /vz9//v79P/KuLL/4p6E/+SZff/np47/8cy+/92JaP/Xckv/13FL/9dxS//WcEv/1XBK/9RwSv/UcEr/ + 1HBK/9NvSv/Sb0r/0m5J/9FvSf/Qbkn/0G5J/9BuSP/PbUj/z21I/89tR//ObEf/zWxH/81rR//MbEb/ + zGtG/8trRf/KaUT/yGhC/8ZkPv/FYDn/xF03/8RjPP/Gakb/yG5K/8htSv/HbEn/xmxJ/8ZrSf/FbEn/ + w2lF/8FkQP+9WzT/vFoz/71cNv++YTv/vmI9/75jPv+9Yj//vWI//7xiPv+7YT7/umE+/7pgPf+6YD3/ + umA9/7lfPP+4YDz/t187/7deOv+3Xjr/tl06/7RdOv+0XTr/tF06/7NcOv+yXDn/sVs5/7FaOP+xWTf/ + sFo3/69ZNv+uWTb/rVk2/6xZN/+oWTj/oVc5/5FVPP+ZkZD/xb6v/7u1tP+ro6P/urS0/+vm5/+gn5/U + CQoJPAAAAA8AAAAHAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAACcnKCfQ0NDX//////Px8v/n5OP//Pz8//T07//Jt7D/4p6E/+Sbfv/lpIr/ + 89PH/+CSc//XcUv/13JL/9dxS//WcEv/1XFK/9VwSv/UcEr/1HBK/9NvSv/Sb0r/0m9K/9JuSv/Rbkn/ + 0G5J/89uSP/Pbkn/z25I/89tR//ObUf/zWxH/81sRv/NbEf/zGxH/8trRv/La0X/ymtF/8lqRf/JakX/ + yGhD/8dnQv/GZkH/xmZB/8VlQP/FZUD/xGVA/8RlP//DZT//wmVA/8NlQv/CZUH/wWVB/8FlQP/AZED/ + v2Q//79jQP++Yj//vWM//7xiPv+7YT7/u2E+/7phPf+6YT3/umA9/7lgPf+4YDz/t147/7deO/+2Xzr/ + tl46/7VdOv+0XTr/tFw6/7RcOv+zXDr/sls4/7FaN/+wWjj/sFo3/69ZNv+uWTf/qlo6/6JYOv+TVT3/ + l46O/8O8rP+9t7X/q6Wl/7ewsP/o5OT/u7q66BcWFlAAAAARAAAACQAAAAMAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5NTkHm5ufv + /////+zq6v/g3t///fz6//Ly7f/MubP/5J6E/+megf/knoP/9t3U/+Sfg//Yckv/13JL/9dyS//XcUv/ + 1nFL/9ZwS//VcEr/1XBK/9RwSv/Tb0r/0m9K/9JuSf/Rbkn/0W5I/9BuSf/Pbkn/z25I/89tSP/PbUj/ + zmxH/81tR//MbEf/zWtG/8trRv/La0b/ympG/8pqRf/JakX/yWlF/8hpRP/HaUT/xmhD/8ZoQ//GaEP/ + xmhD/8VnQv/DZkL/w2ZC/8NlQv/CZkH/wmVB/8FkQf/AZEH/wGRA/75jP/++Yz//vWM+/71jP/+8Yj// + u2E9/7phPf+6YT3/umE9/7pgPf+4Xzv/t187/7dfO/+3Xjr/t146/7ZeOv+1XTr/tF06/7NdOv+zXDn/ + sls4/7JaOP+xWjj/r1o4/6xbO/+lVzj/lVY8/5qRkf/BvKv/v7i2/6ulpf+yqqv/5eHh/9TS0vguLi9r + AAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRiY1fn5uf5/////+bk4//b2Nn/9/X1//b18f/Rwbz/ + zZ2M/+mghf/jlnn/89LG/+mvmf/Xckv/13JL/9dyTP/Xckv/13FL/9ZxSv/VcEr/1HBK/9RwSv/Tb0r/ + 029K/9JvSf/Sb0r/0W5J/9BuSP/Qbkj/z25J/89uSP/PbUj/zm1H/85tR//ObEf/zWxH/8xsRv/La0b/ + ymtF/8pqRv/KakX/yWlE/8dpRf/HaUT/x2lD/8ZoQ//GaEP/xmdD/8VnQ//EZ0L/w2ZC/8NmQv/DZkH/ + wmVB/8FkQf/BZUH/wGRA/8BkQP++ZED/vmM//71jP/+9Yj7/vGI+/7thPf+6YT7/umE9/7lgPf+5YDv/ + uGA7/7dfO/+3Xjv/t186/7ZeOv+2XTr/tV06/7RdOv+zWzn/s1s4/7FbOf+uXDz/pVY3/5JjT/+impr/ + w72s/763tv+spab/squr/+Da2v/Z19f8Q0JDfAAAABIAAAAKAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGhnaGno6On7/////+De3f/U0dD/8O7t//z79f/Pzs7/y52L/+yliv/jknP/7sCw/+7Ds//eiWj/ + 13JM/9dyS//Xckv/13FL/9ZwSv/VcEr/1XFK/9VwSv/UcEr/029K/9NvSv/Sb0r/0W5J/9FuSf/Rbkn/ + z25I/89uSP/Pbkj/z25I/89tR//ObUf/zWxH/8xrR//Ma0f/y2tG/8prRf/Ka0X/yWlF/8hpRf/IaUT/ + yGlE/8dpQ//GaUP/xmhD/8VnQv/EZ0L/w2dC/8NmQv/DZkL/wmVB/8JlQf/BZUH/wGRA/79kQP+/Yz// + v2NA/75jP/+9Yz//vGI//7thPv+7Yj7/u2E+/7pgPP+5YDv/uGA7/7dfO/+3Xzr/t186/7deO/+2Xjr/ + tV46/7NdOv+yXTr/r109/6VUNP+Valr/pqam/8fArv+9tbT/rKWm/7KrrP/f2tn/3Nvb/0pKS4UAAAAT + AAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhoaWvl5Ob5/////93a2P/Py8v/ + 7err////+//X1NL/wKCV/+Gqlf/kkXH/6ayV//Xb0f/lo4n/13JM/9dyS//Xckv/13FL/9ZxS//VcUv/ + 1nFK/9VwSv/Ub0r/029K/9NvSv/Sb0r/0m5K/9JuSf/Rbkn/0G5J/9BuSP/Pbkj/z25I/89tR//ObUf/ + zWxH/81sR//MbEb/y2tG/8prRv/La0X/ympF/8lqRf/JaUX/yGlE/8dpRP/HaUT/xmdD/8VnQv/FZ0L/ + xGdC/8NmQv/DZkL/w2ZC/8JmQf/CZUH/wWVA/8BlQP+/ZED/vmRA/75jP/++Yz//vWI+/7xiPv+7Yj7/ + umE9/7pgPP+6YDz/uWA8/7hgPP+3Xzv/t187/7deO/+2Xjr/tF88/69cPP+fVzv/lXpz/6yqpv/HwbL/ + u7S0/6ujo/+0rq3/497e/9jV1f9MTEyKAAAAEgAAAAoAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAGBeXl7Z1tny/////+Lg4P/Nysn/49/h//v69//i5OL/wa6p/96hif/ooYb/ + 5Jt///LNv//tvq3/3opp/9dyS//Xckv/13JL/9dyS//WcUr/1XFK/9VxSv/Ub0r/1HBK/9RwSv/Tb0r/ + 0m9K/9FuSf/Rbkn/0W5J/9BuSP/Pbkj/z21I/89tSP/ObUj/zm1G/81tR//MbEf/zGxG/8xsRv/La0b/ + ymtF/8pqRf/IaUX/yGlF/8dpRP/HaEP/xmdD/8ZnQ//EZ0L/xGdC/8RnQv/DZ0L/w2ZB/8NlQv/CZUH/ + wWVB/8FlQP/AZED/v2NA/75jQP++Yz//vWI//71iP/+8Yj7/u2E9/7pgPf+6YDz/uWA8/7hgPP+4Xzv/ + tl88/7VgPf+uXDr/oFo+/5uOjf+4tq3/xb6z/7evsP+po6P/urKy/+fi4v/Mycr4UVBSfQAAABEAAAAK + AAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNjZFDV1dbh + /////+fl5f/Oysn/2NXX//z7+v/u7un/w7++/8mdjf/nqZH/5ZZ3/+mwmv/13dP/56qS/9p6VP/Xckz/ + 13JL/9dxSv/WcUv/1nFK/9VxSv/VcUr/1XBK/9RvSv/TcEr/029K/9JvSv/Rbkn/0W5J/9BuSf/Qbkn/ + z25I/89uSP/Pbkj/zm1I/85tR//NbEf/zGxH/8xsRv/La0b/y2tG/8prRf/JakX/yGpE/8hpRf/IaEP/ + xmdD/8ZnQ//FZ0L/xWdC/8RnQv/DZ0L/w2ZC/8NmQv/DZkH/wmVB/8FkQf/AZED/v2RA/79kQP++Yz// + vmM//71iPv+8YT7/vGE9/7tgPf+7YDz/uWA8/7dhPv+1YD3/qVc3/6FuXP+loaX/vLms/8a+t/+yrK3/ + qqSk/8K8vP/o5OT/v7297Dw8O2sAAAAQAAAACQAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElKSjSqq6vL//////Du7v/Rzs7/0MzN//Du7f/4+PT/ + 09PR/7iknv/fpI7/7KSJ/+Wafv/tvqz/8Mq8/+Obgf/YdE3/13JL/9dxS//Xckv/1nFL/9ZxSv/VcEr/ + 1HBK/9RwSv/TcEr/029K/9JuSv/Sbkr/0W5K/9FuSf/Qbkn/z25I/89uSP/Pbkj/z21I/85tR//NbEf/ + zWxH/8xrRv/LbEb/y2tG/8prRf/Ka0X/yWpF/8hpRP/IaUP/x2hD/8ZnQ//GZ0L/xWdC/8RnQv/EZ0L/ + w2dC/8NmQv/DZkH/wmVB/8JlQP/BZUD/wGRA/79kQP+/ZED/vmM//71hPv+9YT3/vGE9/7phPv+6YT3/ + tFs3/6hbPf+fjYr/r66t/8W9rP+/ubb/rqep/62mpv/Mxsb/7uvr/6elpdogISFTAAAADgAAAAgAAAAD + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABYWFh6ZmJmr8/Hy//n39//Y1NP/ycbG/+Dd3v/59/X/5+jl/8G7uf+3mY//4qiS/+qegf/ln4T/ + 7b6s/+29q//hl3r/2XRO/9dyTP/Xckv/13FL/9ZxS//WcUr/1XBK/9VwSv/Ub0r/029K/9NvSv/Sb0r/ + 0W9J/9FuSf/Rbkn/0G5J/89uSP/Pbkj/z25I/85tR//ObEf/zWxG/81sRv/Ma0b/y2tG/8trRv/Ka0X/ + yWtF/8lpRP/IaUP/x2hD/8ZoQ//HZ0P/xmdC/8VnQv/EZ0L/w2dC/8NmQv/DZkL/w2VC/8FlQf/BZUH/ + wWRB/8BkQP+/ZD//vmM+/71iQP+8ZED/ul45/6xaOf+ifG//qaWo/7y5rf/Hv7X/uLKy/6qjpP+1rq7/ + 29bW/+fk5P+Mioy9Cw0NOwAAAAwAAAAGAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFRUVQmHhYaB09HQ+P/+/v/k4eL/ + y8bG/9HOzf/v7ez/9fXw/9bY1v++rKj/zpqJ/+eokf/pnH//5p+E/+u2ov/ruab/4pl+/9p9Wf/Xckv/ + 13JL/9dxS//WcUv/1XFK/9VwSv/UcEr/1HBK/9NwSv/Tb0r/0m5J/9FuSf/Rbkn/0G5J/89uSP/Pbkj/ + z25I/89tSP/ObUj/zmxH/81sR//MbEf/y2tH/8trRv/KakX/ympE/8lpRP/IaUP/yGhD/8hoQ//HaEL/ + xmdD/8VnQv/FZ0L/xGdC/8NnQv/DZkH/wmZB/8JlQf/CZUH/wWVA/8BlQf+/ZUL/vmA7/7RZNf+tb1b/ + q56c/7W2sv/Dvaz/wbq3/7Cqq/+rpKT/w729/+rl5f/W09P/XVtbmAEBAiEAAAAKAAAABQAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABVVVVRurm51Pr3+P/08fD/1dDQ/8jCw//d2Nj/9vbz/+7u6f/NzMv/ + t6Wf/8uXhP/mpo3/7KCD/+Wdgv/nqZH/7Lyq/+WiiP/eiWj/13RO/9dyS//WcUv/1nBK/9ZwSv/VcEr/ + 1HBK/9RvSv/Tb0r/0m9K/9FvSv/Sbkn/0G5J/9BuSf/Qbkj/z25I/89tSP/PbUj/zm1H/81sR//Na0f/ + zGtG/8trRv/La0b/ympE/8lpRP/JaUT/yGlD/8hoQ//HaEP/xmdC/8ZnQ//FZ0L/xGdC/8RnQv/DZkL/ + w2ZC/8NnQ//CZkL/wWA6/7hbNv+wb1b/rJuY/7Ozs//Bu6v/xsC4/7ewsf+qpKT/tK6u/9bPz//s6Oj/ + rKqr30VGRWwAAAAOAAAACAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDQkMi + gH5/ltva2////f3/6OXl/8vGxf/Iw8T/4d7e//Px7v/o5+X/zMvK/72nn/+5lIb/2KCL/+ujhv/onYD/ + 5Z6D/+amjf/lpYz/35Fz/9yBX//XdE//1nBK/9VwSv/VcEr/1XBK/9RwSv/Tb0r/029K/9JuSv/Rbkn/ + 0W5J/9BuSf/Pbkj/0G5I/89uSP/PbUj/z2xH/85tR//NbEf/zWxH/8xsRv/La0b/y2pE/8ppRP/JaUT/ + yWhE/8hoQ//HaEP/x2dD/8ZnQv/FZ0L/xWhD/8VoQ//FZUD/wV44/7VgQP+ve2n/s6Cb/7W2tv+9uav/ + xsC2/721s/+spKX/raen/8nExP/r5ub/19TU/2tqaqcPEBA1AAAACwAAAAYAAAADAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZWZmV6Wkpcjp5+n/+PX1/9/a2f/HwcH/ + ysXG/+Pg3//y8O3/6erj/9PU0/+3r67/tZOG/8KVhP/knoT/66CE/+WZe//ilHb/4I9w/96Mbf/bgV// + 2XpW/9h1UP/Vckz/1XBK/9RwSv/UcEr/029K/9JvSv/Sb0r/0W5J/9FuSf/Qbkj/0G5I/89uSP/PbUj/ + z21I/85tSP/NbUf/zWxG/8xrRv/La0X/ymlE/8ppRP/KaUT/yGlE/8lqRv/Ia0b/yWpG/8hpRP/HYjr/ + v144/7JuVf+1joD/tK+w/7i6uv++uav/x8G1/7+5t/+uqKn/rKam/8G8uv/i3t7/6ebn/6SlpNZKSUlu + BAQEDwAAAAgAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAX15fHI2MjYPJx8jm+ff3//Xy8v/Y1dX/xcHB/8nExP/f29v/8e/s/+7u6v/b29r/ + xMPE/7yjm/+9jn3/2JJ2/9iXfv/mmXv/6Jh7/+CNbP/fhWP/2n1b/9h4Vf/YdU//1XBL/9VwSv/Ub0n/ + 029J/9NvSv/Sb0r/0W9K/9FtSf/QbUj/z21I/89tR//PbEf/z2xH/85sRv/Oa0b/zWxG/81tSP/Nbkn/ + zW9K/85wS//Nb0r/zmtE/8lkPf++Y0D/wWhG/72Hcv+7pqD/uLm8/7m4tv/Ev6//ycS6/763tv+vqKn/ + rKWl/8C5uP/g29z/7uvs/8XDxPBfXl+SDQ4OMAAAAAoAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQTB1dXWS + zs3O7/v5+v/28/T/29fW/8bAwP/Dvb3/1NHQ/+jl4v/u7er/6unl/9fY2P/Iw8L/raSi/7uQgf+sg3T/ + 04tv/9SOc//gi2z/5Y9v/+aObv/ghmX/24Ff/9p+W//Ze1f/2HhU/9d3Uv/WdVH/1nVR/9Z0UP/VdVD/ + 1XRP/9R1UP/TdlL/1HdT/9N4Vv/VdlP/1XRO/9FwSf/MaEL/wmhF/8NqSP+wfGn/wZSE/7aur/+8ubv/ + uru6/8K+sf/LxLr/x8C8/7mzsv+spqX/rqin/8O+v//i3d7/8e3t/8rIyfRsamukKSorRAAAAAoAAAAG + AAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTU08fn1+mcrJyuz08/L/9/T0/+He3//KxsX/ + wLu7/8fCwf/Z1dX/6eXh/+zs5f/p6uL/2drZ/83P0P+/urn/raSj/8eZif+1hnX/oXts/7t7Y//Xf17/ + zn5f/8t7Xv/Ke13/yHhZ/8Z1V//FdFX/xHJU/8RxUv/Db0//wm1N/8VvTv/JcVD/zXBM/7x1W/+tgHD/ + vYp4/82fkP+2r7D/uri5/7y9wf+7urn/xsK1/8zIuv/Lxbz/wLm3/7Grq/+rpaX/ta+v/87Jyf/o5eb/ + 7uvr/8rIyPNxcHCnMjIySwMDAwsAAAAHAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAASklKOHl6eZCwra/c5eTl//f09P/t7Ov/19PR/8TAwP+/ubn/xL6//9TPz//g3dn/ + 6ufh/+no4P/l5N7/4eHc/87Q0f/LzdD/yMbI/7u1tv+vqaj/pp+f/6Kcm/+impn/oZua/6Kbmv+jm5r/ + opua/6Sdnf+knp7/raeo/7WwsP+6tLb/wL/C/7y+w/+6urv/xMK8/8rGuf/QzMH/08zC/8jDvv+/uLf/ + sqqr/62mpv+zra3/xr/A/+Hb2//v7Oz/6+jp/728veRoaGidMTExSgkJCQ0AAAAGAAAAAwAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx7fCZqaWpo + kJCQuMvJyvfv7O3/9vPz/+/r6//Z1dX/xsLC/765uf+9trf/w768/83Jx//W0tD/3NjT/+Dd1v/n5Nz/ + 4uDY/+Hd1v/b2tH/1tTL/9bUzP/U0sn/09HI/9PQx//S0MX/0s/F/9HPxf/QzcP/0c7D/9bSxv/Y1cr/ + 1M/G/9DKw//LxcL/wLq5/7WvsP+vqan/r6mp/7u0tP/Mxsb/5ODh//Tx8v/29PX/0tHS+4yLjMFGRkh3 + GRkZMgAAAAgAAAAFAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUVFQUT05OQHBvcICbmpvBycfH+uvp6f/39vb/ + 8O3t/+nk5f/V0dH/ycTE/7+5uf+7tbT/t7Ky/7q0s//Burn/xL69/8jDwv/NxsX/zsjF/83Ixv/OyMb/ + zMfE/83GxP/Kw8P/ycHA/8W/vv/Au7n/u7S0/7OsrP+wqqr/says/7Wvrv++ubn/ysXG/+Db3P/t6Or/ + 9/T3//Lx8v/V09X9mZiZyl1eXo42NTVOPz9AHQAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAGRkZhpNTU5Ba2treIGAgK6vrq7c0c/Q/+Xl5v/8+fr/8e3w/+7r7P/s6Oj/ + 4Nza/9TO0P/LxcX/xcC//8C8vP++ubf/vLa1/7u0tP+5tLT/ubS0/7y1tf+9uLj/wbu7/8XAwf/MyMj/ + 2tPU/+Xg4P/p5eb/7+zr//r29//y7/D/19XW/6+tr+KAf4C0WVtbgjU0N05QT1AiAAAABgAAAAQAAAAD + AAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + MjIyC4B/fyVBQUFFent8dHJxcpuWlZjAsK+x3s7NzvvRz8//39ze//Tx8v/59vj/+/r5//v4+P/69/f/ + +fX2//j19v/59fb/+fb3//n49//49ff/9PHy/+nn6P/b2dz/zczN/a+truCTk5TEa2prolhXV3s0MzNP + cG9wLCIhIhIAAAAFAAAAAwAAAAIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABISAhBVpbWhiGhYcq + HBwcPFlYWlV1dHZsYGFgg2NiZJZmZmamZ2ZmrmdnZ7RnZme2Z2ZntmdmZ7RnZmevZmVmp2NiYpleXV6G + U1NTcDw8PVscGx1BeXd5Lk1MTB0ODw8KAAAABAAAAAMAAAACAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAP///////////////////////////////////////////////////8AB//////////////////AA + AAf///////////////8AAAAAf//////////////4AAAAAA//////////////wAAAAAAB//////////// + /gAAAAAAAH////////////gAAAAAAAAf///////////gAAAAAAAAB///////////gAAAAAAAAAH///// + /////wAAAAAAAAAAf/////////wAAAAAAAAAAD/////////4AAAAAAAAAAAP////////4AAAAAAAAAAA + B////////8AAAAAAAAAAAAH///////8AAAAAAAAAAAAA///////+AAAAAAAAAAAAAH///////AAAAAAA + AAAAAAA///////gAAAAAAAAAAAAAH//////gAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAH/////4AA + AAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAH////+AAAAAAAAAAAAAAAA/////gAAAAAAAAAAAAAAAH// + //wAAAAAAAAAAAAAAAA////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAA + AAAP///gAAAAAAAAAAAAAAAAD///4AAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD//+AAAAAAAAA + AAAAAAAAA///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAA + AAAAAAAAAAAAAAD//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAA/ + +AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAA + AAAAH/AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAA + AAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAfAAAAA + AAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAD + gAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA + AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAA + AAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAD + AAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAA + AAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAA/AAAAA + AAAAAAAAAAAAAAAPwAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAf + 4AAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAAAD/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAA + AAAAP/AAAAAAAAAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAB/+AAAAAAAAAAAAAAAAAAA//wAAAAAAAAA + AAAAAAAAAP/8AAAAAAAAAAAAAAAAAAH//gAAAAAAAAAAAAAAAAAB//4AAAAAAAAAAAAAAAAAA///AAAA + AAAAAAAAAAAAAAP//wAAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAA// + /8AAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAA + AAB////4AAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAAP////4AAAAAAAAAAAAAAAH/////AAAAAAAA + AAAAAAAD/////4AAAAAAAAAAAAAAB//////AAAAAAAAAAAAAAA//////4AAAAAAAAAAAAAAf//////AA + AAAAAAAAAAAAP//////4AAAAAAAAAAAAAH///////AAAAAAAAAAAAAD///////4AAAAAAAAAAAAD//// + ////gAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////wAAAAAAAAAAA/////////+AAAAAAAAAAA + f/////////4AAAAAAAAAAf//////////gAAAAAAAAAf//////////+AAAAAAAAAf///////////4AAAA + AAAAf////////////gAAAAAAAf/////////////AAAAAAAf/////////////+AAAAAA///////////// + //8AAAAD////////KAAAAGAAAADAAAAAAQAgAAAAAACAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAE + AAAABQAAAAYAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAGAAAABgAAAAUAAAAEAAAAAwAAAAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAD + AAAABQAAAAcAAAAJAAAADAAAAA4AAAARAAAAEwAAABUAAAAWAAAAFwAAABgAAAAYAAAAGAAAABcAAAAW + AAAAFQAAABMAAAARAAAADwAAAAwAAAAKAAAABwAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAIAAAAEAAAABwAAAAoAAAAPAAAAEwAAABcAAAAcAAAAIAAAACQAAAAnAAAAKwAAAC4AAAAx + AAAAMgAAADMAAAA0AAAAMwAAADIAAAAxAAAALgAAACsAAAAoAAAAJAAAACAAAAAcAAAAGAAAABMAAAAP + AAAACwAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAAsAAAARAAAAFwAAAB0AAAAkAAAAKwAAADEAAAA1 + AAAAOQAAADwAAAA/AAAAQgAAAEUAAABHAAAASQAAAEoAAABKAAAASgAAAEkAAABIAAAARQAAAEMAAABA + AAAAPAAAADkAAAA2AAAAMQAAACsAAAAkAAAAHgAAABcAAAARAAAADAAAAAcAAAADAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAkAAAAPAAAAFgAAAB4AAAAn + AAAALwAAADYAAAA9AAAAQz05OXRTTU2XX1hYtGVeXslqYmLYbGVl5G9nZ+xwaGjxcGlp9HFpafVwaWn0 + cGho8W5nZ+xsZWXkaWJi2WVeXspeV1e2UkxMmjs3N3gAAABLAAAASAAAAEMAAAA9AAAANwAAADAAAAAn + AAAAHwAAABcAAAAPAAAACQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAJ + AAAAEQAAABkAAAAjAAAALgAAADcAAAA/Qj09eFtVVaptZWXTeHBw7n53d/WKhIT0mZSU96impvq0s7P9 + vby8/sTDw//IyMj/y8vL/87Ozv/Ozs7/zMzM/8nJyf/Ew8P+vry8/bOysvynpKT4mJSU9YuFhfaDfHzw + dW9v111WVq8+Ojp/AAAASwAAAEYAAABAAAAAOAAAAC4AAAAkAAAAGgAAABEAAAAKAAAABQAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEAAAAEAAAACQAAABAAAAAbAAAAJgAAADEAAAA8RUFBemVeXrp6dHTpg31995mVlfuvrKz+ + vr29/8rKyv/MzMz/zc3N/83Nzf/MzMz/y8vL/8nJyf/IyMj/yMjI/8fHx//FxcX/xcXF/8XFxf/ExMT/ + xcXF/8bGxv/Hx8f/x8fH/8jIyP/Av7//trS0/qekpPuSjY34iYSE7XFsbMJAPDyDAAAATAAAAEUAAAA8 + AAAAMgAAACcAAAAcAAAAEQAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAcAAAAOAAAAGQAAACUAAAAyHhwcTFdRUZx7dXXi + hoCA+KKfn/24t7f/ycjI/8zMzP/Ozs7/z8/P/9fX1//e3t7/5OTk/+vr6//x8fH/9fX1//r6+v/9/f3/ + ///////////9/f3/+fn5//X19f/w8PD/6enp/+Li4v/Z2dn/0NDQ/8fHx//Dw8P/w8PD/8TExP/ExMT/ + uLe3/6uoqPyZlJT5joqK52tnZ60ZFxdcAAAASAAAAD4AAAAzAAAAJgAAABkAAAAPAAAABwAAAAMAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACwAAABUAAAAi + AAAALysoKFNnYWGxgnt775eSkvu1srL/x8fH/87Ozv/Ozs7/2NjY/+Pj4//s7Oz/9vb2/+3r6v/a1dP/ + wrq2/66hnP+ei4P/k3tz/4xwZv+JaF7/imZc/4xnXP+Oal//j25k/5Z3bv+ghX3/rJeR/72vq//Tycf/ + 6OPh//Px8f/r6+v/3t7e/9DQ0P/Dw8P/w8PD/8PDw//CwsL/tLGx/6SgoPuWkZHzfXl5wDAuLmgAAABI + AAAAPQAAADAAAAAiAAAAFQAAAAsAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAgAAAAcAAAAPAAAAHAAAACoUExNCZ2Bgq4R+fvGempr8u7q6/87Ozv/Pz8//2NjY/+Li4v/s7Oz/ + 6+nq/83Hxf+qnZj/kHpy/4ZnWv+LYFD/k19L/5leSv+dYEr/o19J/6lfSf+sX0j/r19I/7FfR/+yX0j/ + sWBI/7FeSf+vXkr/rF9M/6leS/+gXUz/lWBS/5pyaf+rkov/xrm0/+Xg3v/t7e3/4eHh/9DQ0P/Dw8P/ + w8PD/8PDw/+3tbX/paGh+5eSkvR7d3e8IB8fWgAAAEUAAAA5AAAAKgAAABwAAAAPAAAABwAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACQAAABMAAAAiAAAAMVNNTYuEfX3qnJiY+728vP/Pz8// + 0dHR/9ra2v/j4+P/5+fn/8O/vf+ai4T/g2VY/4lgUP+PWkX/l1g//55YQP+kWj//p1o//61bP/+wWz// + s1s//7ZdQP+3W0D/ultA/7xbP/++Wj//v1o+/79YPf/AWD7/wFg9/8JWPf/BVz7/v1hA/7pXQv+zWET/ + p1tM/5piVf+kf3f/wbGs/+fk4v/q6ur/2NjY/8XFxf/Dw8P/w8PD/7W0tP+hnJz7koyM7WhkZKAAAABL + AAAAQAAAADEAAAAiAAAAEwAAAAkAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAALAAAAFgAAACY2MTFW + enR0zZGMjPm5t7f/0dHR/9PT0//Z2dn/4ODg/9fW1/+nn5v/gWpg/4RaSf+MV0D/klM5/5tTNv+iVTb/ + pVY2/6lXOP+rWTv/rlk8/7BaPv+xWz7/tFs//7VbP/+3W0D/ultA/7xaP/++Wj//v1o//8FZPv/CVzz/ + w1c8/8ZVOv/GVDj/yFM3/8lRNv/IUDf/xFE5/8BSPP+3VkP/qlpK/5tjV/+sk4z/19HO/+vr6//a2tr/ + xsbG/8PDw//Dw8P/sa+v/5WQkPmDfn7UQD09cgAAAEUAAAA2AAAAJgAAABYAAAALAAAABAAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + AAAABQAAAA0AAAAZAAAAKlROToaHgYHvqqen/czMzP/S0tL/19fX/9zc3P/Q0NL/m5GM/3xgU/+CUTz/ + jE81/5NMMP+aTC//nlEw/6NSMv+kVDT/plY2/6lYOP+qWDv/rFk8/69aPv+xWz7/s1s+/7VbP/+3Wz// + uls//7xbP/+9Wj//vlo+/8BZPf/BWD3/w1c8/8ZVOv/GVTr/x1Q3/8lSNv/KUTX/y04z/8tNMf/LTDL/ + xk01/8FTPf+1WEX/nVtN/6eIgP/Sysj/6+vq/9fX1//Dw8P/w8PD/729vf+joKD8jIWF8F1XV5oAAABI + AAAAOgAAACoAAAAZAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADgAAABwAAAAtcWtrtI+Kive+vLz/1NTU/9bW1v/Z2dn/ + 29ra/56Wk/98X1P/f044/4pILP+SSCf/mEgn/5tLKf+dTSz/nk8v/6JSMf+kVDT/plU2/6hXOP+qWDr/ + rFk8/69aPf+xWz3/s1s+/7VbP/+3Wz//uVs//7tbP/+8Wj//vlo//8BZPv/BWD3/w1c8/8ZWO//GVTr/ + x1Q4/8lSNv/KUTX/y08z/8xNMv/NSzH/zUow/81JL//KSzD/xFA3/7dVQf+fXE3/qYyE/9nT0f/n5+f/ + 0NDQ/8PDw//Dw8P/sbCw/42Hh/Vwamq8FBQUTgAAAD0AAAAtAAAAHAAAAA4AAAAFAAAAAQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAOAAAAHS8sLEd+eHjR + n5ub+czLy//V1dX/2dnZ/9vb2/+3tbT/f2lf/3xNOP+ERCn/jUIh/5NDIf+XRiP/mUgm/5pLKP+cTSv/ + nk4v/6JSMv+kUzT/plU2/6hXOP+qWDr/q1k7/65aPf+xWz7/s1s+/7RbP/+2Wz//uVs//7tbP/+8Wj// + vlo//79ZPv/BWD3/wlc9/8VWO//GVTr/xlU4/8lSNv/KUjb/y080/8xOMv/MTTH/zUww/81JL//NSi7/ + zUkv/8pJL//DUDj/s1dG/5thVP+1o57/7evr/9zc3P/ExMT/w8PD/7u6uv+Xk5P3fXd31Tg1NWcAAABA + AAAALwAAAB0AAAAOAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + AAAABQAAAA4AAAAdQj4+WYN+fuGtqan71tbW/9jY2P/b29v/3Nzc/5OHgv96V0f/f0Qp/4k+Hf+OPRn/ + kkAc/5NCH/+VRSP/mEcl/5tKKf+cTCv/nk4u/6BRMf+jUzP/pVQ1/6dXOP+pVzj/q1k7/65aPf+wWj3/ + sls+/7VbP/+2XT//uV1A/7tbP/+8Wj//vVo//79ZPv/AWD7/wlg9/8VXPP/GVjr/xlU6/8dTN//JUjb/ + ylE2/8tPM//MTTP/zE0x/81MMP/NSi//zUkv/85ILP/NSS3/yEsx/8BTPv+qW0r/n3lw/9DIxf/m5ub/ + zMzM/8TExP/CwsL/oZ2d+oF6euFHRER3AAAAQQAAAC8AAAAdAAAADgAAAAUAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADQAAABxJRERhhYCA6Lazs/zY2Nj/2tra/93d3f/Hxsf/ + gm5m/3tJM/+DPB7/ijgU/446Ff+QPRn/kj8c/5NCHv+VRSP/mEcl/5pKKP+cSyr/nk0u/6BRMf+jUzP/ + pFQ1/6ZWN/+pVzj/q1g7/65aPf+wWz7/s10//7RbP/+0Wj3/tlo+/7pbP/+9XUD/vltA/79ZPv+/WT7/ + wVg9/8NXPP/FVjv/xlU6/8dUOP/IUjb/yVE2/8pPNP/MTzT/zE0y/81MMf/NSzD/zUow/85JL//NSS7/ + zUku/8tJLf/ETzf/t1hG/5phVP+5q6b/6unp/9PT0//ExMT/xMTE/6elpfuDfX3nVVFRggAAAEEAAAAv + AAAAHAAAAA0AAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAALAAAAGUpFRWCGgIDp + u7i4/dra2v/c3Nz/39/f/7Svrv98X1L/fEIp/4U4F/+LNRD/jDcR/446Ff+QPBn/kT4a/5JBHf+URSH/ + l0cl/5pIJ/+cSyr/nU4s/59PMP+iUjL/o1Qz/6ZWNv+pVzj/q1g7/6xYOP+lTzL/mkks/5VIL/+QRi// + j0Ur/5FAJ/+bRSn/r1E1/75aPv/AWj//wVk+/8JXPf/DVzz/xVY7/8ZVOv/GUzf/yFM3/8pRNv/KUTX/ + yk80/8xNM//MTTL/zEww/81LMf/NSzD/zUsv/81KL//MSjD/x000/75VQP+jXk//qJCJ/+jl5P/Z2dn/ + xMTE/8TExP+sqan8g3x86VhUVIIAAABAAAAALQAAABoAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAgAAAAkAAAAXRUBAVYeAgOi9urr929vb/9/f3//h4eH/rKaj/3tXR/9/QSX/hzUT/4k0D/+LNQ// + jDYQ/444FP+PPBj/kT4a/5JBHf+UQyD/l0Yj/5lJJv+bSyn/nE0r/59PL/+gUTH/o1Mz/6ZVNv+oVzf/ + pU8w/5tOMv+falb/rIyB/7ujnf/Br6n/vqij/7GTi/+bb2L/hUEv/5I9Jf+1VDr/wls//8FYPf/DVzz/ + xVc7/8ZVOv/GVDj/x1M3/8lSN//JUjX/ylE1/8tPNP/MTjP/zE0y/8xMMf/MTDH/zUwx/81MMP/MTDD/ + zEww/8lMMv/AUz3/q15O/518c//e29n/3Nzc/8XFxf/ExMT/qqio/IR/f+hUUVF6AAAAPgAAACoAAAAX + AAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAABM1MTE/hoCA4bi2tvzc3Nz/4ODg/+Pj4/+nn5v/ + elE+/4E+IP+INRH/iTMO/4kzD/+LNQ//jDYQ/404E/+POxX/kD0Z/5JAHP+TQh//lUUh/5lIJv+bSij/ + nEwr/51OLv+gUTH/o1Mz/6VVNf+iTS7/pGJK/8CooP/Z1tb/4ODh/+Df4P/g39//4t/h/+Tl5v/p6On/ + 0sXC/5RoWv+GNyH/s1M4/8FZPv/BVzz/w1c8/8ZWO//GVTr/x1Q4/8hTN//JUjf/ylI2/8pPNf/LTzT/ + y080/8xOMv/MTjL/zE0y/8xMMf/MTDH/zEwx/8tNMf/JTTL/wlM7/7FdTP+Xcmj/2NPS/9zc3P/FxcX/ + xcXF/6impvuEf3/jSkhIbAAAADsAAAAnAAAAFAAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADwAAACKDfHzR + sK2t+97e3v/i4uL/5eXl/6ujn/98UkD/gz0f/4o0EP+MMw3/jDQO/4szD/+MNA//jDYP/403Ev+POxX/ + kDwY/5E/G/+UQR7/lEMh/5hHJP+aSSf/m0sq/55NLP+fTzD/o1Mz/59MK/+oalH/zsPA/97e4P/Y1dX/ + 1c/P/9XPz//Vz8//1c/P/9bR0f/Y09P/5uXo/+3r7P+ed2v/izcg/7xXPf/CWT7/wVg9/8NXPP/FVjv/ + xlU6/8ZUOv/HVDf/yFM3/8lSNv/JUjX/ylI2/8pPNP/KUTT/y080/8tOM//LTjP/yk4z/8tOM//LTjP/ + yU80/8JTO/+wXk3/lG5k/9jU0//c3Nz/xcXF/8XFxf+hn5/6hYGB1jAwMFUAAAA3AAAAIgAAABAAAAAF + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAIAAAALAAAAHHdxcbKkoKD53t7e/+Tk5P/n5+f/tq+t/4BVQ/+EPyH/izQP/40zDf+MNA3/ + jDQO/4s0D/+MNRD/jDYP/402Ev+OOhT/jzwX/5E+Gv+SQR3/lEMg/5dGI/+ZSSb/mkop/51MK/+eTy// + n0wr/6RZPf/Lu7X/2Nnd/9LMzP/Pysr/z8rK/87Jyf/Oycn/z8rK/9HLy//Tzc3/0szL/+Ti4//q5uT/ + jlZH/6NHLv/DWj//wVg+/8JYPP/DVzz/xVc7/8ZWOv/HVTr/x1Q4/8hTN//IUjf/yVI3/8lSNv/KUjX/ + yk81/8pRNf/KUTT/yk80/8pPNP/JTzT/yk80/8lPNf/AVDv/sF9N/5VwZv/e3Nv/2dnZ/8bGxv/ExMT/ + l5SU93x3d8IhISFNAAAAMgAAABwAAAAMAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAVW1VVfJSPj/fV1dX/5OTk/+rq6v/Dvr7/ + h2JR/4RAIP+MNhD/jTMN/40zDf+MNA3/jTUO/401Dv+NNRD/jTUQ/402Ef+OOhT/jzwX/5A9Gv+SQB3/ + lEIf/5dGI/+YSCb/mkoo/5xMK/+eTSz/nUkn/7mLev/V1df/zsrK/8zHx//Lxsb/ysXF/8nDw//Jw8P/ + ysXF/8vGxv/NyMj/0cvL/9HLy//v8fP/waef/448Jf+9WD3/wVk+/8FYPf/CWD3/w1c8/8VWO//GVTr/ + xlU6/8dUOP/IVDf/yFM3/8hTN//JUzf/yVI2/8lSNv/JUjb/ylI2/8lRNf/JUTX/yVE1/8hRNf/HUTb/ + wFU9/61eTf+afnX/6uno/9XV1f/Gxsb/vby8/42IiPVtaWmgAAAAQAAAACsAAAAWAAAACAAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA9DPz9F + joiI78jGxv/k5OT/6+vr/9XU1v+QcWP/gz8i/443Ef+PNA3/jzQO/440Df+NNA7/jTUO/441D/+NNQ// + jTYQ/402EP+OOBP/jzsV/5A+GP+RPxv/k0Ee/5RDIf+YRiT/mUgn/5tLKf+cSij/n1Ex/8Wro//PztH/ + ycLC/8fBwf/GwMD/xb+//8W/v//Gv7//xb+//8fBwf/JwsL/y8bG/83IyP/f3+D/3tPP/5RMOv+1Ujb/ + wFtA/8BZPv/BWD7/wVk9/8JYPf/FVzz/xlY7/8ZWOv/GVTr/x1U6/8dUOP/HVDj/x1M4/8hUN//IVDf/ + yFM3/8hTN//IUjf/x1I3/8dTN//HUzb/xlI3/71YP/+lYFH/ppGK/+vr6//Pz8//xsbG/7Oxsf+KhYXv + VVNTdgAAADkAAAAjAAAADwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAACAAAACQAAABmFf3/MtbGx/OXl5f/r6+v/6urq/5+Kgv+ERiz/jjkU/5A1Dv+QNQ7/ + kDUO/481Dv+NNA7/jTUO/441D/+NNRD/jjYR/442EP+OOBL/jzoV/5E9F/+RPhr/k0Ad/5NCH/+XRiP/ + mUcn/5tKKf+aSCX/n1Q1/8Wzrv/Kycv/xb6+/8K9vf/BvLz/wLu7/8C7u//Bu7v/wbu7/8O9vf/Fv7// + yMHB/8nDw//X1db/493a/5tZR/+yTjL/wFtA/79aPv+/WT7/wFk+/8JYPf/DVz3/w1c9/8VWPP/GVzv/ + xlY7/8ZWOv/HVTr/x1U4/8ZVOv/GVDj/xlQ4/8dUOP/HVDj/xlQ4/8ZTOP/HVDf/x1M3/8VUOP+6WkT/ + nWFS/7erp//n5+f/x8fH/8fHx/+koKD8h4KC1S0tLU8AAAAwAAAAGgAAAAkAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAEV1XV3ublZX54eDg/+zs7P/t7e3/ + pJmU/4dQOP+MPRn/kjYP/5E2D/+QNQ//kDUP/5A0Dv+ONQ7/jjUO/481D/+PNRD/jjYQ/442EP+PNxH/ + kDoU/5A8F/+SPhn/kj8c/5NCH/+VQyH/l0cl/5pKKP+aRyT/n1Mz/8Cvqf/Gxcf/wbu7/7+6uv+/ubn/ + v7m5/765uf++ubf/vrm5/8C6uv/BvLz/xb6+/8fAwP/V0tP/49zZ/55dSP+xTzL/v11A/75aP/+/Wj7/ + wFk+/8BZPv/CWT7/wlg9/8NYPP/DVzz/xVc8/8VWO//GVjv/xlY7/8ZWOv/GVTr/xlU6/8ZVOv/GVTr/ + xlU4/8ZVOP/FVDr/xlQ4/8VUOP/CVTr/tl1I/5JjVf/Qysj/3t7e/8fHx//BwcH/kYuL93FsbKIAAAA9 + AAAAJgAAABEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAK + JSIiJZCKiurPzc3/7u7u//Ly8v/FwsL/j2VT/4w+Hv+TNxH/kzcQ/5M3EP+SNg//kTUP/5E1D/+QNg// + kDUP/482D/+PNhD/jzYQ/482Ef+PNxH/kDgT/5E7Ff+SPRn/kz8b/5NCHf+VRSD/l0cj/5lJJv+ZRiX/ + nU4v/76lnf/DwsX/vrm5/723t/+8trb/vba2/7y2tv+8trX/vLa2/763t/+/ubn/wry8/8K9vf/W1tf/ + 4dTR/6JWPv+1VTj/vFs//71bP/+9Wz//vlo//79aPv/AWj7/wFk+/8FZPv/CWT7/wlk+/8JYPf/DWD3/ + w1c8/8ZXPP/GVzz/w1c7/8VWPP/FVjz/xVY7/8NWO//DVjv/w1Y7/8NVOv/CVjr/vlc+/61gTf+WeXD/ + 8O/v/9PT0//IyMj/srCw/4uGhupCQUFeAAAAMwAAABwAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAUAAAARdnBwoKynp/vw8PD/8/Pz//Dw8P+SeW//jEUo/5Q7FP+VOBD/ + lDgQ/5Q3EP+TNxD/kjYQ/5I2D/+RNg//kTUP/482D/+QNhD/kDYQ/5A2Ef+PNxH/kDgS/5E6Ff+SPBj/ + kj4a/5NBHf+VQiD/l0Yh/5lIJf+aSSb/mUUj/7GDcf/CwsP/vLe3/7y1tf+7tLT/urS0/7qzs/+7tLT/ + u7S0/722tv++t7f/wbu7/8C7u//l6er/zKui/6RLMP+6W0D/ultA/7tbP/+8W0D/vVs//75aP/++Wj// + v1o//8BZPv/AWT7/wVk+/8JZPv/CWT7/wlg+/8NYPf/DVz3/wlc9/8JXPP/CVzz/wlc8/8NWPP/DVzz/ + wlc8/8FXO//CVjv/wFU7/7paQv+fYVD/saOe/+np6f/IyMj/yMjI/5qVlfp9eHi5CAgIQAAAACcAAAAR + AAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAlDPj41kYuL8trZ2f/09PT/ + 9fX1/6WcmP+LUTj/kz4a/5g6Ev+VOBH/lTgR/5U3EP+TNxD/kzcQ/5M2D/+SNg//kTYP/5A2D/+QNw// + kDcQ/5A2Ef+QNxH/kDcR/5I6FP+SPRj/kz4Z/5M/HP+VQh7/l0Ug/5hHJP+ZSSf/mUYj/6BWN/++q6f/ + vr7A/7qysv+6s7P/urOz/7qzs/+6s7P/urS0/7y1tf+8trb/vLW1/9LS0//o397/rmVP/7FVN/+3XkH/ + t1tA/7pbP/+7W0D/u1tA/71bP/+9Wz//vlo//79aP//AWj7/v1o//8BZPv/AWT7/wVk+/8FZPv/BWT7/ + wlg9/8FYPf/BWD3/wlg8/8FYPP/BWDz/wFc8/8FXPP/BVzz/wFc7/75YPP+zXkn/j2JU/9vX1f/b29v/ + ycnJ/7i2tv+KhYXyUE5OawAAADIAAAAbAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAwAAAA95cnKls6+v/Pf39//4+Pj/4+Hk/4tmVv+QRCX/mTsV/5k7E/+YOhH/lzoR/5c6Ef+VOBH/ + lDgR/5Q4EP+TNxD/kzcQ/5I2D/+RNxD/kTcR/5E3Ef+QNxL/kTgS/5E6E/+SOxf/kz0Y/5NAGv+VQR3/ + lUMf/5hGIf+ZRyX/mkko/5lFIf+nZkv/v7Gu/7++wP+7tbb/ubOz/7ezsv+6s7P/ubOz/7q0tf+9urv/ + 0tPV/+bh4f+8g3D/qlEy/7VdQP+0Wz//tVtA/7ddQP+5W0D/ultA/7tdQP+8W0D/vFtA/71bQP++W0D/ + vls//75aP/+/Wj//v1o//79aP//AWj//wFo+/8BZPv+/WT7/wFk+/79ZPv+/WT7/v1g+/79YPf+/WD3/ + v1g8/75XO/+5WT//pWBO/6GKgf/u7u7/zMzM/8nJyf+dmZn7fHd3vQgICD4AAAAkAAAADwAAAAQAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABzk0NCiRjIzw3t3d//n5+f/5+fn/nJCL/4xOM/+WPhn/ + mzwT/5s7E/+ZOhL/mToS/5g6Ef+XOhH/lzoR/5U4Ef+UNxD/lDcQ/5M2EP+SNxD/kTcQ/5I4Ef+RNxL/ + kjcS/5E4Ev+TOhX/kzwY/5M/Gf+UQBz/lUIe/5hFIP+ZRiT/mkgm/5tKKP+aRSD/pmBD/7qbkP/Bu7r/ + wL/B/7+/wP/Av8H/w8PG/8vLzP/X1dX/18C5/7l4Yf+pUTH/slo9/7NbP/+zWz//tFs//7ZdQP+2XUD/ + t11A/7pdQP+6W0D/u1tA/7xdQP+9W0D/vVtA/71bP/++W0D/vls//75aP/++Wj//vlo//79aP/++Wj7/ + v1o+/79ZPv+/WT7/vlk+/75ZPf++WT3/vlg9/75YPf+8WD3/s11G/5FfT//Tzsv/3t7e/8rKyv+4t7f/ + ioWF8ERDQ2AAAAAuAAAAFwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADGVeXoerp6f6 + +/v7//z8/P/o5+j/jGhZ/5dLKf+cPBT/nDwT/5s8E/+aOxP/mjsT/5k7Ev+YOhL/mDoR/5c4Ef+UOBH/ + lDgR/5Q3EP+TNxD/kjgQ/5M3Ef+SNxL/kjgS/5E4Ev+TOhP/kzwX/5Q+GP+UQBv/lUEd/5hDIP+YRiP/ + mUcl/5pJJ/+cSin/m0ck/55MKf+qaU7/toh4/7yYjP+8mY7/wZ+S/8OYh/+3eWL/qlg6/6hRMf+uWTz/ + r1o9/7FbPv+yWz//s1s//7VdP/+1XUD/tl1A/7ddQP+5W0D/uVtA/7tdQP+7XUD/u1tA/7xbQP+8W0D/ + vFtA/71bP/+9Wz//vVo//75bP/+9Wj//vVo//71aPv++Wj7/vlo+/71ZPv+9WT7/vFk9/7xYPf+9WDz/ + uFk//6ZeSv+ehn3/8O/v/83Nzf/Kysr/mJSU+XRubqoAAAA4AAAAHwAAAAwAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAEAAAAEY6Hh+HY1dX//f39//z8/P+lnJn/lFlB/6JOKv+fPxj/nT0T/509FP+cPBT/ + mzwT/5o8E/+ZOxL/mTsS/5g6Ev+XOhL/lzgR/5U4Ef+VNxD/kzgR/5M4Ef+TOBL/kjgS/5I4Ev+TOhP/ + lDsU/5Q8GP+VPhn/lUAb/5hCHv+YRSD/mEYj/5pIJf+bSSj/nEwp/51MKv+cSCb/nkko/6BMKf+iTSv/ + o04u/6RNLP+kTi7/qVY2/6tZO/+sWTv/rFk8/69aPf+wWj7/sVs+/7NbP/+zWz//tF0//7VdQP+2XUD/ + tl1A/7ldQP+5XUD/uV1A/7pdQP+6XUD/ultA/7tbQP+7Wz//u1tA/7xbQP+7W0D/u1s//7taP/+8Wj// + vFo+/7taPv+7Wj7/u1k+/7pZPf+7WTz/uVg9/7JdRf+MXE3/2tbU/97e3v/Ly8v/tLKy/4mEhOQqKipI + AAAAKAAAABEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHXlhYWpeRkfj39/f//v7+//z8/P+NcGP/ + oVg4/6lRK/+kRyD/nj0U/54+FP+dPRT/nD0U/5w8FP+aPBL/mjsT/5k6Ev+YOhL/mDoS/5c4Ef+VOBH/ + lTgQ/5Q4Ef+UOhH/lDgS/5M4E/+TOhP/lDoT/5Q9F/+UPhn/lT8a/5hCHf+YQx//mEYg/5pHJP+aSCb/ + nEsn/51NKv+fTy7/n08v/6BPMP+iUjD/o1Iy/6VVNf+nVjf/qFc3/6lXOv+qWTr/q1o8/65ZPP+vWj3/ + sFo+/7FbPv+yWz//s1s//7RdP/+1XUD/tV1A/7ZdQP+2XUD/t11A/7ldQP+5XUD/uV1A/7pbQP+6W0D/ + ultA/7pbP/+6Wz//uls//7paP/+6Wj//ulo//7paPv+6Wj7/uVk9/7lZPf+5WT3/t1g8/7VaP/+hXkn/ + pZKL/+3t7f/MzMz/x8fH/46Hh/dkYGCJAAAAMAAAABgAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAL + dm9vqr+7u/3//////////7u2tf+RXEX/qVYz/6pRKv+pTSj/o0Ib/54+FP+ePRX/nT0U/509FP+cPBT/ + mzwT/5o8E/+ZOhL/mToS/5g6Ef+XOhL/lzgQ/5U4Ef+UOhL/lToS/5Q4E/+UOhP/lDoT/5U8Ff+VPhn/ + lT8a/5VAHP+YQh7/mUUg/5lGI/+aSCX/m0on/55MKP+gTiv/n04u/6JRMP+kUjH/o1Iy/6ZUNP+nVTb/ + qFY2/6lXOP+pVzr/qlg6/6tZPP+sWj3/rlo9/69aPf+wWz7/sVs//7JdP/+zXT//tF0//7RdQP+1XUD/ + tV1A/7ZdQP+2XUD/tl1A/7ddQP+3XUD/t1tA/7lbQP+5Wz//uVs//7lbP/+5Wz//uVs//7laPv+3Wj7/ + t1k9/7dZPf+3WT3/tlg8/7RYPf+sXkf/i2JU/+ro6P/X19f/zMzM/6Whofx+d3fCAAAANwAAAB4AAAAM + AAAAAgAAAAAAAAAAAAAAAAAAAAMAAAAPjIWF6OHg4P///////////5SCev+fWz//rVQv/6xRK/+sUiv/ + p0ok/6A/Ff+gPhX/nz4V/54+Ff+dPRT/nTwU/5w9E/+bOxP/mjsS/5o7Ev+ZOxL/mToR/5c4Ef+VOhL/ + lzoS/5U6Ev+VOhP/lTsU/5Q8E/+VPBf/lT0Y/5c/Gv+XQR3/mEIe/5pFIP+bRiT/lD8c/4Y3F/9/NRX/ + gDYY/4E3Gv+COBv/gjoc/4Q8Hv+DOx7/hj0g/5dMLv+nVjf/qFc4/6pYOv+rWTv/q1k7/6xaPf+uWj3/ + r1o9/7BbPv+xWz7/sls+/7JbP/+zWz//s10//7RbP/+0XT//tF0//7VdQP+1Wz//tV0//7ZbP/+2Wz// + tls//7ZbP/+2Wj7/tlo+/7ZaPv+1Wj3/tVk9/7VZPf+1WTz/tFg7/7RYO/+vWkH/lVtJ/72zr//l5eX/ + zc3N/7q4uP+LhYXsMTExSAAAACUAAAAPAAAAAwAAAAAAAAAAAAAAAAAAAAVfWFhTlI6O9/v7+/////// + 8fDx/41mVv+oWjv/r1Ms/65SK/+uUiv/rFEr/6ZHHv+gPxX/oD8X/58+Ff+fPRX/nj0V/509E/+dPRT/ + mzwT/5s8E/+aOxP/mTsS/5k6Ev+YOhL/lzsS/5c6E/+VOxP/lTsU/5U7E/+VOxT/lz0Y/5c/Gv+YQBv/ + mEEd/5lDHv+aQyD/o2lR/5x/cv+UeW7/lXlv/5d7b/+YfHL/mn10/5yBd/+iiH3/lXdq/3lCLP+XSy7/ + qVc4/6hXOP+pVzj/qlg6/6tZPP+rWjv/rFo8/65aPf+wWz7/sFs+/7FbPv+xWz//sls//7NbP/+zWz// + s10//7NbP/+0Wz//tFs//7RbP/+0Wz//tFs//7RbPv+0Wj7/tFo+/7RaPv+0Wj3/tFk9/7RZPf+0WTz/ + s1g7/7NYO/+xWDz/oVtE/5d9c//x8fH/zs7O/8zLy/+Nh4f4ZmFhgwAAACwAAAAUAAAABQAAAAAAAAAA + AAAAAAAAAAdqY2OSs6+v+v7+/v/+/v7/uLOx/5hgSf+uWjb/sFMu/7BSLP+uUiz/rlIs/6tRKf+kQhv/ + oj4V/6A+F/+fPhX/nz4V/549Ff+dPRT/nT0U/5w8E/+bOxP/mjsT/5k7E/+ZOhL/mDsS/5g7Ev+XOhP/ + lzsU/5c8E/+VPBT/lzwV/5c+GP+YPxr/mEAc/5c/Gf+dTiv/x7m1/87R1P/Ny83/zczN/87Nzv/PztH/ + 0tHS/9XU1f/a2t3/3t7f/5JvYf+JPiH/p1U1/6dWN/+nVzj/qFc4/6lYOv+qWDv/q1k7/6xaPP+uWTz/ + rlo9/69bPf+vWj3/sFs+/7FaPv+xWz//sVs//7JbP/+yWz//sls//7NbP/+zWz7/s1s+/7NbPv+zWj7/ + s1o9/7NaPf+zWj3/slk9/7JYPP+yWDv/slg7/7JXOv+xVzr/p1k//4hfUP/n5eT/2dnZ/8/Pz/+fm5v5 + d3FxtQAAADIAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAp7dHTL0s/P/v39/f/9/f3/mYqE/6JdQf+xWTX/ + sVUu/7FULv+wUy7/r1Ms/69TLP+qTij/pEEZ/6I/F/+iQBf/oD8X/6A/F/+fPhX/nz4V/54+FP+cPRT/ + nDwU/5s8E/+aOxP/mjsS/5k8E/+ZOxP/mDoT/5g8FP+YPBT/lzwU/5c8F/+YPxn/mEAa/5c8F/+fUTH/ + ysC+/8zJyf/KxcX/y8XF/8vHx//Mx8b/zcnI/87Kyv/Tzcz/3drd/5p4bP+HPR//plQz/6VUNf+mVTb/ + plY2/6dWN/+oVzj/qVc4/6pYOv+rWTv/q1k7/6xaPP+sWjz/rlo8/69aPf+vWT3/r1o9/7BaPf+wWj3/ + sFo+/7FaPf+xWj3/sVo9/7FaPf+xWj3/sVk9/7FZPP+xWTz/sFg8/7BYO/+wWDv/sFc6/7BXOP+wVjj/ + qlg7/49XRP++t7T/4uLi/8/Pz/+zsbH+gnx82AoKCjgAAAAdAAAACgAAAAEAAAAAAAAAAAAAAAyFfn7u + 6Ofn//v7+//8/Pz/j3Jn/61ePv+1WDL/s1Yv/7NWL/+xVS//sVUv/7BULv+vVC//qk0m/6RBGP+jQBf/ + o0AX/6I/F/+gPhX/nz4V/54+FP+dPRT/nT0U/5w9FP+bPBP/mjsT/5k8E/+ZOxP/mTsU/5g8Ff+ZPBT/ + mDwU/5g8Ff+YPRj/mD8Z/5c8FP+fUS//zMLA/8/Mzf/OyMn/zsnJ/87Jyf/Oycn/z8rK/9HMzP/Vz8// + 3trd/5h4bP+COhz/pFIy/6RTM/+kVDT/pVQ1/6ZVNv+mVjf/p1Y3/6hXOP+pWDr/qVk6/6pYO/+rWTv/ + q1k7/6xZPP+sWTz/rlo8/65aPf+uWj3/rlo9/69aPf+vWj3/r1k8/69ZPP+vWTz/r1k8/69YO/+vWDv/ + r1c7/69XO/+vVzr/rlc4/65WN/+uVjf/rFY5/5hUPf+ci4T/6Ojo/9DQ0P/DwsL/hX9/8CAgID8AAAAg + AAAADQAAAAIAAAAAAAAAAGFbW0mMhob1+fn5//r6+v/g39//k2dW/7VhQP+2WDL/tVYw/7RWMP+zVi// + slUv/7FVL/+xVS//sFUv/6pLJP+kQRj/pEAX/6RAF/+iPxX/oD8X/6A+Ff+ePhX/nj4V/589FP+cPRT/ + nDwT/5o7E/+aPBP/mjwU/5o7FP+ZPBX/mT0V/5k9FP+ZPRf/mD0Y/5c7E/+fTiz/zsK//9LP0f/Ry8v/ + 0cvL/8/Kyv/Ry8v/0cvL/9LMzf/Tzc3/3tzd/6eQh/93NBr/nk0u/6NTMv+kUzP/pFQz/6VVNf+kVTX/ + pFU2/6dWN/+nVzf/qFc4/6lXOP+pWDr/qVg6/6pYOv+rWTv/q1k8/6tZO/+rWTv/rFk8/6xZPP+sWTz/ + rFk7/65YO/+uWDv/rlg4/65XOv+uWDv/rFc6/6xXOP+sVzj/rFY3/6xWN/+sVTb/qlU3/55VPP+KbWL/ + 6unp/9LS0v/R0dH/hoCA9VZRUXEAAAAkAAAADwAAAAMAAAAAAAAAAGliYneemZn19vb2//f39/+7tbP/ + mWBJ/7diPv+2WDH/tVgx/7VXMf+0VjD/tFYw/7NWL/+yVS//sVUv/7BUL/+qSyT/pUAY/6VBGP+kQBj/ + o0AY/6JAF/+gPxX/nz4V/58+Ff+ePRX/nT0V/5w9E/+cPBP/mz0U/5o8FP+aPBX/mj0V/5o9Ff+ZPRX/ + mT0X/5c6E/+dSSX/y7qz/9TS1P/Ry8r/0cvL/8/Jyv/Rysr/0crK/9HLy//Ry8v/2NXW/8O3tP9wOiT/ + kUMk/6RTMf+iUTH/olIx/6NTM/+kUzP/pFQ0/6VUNf+kVTb/plU2/6dWNv+nVjf/p1Y3/6hWN/+pVzj/ + qVc4/6lXOP+pVzj/qlc6/6pXOv+qVzr/q1c6/6tXOv+rVzj/q1c4/6tWOP+rVjj/qlY3/6tWN/+qVTb/ + qlU1/6pUNf+qVDX/qlM0/6JVOv+DWEj/3NrZ/9fX1//S0tL/kYuL82dhYZcAAAAoAAAAEQAAAAQAAAAA + AAAAAG1lZZyxra339PT0//X19f+jmZX/pV9E/7pgPP+3WDH/t1ky/7ZYMv+2VzH/tVcx/7RXMf+zVjD/ + s1Yw/7JWMf+xVjD/qksk/6VBGP+lQRj/pEEY/6NAF/+iPxf/oD8V/58/F/+fPhX/nz4V/549Ff+dPBT/ + nDwU/5s9FP+cPBT/mz0V/5o9Ff+aPhX/mj4X/5k7E/+ZPhj/w6ed/9TU1v/Pysn/z8rJ/87IyP/NyMj/ + zcjI/83HyP/NyMj/zsnJ/9jV1v+Mal3/ci4R/59OLv+iUS//olEv/6NSMf+jUjL/o1Iy/6NTMv+jUzP/ + o1Q0/6RVNf+lVTX/plU2/6dWNv+nVjb/p1Y2/6dWN/+oVjf/qFc3/6hWN/+pVjf/qVY3/6lWN/+pVjf/ + qVY3/6lVNv+pVTb/qVU2/6lVNv+pVTX/qVQ0/6hTNP+pUzT/qFIy/6RUNv+IUz7/xsG//9vb2//T09P/ + n5ub9mtlZbQAAAArAAAAEwAAAAUAAAAAAAAAAG9nZ7jBvr768vLy//Pz8/+XhoD/q2FE/71fPf+6WTP/ + ulkz/7pZNP+3WTP/tlgy/7VXMv+0VzL/s1cx/7NWMf+zVjH/sVYx/6tNJf+nQhn/pUAY/6ZBGf+lQBj/ + pEAX/6I/F/+gPhX/oD4V/58/Ff+ePRX/nT0U/5w9FP+cPBT/nTwV/5s8F/+bPRX/mj0V/5k8FP+XNg3/ + u5CA/9PT1v/Mx8f/y8bG/8rFxf/KxcX/ycPD/8nCwv/Jw8P/ysPD/9LOz//GvLn/cEAr/381GP+gTy7/ + ok8u/6BPL/+gUTD/olEw/6NSMf+jUzL/o1Iz/6NTM/+jUzP/pFQ0/6VUNP+lVTX/plU1/6ZVNf+mVTb/ + plU2/6dVNf+nVTb/p1U2/6dVNv+nVTX/p1Q1/6dUNf+nVDX/p1Q0/6dSNP+nUzT/p1Mz/6dSM/+nUjL/ + p1Ex/6VUNf+LTzj/rqWh/9zc3P/T09P/rqqq+m9pacoAAAAuAAAAFQAAAAYAAAAAAAAAAHBoaMvOzMz9 + 7+/v//Dw8P+TeW//s2VG/71gO/+8WzX/ulo1/7pZNP+5WTP/uVgz/7dYM/+2VzL/tVcy/7RXMv+0VzH/ + s1cw/7FXMf+uTif/p0Ia/6ZBGP+lQRj/pEEY/6NBGP+jQBf/oj8X/6A+F/+gPhX/nz4V/549FP+dPhX/ + nT0V/509Ff+cPhf/nD4X/5s+Ff+YNg3/rm5V/83MzP/JxcX/yMLC/8fAwP/Gv7//xsC//8W+v//Fv7// + xr+//8W/v//U09T/tqag/2k0Hv+ANhf/n00r/6BPLP+fTi7/n08s/6BPLv+gUTD/oFEw/6BRMf+iUjH/ + olIy/6NSMv+jUzL/o1My/6RTM/+kUzP/pFMz/6VTM/+lUzT/pVM0/6VTNP+lUzP/pVMz/6VTM/+lUjP/ + pVIy/6VSMv+lUTL/pVEx/6VRMf+lTzD/pU8v/6NRMv+OUDf/mouF/93d3f/U1NT/urm5/XFpadgAAAAx + AAAAFgAAAAYAAAAAAAAAAHFpadvY19f+7e3t/+7u7v+PcWT/u2hG/75gOP+9XTX/vFs1/7tbNf+6WjT/ + ulk0/7lZM/+3WDP/tlcz/7ZXMv+1VzL/tFcx/7NXMf+zVzL/r1Eq/6lFHP+mQRf/pkEZ/6VBGf+kQBj/ + o0AY/6NAGP+gPxf/nz8V/58+Ff+ePhT/nT4V/549F/+dPhf/nD0X/5w+F/+aNw//ok0p/8OzsP/Hxcj/ + w729/8K9vf/Au7v/wbu7/8C6uv+/urr/v7q6/8C6uv/Cvb3/1tXW/7enoP9qNR3/fTQV/55MK/+gTSv/ + n00r/59OLP+fTS7/oE8u/6BPL/+gTzD/oFEw/6BRMP+gUTD/oFEw/6JRMf+jUjH/o1Ix/6NSMv+jUTL/ + o1Ix/6RSMv+kUjL/pFIx/6NRMf+jUTH/pFEw/6NPMP+jTzD/o08w/6NPL/+jTi//o04u/6JOMP+TTzX/ + inhw/93d3f/V1dX/xcTE/nFra+QAAAAyAAAAGAAAAAcAAAAAAAAAAHJqauXh4OD/7e3t/+3t7f+QbV7/ + wGtI/8BfN/++XTX/vV01/7xbNf+7WjT/ulo0/7pZNP+5WTP/uVgz/7dYMv+2WDL/tVcy/7RXMv+zVzH/ + s1gy/7BTLP+qSB//p0EZ/6ZCGf+lQRn/pEEY/6RAF/+kQBf/oj8X/6M+Ff+fPhT/nz4V/50+Ff+ePhf/ + nT4X/5w/GP+dPRT/mzgO/7SFdP/Dw8f/v7q7/765uf+9t7f/vbe2/7y0tP+7tbX/u7W1/7y2tv+9trf/ + wLu7/9rY3P+9q6b/bjgk/3kwEv+cSij/oEwq/55MK/+eTCv/nk0r/59NLP+fTi7/n04u/59PLv+gTy7/ + nk8v/6BOL/+gTy//oE8w/6BPMP+iTzD/ok8w/6JPL/+iTzD/ok8w/6JPL/+iTy//ok4v/6JOL/+iTi7/ + ok4u/6JNLv+iTSz/ok0r/6FNLf+UTTL/g21l/9zc3P/W1tb/zczM/3JqausAAAAzAAAAGAAAAAcAAAAA + AAAAAHJqauzl5eX/7Ozs/+zs7P+Ta1z/xG1I/8FgOP/AXjb/v142/75dNf+9XTX/vVs1/7tbNf+7WzX/ + u1s0/7paNP+5WjT/t1k0/7ZYM/+1WDL/tFgy/7RYM/+yVTD/rEwl/6dDGv+mQBj/pkIZ/6VBGf+kQBj/ + pEAY/6NAGP+iPxf/oj8X/58/Ff+ePxf/nz8X/54+F/+dPxj/mzgP/6RRLv++sK7/vbu9/7q0tP+6s7P/ + ubOz/7mysv+5srL/ubKy/7eysv+6s7P/vLW2/7+5uf/e3N//zsG9/3hJNf9wKAv/mEYk/59MKf+eSyj/ + nUsp/55MKv+eTCr/nkwr/55NKv+eTSv/nk0s/55MLP+eTSz/nk0u/55MLP+fTS7/n00u/59NLP+fTS7/ + n00s/59NLP+fTSz/n0wr/59MK/+fTCv/n0wr/59LK/+fSyr/n0sp/59LKv+VSi7/gGhe/9zc3P/X19f/ + 0tLS/3Nra/AAAAA0AAAAGAAAAAcAAAAAAAAAAHJqau/p6Oj/6+vr/+vr6/+Xa1r/x29L/8JhOv/BXzb/ + wF83/79fNv++Xjb/vl42/75dNv+9XTX/vF01/7tbNf+6WjX/uVo0/7lZNP+2WTT/tlgz/7VYM/+0WDP/ + tFgz/7BRKf+pRhz/p0EY/6dBGf+lQRn/pUAZ/6RBGP+jQBj/oj8X/6I/F/+gPxf/nz8X/58+GP+ePxj/ + nj8Y/5w3DP+vdV7/vLq9/7ezs/+3srH/t7Gx/7axsf+2sLD/tbCw/7WwsP+3sbH/urOz/7u1tf++ubn/ + 3t7f/+Hc2f+FXUz/ayYJ/5NDIf+fSyj/nUon/51LKP+dSyj/nUsp/51LKf+dSyn/nUsq/51MKv+dTCr/ + nEwq/51LKv+dSyr/nUsq/51MKv+dSyr/nkwq/55MKv+eSyr/nksp/55LKf+eSyr/nkop/55KKf+eSin/ + nkko/51JKP+TSSr/f2Zc/9vb2//Y2Nj/1tbW/3JqavMAAAAzAAAAGAAAAAcAAAAAAAAAAHJqavLq6ur/ + 6urq/+vr6/+abFn/y3JO/8VhO//CXzr/w184/8BfN//AXzb/v182/75fNv++Xjb/vl01/71dNf+7WzX/ + uls1/7tbNf+5WjT/uVkz/7dYMv+1WTP/tVgy/7RYM/+yVS//rEoj/6hCGf+nQhj/pkIZ/6RCGf+kQRj/ + pUEY/6Q/F/+iPxf/oEAX/6BAF/+gPxf/oD8Z/549FP+ePRT/s41//7q7vv+1sLD/ta+v/7Wvr/+1r6// + tK+v/7Wvr/+1r6//t7Gx/7q0tP++t7f/wbu8/97c3v/v7Ov/j2pa/2klCP+UQiD/nkkm/5tIJv+cSCb/ + nEgn/5xKJ/+cSib/m0oo/51KKP+cSSj/nEoo/5tKKP+cSij/nEkn/5tKJ/+cSif/nEoo/5tKJ/+bSij/ + nUko/51JKP+cSSj/nUgn/5xJJv+bSCb/nEgn/5xIKP+TSCn/f2Ra/9vb2//Z2dn/2dnZ/3JqavQAAAAy + AAAAFwAAAAcAAAAAAAAAAHJqau/n5+f/6urq/+rq6v+ba1n/zXNR/8ZjPP/FYTr/xWE6/8NgOP/CXzj/ + wV84/8BfN/+/Xzf/vl82/75dNv+9XTX/vV01/7tbNf+7WjX/ulo1/7daNf+3WTT/tlgz/7VYM/+1WDP/ + s1cy/69RKf+rRx7/qEEY/6ZBGP+mQRj/pUEY/6VBGf+kQBj/o0AX/6JAGP+gPxj/oj8Y/6A/Gf+eOxD/ + o0gh/7aZjv+5ur7/tbCw/7Wvr/+1r6//tK+v/7Surv+1r6//trGx/7qzs/++t7f/w76+/8a/v//g3t// + 8/Dw/5BsXf9qIwX/lUMg/51IJP+bRyT/nEgk/5tHJP+bRyX/m0gm/5pIJv+aSCX/m0gl/5tIJv+aSCX/ + mkgm/5tIJv+aRyX/mkcm/5pIJv+aSCb/m0cl/5tHJf+bRyX/mkcl/5tHJf+bRyX/m0gm/5tIJv+TSCj/ + fmVb/9vb2//a2tr/19fX/3JqavMAAAAwAAAAFgAAAAYAAAAAAAAAAHJqauzi4uL/6urq/+np6f+aa1n/ + znZV/8hmQP/GYTv/xmE6/8VhOv/CYDj/wl84/8FfOP/AXzf/v183/79eNv++Xjb/vl41/71dNf+8WzX/ + uls1/7pbNf+5WTT/uVk0/7dZM/+1WDP/tVcz/7RYM/+zVjH/rk0n/6lFHP+nQhj/p0EY/6ZBGP+lQRj/ + pEAY/6RAF/+iQBj/oj8Y/6I/GP+gQBn/nToQ/6NIIf+3lIj/urq9/7Wxsf+1rq7/tK+v/7Wvr/+1r6// + trGx/7qzs/++ubn/w729/8rDw//LxsX/5uXm//Xx8f+EWUf/cCYG/5lGIf+cRiH/m0Yh/5pGI/+bRiP/ + mkYj/5pHJP+aRyT/mkYk/5lGJP+aRiP/mkck/5lGJP+ZRiT/mUYj/5lGJP+ZRiT/mkYk/5pGJP+aRiT/ + mkcl/5pHJf+aRyX/mkcl/5tHJv+QRin/fmdd/9zc3P/b29v/1dXV/3JqavAAAAAuAAAAFQAAAAYAAAAA + AAAAAHJqauXc29v/6enp/+jo6P+cbVz/zndW/8pqQ//IYTr/yGI7/8dhO//GYTj/w2E4/8NfOP/CXzf/ + wl83/8FfN/++Xjb/vl42/75eNf+9XTX/vV01/7xbNf+7WzX/ulo0/7paNf+3WTT/tlgz/7RZM/+1WDP/ + tFgz/7JUL/+uTCX/qEUc/6dBGP+lQRf/pUEY/6VAF/+kQBf/o0EY/6JBGP+iQRn/okAa/546Ef+jQhr/ + tIh4/7q5u/+1sbP/ta6u/7WwsP+1sLD/ubOx/7u1tP+/ubn/xb6+/8rGxf/Ry8v/1M3O//Dw8f/q4t// + cj8o/3wvDv+cRiH/mkMf/5lDH/+aRSD/mUYg/5pFIP+ZQyD/mEUh/5lDIP+ZQyH/mUMg/5hFIf+YRiH/ + mUUh/5hFIf+YRSH/mUUj/5lFI/+ZRSP/mkUj/5pFI/+aRSP/mkcl/5pGJv+NRin/gWxj/93d3f/c3Nz/ + 0dDQ/3FpaeoAAAArAAAAEwAAAAUAAAAAAAAAAHJqatrU0tL+6Ojo/+fn5/+gc2H/zHdW/81tSP/IYzv/ + yGM7/8hiO//HYTv/xmE6/8VhOv/DYDj/w184/8JfN//AXzj/wF83/8BfN/+/Xjb/vl42/75bNv+8XTb/ + vFs1/7tbNf+6WjT/uVo0/7dZNP+2WTP/tVgy/7VYM/+0WDP/sVMu/6xMJf+oRRz/p0EY/6ZAF/+lQBj/ + pEAY/6NBGP+jQRj/o0AZ/6JAGv+fOxL/oD4T/7OBbf+8ubv/tbO0/7awr/+5sbL/urOz/722tv/Bu7v/ + x8DB/8zHx//TzM3/2NPU/9zW1v//////zLqz/2YoDf+NOBX/nEUe/5lCH/+ZQh7/mUMf/5lDH/+ZQx// + mEIf/5lDIP+ZQyD/mUMg/5hDIP+YQyD/mEMh/5hFIP+YQyD/l0Uh/5dFIf+YRSP/mEUj/5hFI/+ZRSP/ + mUUj/5hGJf+JRSr/hXJr/93d3f/d3d3/y8nJ/m5mZuEAAAAnAAAAEQAAAAQAAAAAAAAAAHFpacrIxsb9 + 5+fn/+bm5v+hemz/ynRS/9J0Tv/KYzv/yWQ8/8pjPP/IYjz/yGI8/8djO//FYjv/xWE7/8NhO//CYDr/ + wWA4/8FfOP/BXjj/wF43/79eN/+9XTb/vV02/7xdNf+7XTX/uls1/7paNP+3WjT/tlkz/7ZZM/+1VzP/ + tVgz/7NYM/+yVDD/rk0n/6lHHf+nQhn/pUAY/6RAF/+jQRn/o0EY/6NAGf+jQBr/oD4U/6A7EP+yeWH/ + u7m6/7m0tf+6s7P/vLW2/8C5uv/Dvr7/ycPD/8/Jyv/Uz8//2tXV/97Y2P/m4uP//////517bP9vJQT/ + mUEc/5pCHf+aQx7/mUIf/5lDH/+ZQx7/mEIf/5lDH/+YQx//mUMf/5hDIP+YQyD/mEMg/5hDIP+YQyD/ + l0Ig/5dDIf+YQyH/l0Mh/5hFIf+YRSH/mEUj/5dGJf+ERCn/joB7/97e3v/e3t7/wb+//WxkZNQAAAAk + AAAADgAAAAMAAAAAAAAAAHBpabW6t7f65ubm/+fn5/+fg3n/ynJP/9R5Vf/LYzz/y2Y+/8tlPv/KZT7/ + ymQ9/8hkPf/GYzz/x2I8/8ZiO//FYTv/w2E7/8JhOP/BXzj/wV84/8FeN/+/Xjf/vl03/75dN/+9XTb/ + vF02/7xdNP+6WzT/uVs0/7daNP+3WDT/tlkz/7VYMv+0WDP/s1gz/7JVMP+vTyn/qkkf/6ZCGf+lPxX/ + pEAX/6RBGf+jQBn/pEEa/6A9FP+gOg//s31p/727vf+7t7n/vrm5/8K9vP/HwcH/y8bG/9LMzP/X0tL/ + 3dfX/+Ld3f/i3d3/9/b3/+nh3v9xNx//iDUS/5xDH/+aQh3/mkId/5pBHv+ZQh//mUMf/5lDH/+ZQh7/ + mEMf/5hDHv+YQh//mEIg/5hDIP+YQyD/l0Mg/5dDIP+XQyD/l0If/5VCH/+VQh//l0Mg/5ZGJf+ARCv/ + nJSS/9/f3//f39//tLGx+mlhYcMAAAAgAAAADAAAAAIAAAAAAAAAAHBoaJirpqb35eXl/+bm5v+uk4r/ + yG5L/9iCYf/NZT3/zGY+/8tmPv/LZT7/y2Q9/8pkPf/JYzz/yGM8/8djPP/GYjv/xWE7/8NhO//DYTr/ + wmA4/8FgOP/BXzf/wF84/79eN/++Xjb/vV02/7xdNv+7XTX/u101/7lbNf+3WzT/uVo0/7ZZNP+2WTP/ + tVgy/7NXMv+zWDP/slYx/69SLP+rTCX/p0Yd/6VBGf+kQRj/pEAY/6NAGf+gPRP/oj0T/7aPgP/CwsX/ + wr29/8bAwf/Lxcb/z8vK/9XP0f/a1dX/4Nra/+Pe3v/o4uH/6eTk//////+lg3b/ciQE/5xDHv+bQx3/ + mkMd/5pBHf+ZQh3/mkId/5lCHv+ZQh7/mUIf/5lDHv+YQh7/mEIe/5hCH/+XQh//l0Mf/5dCH/+XQh// + lUMe/5dCH/+VQh//lUIf/5NEIv9/STL/sqyq/+Dg4P/g4OD/o5+f9mRdXaoAAAAcAAAACQAAAAEAAAAA + AAAAAG9nZ3GYk5P05eXl/+bm5v+3qaX/v2tK/9uHZ//RbEb/zWU9/8xmPv/MZj7/y2U+/8tlPv/KZT3/ + yWQ8/8ljPf/HYzz/x2I8/8ZiO//FYjr/w2E6/8FhOv/BYDj/wV84/8FfOP+/Xjf/v102/75dNv+9XTX/ + vF02/7tbNf+6XTT/uVs0/7daNP+3WTT/t1o0/7ZZM/+0WDP/tFgz/7JXMv+yVzL/sVUw/65RKv+qSyT/ + p0Ye/6VCGv+kQRn/oDoP/6hNKv/Csq//yMbI/8vGxv/Pysr/1M7O/9nU1P/f2Nj/4t3d/+Tg4P/p5OT/ + 6uTk//z8/f/f087/cC8T/5M8GP+dQh3/mkEd/5pCHf+ZQh3/mkId/5lBHf+ZQh3/mUId/5lCHv+YQh7/ + mEIe/5hCHv+YQh7/l0If/5dCHv+XQh//l0Ee/5VBHv+VQh//lUIf/5BBIf96UD7/yMfG/+Hh4f/h4eH/ + kYyM81tVVYkAAAAXAAAABwAAAAAAAAAAAAAAAG1lZUGIgoL05OTk/+bm5v/LxcL/uG5S/92Jav/VdlH/ + z2Q7/89mP//OZj//zWY+/8tmPv/LZj7/y2U+/8tlPf/JZD3/yWQ8/8hkO//HYjz/xWI8/8VhOv/CYTr/ + wV84/8FgOv/BYDj/wV84/75eNv+/XTf/vl02/71dNf+8XTT/ul00/7pbNf+3WzT/t1s0/7dZNP+2WTT/ + tlk0/7VYM/+0VzL/s1Yy/7JXMv+xVjH/r1Qw/6xSK/+pTCb/p0gg/6M7Ef+8jHv/zs7R/87Jyf/Tzc3/ + 2NPT/9zX1//g3Nz/5ODg/+jj4//r5ub/7ejo//Pw8f/8+vn/iVdD/4QuC/+eQx7/m0Ed/5tBHP+bQRz/ + mkId/5pCHf+aQh3/mUIc/5hBHf+ZQh7/mEEe/5hCHv+YQh7/mEEe/5dCHv+XQh3/lUEe/5VBHf+VQR3/ + lUEe/4k+Hv99YVT/29vb/+Li4v/i4uL/gnx89ExGRl4AAAATAAAABQAAAAAAAAAAAAAAAAAAAAOCe3vs + 0tHR/+fn5//f3t7/snRb/9+Ma//dhmT/0WU7/9FoP//PZj//zmY+/81mPv/MZj7/zGY+/8tmPv/KZT7/ + ymU9/8lkPP/IZDz/xmM8/8diO//FYjv/xWE7/8NgOv/BYDr/wV84/8FfOP/AXjf/v143/79dNv+9XTb/ + vF02/7xdNf+6XTT/uls1/7dbNP+3WjT/t1o0/7ZZM/+1WTP/tVgz/7NXMv+zVjH/sVUx/7FWMf+wVjH/ + r1Uw/6pKJP+8dlv/4N3e/97c3P/e2Nj/39nZ/+Da2v/j39//5uLi/+rj4//s5ub/7enp/+/r6/////// + q4l8/3ooBf+dQhv/m0Ec/5tBHP+bQRz/mkEc/5pBHP+aQRz/mkEc/5lCHf+ZQh3/mEAc/5hBHf+YQRz/ + mEEc/5dBHf+XQR3/lUEe/5VBHf+VQB3/lEEe/4M9IP+Ab2j/5ubm/+Xl5f/T0tL/e3R07AAAACQAAAAP + AAAAAwAAAAAAAAAAAAAAAAAAAAF9dXXHv729/ufn5//j4+P/rYNz/9uBXf/ilXn/02tD/9JoP//RaD// + z2g//85oP//NZj7/zWY+/8xmPv/LZT7/y2U+/8pkPf/JZD3/yWQ8/8hjPP/HYjv/xWI7/8ViO//CYTr/ + wmA4/8FgOP/BXzj/wF84/8BeN/++XTf/v102/75dNf+8XTX/u101/7ldNf+5WzT/t1o0/7daNP+2WTT/ + tlk0/7RYM/+0VzL/slYx/7JVMf+xVTD/sFUx/69PKv+3akn/5t/d/+zr7P/t6en/7urq/+3q6v/u6ur/ + 7enp/+7q6v/v6+v/7+vr/+/q6v//////w6ug/3YoB/+bPhj/nEAa/5tAG/+bQBv/mj8a/5pAG/+aQBv/ + mj8a/5lAG/+ZQBv/mUAb/5hAG/+XQBv/lz8b/5c/G/+VPxz/lUAc/5VAHP+VQBz/kUEf/39EK/+Zko// + 6enp/+jo6P/CwMD+cWtrzQAAAB0AAAAKAAAAAQAAAAAAAAAAAAAAAAAAAABwaGiKpqKi+eXl5f/m5ub/ + tqCY/9J1UP/pp43/2HZR/9NmPf/SakD/0mk//9FpP//PaD//zmg//81mP//MZj7/y2Y+/8xmPv/LZT7/ + y2U9/8lkPf/JYz3/x2M8/8diO//GYjv/xWI7/8NgO//CYDr/wWA4/8FfOP/AXjb/wF01/8BeNv+/Xjf/ + vV02/7xdNv+7XTX/ul00/7dbNP+3WTT/t1o0/7ZZNP+2WTT/tVgz/7NXMf+zVjD/slUw/7BOKP+3Zkb/ + 6ODd/+/v8P/v7Oz/8e7u//Tw8P/08fH/9vPz//f09P/28/P/9vHx//Tw8P//////2MnD/4I8Hf+cQh7/ + oEgk/59HIf+eRiD/nUUg/51FH/+cQx//m0Mf/5pDH/+bQx//mkMf/5pDH/+aQyD/mkUh/5pGI/+ZRiP/ + mkcl/5pHJv+aSSf/lEkp/4FXRf/Lycj/7Ozs/+vr6/+ppaX6Y1xcnQAAABcAAAAHAAAAAAAAAAAAAAAA + AAAAAAAAAABvZ2dHjYeH9+Dg4P/p6en/0s3M/8VtSf/rqY//4pJ0/9RmPf/UakH/02pB/9NpQP/SaED/ + 0Wk//89oP//OZj7/zmY+/8xmPv/LZj7/y2U+/8tlPv/KZD3/yWM9/8hjPf/HYjv/xmI7/8ZiO//DYTr/ + wmE6/8FfN/+5VS7/n0gl/59HJP+2VzL/wV83/79eN/+9XTb/u101/7pdNf+6WzX/uVo0/7daNP+3WjT/ + tlk0/7VYM/+0WDP/s1cy/69OJ/+6bEz/7ujo//Px8//z8O//9fHx//bz8//29PT/9vT0//f19f/49fX/ + 9/X1//bz8///////5NnV/4xKL/+iSyf/qFQx/6ZTL/+mUi//pVIv/6RRLv+kUSz/pFEs/6NPLP+iUSz/ + oE8u/6BPLv+gTy7/n04r/6BPLv+fTyz/nk4s/55OLP+cTi3/kk0w/4JoXf/s7Oz/7+/v/+vq6v+LhYX2 + UkxMYQAAABEAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACh4GB5sjGxv/q6ur/4+Pj/7GAbv/nknL/ + 8Lql/9VtQ//VakH/1WpB/9RqQf/TaUD/0mlA/9JoQP/PaD//z2Y//85mP//MZj7/zGY+/8tlPv/LZD3/ + ymQ9/8lkPf/IYzz/yGM8/8diPP/GYjv/w2A3/8VjPf/RoI7/xauj/5VkUv+GOx3/pkwo/71eN//AXzf/ + vl43/7xdNf+7XTX/uls1/7daNP+3WjT/t1o0/7ZYNP+1WDT/tlo1/65KIf/KlID/9/j6//bz8//29PT/ + 9/X1//f19f/49fX/+PX1//j19f/49fX/+Pb2//bz8///////5drV/41LL/+jSyb/qVQw/6dTMP+nUzD/ + p1Qw/6VSMP+kUy//pFIv/6RSL/+kUi7/o1Mu/6JRLv+iUSz/ok4r/6BOLP+fTiz/nk0r/55NK/+bTy7/ + iUw0/5OLh//z8/P/8vLy/9bV1f+Ce3vmAAAAHgAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB + e3Nzo66qqvzn5+f/6Ojo/7emoP/YeVT/98m2/+CJaP/VaD3/1WtC/9VrQf/UakH/1GpB/9NqQP/SaED/ + 0WY//9FoP//OZj//zmY+/81mPv/MZj7/y2Y+/8tlPv/KZT3/yWQ9/8lkO//HYz3/wlox/8x5WP/z7u7/ + +f///+rm5v+zl43/hkgw/407Gv+oTSj/uVgz/75dNv++Xzb/vV82/7xeNv+7XTX/ul01/7pbNf+5WTP/ + r0sk/69hQP/q3Nf/+vv8//j19f/49vb/+fb2//n39//59/f/+ff3//n29v/49fX/+PX1//fz8/////// + 4tXR/49KLP+lTSf/qVQv/6hSLv+nUi7/p1Iv/6ZSL/+kUS7/pFEu/6RRLv+kUS7/pFEr/6NRK/+iUSz/ + ok8r/6BOK/+gTiv/n04r/55NK/+YTy//glZE/9HQ0P/19fX/9PT0/7i0tP1tZ2euAAAAFgAAAAcAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb2dnTI+Jiffe3d3/7+/v/9rY2P+/eF3/86uR//C0nv/WaD3/ + 1mxC/9ZrQv/Va0L/1WtB/9RrQP/TakH/0mpB/9JpQP/PaD//z2hA/85oP//NZj//zWY+/8xmP//KZT7/ + y2Q9/8pkPf/IZD3/xVow/89/X//07u3/9Pb3//f3+P/5+/3/3tXS/6+MgP+NUjz/iz4g/5hBH/+lSST/ + rE4o/7FSKv+zUyv/sVIq/6pMJf+gRR//qGJG/+DMxf/9////+fb3//n39//59/f/+ff3//r4+P/69/f/ + +ff3//n29v/49vb/9/X1//Xz8///////1L62/49BIf+qUiv/qlQv/6hTLv+oUi7/p1Iu/6dSL/+nUi7/ + pFEs/6RRLP+kUSz/pE8s/6NPK/+jTyv/ok8r/6BOK/+gTSv/oE0r/59OLP+QTC3/hXRs//n5+f/4+Pj/ + 8PDw/5GMjPdWUFBjAAAADwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYqEhN3Bv7// + 7e3t/+bm5v+5lor/5Yhm//jKt//ghWH/1mg8/9dtRf/XbEP/1mxD/9VsQv/Ua0L/02tC/9NqQf/SakH/ + 0WlA/9FpQP/OaED/zmg//85oP//NZj//zGU+/8tkPv/KZT7/xlsx/9J/X//48fD/+fr7//b09P/39vb/ + +/z9//z9///q5eP/ybSs/6uFeP+calb/lFc9/5JOM/+UTzP/mFQ4/6VrU/+/nI3/7ebl///////7+fn/ + +vj4//r4+P/6+Pj/+/j4//r4+P/6+Pj/+vf3//n29v/49fX/9/T0//Xx8///////x6ea/5M+G/+sVC// + qlMv/6pTLv+pUiz/qVIu/6dSLv+nUi7/plEr/6VPLP+kTyv/pE8s/6NPK/+jTyv/ok8r/6BPK/+iTSv/ + oE0r/5xOLv+HUTv/vLi2//r6+v/6+vr/1dPT/4V/f90AAAAZAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAHBoaHmfmpr65ubm/+/v7//MyMn/0XpZ//W1nf/vsJn/2GxB/9dtQ//YbkX/ + 2G5F/9dtQ//WbEP/1WtC/9VrQv/Ua0L/02tB/9JqQf/RakD/z2lA/89pQP/OaD//zWg//81lPv/MZj// + yFoy/9SAYf/69PT//P3///n39//59/f/+ff3//n39//9/Pz///////3////29PT/6uTh/+PZ1v/h19P/ + 6N7c//b08/////////////z5+f/8+vr//Pr6//z6+v/8+fn/+/n5//r4+P/6+Pj/+ff3//j19f/39PT/ + 9vHx//b09P//////sYBs/51CHf+vVDD/q1Mv/6pTL/+qUy//qlEu/6lSLP+pUiz/qFIr/6ZRK/+lTyv/ + pU8r/6VPK/+kTir/o04q/6NOKv+iTir/n00s/5VLLP+Ga2D/9PT0//z8/P/7+/v/qaWl+mJbW4oAAAAQ + AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlhYRaMhobuycjI//Ly8v/k5OX/ + u5SG/+uRb//4zLv/44hm/9hpP//Zbkb/2G5F/9htRf/XbEP/1mxD/9ZsQv/VbEL/1GtC/9NqQv/SakH/ + 0mpA/9FpQP/PaED/zmg//85oP//NaD//yV0y/9WCYf/89vX///////z6+v/8+vr//Pr6//z6+v/8+fn/ + +/n5//37+//////////////////////////////////9+/v//fv6//37+//9+/v//fv7//z6+v/8+vr/ + +/n5//r4+P/69/f/+fb2//f19f/28/P/8+/v//v7/P/17On/nFQ2/6pOJ/+vVTD/rFMv/6xTL/+rUy// + qlEu/6lRLv+pUi7/qVEr/6hRK/+nUSv/pU8r/6VPK/+kTiv/pE4q/6ROKv+jTir/nk0s/4tPNf+yrKr/ + /v7+//39/f/h39//jYeH7TMvLy0AAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACBenqbpqKi++jo6P/w8PD/z8zN/9ODZf/0spn/9b+r/91xSf/abUX/2W5G/9luRf/YbUX/ + 121F/9dtQ//WbEP/1mxD/9VrQv/TakH/02pB/9JqQf/RaUD/z2lA/89oQP/OaED/y14y/9aCYv/9+Pf/ + //////38/P/9+/v//fz8//38/P/9/Pz//fz8///8/P///Pz///z8///8/P///Pz///z8///8/P///Pz/ + //z8///8/P/9/Pz//fv7//z6+v/7+fn/+/n5//r4+P/49/f/+Pb2//b09P/08fH/8O3t///////Pr6L/ + nUId/7FVMP+vVC//rlQu/6xUL/+sUy//q1Ms/6pRLP+qUi7/qVEu/6lRLP+oUSv/pk8r/6VPK/+lTyv/ + pU4q/6ROKf+jTyv/lk0s/4ptYf/39/f///////7+/v+2srL7dW5uogAAABAAAAAFAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsZWUhjYaG8MjIyP/z8/P/5ubm/7mhmf/pkXD/ + +sq3/+mYev/ZaD7/3G9H/9pvRv/Zbkb/2G1G/9huRf/YbUX/121F/9dsQ//VbEP/1GtC/9NrQv/TakH/ + 0mpB/9FpQf/PakH/zF80/9iEY///+vn//////////////f3///////////////////////////////// + //////////////////////////////////39///8/P///Pz//fv7//z6+v/7+fn/+vj4//j29v/49fX/ + 9vT0//Xx8f/u6+v/+fn6//r08f+rY0b/rkwn/7FVMP+vVC//r1Qu/65ULv+uVC7/q1Qv/6tTLv+qUiz/ + qlEs/6lRLP+pTyz/qE8s/6ZPK/+lTyv/pU4r/6VOKv+hTy3/iVA5/7y4t////////////+Ph4f+Qi4vv + RD8/NQAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gnt7laKenvrn5+f/8vLy/9nZ2P/Lj3r/8aKD//nHtP/igFv/3GtB/9xvR//abkb/2m5G/9luRf/YbkX/ + 2G1F/9htRf/WbEP/1mxC/9VrQv/Ua0L/02tC/9JqQf/RakL/zF80/9mFZf///Pr///////////////// + //////////////////////////////////////////////////////////////////39///8/P///Pz/ + /fv7//z6+v/7+fn/+ff3//f19f/29PT/9PHx/+/s7P/z8fP//////8aVgf+mRh//s1Yx/7JWMf+wVi// + r1Uv/69UL/+vVC7/rlQu/6xTLv+rUyz/qVIs/6pSK/+qUSv/qE8s/6hPK/+nTyv/pk8r/6VPLP+TSSr/ + k393/////////////////7Ourvt0bm6bAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamNjDY6IiOfAvr7/8PDw/+rq6v/Curj/4ZF0//i6ov/0uaL/ + 3m9G/91tRf/cb0f/3G9G/9puRv/ZbkX/2G5F/9huRf/XbUX/121D/9ZsQ//VbEP/1WtC/9NrQv/Ta0L/ + zl81/9yGZf////v///////////////////////////////////////////////////////////////// + ///////////////////////8/P//+/v//fv7//v5+f/59/f/+Pb2//b09P/18fH/7+3t//Hw8f////// + 2rSl/6pNKP+0VS7/s1gz/7NWMv+yVjD/sVYw/69UL/+vVC//r1Qv/65ULv+sUyz/q1Is/6pSLP+qUiv/ + qlIr/6hPK/+nTyv/p08s/59LKP+NYlL/5eTk//7+/v/+/v7/3Nra/5GLi+crKCggAAAABwAAAAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFpaWWWkZH3 + 3Nvb//f39//h4eH/w6SZ/+yUcv/3vqj/7J+B/91sP//eb0f/3XBH/9xvR//cbkf/2m5G/9huRv/YbkX/ + 2G5F/9huRf/XbEP/12xD/9VsQ//VbEP/0mQ6/9d3Uf//8Or///////////////////////////////// + //////////////////////////////////////////////////39///8/P/9+/v/+/n5//n4+P/49/b/ + 9vT0//Pw8P/w7u7/+Pv8///////ftqb/r1Mu/7ZWL/+3WTP/tVkz/7RYMv+zVzL/s1cy/7FWMP+xVjD/ + sFUv/69UL/+vVC7/rlEs/6xSLP+rUiv/qlEr/6pRK/+oTyv/pE8s/5BOM/+tpqP//Pz8//39/f/z8/P/ + oJub+GJbW3UAAAALAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAGMhobFr6ur/Onp6f/w8PD/29zc/8mdjv/wnHv/+sm1/+qUcv/ebED/ + 3nBH/95wR//db0f/3G5H/9puR//Zbkb/2G5F/9huRf/YbUP/121F/9dtQ//WbEP/1GtC/9JkO//imHr/ + //bw//////////////////////////////////////////////////////////////////////////// + //39//37+//8+vr/+/j4//j19f/18/P/9PHz//j5+v////////bx/9egi/+zUir/uVUu/7pbNf+3WjT/ + t1k0/7VZM/+1WDP/s1Yy/7NXMf+yVjD/sVYw/7FVMP+wVS//r1Mv/6xTLP+sUiz/rFIr/6pSLP+pUCz/ + mEkp/5iHgf/6+vr/+/v7//v7+//DwMD8h4GBxAAAAA8AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxaWkpjoiI7MHAwP/v7+// + 6urq/9DMzf/Zm4X/8aiN//rKuf/oiWb/3mxA/99wR//eb0f/3W9H/9xuR//ab0b/2m5G/9luRv/YbkX/ + 2G1F/9htRf/XbEP/1mxD/9VrQv/RYjb/2HpV/+66pv//7OT///////////////////////////////// + ///////////////////////9/f///f3//fv7//v5+v/6+Pj/+ff4//r6+//////////////49f/pwbL/ + xXFR/7ZRKP+7WjL/vV01/7paNf+6WjX/uVo0/7dZNP+2WDP/tVgz/7RXMf+zVzH/s1cx/7FWMP+xVTD/ + sFUv/69ULv+uUyz/rFMs/61UMP+eTCr/lXNm/+zs7f/4+Pj/+fn5/9za2v+Tjo7tU01NOAAAAAcAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAcWlpZJOOjvXV1NT/9PT0/+Tk5P/KwsL/5Zh7//SpjP/4waz/5YJd/99tQP/fcEf/ + 33BH/95vR//db0f/3G9G/9xuR//abkb/2W5F/9luRf/YbkX/2G5D/9ZsQ//WbEP/0mQ7/9FhNf/WdU7/ + 5JyB//TItv//7+n///////////////////////////////////////////////////////////////// + ///////8/P/339b/4q+a/8p4WP+8Vi//vVYv/79eN/++Xjf/vl42/7xbNf+7WzX/u1o1/7paNP+5WjT/ + uVk0/7ZYM/+1VzL/tVcx/7NXMP+zVjH/slYw/7FVL/+wVC//r1Uw/6RMJv+XaFX/2dnZ//X19f/29vb/ + 6unp/5uWlvZlXl5vAAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeBgaeinp744uLi//X19f/g4OD/ + 1cC5/+mXdv/0rpH/9r2n/+aEXv/fbUH/4HFI/99wR//ecEf/3m9H/91vR//cbkf/3G9G/9luRv/ZbkX/ + 2G5F/9htRf/XbUP/1m1F/9VrQv/TZDr/0WA0/9FiN//Uckz/3Idm/+Wmjf/rs53/8cm5//nf1P/64df/ + +eDW//jg1v/54Nf/9tjM/+y/rP/lr5n/3Jd8/855Vv/FYz3/v1Ys/75WLv/BXjb/wWE6/8FeOP/AXjf/ + v143/75dNf+9XTX/vFs1/7tbNf+6WjX/ulo0/7daNP+2WTP/tVcy/7VXMv+0VzH/s1cx/7JWMP+wVzH/ + p08q/5pfRv/Cvr3/8vLy//Pz8//y8vL/rqqq+IB5eaYAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAGMh4fLraur+uXl5f/y8vL/39/f/9G+tv/pm3z/9KyR//fBrP/oi2b/4GxA/+FxR//fcEf/ + 3nBH/95wR//db0f/3G9H/9xuRv/abkb/2W5G/9luRf/YbUX/2G1D/9dsQ//WbEP/1WxC/9VpQP/SZTz/ + z2M3/81fNP/MXTL/zGE2/81lPf/OZj7/zWU9/8xkPf/LZT3/ymI4/8ZaMf/DVyz/xVow/8VdM//FXzX/ + xWA6/8ViO//CYTr/wWA6/8FfOP/BXzj/wF43/75eNv++XTX/vl01/7xbNf+7WzX/u1s1/7paNP+5WTT/ + t1cy/7ZYMv+1VzH/tFcx/7NZM/+rUi3/nV9F/7m0sv/v7+//8PDw//Dw8P+7ubn6iIODyQAAAA0AAAAE + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwaGgejYeH3bazs/vn5+f/8PDw/97e3v/Tvrf/ + 7Jt7//Wqjv/6yrn/7JV1/+BtQf/gb0X/4HFI/+BxSP/fcEf/3nBH/91wR//cb0f/3G5G/9luRf/Zbkb/ + 2G5G/9huRf/XbUX/12xD/9VtQ//Va0L/1GtC/9NrQv/Ta0L/0mlA/89mPv/OZj7/zWU9/81lPf/NZTz/ + zGU8/8tlPv/LZT7/ymU9/8ljPf/IYzz/x2M8/8ZiO//FYjr/w2E7/8JgOv/BYDj/wWA4/8BfOP+/Xjb/ + vl42/75dNf+9XTX/vF01/7tbNf+6WzX/ulkz/7dYM/+3WDP/tVkz/65OKf+hYUf/vri2/+7u7v/v7+// + 7u7u/8TBwfyMhobbUUtLKQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + cWlpNIyGhuS7uLj86Ojo//Dw8P/e3t7/0sS+/96eiP/2pon/+8i0/+6gg//hckj/4G5D/+FySP/gcUf/ + 33BH/95wR//db0f/3W9H/9xvR//abkb/2W5F/9huRv/YbkX/2G1F/9dtQ//XbEP/1mxD/9RrQv/Ta0H/ + 02pC/9JqQP/PaUH/z2lA/85oP//OaD//zmg//8xmPv/LZT7/y2U+/8pkPf/JYz3/yWQ9/8hjPP/GYzz/ + xmI7/8VhOv/DYTr/wmA4/8FgOv/AXzj/wF82/75eNv++XTb/vl41/71bNf+8WzX/uls1/7paNP+5WjP/ + rk4o/6FuWv/AvLr/7e3t/+7u7v/t7e3/yMbG/I2Hh+ReV1c/AAAABQAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqaj+LhYXlure3/Ofn5//y8vL/4ODg/8fBwf/co43/ + 76KD//m+qP/2u6T/5oRe/99sP//hcUf/4HBH/99xR//fcEf/3nBH/91vR//cb0f/2m5G/9puRv/ZbkX/ + 2G5F/9huRf/YbUP/121D/9VrQ//Va0P/1GtC/9NrQf/TakH/0mlB/9FpQP/PaT//zmk//81mPv/MZj7/ + zGY+/8tlPv/KZD3/ymQ9/8ljPP/IYzz/x2M7/8ZiO//FYjv/xWE7/8JhOv/CYDr/wV83/8BfNv+/Xjb/ + vl42/75dNv+9XTX/vF01/7lZM/+sUS7/pnlo/83Nzf/u7u7/7e3t/+vr6//HxcX8jIaG5WJbW0gAAAAF + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByamo/ + jIaG5Lazs/vk5OT/9fX1/+Tk5P/Pzs//zaqc/+6df//5uqD/+say/+2cfP/idkz/4G1B/+BxR//gcUf/ + 33FH/95wR//ecEf/3XBH/9xvR//abkb/2m5G/9luRf/YbkX/2G1F/9dtRf/XbUP/1m1D/9RsQv/VbEL/ + 1GtC/9NqQf/RaUH/0WlB/89oP//OZj//zWY//8xmPv/MZj7/y2Y+/8tkPv/KZD3/yWQ9/8djPP/HYjz/ + xmI8/8VhO//DYTv/wmE6/8FfOP/BXzf/v183/79fN/++XTb/ulYt/65WM/+qkYf/4uLi/+7u7v/s7Oz/ + 6urq/8K/v/yMhobjZF1dRwAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcWlpNI2Hh9ytqqr64ODg//Pz8//o6Oj/2trb/8Kwqv/foYn/ + 9qiJ///JtP/2u6X/6Itm/+FwR//gbUH/4HFI/99xR//fcUf/33BH/91vR//db0f/3G9H/9puRv/Zbkb/ + 2W5G/9huRf/YbkX/121F/9ZsQ//VbEP/1WxC/9RrQv/Ta0H/0mpB/9FpQf/RaD//zmY//81mPv/NZj7/ + zGY+/8tlPv/LZT7/y2U9/8ljPf/IYzz/x2M8/8ZiO//GYjv/xWE6/8NgOP/CXzj/wmA4/8FbMv+3Uyr/ + rWxU/7Kmo//r6+v/7e3t/+rq6v/n5+f/t7S0+oyGhttiW1s8AAAABAAAAAEAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBoaB6Nh4fL + op6e+NPT0//u7u7/7+/v/97e3v/EwcH/zqaZ/+ifhf/5tJv/+cCr//Cojf/mhWD/4G5D/+BwRf/gcEf/ + 33BH/95wR//ecEf/3W9H/9xuR//abkf/2m5G/9luRf/YbkX/2G5F/9dtQ//WbEP/1mxD/9VsQv/Ua0L/ + 02tB/9JqQf/RakD/0Wk//85mP//OZj7/zmY+/8xmPv/LZj7/y2U+/8pkPf/LZD3/yWQ8/8hjPP/HYzz/ + xmI7/8ZhOv/EYDj/v1ct/7NcOf+yj4P/1NPV/+rq6v/r6+v/6Ojo/9va2v+ppaX4ioSEyFtVVSUAAAAD + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4GBppKNjfXAvr7/5+fn//f39//n5+f/1tXV/7+zsP/Zn4v/ + 8KSH//ixl//4tp3/8KSI/+aGYv/hdUv/4HBG/+BvRf/fcEb/33BH/95wR//dcEf/3G9H/9puRv/abkb/ + 2W5G/9huRf/YbkX/2G1F/9dsQ//WbEP/1WxD/9RrQv/TakH/02pA/9FpP//PaD//0Wg//85mP//NZj7/ + zGY+/8tmPv/LZT3/ymU9/8pkPv/KZDz/yWE3/8VYL/+9WTD/uH9o/762tf/o6en/6+vr/+jo6P/m5ub/ + y8rK/5eSkvaCe3ukAAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqamOOiIjs + rKmp/NrZ2f/v7+//8vLy/+Pj4//Kycz/vquk/9mfi//so4b/9aqO//m1nP/xp4v/6Ixp/+N7VP/hdUv/ + 4G9F/99vRf/ecEf/3m9H/9xvR//ab0f/2m5G/9luRv/ZbkX/2G5F/9htRf/XbUP/1mxD/9VrQv/Ua0L/ + 1GtB/9JpQP/SaUD/0Wk//89oP//OZj7/zmY//8xmPv/MaD//zWY+/8xhN//GWTD/w142/759Zf+6rKj/ + 4+Pk/+np6f/o6Oj/5eXl/93c3P+1sbH8kYuL7mtkZGkAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABxaWkpjIaGxZWQkPe9u7v/5OTk//Pz8//w8PD/4uLi/8rIyf+7rqn/ + yaKS/9+bgP/vo4X/96qN/++fgP/qjGn/5H9Y/+F2Tf/gckn/33BH/91vRv/db0f/3G5H/9puRv/Zbkb/ + 2W5F/9huRf/YbUX/2GxD/9ZsQ//WbEP/1WxC/9RqQf/TaUD/0mlA/9FoP//RaUD/0Wg//89lPf/OYDT/ + x10z/8JqRv/AkYL/vrOw/+Li4//o6Oj/6Ojo/+bm5v/j4+P/xsTE/5qUlPiJg4PDZV5eLgAAAAIAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJqamSNh4fm + oJyc+sXExP/m5ub/9PT0//Hx8f/l5eX/1NPT/724t//Bo5n/2ZmA/+WafP/rmXn/7ZJw/+qHYf/mfVb/ + 5XhP/+N0Sv/gcUj/33BH/95vR//db0f/3G5H/9puRf/ZbkX/2W5F/9ltRf/XbUP/2GxD/9hsQf/Wa0H/ + 1Wo//9RoPf/SYzj/zGQ8/8tqRf/JgWT/w6ee/8vIyf/l5eb/6Ojo/+jo6P/l5eX/4uLi/8zKyv+loaH6 + j4qK521lZWkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABza2sMgnx8lIuFhe+jn5/7xMLC/+Tk5P/x8fH/9vb2/+zs7P/g4OD/ + zs3O/7Wuqv+2npf/w5qK/9aYgf/hjW//4Idl/92AXf/le1T/5HpS/+F3Tv/gdUv/33FJ/95wSP/dcEf/ + 3G5F/9pvRf/abkb/2W1F/9JuSP/Ubkf/0nVT/8uDZ//DlYT/vqih/8W/vv/i4uP/6enq/+vr6//o6Oj/ + 5OTk/+Dg4P/KyMj/qKSk+46IiPB9d3eUUUtLEQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNrax+Ce3ub + i4WF7Z2Xl/m7ubn/29vb/+rq6v/19fX/9vb2/+3t7f/k5OT/3d3d/8G+v/++s6//uKqm/7ijnP/KnI3/ + wZOD/76PgP+9jHr/u4l4/7qId/+7iHb/u4d1/76NfP/JmIb/y6CR/7+spv/Ds7D/w7u6/9fW2P/o6ur/ + 6+vr/+/v7//u7u7/5+fn/+Li4v/Z2dn/wsDA/5+bm/qMhobufnd3mmNdXSQAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc2trFHJqaneJg4PdjYeH96mlpfzBv7//3d3d/+np6f/x8fH/ + +fn5//f39//x8fH/6+vr/+fn5//i4uL/39/f/93d3f/b29v/2dnZ/9nZ2f/c3Nz/3t7e/+Dg4P/k5OT/ + 6Ojo/+zs7P/w8PD/9fX1//b29v/v7+//6Ojo/+Pj4//a2tr/x8XF/62pqfyPiYn3ioOD3W9oaHpkXV0W + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + cmpqS3x1daGGf3/li4WF9qKdnfm3tbX+y8rK/9/f3//l5eX/6+vr//Dw8P/19fX/+Pj4//v7+//9/f3/ + ///////////9/f3/+/v7//j4+P/19fX/8fHx/+zs7P/n5+f/4uLi/9zc3P/NzMz/u7m5/qSgoPmMhob3 + h4CA5npycqJvZ2dMAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc2trRXNra4h9dXXFgXp67IaAgPSVj4/z + pKCg9rGvr/q+u7v9xsXF/s7Ozv/T09P/1tbW/9jY2P/X19f/1NTU/8/Pz//Ix8f+v729/bOwsPqloaH2 + lpGR9IeAgPSBenrse3R0xXFpaYlvZ2dHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAHNraz5yampuc2trlXJqarJyamrHc2tr2HNra+Nza2vrc2tr7nNra/Fza2vu + c2tr63Nra+Nza2vYcmpqyHJqarNxamqWcWpqbnBoaD8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP/////////////////////4AAD///////////+AAAAP//////////gAAAAA + /////////+AAAAAAP////////4AAAAAAD////////gAAAAAAA///////+AAAAAAAAP//////4AAAAAAA + AD//////wAAAAAAAAB//////gAAAAAAAAA//////AAAAAAAAAAP////8AAAAAAAAAAH////4AAAAAAAA + AAD////wAAAAAAAAAAB////gAAAAAAAAAAA////AAAAAAAAAAAAf///AAAAAAAAAAAAP//+AAAAAAAAA + AAAP//8AAAAAAAAAAAAH//4AAAAAAAAAAAAD//wAAAAAAAAAAAAB//wAAAAAAAAAAAAB//gAAAAAAAAA + AAAA//gAAAAAAAAAAAAA//AAAAAAAAAAAAAAf/AAAAAAAAAAAAAAf+AAAAAAAAAAAAAAP+AAAAAAAAAA + AAAAP8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAA + AAAAD4AAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAA + AAAABwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA + AAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAA + AAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAABwAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAD4AAAAAAAAAA + AAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD8AAAAAAAAAAAAAAH8AAAAAAAAAAAAAAH+AAAAAAAAAA + AAAAP+AAAAAAAAAAAAAAP/AAAAAAAAAAAAAAf/AAAAAAAAAAAAAAf/gAAAAAAAAAAAAA//gAAAAAAAAA + AAAA//wAAAAAAAAAAAAB//wAAAAAAAAAAAAB//4AAAAAAAAAAAAD//8AAAAAAAAAAAAH//+AAAAAAAAA + AAAP//+AAAAAAAAAAAAf///AAAAAAAAAAAAf///gAAAAAAAAAAA////wAAAAAAAAAAB////4AAAAAAAA + AAD////8AAAAAAAAAAH////+AAAAAAAAAAP/////gAAAAAAAAA//////wAAAAAAAAB//////4AAAAAAA + AD//////+AAAAAAAAP///////AAAAAAAA////////wAAAAAAD////////8AAAAAAP/////////gAAAAA + //////////8AAAAP///////////wAAD//////ygAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABwAAAA0AAAATAAAAGgAAAB4AAAAj + AAAAJgAAACoAAAAsAAAALQAAAC0AAAAsAAAAKgAAACYAAAAjAAAAHgAAABoAAAATAAAADQAAAAcAAAAE + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAFgAAAB4AAAAm + AAAALgAAADMAAAA2AAAAOAAAADoAAAA7AAAAPAAAAD0AAAA9AAAAPAAAADsAAAA6AAAAOAAAADYAAAAz + AAAALgAAACYAAAAeAAAAFgAAAA0AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAAABAAAAAb + AAAAJgAAAC8AAAA2UFBQbWlpaZ90dHTCenp62319fex+fn72f39//H9/f/5/f3/+f39//H5+fvZ9fX3s + enp623R0dMJpaWmfTU1NcAAAADwAAAA6AAAANgAAAC8AAAAmAAAAGwAAABAAAAAHAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAG + AAAADwAAABwAAAApAAAAMmBgYIZ0dHTCfHx86I+Pj/2np6f/xcXF/97e3v/s7Oz/8/Pz//X19f/39/f/ + +Pj4//j4+P/39/f/8PDw/+Xl5f/MzMz/rKys/5CQkP18fHzodHR0wl5eXokAAAA8AAAAOQAAADIAAAAp + AAAAHAAAAA8AAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAQAAAAMAAAALAAAAGAAAACdBQUFVcHBwrXx8fOOWlpb+vLy8/9/f3//t7e3/9PT0//b29v/19fX/ + 9PT0//Dw8P/x8fH/8fHx//Hx8f/y8vL/8vLy//j4+P/8/Pz//f39//v7+//5+fn/6+vr/8bGxv+ZmZn+ + e3t7425ubq46OjpdAAAAOgAAADIAAAAnAAAAGAAAAAsAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAYAAAARAAAAID09PUxzc3OygoKC7aampv/U1NT/5ubm//Dw8P/l5ef/ + zMzM/66rqv+elZH/hXRu/3tfVv96VEj/fVBB/39MPv+BTT7/gFBC/4FVSf+IZ13/jHdx/6WZlv+/vLv/ + 5ubm//7+/v/+/v7/9vb2/+Tk5P+urq7/gYGB7XBwcLQ1NTVXAAAAOQAAAC8AAAAgAAAAEQAAAAYAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAWAAAAJm5ubpyAgIDlpaWl/9XV1f/h4eH/ + 8fHx/8zMzP+ZlZP/gWxl/3RMPf+DRzL/lEwy/6BRN/+nVzv/rlo//7RbQf+3XEH/ultA/71ZP/+9WD7/ + vFU8/7lQNv+wTDX/n0o3/4pRQv+ZgHn/urSz//7+/v//////9fX1/+jo6P+urq7/fHx85WlpaZ8AAAA7 + AAAANQAAACYAAAAWAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAaVFRUXHx8fMqZmZn9 + ycnJ/9ra2v/u7u7/ysnJ/4p/fP9tSDr/gEEp/5JKL/+dUTT/o1Q3/6hXOv+sWjz/sVs9/7VbPv+3Wz7/ + u1s+/75aPv/AWj3/wlg8/8VVOv/GUzn/yFI3/8hRNv/HTTX/vkoz/6hHM/+GUkb/ppqW/+fn5/////// + 8/Pz/97e3v+cnJz9dnZ2y0dHR2gAAAA3AAAAKwAAABoAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAAAb + bW1th4ODg+Stra3/1dXV/+Li4v/9/f3/mpCM/3BEMv+EPyP/kUco/5hLK/+eUC//pFIx/6hVNv+sWDj/ + rlk6/7JbPf+2Wz7/uFs+/7xbPv++Wz7/wVk+/8NYPP/GVzr/yFQ5/8pSNv/LUDT/zU8y/81MMf/LSzD/ + x0wx/7RIMf+ITD3/r6Sg//7+/v/7+/v/8vLy/7y8vP99fX3lYmJijwAAADkAAAAuAAAAGwAAAAoAAAAC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAgAAAAoAAAAbdnZ2n5CQkPS+vr7/0dHR//Pz8//EwL7/gV5P/3o3G/+LQCD/k0Uj/5lIJv+cSyr/ + oU8u/6RSMf+nVDX/q1g4/65ZOv+yWzz/tVs+/7hbPv+8Wz7/vls+/8BZPv/CWDz/xVc6/8hVOf/JUjf/ + y1E1/85PM//PTC//z0ou/85KLv/MSS7/x0sx/69JM/+HW1D/29fV///////v7+//1tbW/46OjvRra2ul + AAAAOgAAAC4AAAAbAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAae3t7qpiYmPnFxcX/z8/P//////+klpH/bTMa/4Q4F/+MPBf/ + kT8c/5ZCH/+aRyT/nUoo/6BOLf+jUTD/plQ1/6pXN/+tWTr/slo8/7VZOv+2Vzj/uFg5/75aPf/CWz// + wlk9/8NYPP/HVTn/yFQ4/8pSNv/LUDT/zk8z/89MMP/QSi7/z0ku/85JLv/LSS//wks1/5pKOP+rm5b/ + +/v7//Pz8//j4+P/l5eX+W9vb7AAAAA6AAAALgAAABoAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAWfX19qpubm/vFxcX/0tLS//79/f95XVH/ + djIV/4U2Ev+LNxP/kDoV/5M+Gf+VQh7/mUcj/5xJJ/+gTiz/olEv/6VUM/+qVzf/q1Mz/6NMLv+dVDz/ + nVxH/5tXQf+YSC//pUYr/8BYPP/FWT3/xlc6/8hVOf/IUzf/ylE2/8xQNP/OTjP/z0ww/9BLL//QSi7/ + z0ku/81KL//HTTT/rkw4/5BwZ//29fX/8/Pz/+np6f+bm5v7b29vsAAAADkAAAArAAAAFgAAAAYAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAARfX19m5mZmfnDw8P/ + 09PT//n49/+AXE3/fDUV/4UyD/+JMw3/jTYP/5A5E/+SPRn/lEEd/5hFIf+bSSb/nkwr/6FQLv+lUzP/ + pE4s/6diSP+/pJr/0sjH/9nU1P/Z09P/0MLA/6mBdv+SQCj/vVQ4/8ZZPP/HVzn/yFQ4/8lTN//LUjb/ + zFA0/85PM//OTjH/z0ww/89LL//OSzD/zUww/8hONP+3UDr/il9U//Hv7//09PT/6enp/5eXl/lra2ul + AAAANwAAACYAAAARAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAL + eXl5f5WVlfS+vr7/z8/P//r5+P99VUX/fzQU/4c0Df+KMw3/izMM/4w1Dv+POBL/kTwX/5RAHP+XQx// + mkgl/51LKP+hTy3/oUsq/6xtU//UzMr/3t7h/9rV1//Y09P/2dTV/97c3f/s7u//v6ag/5dAKP/DWTz/ + xVg8/8dVOf/IVDj/yVM3/8pRNv/LUTX/zFA0/8xPM//OTzP/zk4x/85OMf/NTzL/yFA1/7hROv+FV0r/ + 8/Hx//Pz8//j4+P/jo6O9GJiYo4AAAA1AAAAIAAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAGa2trTY6OjuS1tbX/ycnJ//79/f9xTT3/gDUV/4kyDf+LMwv/jjML/440DP+ONQ7/ + jzcR/5E8Ff+TPhr/l0Ie/5lGI/+cSSf/nksq/6NSMf/OvLb/19XY/9DKyv/PyMj/zsjI/8/Jyf/Ry8v/ + 08/P/+3v8P+peGv/sEou/8VaPv/FWDz/x1c5/8hVOf/JVDj/ylI3/8pSNv/LUjX/y1E1/8tRNP/MUDT/ + y1A0/8pRNf/GUjj/tlE6/4xjWf/39/b/8PDw/9bW1v99fX3lSEhIZwAAAC8AAAAYAAAABgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD4qKiserq6v/xMTE//39/f+DaFz/fzYV/4s1Dv+OMwv/ + jjMK/440C/+ONAz/jjUO/483EP+ROhT/kj4Z/5VBHf+YRSH/m0gm/5tGIv+ublX/0s/Q/8vGxv/IwcH/ + x8HB/8fAwP/HwcH/ysPD/8zHx//e3eD/y7Os/6VHLP/DWj7/wlk9/8VYPP/GVzr/yFU5/8lUOP/JVDf/ + yVM3/8lTNv/KUzb/ylI2/8pRNv/JUTb/yFI2/8NUOf+xUTv/k3Zt//j4+P/v7+//urq6/3Z2dssAAAA5 + AAAAJwAAAA8AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4SEhJGhoaH9vr6+/+3t7f+0p6L/ + ejMV/402EP+PNA3/kDQL/480C/+QNAv/kDUO/481Dv+QNg//kTkT/5I9F/+UPxv/l0If/5lHJP+aQx7/ + rXRd/8rJy//Fv7//wry8/8G8vP/BvLv/wru7/8W+vv/IwsL/1dPV/9K+uP+nSi//wVs+/8FaPf/CWT3/ + xVg9/8ZYPP/HVzr/yFc5/8hVOf/IVTj/yFQ4/8hUOP/IVDf/yFQ3/8hTN//GVDj/wVY8/6ROOf+xpJ// + +Pj4//Ly8v+cnJz9aWlpnwAAADIAAAAcAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmlpaTGTk5Pk + tra2/9LS0v/v7ev/cDQc/484Ff+SNg//kzUM/5I0DP+SNAz/kDUM/5A1DP+QNQ//kDYP/5E4Ev+TPBX/ + lD8a/5dCHf+ZRiL/mUMe/6lnT//GwsP/wLu7/7+4uP++t7f/vre3/764uP/Bu7v/w729/9XX2P/QtKv/ + rUww/79bPv+/Wz7/wFo+/8FaPf/DWT3/xVk9/8VYPP/FWDz/x1c8/8dXOv/HVTr/x1U6/8ZVOf/GVTn/ + xlU4/8NVOf++Vj7/jEk2/+Th4f/39/f/3d3d/3x8fOU2NjZVAAAAKQAAABAAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAaLi4upp6en/8PDw//6+vr/fFlK/406GP+UOBH/lzYP/5U2Dv+UNQz/kzUM/5E1DP+RNgz/ + kTUP/5E2D/+SNxD/kzoU/5Q+GP+VQBz/mEUf/5pHI/+cSij/vaeh/8C/wf+8tbT/vLW1/7y1tf+9trb/ + vre3/8C9vf/i4+X/vH1q/7VTNv+7Wz//vVs//79bP/+/Wz7/wFo+/8JaPv/CWj3/w1k9/8NZPf/FWD3/ + xVg8/8VYPP/FWDr/xVg6/8NXOv/DVzr/v1g7/7RUPf+DXlT/9fX1//Hx8f+rq6v/cHBwswAAADIAAAAb + AAAABgAAAAAAAAAAAAAAAAAAAAF1dXU1mZmZ7Lu7u//d3d3/x7+8/4A2F/+WOhT/mDgQ/5g4D/+XNw// + lTcO/5Q2Dv+TNQ7/kjYO/5I2D/+SNhD/kjcQ/5M5E/+UPRf/lUAa/5hDHv+aRiL/mkMf/6VeQf+/r6r/ + wMDC/7y5u/+8uLj/vbm5/8PDxv/b29z/y6CR/65SNP+3Wz7/uFw//7tcP/+8Wz//vVs//79bP//AWz// + wFo+/8BaPv/BWj7/wlo+/8JaPf/CWT3/wlk9/8FZPf/BWDz/wVk8/79YO/+7WD//m0o0/8G4tf/4+Pj/ + 5ubm/4GBge09PT1ZAAAAJgAAAA0AAAABAAAAAAAAAAAAAAAEjo6OoKmpqf/Hx8f/9fT0/35TQf+TOxj/ + mjoS/5s5Ef+aORD/mTgQ/5g3D/+VNw//lTYO/5Q2Dv+TNw7/lDYQ/5I3EP+TOBH/lTwV/5U/GP+YQRz/ + mkMf/5tHJf+bRSH/o1U2/7WJef/Aq6T/wLKt/8i3sv/MrqX/vX9p/6xSM/+zWjz/tFs+/7ZbPv+3XD// + uVw//7tbP/+8XD//vlw//75bP/+/Wz//v1s+/79bPv+/Wz7/wFo+/8BaPv/AWj3/v1o9/79ZPf+/WTz/ + vFg7/7RYPv9/UUP/8fHx//Dw8P+pqan/bm5urQAAAC8AAAAWAAAABAAAAAAAAAAAAAAAB5mZmeC7u7v/ + 3t7e/8vFwv+ORij/nUEb/506Ef+dOhL/mzoR/5o5EP+ZOBD/mDgP/5c3D/+XNw//lDcP/5Q3EP+TNxD/ + lDgQ/5U5E/+VPRf/mEAa/5lCHv+aRiL/nEkm/51IJf+eRyP/o1Av/6ZVNf+pWDf/p1Ev/6lRMP+uWTn/ + r1o8/7JaPf+0Wz7/tVs+/7ZcPv+3XD//uVw//7tcP/+8XD//vFw//71bP/+9Wz//vls//75bP/+9Wz7/ + vlo+/75aPf+9Wj3/vVk8/7tZOv+4WT7/l0ky/8S8uf/29vb/3Nzc/3t7e+MAAAA2AAAAHgAAAAcAAAAA + AAAAAYyMjG6pqan+xcXF/+/v7/+JaFv/olEv/6dKJf+hPRP/njwS/548Ev+cOhL/mzkR/5o4Ef+ZOA// + mDgP/5c3D/+VOBD/lTgQ/5U4Ef+VORL/lz0V/5c/Gf+ZQRv/mkUf/5tGI/+dSSX/oUwo/6JOK/+kTyz/ + plEu/6lTM/+rVzb/rFg4/61ZOf+vWjz/sFo8/7NbPf+0Wz7/tVw+/7ZcPv+3XD//uFw//7lcP/+5XD// + u1w//7tbP/+7Wz7/u1s+/7tbPv+7Wj7/u1o9/7lZPP+5WTz/t1g9/65VO/+EYFT/8/Pz/+7u7v+YmJj+ + YGBghgAAACYAAAANAAAAAQAAAAKWlpa4srKy/9vb2//e3Nv/iUsw/6lSLv+tUCv/pUUc/6E8Ev+hPRP/ + njwS/506Ef+cOhH/mzkQ/5o5EP+ZOA//lzgQ/5g4EP+XOBH/lzkR/5c6E/+YPRf/mD8a/5pCHf+bQx// + kkAd/4U9Hv+FPSH/hj8j/4hBJf+JQyf/ikIm/6FRMf+rVzj/rVg4/65ZOv+vWjz/sFo9/7NbPf+0Wz3/ + tFs+/7ZcPv+2XD7/t1w+/7dcPv+3Wz7/uFs+/7hbPv+4Wj3/uFo9/7daPP+3Wjz/t1k8/7VYOv+yWTz/ + h0Qw/+Pg3//29vb/u7u7/3R0dMIAAAAuAAAAEwAAAAIAAAAFn5+f5sHBwf/n5+f/r6Kd/5xOLf+vUy3/ + r1Er/61PJ/+kQBj/oj0T/6E9E/+gPBP/njwS/508Ef+cORH/mjkR/5k5EP+ZORH/mDkR/5g5Ev+XOhL/ + mDwU/5k+GP+ZPxj/nUgk/7eaj/+2q6n/taek/7eqpv+5rar/wri2/62Zkf+JRSr/qlQ1/6pXN/+sVzj/ + rVk5/65ZOv+vWTz/sFo8/7JbPf+zWj3/tFo+/7RbPv+1Wz7/tVs+/7VbPv+1Wz3/tVo9/7VaPf+1Wjz/ + tVo8/7VYOv+0WDn/slc6/51MM/+snZf/8/Pz/9/f3/98fHzoAAAAMwAAABoAAAAFjIyMSqurq/3Gxsb/ + 8fHx/41sX/+qVjP/slMt/7JSLP+wUyz/rEwl/6Q/Ff+jPhT/oj4U/6E9E/+gPRL/nTwS/5w6Ef+bORH/ + mzkR/5o5Ef+ZORL/mToS/5g6Ev+ZPRX/mDoT/6BPLv/PyMf/0tDR/9LMzv/T0ND/1NHR/9vZ2//Rysr/ + iUku/6VRMP+nVDX/qVU2/6pXN/+rVzf/rFg5/61ZOf+uWjr/r1o8/7BaPP+yWjz/slo9/7JaPf+zWjz/ + s1o8/7NaPP+zWTz/s1k6/7JYOv+yWDn/slc4/7BXOP+nUzb/hGBU//Dw8P/t7e3/jo6O/VJSUmoAAAAe + AAAAB5aWlomwsLD/1dXV/+no5/+MWEL/slo1/7VVLv+0VS3/s1Qt/7JULf+sSyP/pD8U/6Q+FP+jPhT/ + oj0T/6A9E/+ePBL/nTwS/5w6Ef+bOhH/mzoS/5o6E/+aOhP/mjwT/5g5Ev+hTyv/0cbF/9PP0P/Sy8z/ + 0szM/9POzv/Z09T/0crJ/4NJMf+hTCv/pVIx/6VUM/+mVDX/p1U1/6pXNv+rWDj/rFg4/61YOf+tWTn/ + rlk5/65ZOv+vWTr/r1k6/69ZOv+vWDn/r1g4/69XOf+vVzj/r1c3/65VN/+tVDb/qVQ4/39HNP/n5eX/ + 8fHx/6Ghof9qamqdAAAAIwAAAAqcnJy2ubm5/+Li4v/Mycj/lVE2/7VaNP+3Vy//t1Uu/7VVLf+0VC3/ + s1Qu/6xLI/+mPxX/pT8U/6M/Ff+iPhP/oT0T/6A8E/+ePBL/nToR/5s8Ev+cOhP/mzwT/5o8E/+ZOBH/ + nkgj/9DBvf/V0tP/08zM/9LMzP/SzMz/1M/P/9vY2f+MZFP/kD4c/6ZSMP+kUTD/pVIx/6VTM/+mUzT/ + p1U1/6lVNv+qVTb/q1c2/6tXN/+rVzf/rFc4/6xXOP+tVzj/rVc3/61VN/+tVTf/rVU2/61VNv+sVDX/ + rFM0/6hSNP+IQij/zMfF//Dw8P+6urr/dXV1wQAAACYAAAALoaGh1cLCwv/r6+v/s6up/6FVN/+5WjP/ + uVkx/7lYMP+3VzD/tlcv/7VVL/+0Vy//rUsj/6dAFf+mQBX/pD8V/6I+FP+iPRP/oT0T/6A8Ev+dPBL/ + nToS/5w8E/+bPBP/mzoS/5o6E//Ir6b/09PU/9DKyf/Oycn/zsjI/87Ix//V0tP/uaul/3UzGP+eSif/ + pFAu/6NQL/+kUC//pFEw/6RSM/+lUzP/plM0/6dUNP+nVDX/qVQ1/6lUNf+qVDX/qlQ1/6pUNf+qVDX/ + qlM0/6pTNP+qUzT/qlIx/6lRMf+nUTH/kUUo/6+jnv/v7+//z8/P/3p6etoAAAAqAAAADaampunOzs7/ + 8PDw/6CRjP+pWzv/vFs1/7xZM/+8WTH/uVgx/7hXMP+2VzD/tlcv/7RYL/+vTiX/qUEX/6Y/FP+lQBX/ + pD4U/6M+FP+iPRT/oTwS/548E/+ePBP/nTwU/509E/+ZNQn/u458/9DQ0//KxcX/ycLC/8fBwf/HwcH/ + x8HB/9PR0/+iiX//di8R/55KJv+jTyz/ok8s/6NQLv+iUC7/o1Ev/6RRMP+kUjH/pVIx/6VSM/+lUjP/ + plIz/6ZSM/+mUjH/plIx/6ZRMf+mUTD/plAw/6ZQL/+mUC//pE8v/5ZHK/+XgXj/7Ozs/9vb2/99fX3r + AAAALAAAAA6qqqr11dXV//Ly8v+TgHn/tGA9/79cNf+/WzT/vVoz/7xZM/+7WTH/uVcw/7hXMP+2Vy// + tVcw/7BRKP+qQhn/pj8V/6ZAF/+lPxX/oz8U/6I+E/+hPRL/oD0T/6A9FP+ePRT/mzcL/6lcPf/Hw8X/ + w7+//8K8vP/Au7v/v7m5/8C5uf/CvL3/1NHT/6SKf/91LhH/m0Ui/6NOKv+hTCv/oUws/6FOLP+hTy3/ + oU8t/6FPLv+jUC7/o1Av/6NQL/+jUC//pFAv/6RQLv+kTy7/pE8t/6ROLf+kTi3/o04s/6FMLP+ZSCr/ + iGtf/+vr6//g4OD/fn5+9gAAAC0AAAAPrq6u+9fX1//z8/P/kXx0/7pjP//AXTb/wFw0/79cNP++WzT/ + vVs0/7xaM/+7WjP/uVkx/7dYMP+2WTH/tFQt/6xHHv+nQBX/p0AV/6VAFf+kPxX/oz4T/6I+FP+hPhT/ + oD4V/549FP+dOQ7/uJeK/8DAwv+8trX/vLW1/7u0tP+5tLT/u7W1/7+4uP/Y1dj/tqGZ/3QzGP+UPxv/ + okso/55LJ/+gSyj/oEsq/6BMKv+gTCv/oEwr/6BMLP+hTCz/oUwr/6FMK/+hTCz/oUwr/6FLK/+hSyr/ + oUsq/6FKKP+gSij/mkgo/4VjVv/r6+v/39/f/39/f/sAAAAtAAAAD7Gxsf7Z2dn/9vb2/494b/++ZUH/ + xF42/8JeNv/BXjX/wF01/8BdNf++XDT/vVs0/7xaM/+5WjP/uFkx/7dZMf+1VzD/r04k/6pCGP+nQBX/ + pkAX/6VAFf+kPxX/oz4U/6E/FP+hPhX/njkP/6VPLP+8sK7/ube5/7iwsv+3sLD/t7Cw/7ewsP+7tLT/ + vri4/9zb3f/Lvrj/dzkh/5E8GP+hSSb/nUkl/51JJv+eSSf/nUon/55KJ/+dSif/nUon/51KJ/+dSif/ + nkon/55JJ/+eSSf/nkkm/55IJv+eSCb/nUgm/5lGJf+BXU7/6+vr/93d3f9/f3/+AAAALAAAAA6ysrL+ + 3t7e//j4+P+Re3P/wGhD/8ZgN//GYDf/xV43/8JeNv/BXjb/wF01/79cNP++XDT/vVo0/7taM/+5WTP/ + uFgx/7dZM/+zUiz/rUgd/6lAFf+mPxX/pj8X/6U/Ff+jPxT/oz4V/6I+Ff+eNwv/q2JD/7u1tv+3tbf/ + t7Cv/7awsP+2sLD/uLOz/7+4uP/Dvr7/4uHi/9XKxv92Nx3/kzwY/55II/+cRyP/nEcj/5xHJP+cRyT/ + nEck/5tHJP+cRyT/nEck/5tHJP+bRyT/nEYk/5xGJP+cRiP/nEYj/5tHJP+WRiT/gV1P/+rq6v/a2tr/ + f39//gAAACoAAAANsrKy++Pj4//39/f/kn94/75oRv/IYjn/yGE4/8ZgN//FXjf/w142/8JeNv/AXTX/ + wF00/79cNP+9WzT/vFo0/7taM/+4WTH/t1gz/7ZYMP+yUCj/rEYb/6dAFf+mPxT/pT8V/6Q/Ff+jPxX/ + oj8V/6A3C/+sYUH/u6+t/7i2uP+3r6//t7Cw/7m0tP+/ubj/x8HB/87IyP/s7O3/z764/3MtD/+ZQBv/ + nEMf/5tFH/+bRR//mkUh/5pDIf+aQyH/mkUh/5pDIf+aQyH/mUMh/5pDIf+aRSH/m0Ui/5tFIv+aRiP/ + lUMi/4NhVf/l5eX/2NjY/39/f/sAAAAmAAAAC6+vr/Xl5eX/+vr6/5eIgv+5aEj/yWU9/8piOf/JYTn/ + x2E4/8ZgOP/FXjb/wl42/8FeNv/BXTX/wFw1/75bNP+9WzT/vFoz/7lZM/+4WTH/t1kx/7VXMP+wTyf/ + q0Yc/6dAFf+mPxT/pD8V/6NAFf+kPxf/oTYL/6lVMf+7q6b/uLe5/7iysv+8trX/wby7/8nDw//TzM7/ + 2dTU//n7/f+wlIj/eSgG/51DHf+aQh3/mkId/5pCHf+ZQh3/mkIe/5lCHv+ZQh7/mUIe/5lCHv+YQh// + mEMf/5lDIf+ZQyH/mUMi/5BAIP+Hal7/4uLi/9bW1v9+fn72AAAAIwAAAAqtra3p4eHh//r6+v+rop7/ + smVH/8xnP//MZDz/zGM8/8pjOv/IYjn/x2E5/8ZhOf/DYDf/w143/8JdNv/AXDb/v1w1/75cNf+8XDP/ + u1sz/7laM/+4WDH/t1kx/7VVMP+wUCj/rEcd/6dBF/+kPhT/pD8V/6Q/F/+hOAz/qVIt/7ysp/+8u7z/ + wLi5/8a/v//OyMj/19HR/97Z2f/n4+T/+Pf3/4ZROf+QNhD/nUIc/5pBHP+aQR3/mkId/5pCHf+ZQhz/ + mUEd/5lCHv+ZQh7/mEIe/5hCHv+YQh7/mEIe/5dDIP+KPBz/mIR8/+Xl5f/Ozs7/fX196wAAAB4AAAAH + qqqq09jY2P/5+fn/vbi3/6tmSf/Oa0T/zmU9/85lPf/MZDz/ymM6/8ljOv/IYjn/xmE5/8VhOP/FYDf/ + w143/8JdNv/AXTX/v1w1/71cNP+8WzT/u1oz/7laM/+3WTH/tlkx/7VXMP+yUiv/rUoi/6lDGv+lQBf/ + pD8V/6I2Cv+rWDf/wbm4/8XBwf/Lxcb/087O/9vV1f/j3d3/5+Li//z8/f/Js6v/fCoI/51CHP+bQRv/ + m0Eb/5pBHP+aQRz/mkEc/5lBHP+ZQRz/mUEd/5hBHf+YQR3/mEEd/5dBHf+UQR//gzcY/6memf/k5OT/ + wMDA/3t7e9oAAAAaAAAABaenp7PNzc3/+Pj4/+De3v+gZ0//z3BK/9BlPP/PZj3/zmY9/85lPf/LZDz/ + ymQ8/8ljOv/IYjn/xmE4/8NhOP/DYDf/wl43/8FdNf/AXDX/vlw1/71cM/+8WzP/uVoz/7laM/+4WTH/ + tlcz/7VXMP+0VC7/r1Ao/6tKIv+nRRz/ojYJ/7iFcf/MzM//0cvL/9nT0//h29v/5uLi/+zm5v/y7u7/ + 9vPz/4ZHLP+YOhP/nEEb/5tAG/+bQRv/m0Eb/5pAG/+ZQRz/mUEc/5lBHP+YQRz/mEEc/5dAG/+XQBz/ + k0Ae/3o3G//Au7n/4uLi/6mpqf92dna/AAAAEwAAAAKkpKSFx8fH//f39//z8vL/mnJi/9F3VP/SZjz/ + 0mY+/9BmPf/PZj3/zmY9/8xlPf/LZDz/ymQ6/8liOf/HYjn/xWE4/8NgOP/DXjb/wl43/8FcNf+/XDX/ + vlw1/7xcNP+7WzP/uVoz/7lZM/+3WDH/tlcx/7VXMP+zVTD/slQv/6xLI/+2Zkb/3tnZ/+Db2//i3Nz/ + 5eDg/+rk5P/t6en/8Ovr//////+keWb/jC8I/51BGf+cPxr/m0Aa/5tAGv+bQBr/mkAb/5k/G/+ZQBv/ + mUAb/5hAGv+XQBr/lz8a/5A+Gv96RC7/z87O/93d3f+Xl5f/b29vlgAAAA0AAAABoaGhRcDAwP329vb/ + /v7+/6aOhf/Melr/1GtB/9NpP//SZz7/0Wc9/9BmPf/OZj3/zmU9/8xkPP/LYzz/yWM6/8hiOf/HYTj/ + xWA4/8VgOP/DXTf/wlw1/8NdNf/BXTX/vVw1/7xbM/+5WzP/uVoz/7hZM/+2WDH/tVcw/7RUL/+yUiv/ + tl48/+rg3P/z8vL/8+7v//Tw8P/08PD/9fLy//Xw8P//////vqGT/4kvCf+gQhv/nUAa/5w/Gv+bQBr/ + mj8a/5o/Gv+aPxr/mUAa/5lAG/+YQBv/mEAc/5dBHv+PPRv/iGVX/9jX1//T09P/ioqK/WBgYFoAAAAH + AAAAAAAAAACvr6/k6Ojo//39/f/Gvrr/wXxh/9h2UP/VaT7/1Wk//9RnP//SZj7/0WY9/9BmPf/OZj3/ + zmU9/8xkPP/LYzr/yWI5/8hhOf/GYTj/xWA4/75ZMP+mSib/slAq/8JeNv/AXTX/vVw0/7xbNP+7WjP/ + uVoz/7dZM/+2WDD/tFIr/7dgPP/v5uT/9/X2//j19f/59/f/+/j4//z4+P/79/f//////9O+tv+TPxz/ + qVAr/6VPKv+lTij/pEwo/6NMKP+iTCj/oUso/6FLKP+gSyj/oEwo/55MKv+cTCv/jEEi/6mZk//e3t7/ + xsbG/319fecAAAAWAAAABAAAAAAAAAAAqamps9PT0//8/Pz/8fDw/7CAbf/bhmT/1Wc9/9hqQP/Vaj// + 1Gk//9NnPv/SZj7/0GY+/89mPf/OZT3/zGQ9/8tkPP/KYzr/yGI5/8ZcM//brJr/0MG7/5lgSv+aQBz/ + uFMs/8FcNf/AXTX/vlw1/7xbNP+8WzT/u1kz/7BIHv/HinP//P3+//v4+P/8+Pj//Pn5//z5+f/8+Pj/ + +/f3///////Xwbj/l0Ie/6xTLf+pUi7/qVIu/6ZRLf+lUS3/pVEs/6RRLP+jUCz/o08r/6JOK/+fTir/ + nEsp/4RHLv/Ewb//5OTk/6SkpP94eHi8AAAADQAAAAEAAAAAAAAAAKSkpGbJycn++Pj4//////+xmY// + 2Ipr/9tzSv/Ya0D/2GtA/9hrQP/VakD/1Gk//9JnP//RZz7/0GY+/89mPv/OZT3/zGQ8/8piOf/IXjX/ + 79rS///////y7+//vqKY/5pbQ/+aRSP/pkch/65MJP+yTyX/r0wj/6dHHv+2c1j/9Ozp///////9+/v/ + /fz8//78/P/9+/v//fn5//n39///////y6+j/5tCHP+tUy3/qlEs/6lRLf+nUSz/plAr/6VQK/+lTyv/ + o08q/6NPKv+iTir/oU4r/5ZGJP+Sbl//0dDQ/9HR0f+QkJD+bm5udQAAAAYAAAAAAAAAAAAAAAAAAAAA + sLCw3ubm5v//////5eHg/8SHb//gh2P/2ms//9ttQv/ZbEL/2GxC/9dqQf/VakD/1Go//9JpP//RZz// + 0Wc+/89mPf/OYzz/ymA3//Pa0f/+/////fv8///////29PT/2cnD/7+ekv+wgnD/rXpl/7WGcf/Stqv/ + +/j4/////////Pz///39///9/f/+/Pz//fv7//z4+P/59fX//////76Rf/+jQx3/rVIt/6xRLP+rUSz/ + qlEr/6dQK/+mTyr/pU8r/6VPKv+kTyj/ok4q/6BMK/+MQyT/tqyo/93d3f+7u7v/fHx84QAAABAAAAAC + AAAAAAAAAAAAAAAAAAAAAKioqJjR0dH/+vr6//7+/v+3mIz/3Yxr/952Tv/bbUP/225D/9psQv/ZbEH/ + 2GxB/9VqQf/UakD/02o//9JpP//RZz7/0GQ8/8xiN//23dT////////9/f///f3///////////////// + /////////////////////////////v7///7+///9/f///f3//vv7//35+f/79/f/+Pb2//79/f+rZUj/ + rUwl/65SLf+tUi3/rFAs/6tQK/+rUCv/qVAq/6dPKv+mTir/pU4o/6NOKf+cRiH/kmVS/8vKyv/V1dX/ + mZmZ/3Z2dqIAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAACioqIrtLS06u3t7f//////7Obk/82SfP/ji2r/ + 3W1C/9xvRf/bbkP/221D/9ptQ//YbEL/12tB/9VrQP/UaUD/0mk//9FmPf/PYzj/+ODY//////////// + /////////////////////////////////////////////////////////////v7///z8//35+f/79/f/ + 9vTz///////iysD/pUgi/7JTLP+vUy3/rlMs/61SLP+sUCv/q1Ar/6pPK/+nTyr/pk8q/6ZOKP+kTij/ + k0Qk/7muqf/a2tr/wcHB/4GBgexiYmI4AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmpqaDS0tL/ + +Pj4///////ErqX/3JBy/+SBW//ebkP/3W9G/9xuQ//bbkP/221D/9psQv/YbEH/12tB/9VqQP/TZz7/ + 0WQ5//zk2v////////////////////////////////////////////////////////////////////// + //39//37+//7+Pj/9/T0//f3+P/9+/n/tmtM/7JPJv+zVS7/sFQt/69TLP+uUyz/rVIr/6xRK/+sUCr/ + q08q/6dPKv+mTyv/nkMe/553Zv/Ix8f/09PT/5ubm/95eXmoAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACioqIlsbGx4eXl5f/9/f3/+vn4/8efj//jjmz/43dO/+BvRv/eb0b/3W5F/9tuQ//bbkP/ + 221D/9lsQv/Xa0H/1WpA/9JkOf/+5dv///////////////////////////////////////////////// + //////////////////7+//78/P/7+Pj/9vT0//f5/P//////yYtx/7BMI/+2WDH/tVUw/7NVLv+yVC3/ + sFQt/69TLP+uUSv/rVEq/6xQKv+qUCr/pUol/5dSNv/Cvbv/3d3d/7i4uP+AgIDjZWVlLgAAAAIAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKenp4XKysr9+Pj4///////o4Nz/1ZuD/+aNa//jdkr/ + 4XFG/+BvRv/dbkb/3G5F/9tuQ//bbUP/2m1C/9lsQv/UZDj/6aGF//////////////////////////// + //////////////////////////////////7+//78/P/7+Pn/+/v8///////98u7/zIdr/7VOJP+7WjP/ + uFkx/7ZXMf+1VzD/tFUu/7NVLv+yVC7/r1Ms/65RK/+tUSr/q08p/5tGIv+3pZ//z8/P/87Ozv+VlZX9 + enp6jAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArKysv9bW1v/39/f/ + /////9nLxP/Zl33/6Itq/+RzSP/icUf/4W9G/95vRv/dbkX/3G5F/9tuQ//bbUL/2W1C/9VkOP/egF3/ + 9cOy///38v////////////////////////////////////////////////////////////7y7f/ltaL/ + xWZC/7tTKP++XDX/vFs0/7taM/+5WTP/uFgx/7ZXL/+1Vy//tFUu/7NVLv+wUyz/rlMr/6VHH/+si33/ + xcXF/9fX1/+kpKT/f39/wwAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKSkpDuysrLg39/f//j4+P/+/f3/2cS6/9yTdv/pi2j/5XVJ/+NxR//hcUf/4G9G/95uRv/dbkX/ + 3G5D/9ttQ//abUL/12Y6/9NhNf/Yb0f/45Jz/+63ov/3z7///eTZ///v6v//7uf//+7n//zl3P/10MH/ + 6rek/9qRdP/IZ0H/v1Qq/8JaM//CXjf/wF01/75cNP+9WzT/vFo0/7taM/+5WDH/t1cw/7ZXL/+1Vy// + s1Uu/6pHHv+ufWr/w8HB/9zc3P+0tLT/g4OD4nV1dUEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApqamb7+/v/Lq6ur/+vr6//79/f/Xv7b/3pV4/+qPbP/meEz/ + 43FG/+JxR//hcEb/3m9G/91uRv/cbkX/225F/9ttQ//abEL/2Go//9RjN//RYTT/0WA0/9FlOv/SakH/ + 0Wc//9BpP//OZDr/yFsw/8dZLf/GWi//x142/8ZhOP/FYDj/w143/8JeN//BXTX/v1w0/75cNP+9WjT/ + u1o0/7lYMf+4WDD/t1cv/7BJIP+ud2L/wr++/+Dg4P/Dw8P/kJCQ8319fXQAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiMxsbG+fDw8P/7+/v/ + +fn4/+HNxf/en4X/7JJv/+p+VP/lcUf/5HNI/+FwRv/gb0b/3m9G/91uRf/cbkX/225D/9ptQv/ZbEL/ + 2GxC/9VrQf/UaT//0mc+/9FmPf/RZjz/z2U8/85lPf/OZTz/zGQ8/8pjOv/IYzr/x2I5/8VhOP/DYDj/ + wl43/8FeNf/AXTX/wFw0/75bNP+8WjT/u1cv/7FLJP+1g3D/xMHA/9/f3//Ly8v/l5eX+YCAgJAAAAAC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKqqqprJycn77u7u//r6+v/6+vr/4dbR/96tl//slnX/7Ipj/+Z1Sf/kc0f/43NH/+FvRv/gb0b/ + 3m5G/9xuRf/cbkP/225D/9ptQv/ZbEL/12tB/9VrQP/UakD/02k//9JnP//QZj7/z2Y9/85lPf/MZT3/ + ymQ6/8ljOf/IYjr/xmE4/8VgOP/DYDf/wV42/8BeNf/AXTX/v1gt/7NTLv+3koT/xMLB/+Dg4P/Ly8v/ + m5ub+4ODg54AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqmsbGxvno6Oj/+Pj4//z8/P/r5eP/3r2t/+aaff/vk3D/ + 64FZ/+V0R//kc0f/43FH/+FwRv/eb0b/3W5F/9xuRf/bbkP/225D/9ptQv/ZbEH/12tB/9VrQf/TakD/ + 02c//9FmPv/QZj3/zmY9/85lPf/MZDz/ymM6/8liOf/IYjn/xmE4/8VgOP/FXjX/vVQp/7VmRv/Brqb/ + w8PD/+Hh4f/ExMT/nJyc+YSEhJ0AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiMv7+/8t3d3f/29vb/ + //////Hv7//m1Mz/366Z/+uXdv/wj2v/7IBY/+d2Sf/kc0j/4nNH/+FwR//ecEf/3W5F/9xuRf/bbkP/ + 221D/9lsQf/Ya0H/12tB/9RqQP/TZz7/0mY+/9FmPf/PZj3/zmY9/85lPf/MZT3/y2Q8/8pjOf/FWjD/ + vFw3/7qMev/Dvbv/1tbW/93d3f+4uLj/lpaW84eHh48AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAKampm+ysrLg1tbW//Pz8//8/Pz/+vr6/+vm5P/hysD/4KuU/+qZef/ukGv/7YZd/+p8Uv/mdkv/ + 43RJ/+JzSP/gcUj/3W9H/91vRf/bbkX/2m5D/9ltQ//XbEL/12tB/9VqQP/UakD/02k//9JpP//Raj// + z2Y9/8liOf+/ZD7/u4Nt/8Gzrv/Hx8f/6enp/9fX1/+wsLD/jY2N4YeHh3AAAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApKSkO6ysrL/Kysr94eHh//b29v/+/v7/9fX1/+rl4//izsX/ + 4Lek/+Saff/pkW3/7Yli/+uCWv/pfVP/5nlP/+R3TP/idUz/4HRJ/91zSP/ecUj/3XFH/9twR//bcEb/ + 2W9I/9ZuRf/RbEL/xmhD/7xyVv+4jHv/v7Ou/8jGxv/l5eX/4ODg/8PDw/+mpqb9jY2Nv4aGhj0AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp6enhbGxseDR0dH/ + 5ubm//b29v/+/v7/+fn5/+vp6f/k2tb/2cS7/9WtnP/Xl3//2pBy/9yIaP/ehWL/4IJe/+GAW//gf1j/ + 3X5X/9d8V//ReFb/yndV/8B2Wf+3fmj/s5CD/7qoof/Dvbr/0tLS/+3t7f/k5OT/zc3N/7Gxsf+SkpLh + jY2NhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACioqIlqampoLS0tOrQ0ND/4uLi//Ly8v/7+/v//f39//f39//l5OT/39va/9bMyP/SwLn/ + yLCn/72il/+6n5T/uZ2S/7adkv+3n5b/vKmi/76yrf/Gv7z/zMvK/9ra2v/s7Oz/8fHx/+Pj4//Kysr/ + tbW1/5mZmeqQkJChjIyMJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACioqIrp6enmK+vr97Hx8f+1NTU/+Pj4//y8vL/ + 9/f3//r6+v/4+Pj/9/f3//X19f/v7+//6urq/+Xl5f/o6Oj/6Ojo/+3t7f/u7u7/7+/v/+3t7f/o6Oj/ + 1tbW/8DAwP+vr6/+mJiY3pOTk5iPj48rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + pKSkZqioqLOurq7kv7+//crKyv/Q0ND/2tra/+Pj4//r6+v/7+/v//Ly8v/x8fH/7u7u/+fn5//b29v/ + 0tLS/8bGxv+8vLz/r6+v/Z2dneSYmJizlJSUZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoEWjo6OFpaWls6ioqNOrq6vorq6u9bCwsPuwsLD+ + r6+v/qysrPuoqKj1pKSk6KCgoNOcnJyzmZmZhZaWlkUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA///wAAAP/////8AAAAP/////AAAAAP////wAAAAAP///8AAAAAAP///gAAAAAAf/ + /8AAAAAAA///gAAAAAAB//8AAAAAAAD//gAAAAAAAH/8AAAAAAAAP/gAAAAAAAAf+AAAAAAAAB/wAAAA + AAAAD/AAAAAAAAAP4AAAAAAAAAfgAAAAAAAAB8AAAAAAAAADwAAAAAAAAAOAAAAAAAAAAYAAAAAAAAAB + gAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAA + AAAAA8AAAAAAAAADwAAAAAAAAAfAAAAAAAAAB+AAAAAAAAAP4AAAAAAAAA/wAAAAAAAAH/gAAAAAAAAf + +AAAAAAAAD/8AAAAAAAAf/4AAAAAAAD//wAAAAAAAf//gAAAAAAD///AAAAAAAf//+AAAAAAD///8AAA + AAA////8AAAAAP////4AAAAB/////4AAAAf/////8AAAP//////+AAH///8oAAAAMAAAAGAAAAABACAA + AAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAQAAAAHAAAACQAAAAoAAAAM + AAAADAAAAAwAAAAKAAAACQAAAAcAAAAEAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAKAAAAEAAAABYAAAAb + AAAAHwAAACIAAAAlAAAAJgAAACUAAAAjAAAAHwAAABsAAAAWAAAAEAAAAAoAAAAFAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAADQAAABYAAAAg + AAAAKwAAADQAAAA8AAAAQwAAAEgAAABMAAAATQAAAEwAAABIAAAAQwAAADwAAAA0AAAAKwAAACAAAAAW + AAAADQAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA0AAAAY + QEBBRlRUVXxdXV6mZWVmyHR0del0dHX3c3N0/3NzdP9zc3T/dHR1+XV1du1iYmPQVlZWtUVFRpcpKSlx + AAAATgAAAEIAAAA0AAAAJQAAABgAAAAMAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAI + ODg4I1paW2tnZ2i3cnJz54KChOGurrL309PT/+bm5v/19fX//v7+//7+/v/+/v7/9/f3/+bm5v/U1NT/ + vLy+/4GBk/Rvb3jxXl5gy0FBQpUUFBRgAAAARgAAADQAAAAiAAAAEwAAAAgAAAACAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAzQ0NBRgYGFncHBx0YKCgtyzs7Xr9PT1/u3t7f/o5+f/6+fl/8vCv/+1p6H/pJCJ/6GIgf+nkIr/ + taOf/8e8uv/f2dj/4uHg/+3t7f/z8/X+rKy49np6iO5paWvfQUFClgwMDFoAAABBAAAALAAAABkAAAAL + AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAEXl5fPG9vcLSEhIXZ1tbW+Pj4+P7U09P/mpWT/2NRSP9tSz7/f1FA/41VQv+ZWkb/ + oV1J/6heSv+nXUn/o1pH/51WRP+SUkT/g1FF/3haVP+knZv/19XV//b2+P/ExM35eXmI7WBgYs0rKyx6 + AAAASgAAADMAAAAdAAAADAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAANnZ2hYdnZ33Lu7u+T7+/v+397e/4qAfP9kRTj/e0k1/4xROf+XVTv/ + n1k9/6ZbP/+sXED/slxB/7dcQP+5W0H/ulpB/7xYP/+6V0D/tldB/65XQ/+dUUL/hFJH/5mIhP/X1dT/ + +vr7/6qqt/RwcHPrPDw9kQAAAFAAAAA2AAAAHgAAAAwAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmtrbGyEhIXV4+Pj9Orq6v+ZlJH/Yj8w/3dCK/+HSC3/ + kk0v/5pQM/+hUzX/p1c5/6xaPP+yWz3/tlo8/7xbPf/AWz//wFk+/8JXPP/FVTr/xVQ4/8RSOf++Uzv/ + tFNA/6BSQ/+GUkj/raSi/+rq6v/Z2d/8d3d+6kVFRZ4AAABRAAAANgAAABwAAAAKAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbm5va5KSktP4+Pj82tnZ/3FjXf9sPCf/ + fj8j/4lBIv+SRST/mEop/59OLv+jUjL/qFY3/6pSM/+iTjH/n1Y9/51QOf+lSC3/v1c5/8RZPf/GVjr/ + x1M3/8lQNv/JUDX/xk82/75SO/+wU0H/lFNG/5F6df/b2tr/9PT2/n19iOpFRUWeAAAATwAAADEAAAAY + AAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwcHFpk5OU0f7+/v/Ozc3/ + YElA/3M6If+AOhv/iTsZ/48+G/+UQyD/mUgl/55NK/+iUTD/pFIy/690Xv+/p6D/zcTD/8zBv/+zk4r/ + oldC/7tSN//GWDz/x1Q5/8lTN//LUDT/y1A0/8lQNf/DUTn/t1VA/55VRf+GYVv/09HQ//39/f9+foTo + RERFmwAAAEgAAAApAAAAEQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJyc1OIiIjQ + +fn5/M/Pz/9cPjH/eDke/4Q3Fv+JNhL/jDgS/5A7Fv+UQR3/mEck/51MKf+fSSj/rW9X/9bT1P/X19r/ + 1dHR/9fT1P/g4OH/187M/6pXP//DWDv/xFc7/8dWOf/JUzj/ylE3/8pRNf/JUTX/xFI5/7pWQP+hVkX/ + hF1U/9XT0//19ff+dXV46Do6OocAAAA9AAAAHwAAAAoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + c3N0L3h4edrm5uby3t7e/2FJQP95OR7/hTcU/4o1D/+MNA//jTcQ/487Ff+TPhv/lkQh/5pJJ/+bRyX/ + v52P/87N0P/IwsL/x8HB/8jCwv/Mx8f/3Nzd/7V+bv+5TzL/w1k9/8RYPP/HVzr/yFQ5/8lTOP/JUzf/ + yFM2/8RUO/+5V0H/n1dH/4ZoYv/g397/0dHX+W5ub+gmJiZnAAAAMAAAABQAAAAFAAAAAAAAAAAAAAAA + AAAAAAAAAABzc3QJdXV2rcbGxt/y8vL/dWRd/3k5Hv+IORf/jDUP/440Df+PNQ//jjUQ/5A5E/+RPRn/ + lUIe/5hGJP+bSCX/vqWd/8TCw/+/ubn/v7m4/8C5uf/Ev7//0M3Q/7uJef+2TzH/wFs+/8FZPv/DWTz/ + xlc7/8ZXO//GVjr/x1Y6/8ZUOv/BVj3/tlpE/5hXSP+ahYD/8PDw/5qaou9aWlu4BwcHQwAAACAAAAAK + AAAAAQAAAAAAAAAAAAAAAAAAAABzc3RRioqL0v7+/v2em5n/czoi/4o8Gv+QORP/kjUQ/5E1Dv+QNQ// + jzUQ/5A4Ev+TPBb/lUEc/5dFIf+YRB//s4p6/8DAwf+8tbX/u7W1/722tv/Au7z/1dXX/79/a/+4VDf/ + vVs//79bP//AWj7/wlo9/8NZPf/DWD3/xlg8/8RXO//CWDz/vFlA/61cRv+PWkz/u7Sx//T09P50dHXq + Nzc3dwAAAC4AAAASAAAABAAAAAAAAAAAAAAAAHNzdBF1dXbF19fX6eXl5f9jQzX/iTwc/5I7FP+VOBH/ + lTcQ/5M3D/+RNw//kTcQ/5A4Ef+TOxT/lT8b/5dEH/+YRCD/oVg6/72uqv+9vL7/vby9/729vv/NzM7/ + 0a2i/7NZPP+3XD7/u1w//7xbP/++Wz//v1s//8BaPv/BWj7/wVo+/8FaPf/BWT3/vlo+/7hcQv+hWkf/ + imRZ/+Tk4/+oqK7zYWFiww0NDUAAAAAbAAAABwAAAAAAAAAAAAAAAHNzdFSMjIzR/f39/YyGhP+APyT/ + kz0X/5g8FP+ZORH/lzkR/5Y4EP+VNw//lDgQ/5Q4Ef+TORP/lT4Z/5dDHf+ZRiP/mkYj/6NaPP+vfGj/ + tIt7/7iOfv+7fmf/rVg5/7FZO/+0Wz//tlw//7hcP/+7XD//vFw//71bP/++Wz//vls//79bPv+/Wj7/ + vlo+/7pbP/+vXET/k1hI/7Glov/y8vL+dHR16Tk5OW8AAAAkAAAADAAAAAEAAAAAAAAAAHNzdKLExMTg + 5+fn/2xIOf+YSir/mz4W/508E/+bOxL/mToR/5g5Ef+WOBD/ljkQ/5U4Ef+UORL/lTwV/5dBGv+YRB// + mUYk/5tGIf+eRB//oUcj/6NJJv+nTiv/rFg5/61aPP+vWz3/s1s9/7VcPv+2XD//t1w//7hcP/+5XD// + uVw//7tbP/+7Wz7/u1s+/7paPv+yXEH/nlpF/4llW//l5eX/kpKW7VZWVqQAAAAuAAAAEgAAAAMAAAAA + c3N0Jnd3eN/39/f7uLWz/49SOP+kUC3/oUIb/589E/+fPRT/nTsT/5s6Ev+ZOhH/lzkQ/5Y5Ef+WORL/ + lTsT/5c9GP+YQRz/mkQf/5pSNP+VWD7/lllB/5lcRf+ZW0P/nlAy/6tYOf+sWTv/rlo8/7FbPf+zWz3/ + tFw//7VcP/+2XD//tlw//7dbP/+3Wz7/t1s+/7daPf+zWz7/p1tC/41XRv/Dvbv/zc3P+mtrbN4XFxdB + AAAAFwAAAAUAAAAAc3N0XpOTlNH6+vr/gHFr/6ZWNf+tUi//rE4n/6M/Fv+hPRT/oD0U/588E/+dOxP/ + mjoR/5k6Ef+XOhP/lzoT/5c7FP+XPRb/nUcl/8Ozrv/HxMb/x8PD/83Ky//Hv77/ikkx/6dTMv+pVzj/ + q1g5/61ZO/+uWjz/r1s9/7JaPf+zWz7/s1s+/7RbPv+0Wz7/tFs9/7RaPf+yWTz/q1o//5NWQv+ZhX7/ + 7u7u/3Z2d+o8PD1nAAAAHAAAAAcAAAAAc3N0h7Kys9ro6Oj/iGNU/61ZN/+yVC//slQu/6xOJv+kPxb/ + oj4V/6E+FP+fPRT/njsT/5s7Ev+aOxL/mTsU/5g7E/+YOhP/nkkm/83Cwf/SztD/0czM/9TR0f/Ry8v/ + hkwz/6FOLf+nVDT/p1Y1/6lXOP+qWDr/rFk6/61ZO/+uWjv/rlo8/69aPP+vWjv/r1k7/69ZO/+uWDr/ + q1k8/5pYQP+IZFj/8O/v/5iYmfFUVFWRAAAAIAAAAAkAAAAAc3N0r8/Pz+nQz87/m19H/7NbN/+2WDD/ + tVYv/7NWL/+tTyj/p0IY/6Q+Ff+iPhb/oD0U/548E/+dPBP/mzwU/5s8FP+ZOhL/m0Ec/8q3sv/U0dL/ + 0crK/9HLy//W1NX/m3pu/48+Hf+lUjH/o1Ix/6RTM/+lVDX/qFY3/6lXN/+qVzj/q1c4/6tXOf+rVzj/ + q1c4/6tXOP+rVjf/qVU3/55VPP+EVUb/z8zL/7W1tfZwcHG+AAAAIQAAAAoAAAAAc3N00ubm5va1r6z/ + q2NG/7hbNv+6WTP/t1gx/7ZXMf+0WDH/rk8n/6hDGf+kPxX/oz8V/6E+Ff+fPRT/njwT/548FP+bPBT/ + mTgP/76Yi//QztH/y8TE/8nDw//MyMj/ycLB/4hQOP+VQh//o1Av/6JQL/+iUTH/o1Iy/6RTM/+lUzP/ + p1M0/6dTNP+nUzT/qFM0/6hTNP+oUjP/pVIy/55TN/+GUT7/yMG+/9bW1v99fX7dAAAAIgAAAAoAAAAA + c3N07vf39/2dkIr/uGhH/7xcNv+8WjT/u1ky/7hYMv+3VzH/tVgy/7FSK/+pQxr/pT8V/6Q/Fv+iPxX/ + oT0U/589FP+ePRX/mjQK/6xuVv/Gx8n/wry8/8C5uf+/uLj/x8LD/7+0sv+CSTL/lT4b/6JOK/+hTi3/ + oU8u/6FQL/+hUC//olEw/6JRMP+jUTD/o1Ew/6NQMP+jUC//ok8w/5xRM/+HTzn/w7ey/+Tk5P9xcXLg + AAAAIQAAAAoAAAAAc3N0/v7+/v+OeXH/wmtI/75dNv++XTX/vlw0/71bM/+7WjP/uFkz/7dZMv+zVC7/ + rEgf/6hBGP+kPxb/pD8W/6E+Ff+gPhX/njsT/6JII/+8qaT/vLm8/7mzs/+4srL/uLKy/8bBw//Iv73/ + k2NP/406GP+hTCj/n0wp/59MKf+fTSr/n00r/59NK/+fTSv/oE0r/6BNK/+gTCr/oEwq/5tNLv+JSzX/ + qpqU/+fn5/9ycnPkAAAAIAAAAAkAAAAAc3N0/v7+/v+Jb2X/yHBM/8JeOP/DYDf/wV43/79dNf++XDT/ + vFs0/7laM/+4WjP/tlgy/7JQKP+rRhz/pz8W/6Q/Fv+jPxX/oT8V/6A6Ef+kUC3/t6ml/7e2uf+1rq7/ + ta+v/7iysv/Iw8T/3Nvb/593Zf+MNxL/oEgl/5tHJf+bSCX/m0gl/5tIJf+bSCb/m0gm/5tIJv+dSCX/ + m0cl/5lIKf+HSjH/nYuD/+fn5/9ycnPjAAAAHAAAAAgAAAAAc3N0/v7+/v+TenH/y3NQ/8dhOf/GYDn/ + w144/8FeN//AXTX/v100/71cNP+7WzT/uVoz/7dZNP+0VjD/rUsj/6lEGv+lPxX/pD8V/6I/Fv+fOQ7/ + ql5B/7ekn/+3tbf/tq+v/7u0tP/CvLz/0s3O/+Tg4f+OVj7/kTkT/5tFIP+aRSD/mkUh/5lEIf+ZRSH/ + mUQh/5hEIf+ZRCH/mUUi/5VHKP+ESTH/oJGK/+fn5/92dnblAAAAGAAAAAYAAAAAc3N08vn5+f2mk4v/ + yXVT/8lkPP/JYjv/x2I6/8ZgOf/DYDn/wV44/8BdN/++XDX/vVs0/7laNP+4WjP/t1kz/7RWL/+tSyP/ + qEIZ/6Q/Ff+jPxb/oTgO/6dOKP+4qaT/uba4/763t//HwMH/0svM/+bk5v/SxL//fjUW/5pBG/+aQx7/ + mEMe/5lDHv+ZQx7/mEMf/5hDH/+YQyD/l0Qh/5NGJ/+BRzD/v7Ou/93d3f5vb3DUAAAAEwAAAAMAAAAA + c3N01+np6fe8sq7/yXNR/8xpQf/MZT3/y2Q8/8ljO//GYjr/xGA5/8JgOP/BXjj/v103/75cNf+7WzT/ + uVsz/7haM/+2WTL/s1Qu/65OJv+pRR3/pEEY/6E5DP+pWDf/vre2/8TAwf/NyMj/2NPT/+Hc3f/7+/3/ + uJaI/480EP+bQhz/mUMd/5lDHf+ZQx7/mEMe/5hDHv+XQx//lkMg/5BGJv98RjD/zMXC/87OzvtsbG2/ + AAAADQAAAAEAAAAAc3N0stLS0unW09L/xHha/9BrRP/NZj3/zWU9/8tlPP/KYzz/yGM7/8ZiOf/DYTn/ + wV44/8BdN/++XDf/vVw0/7tbNP+4WzT/uFoz/7ZZM/+0VjH/rk8p/6pJIf+kPBL/uIJu/87Nzv/U0ND/ + 3tja/+fh4f/y8fL/2srE/4o4Ff+bQRr/mkEc/5lCHP+ZQhz/mUId/5hCHf+XQh3/lUIf/4xFJv93RzL/ + xcLB/7Ozs+xqamulAAAACAAAAAAAAAAAc3N0iLOzs9rs7Oz/uIVy/9h4U//RZT3/0Gc9/85mPf/MZT3/ + y2U8/8pkPP/IYjv/xGI5/8NhOf/CXjj/wV03/8BcNP++XDX/u1w0/7haM/+3WTP/tVgz/7RXMf+vUCr/ + tV48/+Tc2v/p5ub/6+fn/+/q6v/z8PH/7Ofm/4pFKP+bPRX/nUEb/5pBG/+aPxv/mUEb/5hBG/+YQRz/ + lEIf/4lGKf90Tz//4+Li/5mZmuFpaWp8AAAABAAAAAAAAAAAc3N0XZKSk9H7+/v/qZSM/+OYe//UZz7/ + 02g//9JnPv/OZj3/zWY9/8xlPf/KZDz/yWM7/8diOv/EYTr/wV43/65SL/+2Uiv/wF00/71dNP+5WzP/ + uFoz/7dZM/+zUyv/tVs4/+7l4v/39fb/9/X1//n29v/69vf/+/n7/55oUf+gRiD/pE4p/6NNKP+hTCf/ + oEwn/59MKP+eTCn/mE0t/4hNNP+EcWn/9PT0/4CAgd9lZWZJAAAAAQAAAAAAAAAAc3N0Knd3eNz6+vr8 + x8LA/+GkjP/cfVv/1Wc9/9RqP//TaD//0WY+/85mPf/NZj3/y2U9/8lkO//GWzH/04xw/9zRzP+vgG3/ + m0Uj/7NOJv+8WC7/u1gw/7hULf+uSyP/0aOR//v7/P/69/f/+/n5//v39//79/n/+vr6/6NrUv+kSyT/ + qVIv/6dSL/+kUS7/pFEt/6NRK/+gUC3/l1Ey/4FMNf+5trT/4uLi+HNzdN5YWFkaAAAAAAAAAAAAAAAA + AAAAAHNzdKrLy8vg7e3t/8mRe//lknP/1Wc9/9dsQv/Wa0L/1GpB/9JoP//QZz7/zmc+/81mPf/IWS// + 3J2D//7////3+vv/zbmz/7J/a/+0cFb/s2pM/7VtUP/Knoz//Pz9//38/f/8+vr//Pr6//z5+f/69/n/ + 8u7u/6BYO/+qTyj/qlEt/6hRLf+lUCv/pE8r/6JPK/+eUS7/lFM3/39YSP/l5eT/q6us4W5ub40AAAAC + AAAAAAAAAAAAAAAAAAAAAHNzdFuQkJDO/v7+/L20sv/npo7/3npV/9psQv/abkT/12xD/9VsQ//Ua0H/ + 0mg//9FoP//LWzH/4J6F///////+/f7////////////7+/v/+vn5//z7/P////////////78/P/9+/v/ + /Pr6//v39v/6+/z/5tTO/6dOKf+tUi3/rFIu/6tRK/+pUCv/p1Ar/6JQLP+dUzL/jVI4/56Sj//7+/v+ + goKD2W1tbkkAAAAAAAAAAAAAAAAAAAAAAAAAAHNzdBR2dnfI3Nzc6u3t7f/HopT/65h6/9ppP//bbkX/ + 2m5E/9htRP/WbEP/1WtB/9NqQf/NXDL/5KGI//////////////////////////////////////////// + //7+///9/f/9+/v/+/n5//Xz8///////0aKO/6xLI/+vUy7/rlMt/6xSLf+rUCv/qVAs/6JRL/+XVDj/ + f1RB/+Xk5P/Ozs7odHR1vWtrbA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3RdkZGRzv7+/v3Kx8b/ + 5auV/+eObf/baj//3G9G/9puRf/YbUT/12xD/9ZsQ//QYDP/56WL//////////////////////////// + //////////////////7+//78/P/79/f/9vX2//z////dtqf/sVMu/7RUL/+yVC//r1Qu/65TLf+rUSz/ + qFMu/59VNf+MUjr/samn//39/f6GhofUcnJzTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3QM + dnZ3sMrKy9329vb/xK6n/+upkP/ifVX/3WxD/91vRv/bb0X/2m5F/9htRP/VZjz/3oVj//3n3/////// + //////////////////////////////////////7////+////+vf2/+fCtP+7XTj/uFYu/7dZM/+1VzH/ + s1Yv/7BUL/+sVDD/pVU2/5VSNv+OeG//9PT0/8HBwd11dXamc3N0CAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAc3N0OHt7fNPq6urx6enp/8iupf/vrZP/43xU/95sQv/ecEb/3W9G/9tuRf/bbkT/ + 12o//9ZoP//lmXv/9cm3//vh2P//7uf///f0///59f/+8/D/+ebf//PYzv/pvq3/zXxc/75XL/++WjL/ + vVw0/7taNP+5WTT/tlgy/7FYM/+qWjj/m1c6/4ZlWf/m5uX/6Ojo8nl5ethzc3QxAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNzdFyOjo/L+vr6/Ofn5//Rqpv/8K6U/+WCXP/fbEL/ + 4HBG/95wRv/cbkX/225E/9hsQv/VZDn/02M5/9RoPv/Ta0L/03FL/9NxTP/Rb0j/zGU9/8liOf/DWjD/ + wlsy/8NeOP/BYDj/v101/75cNP+7WzX/tVo2/65bOv+gWTz/iF1L/9jY2P/5+fn8ioqKz3NzdFMAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3Rzn5+gzP7+/v/o6Oj/ + yrGq/+ysk//pkG3/321A/+BvRP/fcEb/3W9G/9tuRf/bbkT/2G1D/9drQf/UaD7/0WU8/9BlO//OZTv/ + zGQ7/8tjO//KYzz/yWM7/8ZiOv/DYTn/wWA4/75eN/+6Xzn/sV8+/6FZPP+PaFn/2dnY//7+/v+dnZ7M + c3N0cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + c3N0c56en8z6+vr87+/v/8K1sP/nsp3/7pl6/+V7VP/fbUP/4G5E/95vRv/cbkb/225F/9puRP/YbUP/ + 1mxC/9RrQv/Saj//0Wc+/85mPf/NZT3/y2U8/8ljPP/FYzv/wmM9/7tiPv+wXz//oF1D/5+IgP/n5+f/ + +vr6/J+fn8xzc3RzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAHNzdHKOjo/M6+vr8vn5+f/Oy8v/zKyh/+uslf/sknH/5H1V/99vRf/fbkT/ + 3m9G/9xuRv/bbkX/2m5E/9dtQ//Wa0L/1GpB/9FnP//PZz7/y2dA/8hnQf/CZkH/umVE/6xgQ/+bblz/ + vbi3//b29v/q6urxjo6Py3NzdHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzc3Rbe3t81MvLzN7+/v797u7u/8C8uv/Pp5n/ + 6aaO/+uVdP/lfFT/4HFI/91vR//bbkf/2m1F/9huRP/YbUX/1GxF/9BsQ//MaUT/x2lF/71lQ/+0ak3/ + pm5a/7Klof/p6en//v7+/crKy917e3zUc3N0XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3N0N3Z2d7CRkZHO + 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 + h4eI7OHh4f/BwL//ek47/4ozDP+POhX/lEIf/5tKKP+hUDD/plMz/7J3YP+6koX/toJy/69UPP/EVTj/ + yVQ4/8tRNf/NTzL/zksw/9FKLv+wTTb/wrKt/+Hh4f+Hh4jsamprQwAAAAAAAAAAAAAAAAAAAAAAAAAA + amprIoODg9jT09P/wMC//39OOP+LMAf/jDQN/444E/+TQB3/mUck/51KKP+4iHf/1NPU/9bW2P/Z2t3/ + w6uk/7RSOP/GVjv/yVQ4/8pSNv/MUTX/zFAz/81PM/+3TDT/w7ay/9TU1P+Dg4PYamprIgAAAAAAAAAA + AAAAAAAAAAB8fHyYt7e4/NnZ2f99VUP/jjAF/480DP+ONA3/jzcS/5E9Gf+WRCD/nU4s/8W1r//HxMb/ + w76+/8bCwv/W09T/tmhT/8JWOv/EWT3/xlY7/8lUOP/JVDf/yVM3/8pTN/+tTjb/19HP/7i4ufx8fHyY + AAAAAAAAAAAAAAAAamprQIiIifLt7e3/hnVu/5EyCf+TNg7/kTUN/5A1Df+QNg//kjsV/5RBHf+aSCT/ + uaCX/7+/wv+6trf/v7y//9HJx/+4Zkz/vlk8/8BaP//CWj7/xFk9/8VXPf/FVjv/xFY7/8VVOP+gYU// + 7Ozs/4iIifJqamtAAAAAAAAAAAB1dXaev7+//rm4uP+NRij/mTcP/5c4Ef+UNg//kjYO/5E2D/+SOBP/ + lkAb/5hCHv+jXkH/uaGY/761tP/FtrL/v4Nv/7RXOv+4XD//u1w//75cP//AWz//wFs+/8FbPv/BWj7/ + wFo9/7xQM/+5pZ//wMDA/nV1dp4AAAAAamprJXh4efLr6+v/jntz/6M/Fv+dOxL/mzsS/5g4Ef+WOA// + lDcP/5Q4Ev+WPRf/mEQf/5lEH/+bRiH/olIy/6VRMf+rUjL/sFs9/7RcP/+3XD//uVw//7pcP/+7XD// + u1s//7tbPv+7Wj3/u1k7/55bR//q6en/eXl68mpqayVqamtgn5+f+dTU1P+bYkr/rU8o/6NAGP+ePBP/ + nTwT/5o6Ef+YOhH/lzgS/5Y8FP+XPhj/nU8t/6FxXv+hc2H/o3dl/51XPf+rVjf/rlo8/7FbPf+yXD// + tVw//7ZcP/+2Wz//tls+/7ZaPf+2WTz/rFAz/83Cvv+goKD5amprYGpqa5TAwMD+pqKg/65ZN/+yVCz/ + rU8o/6NAF/+hPhT/nj0U/5s7Ev+ZOxL/mTsT/5Y2Dv+oZ0z/0M7R/9HQ0//U1Nf/oG1a/6NOK/+nVjf/ + q1k6/61aO/+uWjz/sFs9/7BbPf+wWjz/sFk7/7BXOv+wVDX/ooBz/8HBwf5qamuUamprwNra2v+ViIL/ + t1Us/7dWMP+1VjD/rlAo/6VBF/+iPhT/oD0U/508E/+bPBP/mDYO/6ZdP//Tzs7/0czM/9XT1f+oh3r/ + lEEe/6VTMv+kVDT/p1U2/6hWN/+qVjf/q1Y4/6tWOP+rVjf/q1U1/6xUNf+TWUT/2tra/2pqa8Bqamvh + 7e3t/5R2a//AWzP/u1oz/7hZMv+2VzL/sFEp/6dEGf+kPxX/oj4V/6A9FP+cOxP/oEUf/8S2sf/Gw8T/ + xL+//8S+vv+YZ1T/lkAd/6JPLP+iUTD/olEx/6NSMv+kUjL/pVIy/6VSMf+lUTH/pVAw/5NPNf/t7e3/ + ampr4Wpqa/j7+/v/mHBh/8dgNv+/XTX/vlw0/7tbM/+4WjT/tFQu/6tHH/+mQBb/oz4U/6E+Ff+dOA7/ + rXVf/7y8wP+4tLT/u7a2/8TBwf+id2X/kj4c/55KJ/+eSyr/nkwq/55MKv+eTCr/oEsq/6BLKf+eSin/ + lEsv//v7+/9qamv4ampr+Pv7+/+fdGP/zGQ7/8RfN//DXjb/wF01/75cNP+7WzT/t1kz/7JSKv+rSCD/ + pkAX/6I9FP+hPRT/rHRe/7exsf+2sbL/v7q6/9bU1v+1koX/kDwY/5xFIP+aRiL/mkUi/5lFIv+ZRiP/ + mkUi/5pGI/+QSSv/+/v7/2pqa/hqamvh7e3t/6ODdv/QZz7/ymM7/8djO//EYDj/wl83/8BdNv++XDX/ + ulw1/7dZM/+yUiv/rEkh/6VAFv+hNwz/q2hO/7q0tf/Dv8D/1tDR/+zs7f+kclz/kzgS/5lCHv+ZQh7/ + mEIe/5hCH/+XQiD/mEQh/4pHLP/t7e3/ampr4Wpqa8Da2tr/pZSO/9VuR//NZDv/zGY9/8lkPP/GYTv/ + xGA4/8JeNv+/XTb/u1w1/7pbNP+3WjP/tFQu/61MJP+lPhP/uId1/9HQ0//e2Nj/7+7v/9XCu/+ROxf/ + mj8Z/5lBHP+ZQR3/mEEd/5dBHf+WQBz/i1lE/9ra2v9qamvAamprlMDAwP6wqqj/2oJe/9RoPv/PZz3/ + zWY+/8tlPf/JYzv/xWE6/8NfOP++VzD/uVQr/7xcM/+5WzT/t1o0/7BPJ/+/eFv/6+np/+/s7f/08fL/ + 8evr/5tQMf+dQRn/nEId/5tCHv+ZQh7/mUQg/5Y9F/+jin//wcHB/mpqa5Rqamtgn5+f+dbW1v/OmIT/ + 3XVO/9RnPf/TaD//z2Y+/8xmPf/KZDz/xl82/8+Qef+4hXD/rlIt/7RQJ/+0UCb/rUgf/86ZhP/6/P3/ + +vj4//z4+f/39vX/qGVI/6ZPKP+lUSz/o1As/6JPK/+hTiv/l0ck/9LNy/+goKD5amprYGpqayV4eHny + 6+vr/7Sjnf/ojWv/12k+/9dqQf/UaUD/0Gg//85nPf/KXjT/6sS3//r////aycL/xZuL/8KNd//Rqpn/ + +PPy///9/v/9+vr//Pr6//Lq6P+qWTj/q1Aq/6hRLP+mUCz/pE8q/6BKJP+YZlD/6+vr/3h4efJqamsl + AAAAAHV1dp6/v7/+w8PD/+Gnkv/ielP/2WpA/9htRP/Wa0L/02g//85hNv/uxbb///////////////// + /////////////////vz8//r4+P/9////2biq/6xMJv+uUiz/rFEs/6hQK/+mTyr/nEIe/7+1sf+/v7/+ + dXV2ngAAAAAAAAAAamprQIiIifLt7e3/urGu/+2aev/fb0X/221E/9luRf/Xa0L/0WM3//HDsf////// + ///////////////////////////9/v///P///+3a1P+6ZkT/slIr/7BVLv+vUyz/rVEr/6VHH/+hdmX/ + 7e3t/4iIifJqamtAAAAAAAAAAAAAAAAAfHx8mLe3uPze3t7/2sC3/+yRbv/fbUL/3W5F/9tuRf/Yaj// + 3XxW//LBrv//8ev///////////////////z6//jq5//jtaP/wmhE/7lVLP+4WjP/tVcx/7RWMP+uTCT/ + pF1A/9zb2/+3t7j8fHx8mAAAAAAAAAAAAAAAAAAAAABqamsig4OD2NPT0//Ozs7/6ce6/+2ScP/icUb/ + 3m1C/91vRv/YaT//1mU4/9hwSP/bgl//35By/92Qcv/Wf17/y2pE/8JZMP/BXDP/wV42/7xcNP+6WzT/ + tVEp/65ePv/LxsX/09PT/4ODg9hqamsiAAAAAAAAAAAAAAAAAAAAAAAAAABqamtDh4eI7OHh4f/Ozs7/ + 38i//++egf/ofFP/4G1B/95uRP/bbkX/2WpB/9ZnPf/TZDj/z2E3/81jN//LYzr/ymQ8/8djO//EYDj/ + wV0z/7tSKP+zcFX/y8jH/+Hh4f+Hh4jsamprQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqamtO + h4eI7NPT0//e3t7/zsbD/+m1of/tj2v/53dM/+BvRP/dbkT/225F/9ltQv/Wa0H/1GlA/9FnPf/OZTz/ + y2E3/8ZaMP/DYDv/uJSG/93d3f/T09P/h4eI7Gpqa04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABqamtDg4OD2Le3uPzt7e3/ysrK/8/Cvv/frZv/6Ixp/+N1TP/ga0D/4G1B/91rP//YZzv/ + 1GQ4/9FoPv/MdVP/v5iK/8rFxP/t7e3/t7e4/IODg9hqamtDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAABqamsifHx8mIiIifK/v7/+6+vr/9ra2v/DwL//xLSv/8qnmv/Ajn3/ + vol4/8WYiP/FqqH/wLa0/9rZ2v/r6+v/v7+//oiIifJ8fHyYamprIgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAamprQHV1dp54eHnyn5+f+cDAwP7a2tr/ + 7e3t//v7+//7+/v/7e3t/9ra2v/AwMD+n5+f+Xh4efJ1dXaeamprQAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGpqayVqamtg + amprlGpqa8Bqamvhampr+Gpqa/hqamvhamprwGpqa5RqamtgamprJQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAD/wAP//wAA//wAAD/4AAAf8AAAD+AAAAfAAAADwAAAA4AAAAGAAAAB + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAHAAAAD + wAAAA+AAAAfwAAAP+AAAH/wAAD//AAD//8AD/ygAAAAYAAAAMAAAAAEAIAAAAAAAYAkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGtsOGxrbHhsa2yubGts2GxrbPVsa2z1 + bGts2GxrbK5sa2x4bGtsOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAGxrbD1sa2yYeHd43qOjo+bMzMz36Ojo/vn5+f/5+fn/6Ojo/szMzPejo6PmeHd43mxrbJhsa2w9 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGtsanZ1dtW4uLjq7+/v/tDLyf+ij4j/ + km1f/5FgUf+WYFH/oGxf/7GQiP/a0M7/8fHx/rm5uel2dXbVbGtsagAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABsa2x5j46Pz97e4PrEv7z/gmJU/4pONP+ZVTv/o1c8/6hUOf+qTzL/ullB/7tUPv+yTjr/ + pWZZ/9XIxP/l5eX5j46Pz2xrbHkAAAAAAAAAAAAAAAAAAAAAAAAAAGxrbGqPjo/P7u7w/J2Piv97PyT/ + iUEh/5ZJKv+eTC7/q2NH/8iup//KqZ//tFI4/8RVOf/FUzn/wVA6/7FQPP+2mJD/+Pj4+4+Oj89sa2xq + AAAAAAAAAAAAAAAAbGtsPXZ1dtXc3N76nZWS/4E9IP+JORb/jjoY/5RBH/+hVTb/0MbD/97c3P/y8vP/ + wYt9/71PMf/GVTv/xlQ4/8JUO/+yUj7/t5+Y/+Tk5Pl2dXbVbGtsPQAAAAAAAAAAbGtsmLa2t+u/vLv/ + gUUr/406Ff+PNxD/kDcT/5M9GP+dUjL/ysG//87Lyv/X09P/xpCA/7hRNP/BWj7/w1k8/8FXPf+8WED/ + p1Q9/9bNyv+5ubnpbGtsmAAAAABsa2w4eHd43unp6/+LbGD/kTwY/5U6E/+TNg7/kjcP/5M8Fv+XQRz/ + pFxA/7+imP/EmIf/rFc4/7ZbPv+6XD//vlw//75bP/+8Wj//s1pC/5ttYP/y8vH+eHd43mxrbDhsa2x4 + o6Oj5szJyP+ZWDz/nUId/5o7E/+ZOhH/ljgP/5Q6E/+XPxn/nVY6/6JrVP+hYUn/p1U2/65aPP+yXD7/ + tlw//7dcP/+2Wz7/slxB/6BWP//Yzsv/o6Oj5mxrbHhsa2yuzMzM96uemP+qVzX/rFEr/6I/Fv+ePBP/ + nDsS/5k6Ev+XOBH/tHhh/9nd3//MwL3/nE4u/6dUM/+qVzj/rVo7/69aPP+vWjv/rVo8/6JYPv+rjIL/ + zMzM92xrbK5sa2zY6Ojo/p+Cd/+zXDn/tVgz/65OJ/+lQRf/oT0U/508E/+ZNAr/r2ZI/9jZ3f/Tzs// + p21W/5tGIv+jUTH/pFMz/6VUNP+nVDT/plQ1/6BVOf+TZlX/6Ojo/mxrbNhsa2z1+fn5/551ZP+7YT3/ + u1w1/7laM/+0VC3/qkUc/6M+FP+eOA7/pU0q/8fCwv/Gxcb/y8bH/6h8av+bQBv/oEwq/55MKv+eTCv/ + n0wr/5tOMP+JVUH/+fn5/2xrbPVsa2z1+fn5/6V5aP/DZkH/wV83/79dNf+7XDX/tlYw/65LJP+mQhn/ + oDoO/6hNKf/Cu7n/yMbH/9jW1v+oaE3/lz4X/5lFIf+ZRSL/mEYj/5VIKf+FUz7/+fn5/2xrbPVsa2zY + 6Ojo/q6Ogv/HaEP/yGQ9/8VgOP/CXjf/v101/7pbNP+2VjD/rk4m/6Y+E/+oUS7/z8rK/+Ph4//Yy8X/ + kkEf/5k/Gf+YQR3/l0If/5JGJ/+LYE7/6Ojo/mxrbNhsa2yuzMzM97ippP/Lb0z/zGY//8tlPP/HYTv/ + w2A4/79cNP+3VCz/uVcw/7VULf+sSyP/2cO8//Dv8f/09PX/qmZJ/5k7FP+aQh3/l0Qg/5BGJ/+li4D/ + zMzM92xrbK5sa2x4o6Oj5tDNzf/NiG7/0WlB/9BoQP/NZj7/yV40/9N3VP/Qjnb/tmdI/7FWMf/Gbkz/ + 9Orn//38/f/8/f7/unph/6JHIf+jUCz/n1Iv/5BPMv/Tzcr/o6Oj5mxrbHhsa2w4eHd43ujo6v/Cp5z/ + 13tY/9VqQv/VakH/zV4y/9yGZv//////9vPz/+/k4P/69vX///////7+///y7Ov/rlo4/6tPKf+mUS7/ + nU4u/5hyZP/v7+/+eHd43mxrbDgAAAAAbGtsmLGwtO7Lysr/z5iC/9dvSP/YbET/1GQ5/9x/W//24Nf/ + //////////////////////n4+f/KiXD/sVEp/69UL/+oVDL/mFE0/87Jx/+4uLjrbGtsmAAAAAAAAAAA + bGtsPXZ1dtXW1dn7wb28/9mTev/acUn/2W1E/9ltQ//fhmT/6amQ/+y2of/psp//4qKL/8hwTf+7WDH/ + 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 + + + + CenterParent + + + Help + + + HelpDialog + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/IBackgroundWorkerDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/IBackgroundWorkerDialog.cs new file mode 100644 index 00000000..d4468e6d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/IBackgroundWorkerDialog.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public interface IBackgroundWorkerDialog + { + IWin32Window ThisWindow + { + get; + } // ThisWindow + + Form OwnerForm + { + get; + } // OwnerForm + + void SetProgressText(string text); + void SetProgressMinMax(int min, int max); + void SetProgress(int value); + void SetProgressUndefined(); + bool QueryCancel(); + } // interface IBackgroundWorkerDialog +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.Designer.cs new file mode 100644 index 00000000..110e1e11 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.Designer.cs @@ -0,0 +1,115 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class InputBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InputBox)); + this.labelInput = new System.Windows.Forms.Label(); + this.textBoxValue = new System.Windows.Forms.TextBox(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // labelInput + // + resources.ApplyResources(this.labelInput, "labelInput"); + this.labelInput.AutoEllipsis = true; + this.labelInput.Name = "labelInput"; + // + // textBoxValue + // + resources.ApplyResources(this.textBoxValue, "textBoxValue"); + this.textBoxValue.Name = "textBoxValue"; + // + // buttonCancel + // + resources.ApplyResources(this.buttonCancel, "buttonCancel"); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Cancel_16x16; + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // pictureBox1 + // + resources.ApplyResources(this.pictureBox1, "pictureBox1"); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.TabStop = false; + // + // InputBox + // + this.AcceptButton = this.buttonOk; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.textBoxValue); + this.Controls.Add(this.labelInput); + this.MaximizeBox = false; + this.Name = "InputBox"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label labelInput; + private System.Windows.Forms.TextBox textBoxValue; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.PictureBox pictureBox1; + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.cs new file mode 100644 index 00000000..f2dcacae --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.cs @@ -0,0 +1,59 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class InputBox : Form + { + public InputBox() + { + InitializeComponent(); + } // constructor + + public string Message + { + get => labelInput.Text; + set => labelInput.Text = value; + } // Message + + public string Value + { + get => textBoxValue.Text; + set + { + textBoxValue.Text = value; + textBoxValue.SelectionStart = value?.Length ?? 0; + textBoxValue.SelectionLength = 0; + } // set + } // Value + + public static bool ShowDialog(IWin32Window owner, string message, string caption, ref string value) + { + using var dialog = new InputBox + { + Message = message, + Value = value + }; + if (!string.IsNullOrEmpty(caption)) dialog.Text = caption; + var ok = dialog.ShowDialog(owner) == DialogResult.OK; + if (ok) + { + value = dialog.Value; + } // if + + return ok; + } // ShowDialog + } // class InputBox +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.es.resx new file mode 100644 index 00000000..bb73e6aa --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.es.resx @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Introduzca &texto: + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAAd0SU1FB98BCxQwHvu7qtcAAADxSURBVDhP1VEtDoMwGOUIHGFH4Ag7whSOZAZJ + whFqUTN4joDAY5EkBEkYigQQddjue93XBcbCsqntJV8o76+FWr+FeZ4dmiuNokmYfoC4454OQyqEUK7r + qjzPYToxf+j7Po3jWEVR9DoMQDAFnueppmmwmyiKQvq+vx8GSLSHYSiDINAleGJXrN+GDZ5LPgoDZHS+ + LiBTWFWVXH4CwlhnWYaSkK1bYIe6rvXPM2GcBLwpgU7v+mY26LpuFR7HUZLZgYYSnAD6kl+hbVuJMEwo + I9OZJQ1TgnJa43ptlu5AYJomiJgL0ysQn7COKZn+b1jWDaDdJ+8SH+rdAAAAAElFTkSuQmCC + + + + &Cancelar + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAAd0SU1FB98BCxQxD4gQu2QAAAB+SURBVDhPYxgB4MPPTwJA/B6I/yPhBqg0YQBS + XHe467+Kl/Z/vRRzkGaQYQJQafwApBCkAaQRZADIIJCBUGnCAKSYaNtBioEY5keYYuJtB0piOJdkv4Ns + QNZEtO0wALIBZBNMI0m2wwDIJpgrSLIdBkA2QW0EaSTN9qEIGBgADBTL2TUR0y4AAAAASUVORK5CYII= + + + + &Aceptar + + + + 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 + + + + Introducir texto + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.resx new file mode 100644 index 00000000..37a435d0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/InputBox.resx @@ -0,0 +1,352 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Left, Right + + + + 44, 9 + + + 378, 26 + + + + 0 + + + &Enter text: + + + MiddleLeft + + + labelInput + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + Top, Bottom, Left, Right + + + 12, 38 + + + 410, 20 + + + 1 + + + textBoxValue + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + Bottom, Right + + + MiddleLeft + + + 322, 64 + + + 100, 25 + + + 3 + + + &Cancel + + + buttonCancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Bottom, Right + + + MiddleLeft + + + 216, 64 + + + 100, 25 + + + 2 + + + &OK + + + buttonOk + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + + 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 + + + + 12, 9 + + + 26, 26 + + + CenterImage + + + 5 + + + pictureBox1 + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 434, 101 + + + 1024, 140 + + + 350, 140 + + + CenterParent + + + Input text + + + InputBox + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/NotImplementedBox.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/NotImplementedBox.Designer.cs new file mode 100644 index 00000000..f9659cf7 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/NotImplementedBox.Designer.cs @@ -0,0 +1,134 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class NotImplementedBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.labelNotImplemented = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.pictureIconNotImplemented = new System.Windows.Forms.PictureBox(); + this.labelCaption = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconNotImplemented)).BeginInit(); + this.SuspendLayout(); + // + // labelNotImplemented + // + this.labelNotImplemented.AutoSize = true; + this.labelNotImplemented.Font = new System.Drawing.Font("Segoe UI Semibold", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelNotImplemented.Location = new System.Drawing.Point(116, 24); + this.labelNotImplemented.Name = "labelNotImplemented"; + this.labelNotImplemented.Size = new System.Drawing.Size(208, 95); + this.labelNotImplemented.TabIndex = 1; + this.labelNotImplemented.Text = "We\'re sorry! Work in progress\r\n¡Lo sentimos! Trabajo en curso\r\nEs tut uns leid! I" + + "n Arbeit\r\nDésolé! Travaux en cours\r\nSiamo spiacenti! Lavori in corso"; + this.labelNotImplemented.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonOk.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; + this.buttonOk.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.buttonOk.Location = new System.Drawing.Point(224, 137); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(100, 25); + this.buttonOk.TabIndex = 2; + this.buttonOk.Text = "&OK"; + this.buttonOk.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonOk.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + // + // pictureIconNotImplemented + // + this.pictureIconNotImplemented.Image = global::IpTviewr.UiServices.Common.Properties.Resources.NotImplemented_200x200; + this.pictureIconNotImplemented.Location = new System.Drawing.Point(10, 24); + this.pictureIconNotImplemented.Name = "pictureIconNotImplemented"; + this.pictureIconNotImplemented.Size = new System.Drawing.Size(100, 100); + this.pictureIconNotImplemented.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureIconNotImplemented.TabIndex = 0; + this.pictureIconNotImplemented.TabStop = false; + // + // labelCaption + // + this.labelCaption.AutoEllipsis = true; + this.labelCaption.BackColor = System.Drawing.SystemColors.Highlight; + this.labelCaption.Dock = System.Windows.Forms.DockStyle.Top; + this.labelCaption.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelCaption.ForeColor = System.Drawing.SystemColors.HighlightText; + this.labelCaption.Location = new System.Drawing.Point(0, 0); + this.labelCaption.Name = "labelCaption"; + this.labelCaption.Size = new System.Drawing.Size(336, 20); + this.labelCaption.TabIndex = 3; + this.labelCaption.Text = "label1"; + this.labelCaption.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // NotImplementedBox + // + this.AcceptButton = this.buttonOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonOk; + this.ClientSize = new System.Drawing.Size(336, 174); + this.ControlBox = false; + this.Controls.Add(this.labelCaption); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.labelNotImplemented); + this.Controls.Add(this.pictureIconNotImplemented); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "NotImplementedBox"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Load += new System.EventHandler(this.NotImplementedBox_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconNotImplemented)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureIconNotImplemented; + private System.Windows.Forms.Label labelNotImplemented; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Label labelCaption; + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/NotImplementedBox.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/NotImplementedBox.cs new file mode 100644 index 00000000..c980d90f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/NotImplementedBox.cs @@ -0,0 +1,42 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Telemetry; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class NotImplementedBox : Form + { + public NotImplementedBox() + { + InitializeComponent(); + } // constructor + + public static void ShowBox(IWin32Window owner, string context) + { + using (var box = new NotImplementedBox()) + { + context = context == null ? owner.GetType().FullName : $"{owner.GetType().FullName}/{context}"; + + AppTelemetry.FormEvent(AppTelemetry.LoadEvent, box, context); + box.ShowDialog(owner); + } // using + } // ShowBox + + private void NotImplementedBox_Load(object sender, System.EventArgs e) + { + labelCaption.Text = Owner?.Text; + } // NotImplementedBox_Load + } // class NotImplementedBox +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/NotImplementedBox.resx similarity index 95% rename from 1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/NotImplementedBox.resx index 5ea0895e..1af7de15 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/NotImplementedBox.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.Designer.cs new file mode 100644 index 00000000..224e6fd3 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.Designer.cs @@ -0,0 +1,105 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Forms +{ + partial class PropertiesDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PropertiesDialog)); + this.labelDescription = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.pictureBoxItemIcon = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.propertiesViewer = new IpTviewr.UiServices.Common.Forms.PropertiesViewer(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxItemIcon)).BeginInit(); + this.SuspendLayout(); + // + // labelDescription + // + resources.ApplyResources(this.labelDescription, "labelDescription"); + this.labelDescription.AutoEllipsis = true; + this.labelDescription.Name = "labelDescription"; + this.labelDescription.UseMnemonic = false; + // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonOk.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // pictureBoxItemIcon + // + resources.ApplyResources(this.pictureBoxItemIcon, "pictureBoxItemIcon"); + this.pictureBoxItemIcon.Name = "pictureBoxItemIcon"; + this.pictureBoxItemIcon.TabStop = false; + // + // propertiesViewer + // + resources.ApplyResources(this.propertiesViewer, "propertiesViewer"); + this.propertiesViewer.AutoResizeColumns = true; + this.propertiesViewer.Name = "propertiesViewer"; + // + // PropertiesDialog + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonOk; + this.Controls.Add(this.propertiesViewer); + this.Controls.Add(this.pictureBoxItemIcon); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.labelDescription); + this.MinimizeBox = false; + this.Name = "PropertiesDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; + this.Load += new System.EventHandler(this.PropertiesDialog_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxItemIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Label labelDescription; + private System.Windows.Forms.Button buttonOk; + private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureBoxItemIcon; + private PropertiesViewer propertiesViewer; + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.cs new file mode 100644 index 00000000..988aaeb0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.cs @@ -0,0 +1,46 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using Property = System.Collections.Generic.KeyValuePair; + +namespace IpTviewr.UiServices.Common.Forms +{ + public partial class PropertiesDialog : Form + { + public ICollection ItemProperties { get; set; } + public string Caption { get; set; } + public string Description { get; set; } + public Image ItemIcon { get; set; } + + public PropertiesDialog() + { + InitializeComponent(); + } // constructor + + private void PropertiesDialog_Load(object sender, EventArgs e) + { + AppTelemetry.FormEvent(AppTelemetry.LoadEvent, this, Caption); + Text = Caption; + labelDescription.Text = (Description ?? Properties.PropertiesDialog.CaptionDefault); + pictureBoxItemIcon.Image = ItemIcon; + propertiesViewer.Properties = ItemProperties; + } // PropertiesDialog_Load + } // class PropertiesDlg +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.es.resx new file mode 100644 index 00000000..50c8bd22 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.es.resx @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Propiedad + + + Valor + + + (Descripción) + + + + 154, 22 + + + Copiar &valor + + + 154, 22 + + + Copiar &nombre + + + 154, 22 + + + Copiar &fila + + + 154, 22 + + + Copiar &todo + + + 155, 98 + + + &Aceptar + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.resx new file mode 100644 index 00000000..c24c07e6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Forms/PropertiesDialog.resx @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Left, Right + + + + Segoe UI Semibold, 10pt + + + NoControl + + + 82, 12 + + + 390, 64 + + + + 0 + + + (Description) + + + MiddleLeft + + + labelDescription + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + Bottom, Right + + + NoControl + + + 372, 225 + + + 100, 25 + + + 2 + + + Ok + + + MiddleRight + + + ImageBeforeText + + + buttonOk + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + NoControl + + + 12, 12 + + + 64, 64 + + + 3 + + + pictureBoxItemIcon + + + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 1 + + + Top, Bottom, Left, Right + + + 12, 82 + + + 460, 137 + + + 4 + + + propertiesViewer + + + IpTviewr.UiServices.Common.Forms.PropertiesViewer, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 0 + + + True + + + 6, 13 + + + 484, 262 + + + CenterParent + + + Properties + + + PropertiesDialog + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Common/LICENSE.ES.MD new file mode 100644 index 00000000..40b46e2f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/LICENSE.ES.MD @@ -0,0 +1,137 @@ +# Biblioteca 'UiServices.Common' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Common/LICENSE.MD new file mode 100644 index 00000000..73ef3ab6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/LICENSE.MD @@ -0,0 +1,109 @@ +# Library 'UiServices.Common' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/License.txt b/1.5 'Kruger 60'/Assemblies/UiServices.Common/License.txt new file mode 100644 index 00000000..ccfe3b7e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/License.txt @@ -0,0 +1,130 @@ +############################################################################## +## +## Library 'UiServices.Common' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® Exception Message Box License Terms + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8b377c97 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UI Services: Common")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Common")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("66bf1592-6924-40a4-ba53-6bf34692ff16")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs new file mode 100644 index 00000000..72ea134d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs @@ -0,0 +1,93 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class BackgroundWorkerDialog { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal BackgroundWorkerDialog() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.BackgroundWorkerDialog", typeof(BackgroundWorkerDialog).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Task has been cancelled.. + /// + internal static string TaskCancelled { + get { + return ResourceManager.GetString("TaskCancelled", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task is being cancelled.. + /// + internal static string TaskCancelling { + get { + return ResourceManager.GetString("TaskCancelling", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Task is completed.. + /// + internal static string TaskCompleted { + get { + return ResourceManager.GetString("TaskCompleted", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/BackgroundWorkerDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/BackgroundWorkerDialog.es.resx new file mode 100644 index 00000000..fb617850 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/BackgroundWorkerDialog.es.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + La tarea se ha cancelado. + + + Se está cancelando la tarea. + + + La tarea está completada. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/BackgroundWorkerDialog.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/BackgroundWorkerDialog.resx index b30a1d8d..ca32b45f 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/BackgroundWorkerDialog.resx @@ -1,129 +1,129 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Task has been cancelled. - - - Task is being cancelled. - - - Task is completed. - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Task has been cancelled. + + + Task is being cancelled. + + + Task is completed. + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/CommonForm.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/CommonForm.Designer.cs new file mode 100644 index 00000000..8f6bd121 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/CommonForm.Designer.cs @@ -0,0 +1,93 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class CommonForm { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal CommonForm() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.CommonForm", typeof(CommonForm).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to &Edit item text:. + /// + internal static string StringListEditorEditItem { + get { + return ResourceManager.GetString("StringListEditorEditItem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to &Enter new item text:. + /// + internal static string StringListEditorNewItem { + get { + return ResourceManager.GetString("StringListEditorNewItem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unexpected exception in program. + /// + internal static string UncaughtExceptionCaption { + get { + return ResourceManager.GetString("UncaughtExceptionCaption", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/CommonForm.es.resx similarity index 93% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/CommonForm.es.resx index 614f51b7..beb957b9 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/CommonForm.es.resx @@ -1,123 +1,129 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Excepción inesperada en el programa - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Edite el texto del elemento: + + + &Introduzca texto del nuevo elemento: + + + Excepción inesperada en el programa + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/CommonForm.resx similarity index 94% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/CommonForm.resx index 72496100..b57f6c84 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/CommonForm.resx @@ -1,123 +1,129 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Unexpected exception in program - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Edit item text: + + + &Enter new item text: + + + Unexpected exception in program + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Filename.Designer.cs similarity index 84% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/Filename.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Filename.Designer.cs index 1d63b62a..cd483a24 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Filename.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Common.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.Common.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Filename { diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Filename.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/Filename.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Filename.es.resx index 8f238a62..14e6d824 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Filename.es.resx @@ -1,126 +1,126 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Los siguientes caracteres no se admiten: - - - Entrada incorrecta: caracter no admitido - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Los siguientes caracteres no se admiten: + + + Entrada incorrecta: caracter no admitido + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Filename.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/Filename.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Filename.resx index 1f27ac32..c770e175 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/Filename.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Filename.resx @@ -1,126 +1,126 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - The following characters are not allowed: - - - Invalid input: character not allowed - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + The following characters are not allowed: + + + Invalid input: character not allowed + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/PropertiesDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/PropertiesDialog.Designer.cs new file mode 100644 index 00000000..d03a4ee4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/PropertiesDialog.Designer.cs @@ -0,0 +1,93 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class PropertiesDialog { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal PropertiesDialog() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.PropertiesDialog", typeof(PropertiesDialog).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Properties of selected item. + /// + public static string CaptionDefault { + get { + return ResourceManager.GetString("CaptionDefault", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <unknown>. + /// + public static string NameNull { + get { + return ResourceManager.GetString("NameNull", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <not specified>. + /// + public static string ValueNull { + get { + return ResourceManager.GetString("ValueNull", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/PropertiesDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/PropertiesDialog.es.resx new file mode 100644 index 00000000..a31ac380 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/PropertiesDialog.es.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Propiedades del elemento seleccionado + + + <desconocido> + + + <no especificado> + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/PropertiesDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/PropertiesDialog.resx new file mode 100644 index 00000000..68ac6cf6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/PropertiesDialog.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Properties of selected item + + + <unknown> + + + <not specified> + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Resources.Designer.cs new file mode 100644 index 00000000..65dd35ab --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Resources.Designer.cs @@ -0,0 +1,226 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Add_16xM { + get { + object obj = ResourceManager.GetObject("Action_Add_16xM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Copy_Table { + get { + object obj = ResourceManager.GetObject("Action_Copy_Table", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Delete_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Edit_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Edit_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoNextDown_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoNextDown_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoPreviousUp_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoPreviousUp_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Property_Add_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Property_Add_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Property_Edit_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Property_Edit_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DefaultAbout { + get { + object obj = ResourceManager.GetObject("DefaultAbout", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DefaultSplash { + get { + object obj = ResourceManager.GetObject("DefaultSplash", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NotImplemented_200x200 { + get { + object obj = ResourceManager.GetObject("NotImplemented_200x200", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap WaitClock_64x64 { + get { + object obj = ResourceManager.GetObject("WaitClock_64x64", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon WaitClock_Icon { + get { + object obj = ResourceManager.GetObject("WaitClock_Icon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Resources.resx new file mode 100644 index 00000000..b16eb502 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Resources.resx @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\DefaultAbout.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_GoNextDown_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\defaultsplash.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_GoPreviousUp_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\waitclock_icon.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\waitclock_64x64.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Add_16xM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\notimplemented_200x200.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Property_Edit_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_copy_clip_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Edit_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_copy_table.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Property_Add_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Splash.Designer.cs similarity index 84% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/Splash.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Splash.Designer.cs index 07804305..a343e60b 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Splash.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Common.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.Common.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Splash { diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Splash.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/Splash.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Splash.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Splash.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Splash.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/Splash.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/Splash.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs new file mode 100644 index 00000000..0b8bbe21 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs @@ -0,0 +1,102 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class TimeSpanUpDown { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal TimeSpanUpDown() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.TimeSpanUpDown", typeof(TimeSpanUpDown).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to d. + /// + internal static string DaysShortLabel { + get { + return ResourceManager.GetString("DaysShortLabel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to h. + /// + internal static string HoursShortLabel { + get { + return ResourceManager.GetString("HoursShortLabel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to m. + /// + internal static string MinutesShortLabel { + get { + return ResourceManager.GetString("MinutesShortLabel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to s. + /// + internal static string SecondsShortLabel { + get { + return ResourceManager.GetString("SecondsShortLabel", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/TimeSpanUpDown.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/TimeSpanUpDown.es.resx index 4128c169..e4dbfbf1 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/TimeSpanUpDown.es.resx @@ -1,132 +1,132 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - d - - - h - - - m - - - s - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + d + + + h + + + m + + + s + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/TimeSpanUpDown.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/TimeSpanUpDown.resx new file mode 100644 index 00000000..e4dbfbf1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Properties/TimeSpanUpDown.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + d + + + h + + + m + + + s + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Add_16xM.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Add_16xM.png new file mode 100644 index 00000000..7139c070 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Add_16xM.png differ diff --git a/1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Cancel_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Cancel_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Cancel_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Cancel_16x16.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Delete_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Delete_16x16.png new file mode 100644 index 00000000..0e36ba6e Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Delete_16x16.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Edit_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Edit_16x16.png new file mode 100644 index 00000000..041e23f4 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Edit_16x16.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_GoNextDown_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_GoNextDown_16x16.png new file mode 100644 index 00000000..d8a5871f Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_GoNextDown_16x16.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_GoPreviousUp_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_GoPreviousUp_16x16.png new file mode 100644 index 00000000..22979557 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_GoPreviousUp_16x16.png differ diff --git a/1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Ok_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Ok_16x161.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Ok_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Ok_16x161.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Property_Add_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Property_Add_16x16.png new file mode 100644 index 00000000..387c2980 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Property_Add_16x16.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Property_Edit_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Property_Edit_16x16.png new file mode 100644 index 00000000..8c5f315f Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/Action_Property_Edit_16x16.png differ diff --git a/1.5 'Kruger 60'/UiServices.Common/Resources/DefaultAbout.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/DefaultAbout.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Common/Resources/DefaultAbout.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/DefaultAbout.png diff --git a/1.5 'Kruger 60'/UiServices.Common/Resources/DefaultSplash.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/DefaultSplash.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Common/Resources/DefaultSplash.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/DefaultSplash.png diff --git a/1.5 'Kruger 60'/UiServices.Common/Resources/NotImplemented_200x200.png b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/NotImplemented_200x200.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Common/Resources/NotImplemented_200x200.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Resources/NotImplemented_200x200.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashAppInitializer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashAppInitializer.cs new file mode 100644 index 00000000..584602a2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashAppInitializer.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Start +{ + public interface ISplashAppInitializer + { + void InitializeContext(SplashAppContext ctx); + Image SetupSplashScreen(Label progressLabel); + void InitializeApp(ISplashScreen splash); + bool OnInitializationComplete(Exception ex); + void DisplayMessage(string caption, string message, MessageBoxIcon icon); + void DisplayException(string caption, string message, Exception exception); + Form CreateMainForm(); + } // interface ISplashAppInitializer +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashAwareForm.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashAwareForm.cs new file mode 100644 index 00000000..1f4ae286 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashAwareForm.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Common.Start +{ + public interface ISplashAwareForm + { + ISplashScreen SplashScreen { set; } + } // ISplashAwareForm +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashScreen.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashScreen.cs new file mode 100644 index 00000000..9fdf6ef6 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashScreen.cs @@ -0,0 +1,28 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Start +{ + public interface ISplashScreen + { + Form SplashForm { get; } + void DisplayProgress(string text); + void DisplayMessage(string caption, string message, MessageBoxIcon icon); + void DisplayException(string caption, string message, Exception exception); + void Ready(Form form); + void Invoke(Delegate method, params object[] args); + } // interface ISplashScreen +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashScreenAwareForm.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashScreenAwareForm.cs new file mode 100644 index 00000000..996af6a4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/ISplashScreenAwareForm.cs @@ -0,0 +1,22 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.Common.Start +{ + public interface ISplashScreenAwareForm : IDisposable + { + event EventHandler FormLoadCompleted; + } // ISplashScreenAwareForm +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashAppContext.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashAppContext.cs new file mode 100644 index 00000000..9814ac7a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashAppContext.cs @@ -0,0 +1,203 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Start +{ + public sealed class SplashAppContext: ApplicationContext, ISplashScreen + { + private SplashScreen _splashScreen; + private ISplashAppInitializer _initializer; + + private SplashAppContext() + { + // no-op + } // private constructor + + private SplashAppContext(ISplashAppInitializer initializer) + { + _initializer = initializer ?? throw new ArgumentNullException(nameof(initializer)); + _initializer.InitializeContext(this); + _splashScreen = new SplashScreen(); + _splashScreen.Load += SplashOnLoad; + _splashScreen.Shown += SplashOnShown; + MainForm = _splashScreen; + + _splashScreen.Show(); + } // constructor + + public static SplashAppContext Current { get; private set; } + + public static void Run(ISplashAppInitializer initializer) + { + if (Current != null) throw new InvalidOperationException(); + + Current = new SplashAppContext(initializer); + Application.Run(Current); + } // Run + + #region Splash screen handling + + private void SplashOnLoad(object sender, EventArgs e) + { + var backgroundImage = _initializer.SetupSplashScreen(_splashScreen.LabelProgress) ?? Properties.Resources.DefaultSplash; + _splashScreen.BackgroundImage = backgroundImage; + _splashScreen.Size = backgroundImage.Size; + } // SplashOnLoad + + private async void SplashOnShown(object sender, EventArgs e) + { + Exception ex = null; + + try + { + var parentThread = Thread.CurrentThread; + await Task.Run(() => + { + // culture flows for apps targeting .NET Framework 4.6 or greater + // this code is necessary for apps targeting previous versions + Thread.CurrentThread.CurrentCulture = parentThread.CurrentCulture; + Thread.CurrentThread.CurrentUICulture = parentThread.CurrentUICulture; + _initializer.InitializeApp(this); + }); + } + catch (Exception exception) + { + ex = exception; + } // try-catch + + var ok = _initializer.OnInitializationComplete(ex); + if ((ex != null) || !ok) + { + EndSplashScreen(null); + return; + } // if + + try + { + StartMainForm(); + } + catch (Exception exception) + { + DisplayException(null, Properties.Splash.ExceptionStartMainForm, exception); + EndSplashScreen(null); + } // try-catch + } // SplashOnShown + + private void EndSplashScreen(Form mainForm) + { + if (_splashScreen == null) return; + + if (mainForm != null) MainForm = mainForm; + _splashScreen.Close(); + _splashScreen.Dispose(); + _splashScreen = null; + + if (mainForm == null) return; + + mainForm.Activate(); + mainForm.BringToFront(); + } // EndSplashScreen + + #endregion + + #region Main form handling + + private void StartMainForm() + { + var mainForm = _initializer.CreateMainForm(); + + // hook-up event to call EndSplashScreen + if (mainForm is ISplashAwareForm splashAware) + { + splashAware.SplashScreen = this; + } + else + { + mainForm.Shown += MainFormOnShown; + } // if-else + mainForm.FormClosed += MainFormOnFormClosed; + + // display the main form + mainForm.Show(); + } // StartMainForm + + private void MainFormOnShown(object sender, EventArgs e) + { + EndSplashScreen(sender as Form); + } // MainFormOnShown + + private void MainFormOnFormClosed(object sender, FormClosedEventArgs e) + { + // usually this call is redundant, as the splash screen has been already closed when the form was shown + // however, if the form is closed before the Shown event, this is need to close the splash and end the app + EndSplashScreen(sender as Form); + } // MainFormOnFormClosed + + #endregion + + #region ISplashScreen implementation + + public Form SplashForm => _splashScreen; + + public void DisplayProgress(string text) + { + _splashScreen.Invoke(new Action(() => + { + _splashScreen.LabelProgress.Text = text; + _splashScreen.LabelProgress.Refresh(); + })); + } // DisplayProgress + + public void DisplayMessage(string caption, string message, MessageBoxIcon icon) + { + _splashScreen.Invoke(new Action(_initializer.DisplayMessage), caption, message, icon); + } // DisplayMessage + + public void DisplayException(string caption, string message, Exception exception) + { + _splashScreen.Invoke(new Action(_initializer.DisplayException), caption, message, exception); + } // DisplayException + + public void Ready(Form form) + { + EndSplashScreen(form); + } // Ready + + public void Invoke(Delegate method, params object[] args) + { + _splashScreen.Invoke(method, args); + } // Invoke + + #endregion + + #region ApplicationContext overrides + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if ((_splashScreen == null) || !disposing) return; + + _splashScreen.Dispose(); + _initializer = null; + _splashScreen = null; + Current = null; + } // Dispose + + #endregion + } // class SplashAppContext +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashApplicationContext.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashApplicationContext.cs new file mode 100644 index 00000000..7eeb767e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashApplicationContext.cs @@ -0,0 +1,345 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Start +{ + public abstract class SplashApplicationContext : ApplicationContext + { + private SplashScreen _splashScreen; + private BackgroundWorker _worker; + + /// Descendants MUST NOT perform any work on the constructor; instead all constructor-related initialization (if any) MUST BE done in InitializeContext + protected SplashApplicationContext() + { + InitializeContext(); + SetThingsInMotion(); + } // constructor + + private void SetThingsInMotion() + { + _splashScreen = new SplashScreen(); + _splashScreen.Load += SplashScreen_Load; + _splashScreen.Shown += SplashScreen_Shown; + _splashScreen.FormClosing += SplashScreen_FormClosing; + _splashScreen.Show(); + } // SetThingsInMotion + + private void EndSplashScreen(Form mainForm) + { + if (_splashScreen == null) return; + + _splashScreen.Close(); + _splashScreen.Dispose(); + _splashScreen = null; + + mainForm.Activate(); + } // EndSplashScreen + + #region Main form handling + + private void StartMainForm(Form mainForm) + { + var splashAware = mainForm as ISplashScreenAwareForm; + + // hook-up event to call EndSplashScreen + if (splashAware != null) + { + splashAware.FormLoadCompleted += MainForm_FormLoadCompleted; + } + else + { + mainForm.Shown += MainForm_Shown; + } // if-else + + // hook-up event to end the application context + mainForm.FormClosed += MainForm_FormClosed; + + // display the main form + mainForm.Show(); + } // StartMainForm + + private void MainForm_FormLoadCompleted(object sender, EventArgs e) + { + EndSplashScreen(sender as Form); + } // MainForm_FormLoadCompleted + + private void MainForm_Shown(object sender, EventArgs e) + { + EndSplashScreen(sender as Form); + } // MainForm_Shown + + private void MainForm_FormClosed(object sender, FormClosedEventArgs e) + { + // end application context + ExitThread(); + } // MainForm_FormClosed + + #endregion + + #region SplashScreen event handling + + private void SplashScreen_Load(object sender, EventArgs e) + { + var backgroundImage = SetupSplashScreen(_splashScreen.LabelProgress) ?? Properties.Resources.DefaultSplash; + _splashScreen.BackgroundImage = backgroundImage; + _splashScreen.Size = backgroundImage.Size; + } // SplashScreen_Load + + private void SplashScreen_Shown(object sender, EventArgs e) + { + _worker = new BackgroundWorker + { + WorkerReportsProgress = false, + WorkerSupportsCancellation = true + }; + _worker.DoWork += Worker_DoWork; + _worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + _worker.RunWorkerAsync(Thread.CurrentThread); + } // SplashScreen_Shown + + private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e) + { + e.Cancel = (_worker != null); + } // SplashScreen_FormClosing + + #endregion + + #region Methods to be implemented/overriden by descendants + + protected virtual void InitializeContext() + { + // no op + } // InitializeContext + + protected virtual Image SetupSplashScreen(Label progressLabel) + { + return null; + } // SetupSplashScreen + + protected abstract object DoBackgroundWork(); + protected abstract bool BackgroundWorkCompleted(RunWorkerCompletedEventArgs result); + protected abstract void DoDisplayMessage(Form splashScreen, string caption, string message, MessageBoxIcon icon); + protected abstract void DoDisplayException(Form splashScreen, string caption, string message, MessageBoxIcon icon, Exception exception); + protected abstract Form GetMainForm(); + + #endregion + + #region Helper methods for background work + + protected void DisplayProgress(string progressMessage, bool async) + { + if (_splashScreen == null) throw new InvalidOperationException(); + + if (_splashScreen.InvokeRequired) + { + if (async) + { + _splashScreen.BeginInvoke(new Action(DisplayProgress), progressMessage, async); + } + else + { + _splashScreen.Invoke(new Action(DisplayProgress), progressMessage, async); + } // if + } + else + { + _splashScreen.LabelProgress.Text = progressMessage; + _splashScreen.LabelProgress.Refresh(); + } // if-else InvokeRequired + } // DisplayProgress + + protected void CallForegroundAction(Action action, bool async) + { + if ((_splashScreen != null) && (_splashScreen.InvokeRequired)) + { + if (async) + { + _splashScreen.BeginInvoke(new Action(CallForegroundAction), action, async); + } + else + { + _splashScreen.Invoke(new Action(CallForegroundAction), action, async); + } // if-else + } + else + { + action(); + } // if-else InvokeRequired + } // CallForegroundAction + + protected void CallForegroundAction(Action action, object data, bool async) + { + if ((_splashScreen != null) && (_splashScreen.InvokeRequired)) + { + if (async) + { + _splashScreen.BeginInvoke(new Action, object, bool>(CallForegroundAction), action, data, async); + } + else + { + _splashScreen.Invoke(new Action, object, bool>(CallForegroundAction), action, data, async); + } // if-else + } + else + { + action(data); + } // if-else InvokeRequired + } // CallForegroundAction + + protected object CallForegroundFunction(Func function, object data) + { + if (_splashScreen.InvokeRequired) + { + return _splashScreen.Invoke(new Func, object, object>(CallForegroundFunction), function, data); + } + else + { + return function(data); + } // if-else + } // CallForegroundFunctionCallback + + protected void DisplayMessage(string message, bool async) + { + DisplayMessage(null, message, MessageBoxIcon.Warning, async); + } // DisplayMessage + + protected void DisplayMessage(string caption, string message, MessageBoxIcon icon, bool async) + { + if ((_splashScreen != null) && (_splashScreen.InvokeRequired)) + { + if (async) + { + _splashScreen.BeginInvoke(new Action(DisplayMessage), caption, message, icon, async); + } + else + { + _splashScreen.Invoke(new Action(DisplayMessage), caption, message, icon, async); + } // if-else + } + else + { + DoDisplayMessage(_splashScreen, caption, message, icon); + } // if-else InvokeRequired + } // DisplayMessage + + protected void DisplayException(string message, bool async, bool isFatal, Exception exception) + { + DisplayException(null, message, MessageBoxIcon.Error, async, isFatal, exception); + } // DisplayException + + protected void DisplayException(string caption, string message, MessageBoxIcon icon, bool async, bool isFatal, Exception exception) + { + if ((_splashScreen != null) && (_splashScreen.InvokeRequired)) + { + if ((!isFatal) || (async)) + { + _splashScreen.BeginInvoke(new Action(DisplayException), exception, caption, message, icon, async, isFatal); + } + else + { + _splashScreen.Invoke(new Action(DisplayException), exception, caption, message, icon, async, isFatal); + } // if-else + } + else + { + try + { + DoDisplayException(_splashScreen, caption, message, icon, exception); + if ((isFatal)) + { + _worker?.CancelAsync(); + } // if + } + catch + { + // ignore + } + } // if-else InvokeRequired + } // DisplayException + + #endregion + + #region BackgroundWorker implementation + + private void Worker_DoWork(object sender, DoWorkEventArgs e) + { + // set worker thread name (for debugging pourposes) + var currentThread = Thread.CurrentThread; + currentThread.Name = "SplashAplicationContext BackgroundWorker"; + + // inherit parent thead culture settings + var parentThread = e.Argument as Thread; + if (parentThread != null) + { + currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case + currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread + } // if + + e.Result = DoBackgroundWork(); + } // Worker_DoWork + + private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + Form mainForm = null; + + var isOk = BackgroundWorkCompleted(e); + _worker.Dispose(); + _worker = null; + + var close = (!isOk) || (e.Cancelled) || (e.Error != null); + if (!close) + { + close = true; + try + { + mainForm = GetMainForm(); + close = (mainForm == null); + } + catch (Exception ex) + { + DisplayException(Properties.Splash.ExceptionGetMainForm, false, true, ex); + } // try-catch + } // if + + if (!close) + { + close = true; + try + { + StartMainForm(mainForm); + close = false; + } + catch (Exception ex) + { + DisplayException(Properties.Splash.ExceptionStartMainForm, false, true, ex); + close = true; + } // try-catch + } // if + + if (close) + { + _splashScreen.Close(); + ExitThread(); + return; + } // if + } // Worker_RunWorkerCompleted + + #endregion + } // class SplashApplicationContext +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashScreen.Designer.cs similarity index 83% rename from 1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashScreen.Designer.cs index f8f1ff67..a218dc9c 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashScreen.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Common.Start { @@ -62,6 +72,7 @@ private void InitializeComponent() this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "SplashScreen"; + this.Load += new System.EventHandler(this.SplashScreen_Load); this.ResumeLayout(false); } @@ -70,4 +81,4 @@ private void InitializeComponent() public System.Windows.Forms.Label LabelProgress; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashScreen.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashScreen.cs new file mode 100644 index 00000000..ba106873 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashScreen.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common.Start +{ + internal partial class SplashScreen : Form + { + public SplashScreen() + { + InitializeComponent(); + } // constructor + + private void SplashScreen_Load(object sender, System.EventArgs e) + { + Text = Application.ProductName; + } // SplashScreen_Load + } // class SplashScreen +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashScreen.resx similarity index 95% rename from 1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashScreen.resx index 5ea0895e..1af7de15 100644 --- a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/Start/SplashScreen.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj b/1.5 'Kruger 60'/Assemblies/UiServices.Common/UiServices.Common.csproj similarity index 75% rename from 1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj rename to 1.5 'Kruger 60'/Assemblies/UiServices.Common/UiServices.Common.csproj index 26962e10..46e2ccbf 100644 --- a/1.5 'Kruger 60'/UiServices.Common/UiServices.Common.csproj +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/UiServices.Common.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.UiServices.Common UiServices.Common - v4.5.2 + v4.6.2 512 SAK SAK @@ -26,6 +26,7 @@ prompt 4 false + 8 pdbonly @@ -35,28 +36,53 @@ prompt 4 false + 8 + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + False ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - - + Properties\AssemblySolutionInfo.cs + + UserControl + + + PropertiesViewer.cs + + + + UserControl + + + StringListEditor.cs + + + UserControl + + + ListEditor.cs + UserControl + + + Form + + + InputBox.cs + True True @@ -65,7 +91,7 @@ Component - + Component @@ -73,9 +99,6 @@ Component - - Component - Component @@ -132,15 +155,15 @@ - + + Filename.resx True True - Resources.resx - - Filename.resx + True True + Resources.resx TimeSpanUpDown.resx @@ -152,8 +175,12 @@ True Splash.resx + + + + Form @@ -179,12 +206,50 @@ Resources\WaitClock_Icon.ico + + + + + + + + + + + + + - + + PropertiesViewer.cs + + + PropertiesViewer.cs + Designer + + + StringListEditor.cs + + + StringListEditor.cs + + + ListEditor.cs + + + ListEditor.cs + Designer + + + InputBox.cs + + + InputBox.cs + ResXFileCodeGenerator @@ -233,6 +298,7 @@ ResXFileCodeGenerator + Designer Resources.Designer.cs @@ -255,9 +321,9 @@ - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/WinFormsControlsExtensions.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Common/WinFormsControlsExtensions.cs new file mode 100644 index 00000000..cc88a879 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/WinFormsControlsExtensions.cs @@ -0,0 +1,33 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Drawing; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Common +{ + public static class WinFormsControlsExtensions + { + public static void ChangeImage(this Button control, Image newImage) + { + control.Image?.Dispose(); + control.Image = newImage; + } // ChangeImage + + public static void ChangeImage(this PictureBox control, Image newImage) + { + control.Image?.Dispose(); + control.Image = newImage; + } // ChangeImage + } // static class WinFormsControlsExtensions +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/licensing.xml b/1.5 'Kruger 60'/Assemblies/UiServices.Common/licensing.xml new file mode 100644 index 00000000..853f568f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/licensing.xml @@ -0,0 +1,143 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Common/packages.config b/1.5 'Kruger 60'/Assemblies/UiServices.Common/packages.config new file mode 100644 index 00000000..52cb031c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Common/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/AppConfig.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/AppConfig.cs new file mode 100644 index 00000000..cc2bd27c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/AppConfig.cs @@ -0,0 +1,654 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Microsoft.Win32; +using IpTviewr.Common.Serialization; +using IpTviewr.UiServices.Configuration.Cache; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration.Properties; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.ComponentModel.Composition.Hosting; +using System.Globalization; +using System.IO; +using System.Reflection; +using System.Windows.Forms; +using System.Xml; +using IpTviewr.Common.Configuration; +using IpTviewr.IpTvServices; +using IpTviewr.IpTvServices.Implementation; + +namespace IpTviewr.UiServices.Configuration +{ + public sealed class AppConfig + { + public const string IpTvProviderSettingsRegistrationGuid = "{1E8D4BC4-4D78-4B69-BB50-96BA921A7449}"; + + private string _defaultSaveLocation; + private CompositionContainer _mefContainer; + internal IDictionary ItemsRegistry; + internal IDictionary ItemsIndex; + internal IList Items; + + #region Static methods + + public static AppConfig Current + { + get; + private set; + } // Current + + public static AppConfig CreateForUserConfig(UserConfig userConfig) + { + var config = new AppConfig + { + User = userConfig + }; + + return config; + } // CreateForUserConfig + + public static InitializationResult Load(string overrideBasePath, Action displayProgress) + { + displayProgress?.Invoke(Texts.LoadProgress_Start); + var config = new AppConfig(); + + var result = config.LoadBasicConfiguration(overrideBasePath); + if (result.IsError) return result; + + displayProgress?.Invoke(Texts.LoadProgress_UserConfig); + result = config.LoadUserConfiguration(); + if (result.IsError) return result; + + result = config.RegisterConfigurationItems(); + if (result.IsError) return result; + + result = config.ProcessXmlConfigurationItems(); + if (result.IsError) return result; + + displayProgress?.Invoke(Texts.LoadProgress_Mef); + result = config.LoadModules(); + if (result.IsError) return result; + + displayProgress?.Invoke(Texts.LoadProgress_ContentProvider); + result = config.LoadIpTvProviderData(); + if (result.IsError) return result; + + Current = config; + + return InitializationResult.Ok; + } // Load + + public static AppUiConfigurationFolders LoadFoldersConfiguration(out InitializationResult initializationResult) + { + var config = new AppConfig(); + initializationResult = config.LoadRegistrySettings(null); + + return initializationResult.IsError ? null : config.Folders; + } // LoadFoldersConfiguration + + public static T CloneSettings(IConfigurationItem settings) where T : class, IConfigurationItem + { + return XmlSerialization.CloneObject(settings) as T; + } // CloneSettings + + private static IList GetUiCultures() + { + var culture = CultureInfo.CurrentUICulture; + var tempList = new List(); + + while (culture.Name != "") + { + tempList.Add(culture.Name.ToLowerInvariant()); + culture = culture.Parent; + } // while + tempList.Add(""); + + var cultureList = new List(tempList.Count); + cultureList.AddRange(tempList); + + return cultureList.AsReadOnly(); + } // GetUiCultures + + #endregion + + public AppConfig() + { + Folders = new AppUiConfigurationFolders(); + } // constructor + + [Import(AllowDefault = true)] + public ITvService IpTvService { get; private set; } + + public AppUiConfigurationFolders Folders { get; } + + public IList Cultures { get; private set; } + + public IDictionary DescriptionServiceTypes + { + get; + private set; + } // FriendlyNamesServiceTypes + + public bool DisplayPreferredOrFirst + { + get; + private set; + } // DisplayPreferredOrFirst + + public CacheManager Cache + { + get; + private set; + } // Cache + + public ProviderLogoMappings ProviderLogoMappings + { + get; + private set; + } // ProviderLogoMappings + + public ServiceLogoMappings ServiceLogoMappings + { + get; + private set; + } // ServiceLogoMappings + + public UiContentProvider ContentProvider + { + get; + private set; + } // ContentProvider + + public string AnalyticsClientId + { + get; + private set; + } // AnalyticsClientId + + public UserConfig User + { + get; + private set; + } // User + + public IConfigurationItem this[Guid guid] + { + get => Items[ItemsIndex[guid]]; + set => Items[ItemsIndex[guid]] = value; + } // this[Guid] + + public IConfigurationItem this[int directIndex] + { + get => Items[directIndex]; + set => Items[directIndex] = value; + } // this[int] + + public bool IsDirty + { + get; + set; + } // IsDirty + + /* + public string EpgDatabaseFile + { + get { return Path.Combine(Folders.Cache, "EPG.sdf"); } + } // EpgDatabaseFile + */ + + #region Public methods + + public void Save(string overrideSaveLocation = null) + { + User.Configuration = new XmlConfigurationItems + { + XmlData = new List(Items.Count) + }; + + // serialize configuration items + foreach (var pair in ItemsIndex) + { + User.Configuration.XmlData.Add(XmlConfigurationItems.GetXmlElement(pair.Key, Items[pair.Value])); + } // foreach + + // save registry + User.Configuration.Registry = new List(ItemsRegistry.Count); + foreach (var pair in ItemsRegistry) + { + User.Configuration.Registry.Add(pair.Value.GetType().AssemblyQualifiedName); + } // foreach + + var configFilename = overrideSaveLocation ?? _defaultSaveLocation; + XmlSerialization.Serialize(configFilename, User); + + // save memory + // the serialized configuration items are not needed for normal operation, as they are accessed using this[Guid] + User.Configuration = null; + + IsDirty = false; + } // Save + + public void RegisterConfiguration(IConfigurationItemRegistration registration, IConfigurationItem configItem = null, bool createDefault = false) + { + if (ItemsRegistry == null) + { + ItemsRegistry = new Dictionary(); + ItemsIndex = new Dictionary(); + Items = new List(); + } // if + + ItemsRegistry.Add(registration.Id, registration); + var directIndex = Items.Count; + ItemsIndex[registration.Id] = directIndex; + Items.Add(configItem ?? (createDefault ? registration.CreateDefault() : null)); + registration.DirectIndex = directIndex; + } // RegisterConfiguration + + #endregion + + #region Basic app configuration + + private InitializationResult LoadBasicConfiguration(string overrideBasePath) + { + var initResult = LoadRegistrySettings(overrideBasePath); + if (initResult.IsError) return initResult; + + // Cultures + Cultures = GetUiCultures(); + + var descriptionServiceType = new Dictionary + { + { "1", Texts.DvbServiceTypeDescription_01 }, // SD TV + { "2", Texts.DvbServiceTypeDescription_02 }, // Radio (MPEG-1) + { "3", Texts.DvbServiceTypeDescription_03 }, // Teletext + { "6", Texts.DvbServiceTypeDescription_06 }, // Mosaic + { "10", Texts.DvbServiceTypeDescription_10 }, // Radio (AAC) + { "11", Texts.DvbServiceTypeDescription_11 }, // Mosaic (AAC) + { "12", Texts.DvbServiceTypeDescription_12 }, // Data + { "16", Texts.DvbServiceTypeDescription_16 }, // DVB MHP + { "17", Texts.DvbServiceTypeDescription_17 }, // HD TV (MPEG-2) + { "22", Texts.DvbServiceTypeDescription_22 }, // SD TV (AVC) + { "25", Texts.DvbServiceTypeDescription_25 } // "HD TV + }; + DescriptionServiceTypes = descriptionServiceType; + + // TODO: load from user config + DisplayPreferredOrFirst = true; + + // Validate application configuration + initResult = Validate(); + if (!initResult.IsOk) return initResult; + + // Initialize managers and providers + if (!Directory.Exists(Folders.RecordTasks)) + { + Directory.CreateDirectory(Folders.RecordTasks); + } // if + + Cache = new CacheManager(Folders.Cache); + + ProviderLogoMappings = new ProviderLogoMappings(Folders.Logos.FileProviderMappings, Folders.Logos.Providers); + ServiceLogoMappings = new ServiceLogoMappings(Folders.Logos.FileServiceDomainMappings, Folders.Logos.FileServiceMappings, Folders.Logos.Services); + + return InitializationResult.Ok; + } // LoadBasicConfiguration + + #endregion + + #region Registry settings + + public static string RegistryKey_Root => InvariantTexts.RegistryKey_Root; + public static string RegistryMissingKey => Texts.AppConfigRegistryMissingKey; + public static string RegistryValue_FirstTimeConfig => InvariantTexts.RegistryValue_FirstTimeConfig; + + public static bool IsFirstTimeConfigExecuted { get; private set; } + + private InitializationResult LoadRegistrySettings(string overrideBasePath) + { + try + { + var result = LoadRegistrySettingsInternal(overrideBasePath); + if (result != null) + { + return new InitializationResult() + { + Caption = Texts.AppConfigRegistryCaption, + Message = string.Format(Texts.AppConfigRegistryText, result) + }; + } // if + + return InitializationResult.Ok; + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = Texts.AppConfigRegistryCaption, + Message = string.Format(Texts.AppConfigRegistryText, ex.Message), + InnerException = ex + }; + } // try-catch + } // LoadRegistrySettings + + private string LoadRegistrySettingsInternal(string overrideBasePath) + { + using var keyCurrentUser = Registry.CurrentUser; + var fullKeyPath = InvariantTexts.RegistryKey_Root; + var rootKey = string.Format(fullKeyPath, Application.ProductVersion); + using var root = keyCurrentUser.OpenSubKey(rootKey); + if (root == null) return string.Format(Texts.AppConfigRegistryMissingKey, rootKey); + + var isInstalled = root.GetValue(InvariantTexts.RegistryValue_Installed); + if (isInstalled == null) return string.Format(Texts.AppConfigRegistryMissingValue, rootKey, InvariantTexts.RegistryValue_Installed); + + IsFirstTimeConfigExecuted = root.GetValue(RegistryValue_FirstTimeConfig) != null; + + var baseFolder = root.GetValue(InvariantTexts.RegistryValue_Folder_Base); + if (baseFolder == null) return string.Format(Texts.AppConfigRegistryMissingValue, rootKey, InvariantTexts.RegistryValue_Folder_Base); + Folders.Base = overrideBasePath ?? baseFolder as string; + + var installFolder = root.GetValue(InvariantTexts.RegistryValue_Folder_Install); +#if !DEBUG + if (installFolder == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Folder_Install); +#endif + Folders.Install = installFolder as string; + + GetFolders(); + + return null; + } // LoadRegistrySettingsInternal + + private void GetFolders() + { + // User configuration + Folders.UserConfiguration = Folders.Base; + + // Record tasks + Folders.RecordTasks = Path.Combine(Folders.Base, InvariantTexts.FolderRecordTasks); + + // Cache + Folders.Cache = Path.Combine(Folders.Base, InvariantTexts.FolderCache); + + // Logos + Folders.Logos = new AppUiConfigurationFolders.FolderLogos(Path.Combine(Folders.Base, InvariantTexts.FolderLogosRoot), Folders.Cache); + } // GetFolders + + #endregion + + private InitializationResult Validate() + { + var result = new InitializationResult + { + Caption = Texts.LoadConfigValidationCaption + }; + + if (!IsFirstTimeConfigExecuted) + { + result.Caption = Texts.AppConfigFirstTimeConfigNotExecutedCaption; + result.Message = Texts.AppConfigFirstTimeConfigNotExecuted; + return result; + } // if + + if (!Directory.Exists(Folders.Base)) + { + result.Message = string.Format(Texts.AppConfigValidationBasePath, Folders.Base); + return result; + } // if + + if (!Directory.Exists(Folders.Logos.Root)) + { + result.Message = string.Format(Texts.AppConfigValidationLogosPath, Folders.Logos); + return result; + } // if + + result.IsOk = true; + return result; + } // Validate + + #region MEF + + private InitializationResult LoadModules() + { + try + { + var catalog = new AggregateCatalog(); + catalog.Catalogs.Add(new ApplicationCatalog()); + /* + if (Directory.Exists(Folders.Modules)) + { + catalog.Catalogs.Add(new DirectoryCatalog(Folders.Modules)); + } // if + */ + + _mefContainer = new CompositionContainer(catalog, CompositionOptions.DisableSilentRejection); + _mefContainer.ComposeParts(this); + + var result = InitializeIpTvService(); + if (result.IsError) return result; + } + catch (CompositionException ex) + { + return new InitializationResult() + { + Caption = Texts.LoadCompositionExceptionCaption, + Message = Texts.LoadCompositionException, + InnerException = ex + }; + } + catch (ReflectionTypeLoadException ex) + { + return new InitializationResult() + { + Caption = Texts.LoadCompositionExceptionCaption, + Message = Texts.LoadCompositionException, + InnerException = ex + }; + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = Texts.LoadMefCaption, + Message = Texts.LoadMefException, + InnerException = ex + }; + } // try-catch + + return InitializationResult.Ok; + } // LoadModules + + private InitializationResult InitializeIpTvService() + { + try + { + if (IpTvService == null) IpTvService = new DvbIpTvService(); + return IpTvService.Initialize(); + } + catch (Exception ex) + { + // TODO: proper message + return new InitializationResult(ex, "InitializeIpTvService"); + } // try-catch + } // InitializeIpTvService + + #endregion + + #region Content provider + + private InitializationResult LoadIpTvProviderData() + { + var xmlPath = Path.Combine(Folders.Base, "movistartv-config.xml"); + + try + { + var ipTvProviderSettingsRegistrationGuid = new Guid(IpTvProviderSettingsRegistrationGuid); + var ipTvProviderSettings = this[ipTvProviderSettingsRegistrationGuid]; + + if (ipTvProviderSettings.SupportsInitialization) + { + var result = ipTvProviderSettings.Initialize(); + if (!result.IsOk) return result; + } // if + + var xmlContentProvider = IpTvProviderData.Load(xmlPath); + + var validationResult = xmlContentProvider.Validate(); + if (validationResult != null) + { + return new InitializationResult() + { + Caption = Texts.LoadContentProviderDataValidationCaption, + Message = string.Format(Texts.LoadContentProviderDataValidation, xmlPath, validationResult), + }; + } // if + + ContentProvider = UiContentProvider.FromXmlConfiguration(xmlContentProvider, Cultures); + return InitializationResult.Ok; + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = Texts.LoadContentProviderDataExceptionCaption, + Message = string.Format(Texts.LoadContentProviderDataValidation, xmlPath, Texts.LoadContentProviderDataValidationException), + InnerException = ex + }; + } // try-catch + } // LoadIpTvProviderData + + #endregion + + #region User configuration + + private InitializationResult LoadUserConfiguration() + { + _defaultSaveLocation = Path.Combine(Folders.Base, "user-config.xml"); + + try + { + // load + User = XmlSerialization.Deserialize(_defaultSaveLocation, true); + + // validate + var validationError = User.Validate(); + if (validationError != null) + { + return new InitializationResult() + { + Caption = Texts.LoadUserConfigValidationCaption, + Message = string.Format(Texts.LoadConfigUserConfigValidation, _defaultSaveLocation, validationError), + }; + } // if + + return InitializationResult.Ok; + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = Texts.LoadUserConfigExceptionCaption, + Message = string.Format(Texts.LoadConfigUserConfigValidation, _defaultSaveLocation, Texts.LoadConfigUserConfigValidationException), + InnerException = ex + }; + } // try-catch + } // LoadUserConfiguration + + private InitializationResult RegisterConfigurationItems() + { + var regType = ""; + + try + { + var registerItems = User.Configuration.Registry; + ItemsRegistry = new Dictionary(registerItems.Count); + + foreach (var registerType in registerItems) + { + regType = registerType; + var type = Type.GetType(registerType); + if (type == null) throw new TypeLoadException($"Unable to load type '{registerType}'"); + var registration = (IConfigurationItemRegistration)Activator.CreateInstance(type); + ItemsRegistry.Add(registration.Id, registration); + } // foreach + } + catch (Exception ex) + { + return new InitializationResult(ex, $"Unable to register configuration item '{regType}'."); + } // try-catch + + return InitializationResult.Ok; + } // RegisterConfigurationItems + + private InitializationResult ProcessXmlConfigurationItems() + { + var name = ""; + + try + { + ItemsIndex = new Dictionary(User.Configuration.XmlData.Count); + Items = new List(User.Configuration.XmlData.Count); + + foreach (var item in User.Configuration.XmlData) + { + name = item.Name; + var xAttr = item.Attributes["configurationId"]; + if ((xAttr == null) || (xAttr.Value == null)) continue; + var id = new Guid(xAttr.Value); + + if (!ItemsRegistry.TryGetValue(id, out var registration)) continue; + + using (var reader = new XmlNodeReader(item)) + { + var configItem = (IConfigurationItem)XmlSerialization.Deserialize(reader, registration.ItemType); + + if (configItem.SupportsValidation) + { + var result = configItem.Validate(item.Name); + if (result != null) + { + return new InitializationResult(result); + } // if + } // if + + if (configItem.SupportsInitialization) + { + var result = configItem.Initialize(); + if (result.IsError) return result; + } // if + + var directIndex = Items.Count; + ItemsIndex[id] = directIndex; + Items.Add(configItem); + registration.DirectIndex = directIndex; + } // using reader + } // foreach + + // save memory + // the serialized configuration items are not needed for normal operation, as they are accessed using this[Guid] + User.Configuration = null; + } + catch (Exception ex) + { + return new InitializationResult(ex, $"Unable to read user configuration item '{name}'."); + } // try-catch + + return InitializationResult.Ok; + } // ProcessXmlConfigurationItems + + #endregion + } // class AppConfig +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/AppUiConfigurationFolders.FolderLogos.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/AppUiConfigurationFolders.FolderLogos.cs new file mode 100644 index 00000000..659e17d0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/AppUiConfigurationFolders.FolderLogos.cs @@ -0,0 +1,52 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.IO; + +namespace IpTviewr.UiServices.Configuration +{ + public partial class AppUiConfigurationFolders + { + public class FolderLogos + { + public string Root { get; } + public string Providers { get; } + public string Services { get; } + public string Cache { get; } + + internal FolderLogos(string rootFolder, string cacheFolder) + { + Root = rootFolder; + Providers = Path.Combine(Root, Properties.InvariantTexts.FolderLogosProviders); + Services = Path.Combine(Root, Properties.InvariantTexts.FolderLogosServices); + Cache = Path.Combine(cacheFolder, Properties.InvariantTexts.FolderLogosCache); + } // constructor + + public string FileProviderMappings => Path.Combine(Providers, Properties.InvariantTexts.FileLogoProviderMappings); + + public string FileServiceDomainMappings => Path.Combine(Services, Properties.InvariantTexts.FileLogoDomainMappings); + + public string FileServiceMappings => Path.Combine(Services, Properties.InvariantTexts.FileLogoServiceMappings); + +#if DEBUG + + public string FileNameProviderMappings => Properties.InvariantTexts.FileLogoProviderMappings; + + public string FileNameServiceDomainMappings => Properties.InvariantTexts.FileLogoDomainMappings; + + public string FileNameServiceMappings => Properties.InvariantTexts.FileLogoServiceMappings; + +#endif + } // FolderLogos + } +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/AppUiConfigurationFolders.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/AppUiConfigurationFolders.cs new file mode 100644 index 00000000..6d5308b3 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/AppUiConfigurationFolders.cs @@ -0,0 +1,42 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Diagnostics; +using System.IO; +using System.Windows.Forms; +using IpTviewr.UiServices.Configuration.Properties; + +namespace IpTviewr.UiServices.Configuration +{ + public partial class AppUiConfigurationFolders + { + internal AppUiConfigurationFolders() + { + Modules = Path.Combine(Application.StartupPath, InvariantTexts.FolderModules); + } // constructor + + public string Install { get; protected internal set; } + + public string Modules { get; } + + public string Base { get; protected internal set; } + + public string RecordTasks { get; protected internal set; } + + public string Cache { get; protected internal set; } + + public string UserConfiguration { get; internal set; } + + public FolderLogos Logos { get; protected internal set; } + } // class AppUiConfigurationFolders +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Cache/CacheManager.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Cache/CacheManager.cs new file mode 100644 index 00000000..17d054b5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Cache/CacheManager.cs @@ -0,0 +1,142 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Serialization; +using System; +using System.IO; +using System.Text; + +namespace IpTviewr.UiServices.Configuration.Cache +{ + public class CacheManager + { + private readonly string _baseDirectory; + private readonly char[] _docNameOffendingChars; + + public CacheManager(string baseDirectory) + { + _baseDirectory = baseDirectory; + if (!Directory.Exists(_baseDirectory)) + { + Directory.CreateDirectory(_baseDirectory); + } // if + + var invalidFileChars = Path.GetInvalidFileNameChars(); + _docNameOffendingChars = new char[invalidFileChars.Length + 2]; + _docNameOffendingChars[0] = '.'; + _docNameOffendingChars[1] = ' '; + Array.Copy(invalidFileChars, 0, _docNameOffendingChars, 2, invalidFileChars.Length); + } // constructor + + public void SaveXml(string documentType, string name, int version, T xmlTree) where T: class + { + var path = Path.Combine(_baseDirectory, GetSafeDocumentName(documentType, name, ".xml")); + XmlSerialization.Serialize(path, xmlTree); + } // SaveXml + + public T LoadXml(string documentType, string name) where T : class + { + try + { + var path = Path.Combine(_baseDirectory, GetSafeDocumentName(documentType, name, ".xml")); + if (!File.Exists(path)) + { + return null; + } // if + + return XmlSerialization.Deserialize(path); + } + catch + { + // supress exception; behave as if document is not in the cache + return null; + } // try-catch + } // LoadXml + + public CachedXmlDocument LoadXmlDocument(string documentType, string name) where T : class + { + try + { + var path = Path.Combine(_baseDirectory, GetSafeDocumentName(documentType, name, ".xml")); + if (!File.Exists(path)) + { + return null; + } // if + + var document = XmlSerialization.Deserialize(path); + if (document == null) return null; + + var dateC = File.GetCreationTime(path); + var dateW = File.GetLastWriteTime(path); + + return new CachedXmlDocument(document, documentType, name, new Version(), (dateC > dateW) ? dateC : dateW); + } + catch + { + // supress exception; behave as if document is not in the cache + return null; + } // try-catch + } // LoadXmlDocument + + /// + /// Builds a filename, replacing all filesystem invalid characters (including '.' and spaces) with the given character + /// + /// Optional. Must not contain invalid chars + /// Name of the file/document + /// File extension + /// (Optional) Character to mark a replaced, invalid character + /// A filesystem-safe filename + public string GetSafeDocumentName(string documentType, string documentName, string extension, char? replacingChar = '~') + { + documentName = documentName.ToLowerInvariant(); + var buffer = new StringBuilder(documentType.Length + 2 + documentName.Length * 2); + if (documentType != null) + { + buffer.Append('{'); + buffer.Append(documentType.ToLowerInvariant()); + buffer.Append("} "); + } // if + + // quick test: any offending char? + var index = documentName.IndexOfAny(_docNameOffendingChars); + if (index < 0) + { + buffer.Append(documentName); + buffer.Append(extension); + return buffer.ToString(); + } // if + + var startIndex = 0; + while (index >= 0) + { + if (index != startIndex) + { + buffer.Append(documentName.Substring(startIndex, (index - startIndex))); + if (replacingChar.HasValue) buffer.Append(replacingChar.Value); + } // if + + startIndex = index + 1; + index = (startIndex < documentName.Length) ? documentName.IndexOfAny(_docNameOffendingChars, startIndex) : -1; + } // while + + // add final text + if (startIndex < documentName.Length) + { + buffer.Append(documentName.Substring(startIndex, documentName.Length - startIndex)); + } // if + buffer.Append(extension); + + return buffer.ToString(); + } // GetSafeDocumentName + } // class CacheManager +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Cache/CachedItemBase.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Cache/CachedItemBase.cs new file mode 100644 index 00000000..9e22d575 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Cache/CachedItemBase.cs @@ -0,0 +1,54 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.Configuration.Cache +{ + public abstract class CachedItemBase + { + public CachedItemBase(string documentType, string name, Version version, DateTime date) + { + DocumentType = documentType; + Name = name; + Version = version; + Date = date; + } // constructor + + public string DocumentType + { + get; + private set; + } // DocType + + public string Name + { + get; + private set; + } // Name + + public Version Version + { + get; + private set; + } // Version + + public DateTime Date + { + get; + private set; + } // Date + + public TimeSpan Age => DateTime.Now - Date; + } // CachedItemBase +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Cache/CachedXmlDocument.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Cache/CachedXmlDocument.cs new file mode 100644 index 00000000..1832bcd3 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Cache/CachedXmlDocument.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.Configuration.Cache +{ + public sealed class CachedXmlDocument : CachedItemBase + { + public CachedXmlDocument(T document, string documentType, string name, Version version, DateTime date) + : base(documentType, name, version, date) + { + Document = document; + } // constructor + + public T Document + { + get; + private set; + } // Document + } // CachedXmlDocument +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/CommonUiResources.Designer.cs new file mode 100644 index 00000000..de7db128 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/CommonUiResources.Designer.cs @@ -0,0 +1,196 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class CommonUiResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal CommonUiResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.CommonUiResources", typeof(CommonUiResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Add_16xM { + get { + object obj = ResourceManager.GetObject("Action_Add_16xM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_AttachFile_16x16 { + get { + object obj = ResourceManager.GetObject("Action_AttachFile_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Delete_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoNextDown_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoNextDown_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoPreviousUp_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoPreviousUp_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Properties_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Property_Add_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Property_Add_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Property_Edit_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Property_Edit_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Info_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Info_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Ok_SmallCircle_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Ok_SmallCircle_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Warning_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Warning_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/CommonUiResources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/CommonUiResources.resx new file mode 100644 index 00000000..e00629f2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/CommonUiResources.resx @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\common.ui\resources\action_add_16xm.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\action_attachfile_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\action_cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\action_delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\action_gonextdown_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\action_gopreviousup_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\action_properties_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\action_property_add_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\action_property_edit_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\status_info_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\status_ok_smallcircle_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\common.ui\resources\status_warning_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.Designer.cs similarity index 92% rename from 1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.Designer.cs index d9be4c04..e03b406d 100644 --- a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.Designer.cs @@ -1,4 +1,17 @@ -namespace IpTviewr.UiServices.Configuration +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration { partial class ConfigurationForm { @@ -121,4 +134,4 @@ private void InitializeComponent() private System.Windows.Forms.ImageList imageListConfigItems; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.cs similarity index 80% rename from 1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.cs index 322676eb..ba64b27a 100644 --- a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.cs @@ -1,18 +1,28 @@ -using IpTviewr.Common.Telemetry; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Telemetry; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; using System.Drawing; using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.UiServices.Configuration { public partial class ConfigurationForm : Form { - private ListViewItem SelectedConfigurationListItem; + private ListViewItem _selectedConfigurationListItem; private class ConfigurationItem { @@ -27,20 +37,20 @@ public static DialogResult ShowConfigurationForm(IWin32Window owner, bool autoSa DialogResult result; bool changed; - var q = from item in AppUiConfiguration.Current.ItemsRegistry + var q = from item in AppConfig.Current.ItemsRegistry let registration = item.Value where registration.HasEditor orderby registration.EditorPriority select new ConfigurationItem() { Registration = registration, - ExistingData = AppUiConfiguration.Current[registration.DirectIndex] + ExistingData = AppConfig.Current[registration.DirectIndex] }; var items = q.ToList(); using (var form = new ConfigurationForm()) { - BasicGoogleTelemetry.SendScreenHit(form, "(default)"); + AppTelemetry.FormEvent(AppTelemetry.LoadEvent, form, "(default)"); form.ConfigurationItems = items; result = form.ShowDialog(owner); if (result != DialogResult.OK) @@ -57,25 +67,23 @@ orderby registration.EditorPriority if (newData == null) continue; changed = true; - AppUiConfiguration.Current[item.Registration.DirectIndex] = newData; + AppConfig.Current[item.Registration.DirectIndex] = newData; } // foreach // autosave if settings changed if ((changed) && (autoSave)) { - AppUiConfiguration.Current.Save(); + AppConfig.Current.Save(); } // if // apply changes if ((changed) && (applyChanges != null) && (applyChanges.Count > 0)) { - Action applyChangesMethod; - foreach (var item in items) { if (item.NewData == null) continue; - if (applyChanges.TryGetValue(item.Registration.Id, out applyChangesMethod)) + if (applyChanges.TryGetValue(item.Registration.Id, out var applyChangesMethod)) { applyChangesMethod(); } // if @@ -87,18 +95,18 @@ orderby registration.EditorPriority public static T ShowConfigurationForm(IWin32Window owner, string settingsGuid, T overrideSettings) where T : class, IConfigurationItem { - var registration = AppUiConfiguration.Current.ItemsRegistry[new Guid(settingsGuid)]; + var registration = AppConfig.Current.ItemsRegistry[new Guid(settingsGuid)]; var data = new ConfigurationItem() { Registration = registration, - ExistingData = overrideSettings ?? AppUiConfiguration.Current[registration.DirectIndex] + ExistingData = overrideSettings ?? AppConfig.Current[registration.DirectIndex] }; var items = new List(1); items.Add(data); using (var form = new ConfigurationForm()) { - BasicGoogleTelemetry.SendScreenHit(form, data.Registration.ItemType.Name); + AppTelemetry.FormEvent(AppTelemetry.LoadEvent, form, data.Registration.ItemType.Name); form.ConfigurationItems = items; var dialogResult = form.ShowDialog(owner); if (dialogResult != DialogResult.OK) @@ -143,11 +151,13 @@ private void ConfigurationForm_Load(object sender, EventArgs e) listViewConfigItems.LargeImageList.Images.Add(img); } // using - configItem.Editor = registration.CreateEditor(AppUiConfiguration.CloneSettings(configItem.ExistingData)); + configItem.Editor = registration.CreateEditor(AppConfig.CloneSettings(configItem.ExistingData)); - var item = new ListViewItem(registration.EditorDisplayName); - item.ImageIndex = imageListConfigItems.Images.Count - 1; - item.Tag = configItem.Editor; + var item = new ListViewItem(registration.EditorDisplayName) + { + ImageIndex = imageListConfigItems.Images.Count - 1, + Tag = configItem.Editor + }; listViewConfigItems.Items.Add(item); } // foreach @@ -160,15 +170,13 @@ private void ConfigurationForm_Load(object sender, EventArgs e) private void ConfigurationForm_FormClosing(object sender, FormClosingEventArgs e) { - bool cancelClose; - if (DialogResult == DialogResult.OK) { foreach (var configItem in ConfigurationItems) { if (configItem.Editor == null) return; - configItem.Editor.EditorClosing(out cancelClose); + configItem.Editor.EditorClosing(out var cancelClose); if (cancelClose) { e.Cancel = true; @@ -193,8 +201,8 @@ private void listViewConfigItems_SelectedIndexChanged(object sender, EventArgs e var newSelection = (listViewConfigItems.SelectedItems.Count > 0) ? listViewConfigItems.SelectedItems[0] : null; if (newSelection == null) return; - SelectedConfigurationListItem = newSelection; - var configItem = SelectedConfigurationListItem.Tag as IConfigurationItemEditor; + _selectedConfigurationListItem = newSelection; + var configItem = _selectedConfigurationListItem.Tag as IConfigurationItemEditor; panelConfigItemUi.Controls.Clear(); var ui = configItem.UserInterfaceItem; @@ -236,7 +244,7 @@ private void buttonOk_Click(object sender, EventArgs e) if (IsAppRestartNeeded) { - MessageBox.Show(this, Properties.SettingsTexts.ConfigFormAppRestartRequired, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); + MessageBox.Show(this, Properties.SettingsTexts.ConfigFormAppRestartRequired, Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } // if buttonOk.DialogResult = DialogResult.OK; diff --git a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.es.resx index d3b85682..1f95b3d4 100644 --- a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.es.resx @@ -1,132 +1,132 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Aceptar - - - &Cancelar - - - Interfaz de usuario en desarrollo - - - Configuración - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Aceptar + + + &Cancelar + + + Interfaz de usuario en desarrollo + + + Configuración + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.resx index 20b50a30..bff4d860 100644 --- a/1.5 'Kruger 60'/UiServices.Config/ConfigurationForm.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ConfigurationForm.resx @@ -1,303 +1,303 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Bottom, Right - - - - 416, 330 - - - 100, 25 - - - - 3 - - - &Ok - - - MiddleRight - - - ImageBeforeText - - - buttonOk - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - Bottom, Right - - - 522, 330 - - - 100, 25 - - - 4 - - - &Cancel - - - MiddleRight - - - ImageBeforeText - - - buttonCancel - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - Top, Bottom, Left, Right - - - 155, 5 - - - 470, 320 - - - 1 - - - panelConfigItemUi - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Bottom, Left - - - Segoe UI Semibold, 9pt, style=Bold - - - 155, 330 - - - 255, 25 - - - 2 - - - UI under development - - - MiddleCenter - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Top, Bottom, Left - - - 17, 17 - - - 32, 32 - - - 0, 0 - - - 145, 362 - - - 0 - - - listViewConfigItems - - - System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 634, 362 - - - CenterParent - - - Configuration - - - imageListConfigItems - - - System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ConfigurationForm - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Bottom, Right + + + + 416, 330 + + + 100, 25 + + + + 3 + + + &Ok + + + MiddleRight + + + ImageBeforeText + + + buttonOk + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + Bottom, Right + + + 522, 330 + + + 100, 25 + + + 4 + + + &Cancel + + + MiddleRight + + + ImageBeforeText + + + buttonCancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + Top, Bottom, Left, Right + + + 155, 5 + + + 470, 320 + + + 1 + + + panelConfigItemUi + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Bottom, Left + + + Segoe UI Semibold, 9pt, style=Bold + + + 155, 330 + + + 255, 25 + + + 2 + + + UI under development + + + MiddleCenter + + + label1 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top, Bottom, Left + + + 17, 17 + + + 32, 32 + + + 0, 0 + + + 145, 362 + + + 0 + + + listViewConfigItems + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 634, 362 + + + CenterParent + + + Configuration + + + imageListConfigItems + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ConfigurationForm + + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.Designer.cs similarity index 92% rename from 1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.Designer.cs index 1673ae66..d5433dda 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Configuration.Editors { diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.cs similarity index 76% rename from 1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.cs index 12dea9a1..f7f6b57b 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.cs @@ -1,13 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.UiServices.Configuration.Editors @@ -41,17 +45,17 @@ public string ParametersList public string CommandLine { - get { return textBoxCommandLine.Text; } - set { textBoxCommandLine.Text = value; } + get => textBoxCommandLine.Text; + set => textBoxCommandLine.Text = value; } // CommandLine private void ParametersEditor_Load(object sender, EventArgs e) { - char[] dataSeparator = new char[] { '|' }; + var dataSeparator = new[] { '|' }; if (!string.IsNullOrEmpty(ParametersList)) { - var lines = ParametersList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + var lines = ParametersList.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); listParameters.BeginUpdate(); foreach (var line in lines) @@ -68,7 +72,7 @@ private void ParametersEditor_Load(object sender, EventArgs e) } // foreach listParameters.EndUpdate(); - for (int index = 0; index < listParameters.Columns.Count; index++) + for (var index = 0; index < listParameters.Columns.Count; index++) { listParameters.Columns[index].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); } // for @@ -104,7 +108,7 @@ private void listParameters_DoubleClick(object sender, EventArgs e) private void AddParameter() { - var parameter = string.Format("{0}{1}{2}", OpenBraceText, listParameters.SelectedItems[0].Text, CloseBraceText); + var parameter = $"{OpenBraceText}{listParameters.SelectedItems[0].Text}{CloseBraceText}"; textBoxCommandLine.Paste(parameter); } // AddParameter } // class ArgumentEditor diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.es.resx index 61322774..8e7c09a0 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.es.resx @@ -1,139 +1,139 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Parámetro - - - Significado - - - Parámetros disponibles - - - - 175, 106 - - - 87, 13 - - - Añadir parámetro - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Parámetro + + + Significado + + + Parámetros disponibles + + + + 175, 106 + + + 87, 13 + + + Añadir parámetro + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.resx index 68c0de10..bbcecee2 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditor.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditor.resx @@ -1,312 +1,312 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - Parameter - - - - 120 - - - False - - - Meaning - - - 120 - - - - Top, Left, Right - - - - Lucida Console, 9pt - - - 3, 3 - - - True - - - Vertical - - - 294, 60 - - - 0 - - - textBoxCommandLine - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Top, Bottom, Left, Right - - - Bottom, Right - - - True - - - 186, 106 - - - 76, 13 - - - 0 - - - Add parameter - - - TopRight - - - labelAddParam - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxParameters - - - 0 - - - Bottom, Right - - - Popup - - - 268, 102 - - - 20, 20 - - - 1 - - - buttonAddParam - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxParameters - - - 1 - - - Top, Bottom, Left, Right - - - 6, 19 - - - 282, 77 - - - 0 - - - listParameters - - - System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxParameters - - - 2 - - - 3, 69 - - - 294, 128 - - - 1 - - - Available parameters - - - groupBoxParameters - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 300, 200 - - - columnHeader1 - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - columnHeader2 - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ArgumentEditor - - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Parameter + + + + 120 + + + False + + + Meaning + + + 120 + + + + Top, Left, Right + + + + Lucida Console, 9pt + + + 3, 3 + + + True + + + Vertical + + + 294, 60 + + + 0 + + + textBoxCommandLine + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top, Bottom, Left, Right + + + Bottom, Right + + + True + + + 186, 106 + + + 76, 13 + + + 0 + + + Add parameter + + + TopRight + + + labelAddParam + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxParameters + + + 0 + + + Bottom, Right + + + Popup + + + 268, 102 + + + 20, 20 + + + 1 + + + buttonAddParam + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxParameters + + + 1 + + + Top, Bottom, Left, Right + + + 6, 19 + + + 282, 77 + + + 0 + + + listParameters + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxParameters + + + 2 + + + 3, 69 + + + 294, 128 + + + 1 + + + Available parameters + + + groupBoxParameters + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 300, 200 + + + columnHeader1 + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + columnHeader2 + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ArgumentEditor + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs similarity index 87% rename from 1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs index 4acff48b..8c4ce515 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Configuration.Editors { @@ -84,4 +94,4 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonOk; } // class ArgumentEditorDialog -} // namespace \ No newline at end of file +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.cs new file mode 100644 index 00000000..f5bdb81f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.cs @@ -0,0 +1,67 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Editors +{ + public partial class ArgumentEditorDialog : Form + { + public ArgumentEditorDialog() + { + InitializeComponent(); + } // constructor + + public bool IsDataChanged + { + get; + private set; + } // IsDataChanged + + public string Parameter + { + get => parameterEditor.CommandLine; + set + { + parameterEditor.CommandLine = value; + buttonOk.Enabled = (parameterEditor.CommandLine != ""); + Text = buttonOk.Enabled ? Properties.SettingsTexts.ParameterEditCaption : Properties.SettingsTexts.ParameterNewCaption; + } + } // Parameter + + public string OpenBraceText + { + get => parameterEditor.OpenBraceText; + set => parameterEditor.OpenBraceText = value; + } // OpenBraceText + + public string CloseBraceText + { + get => parameterEditor.CloseBraceText; + set => parameterEditor.CloseBraceText = value; + } // CloseBraceText + + public string ParametersList + { + get => parameterEditor.ParametersList; + set => parameterEditor.ParametersList = value; + } // ParametersList + + private void parameterEditor_CommandLineChanged(object sender, EventArgs e) + { + buttonOk.Enabled = (parameterEditor.CommandLine != ""); + IsDataChanged = true; + } // parameterEditor_CommandLineChanged + } // class ArgumentEditorDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.es.resx similarity index 95% rename from 1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.es.resx index 6f9abc44..bc09cc31 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.es.resx @@ -1,126 +1,126 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Cancelar - - - &Aceptar - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Cancelar + + + &Aceptar + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.resx similarity index 92% rename from 1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.resx index f59443b0..ec917c5a 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentEditorDialog.resx @@ -112,19 +112,19 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Cancel - + 6, 13 - + NoControl @@ -135,9 +135,9 @@ ImageBeforeText - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 7 @@ -148,7 +148,7 @@ Bottom, Right - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 @@ -156,8 +156,8 @@ ArgumentEditorDialog - - NoControl + + $this Bottom, Right @@ -192,14 +192,8 @@ buttonCancel - - MiddleRight - - - 0 - - - $this + + NoControl $this @@ -213,8 +207,11 @@ 100, 25 - - 272, 275 + + $this + + + MiddleRight 2 @@ -222,22 +219,22 @@ &Ok - - $this + + 272, 275 + + + 0 - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 (Caption) - IpTviewr.UiServices.Configuration.Editors.ArgumentEditor, UiServices.Configuration, Version=1.5.35.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Configuration.Editors.ArgumentEditor, UiServices.Configuration, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - + True - - es - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.Designer.cs new file mode 100644 index 00000000..935120f0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.Designer.cs @@ -0,0 +1,95 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Drawing; + +namespace IpTviewr.UiServices.Configuration.Editors +{ + partial class ArgumentsEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ArgumentsEditor)); + this.groupBoxData.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxData + // + resources.ApplyResources(this.groupBoxData, "groupBoxData"); + // + // buttonAdd + // + this.buttonAdd.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonAdd, resources.GetString("buttonAdd.ToolTip")); + // + // buttonMoveDown + // + this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonMoveDown, resources.GetString("buttonMoveDown.ToolTip")); + // + // buttonMoveUp + // + this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonMoveUp, resources.GetString("buttonMoveUp.ToolTip")); + // + // buttonRemove + // + this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonRemove, resources.GetString("buttonRemove.ToolTip")); + // + // listItems + // + resources.ApplyResources(this.listItems, "listItems"); + this.listItems.Font = new Font(new FontFamily("Lucida Console"), 9.0f); + // + // buttonEdit + // + this.buttonEdit.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonEdit, resources.GetString("buttonEdit.ToolTip")); + // + // ArgumentsEditor + // + resources.ApplyResources(this, "$this"); + this.Name = "ArgumentsEditor"; + this.groupBoxData.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + } // class ArgumentsEditor +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.cs new file mode 100644 index 00000000..93f97b3f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.cs @@ -0,0 +1,84 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; +using IpTviewr.UiServices.Common.Controls; + +namespace IpTviewr.UiServices.Configuration.Editors +{ + public partial class ArgumentsEditor : StringListEditor + { + public ArgumentsEditor() + { + InitializeComponent(); + } // constructor + + public string OpenBraceText + { + get; + set; + } // OpenBraceText + + public string CloseBraceText + { + get; + set; + } // CloseBraceText + + public string ParametersList + { + get; + set; + } // ParametersList + + public string[] Arguments + { + get => Items; + set => Items = value; + } // Arguments + + #region Overrides of StringListEditor + + protected override bool GetNewItem(out string newItem) + { + using var dialog = GetArgumentEditorDialog(); + dialog.Parameter = null; + var ok = dialog.ShowDialog(this) != DialogResult.OK; + newItem = dialog.Parameter; + return ok; + } // GetNewItem + + protected override bool EditItem(string item, out string newItem) + { + using var dialog = GetArgumentEditorDialog(); + dialog.Parameter = listItems.SelectedItem.ToString(); + var ok = dialog.ShowDialog(this) != DialogResult.OK; + newItem = dialog.Parameter; + return ok; + } // EditItem + + #endregion + + private ArgumentEditorDialog GetArgumentEditorDialog() + { + var dialog = new ArgumentEditorDialog() + { + OpenBraceText = OpenBraceText, + CloseBraceText = CloseBraceText, + ParametersList = ParametersList + }; + + return dialog; + } // GetArgumentEditorDialog + } // class ArgumentsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.es.resx similarity index 94% rename from 1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.es.resx index fc134ca4..e5706f4e 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.es.resx @@ -1,138 +1,138 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Añade un nuevo argumento al final de la lista - - - Baja una posición el argumento seleccionado - - - Sube una posición el argumento seleccionado - - - Elimina el argumento seleccionado de la lista - - - Edita el argumento seleccionado - - - Argumentos del programa - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Añade un nuevo argumento al final de la lista + + + Baja una posición el argumento seleccionado + + + Sube una posición el argumento seleccionado + + + Elimina el argumento seleccionado + + + Edita el argumento seleccionado + + + Argumentos del programa + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.resx new file mode 100644 index 00000000..2ef0f847 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Editors/ArgumentsEditor.resx @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Program arguments + + + + 17, 17 + + + Add new... + + + Move down + + + Move up + + + Delete + + + Lucida Console, 9.5pt + + + + 13 + + + Edit selected argument + + + True + + + 6, 13 + + + ArgumentsEditor + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/IConfigurationItem.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/IConfigurationItem.cs new file mode 100644 index 00000000..76d27e61 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/IConfigurationItem.cs @@ -0,0 +1,27 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Configuration; + +namespace IpTviewr.UiServices.Configuration +{ + // interface for marking configuration items + public interface IConfigurationItem + { + bool SupportsInitialization { get; } + InitializationResult Initialize(); + + bool SupportsValidation { get; } + string Validate(string ownerTag); + } // interface IConfigurationItem +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/IConfigurationItemEditor.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/IConfigurationItemEditor.cs new file mode 100644 index 00000000..245fac1d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/IConfigurationItemEditor.cs @@ -0,0 +1,46 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration +{ + public interface IConfigurationItemEditor + { + UserControl UserInterfaceItem + { + get; + } // UserInterfaceItem + + bool SupportsWinFormsValidation + { + get; + } // SupportsWinFormsValidation + + bool IsDataChanged + { + get; + } // IsDataChanged + + bool IsAppRestartNeeded + { + get; + } // IsAppRestartNeeded + + bool Validate(); + IConfigurationItem GetNewData(); + + void EditorClosing(out bool cancelClose); + void EditorClosed(bool userCancel); + } // interface IConfigurationFormItem +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/IConfigurationItemRegistration.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/IConfigurationItemRegistration.cs new file mode 100644 index 00000000..5f623936 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/IConfigurationItemRegistration.cs @@ -0,0 +1,66 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; + +namespace IpTviewr.UiServices.Configuration +{ + public interface IConfigurationItemRegistration + { + Guid Id + { + get; + } // Id + + Type ItemType + { + get; + } // ItemType + + int DirectIndex + { + get; + set; + } // DirectIndex + + IConfigurationItem CreateDefault(); + + bool HasEditor + { + get; + } // HasEditor + + string EditorDisplayName + { + get; + } // EditorDisplayName + + string EditorDescription + { + get; + } // EditorDescription + + Image EditorImage + { + get; + } // EditorImage + + int EditorPriority + { + get; + } // EditorPriority + + IConfigurationItemEditor CreateEditor(IConfigurationItem data); + } // interface IConfigurationItemRegistration +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/ILocalizedObject.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ILocalizedObject.cs new file mode 100644 index 00000000..f1eae1da --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/ILocalizedObject.cs @@ -0,0 +1,23 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration +{ + public interface ILocalizedObject + { + string CultureName + { + get; + } // CultureName + } // ILocalizedObject +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Config/LICENSE.ES.MD new file mode 100644 index 00000000..ff8fd33e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/LICENSE.ES.MD @@ -0,0 +1,183 @@ +# Biblioteca 'UiServices.Configuration' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Config/LICENSE.MD new file mode 100644 index 00000000..7759083c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/LICENSE.MD @@ -0,0 +1,155 @@ +# Library 'UiServices.Configuration' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/License.txt b/1.5 'Kruger 60'/Assemblies/UiServices.Config/License.txt new file mode 100644 index 00000000..1fd464c8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/License.txt @@ -0,0 +1,167 @@ +############################################################################## +## +## Library 'UiServices.Configuration' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® Exception Message Box License Terms + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/LocalizedObject.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/LocalizedObject.cs new file mode 100644 index 00000000..2670878d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/LocalizedObject.cs @@ -0,0 +1,50 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; +using System.Linq; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration +{ + public abstract class LocalizedObject : ILocalizedObject + { + private string _fieldCultureName; + + [XmlAttribute("culture")] + public string CultureName + { + get => _fieldCultureName; + + set => _fieldCultureName = (string.IsNullOrEmpty(value)) ? "" : value.ToLowerInvariant(); + } // CultureName + + public static T FindMatchingCultureObject(IEnumerable collection, IEnumerable uiCultures) where T : ILocalizedObject + { + ILocalizedObject matching; + + matching = null; + var localizedCollection = (IEnumerable)collection; + foreach (var cultureName in uiCultures) + { + var q = from localized in localizedCollection + where localized.CultureName == cultureName + select localized; + matching = q.FirstOrDefault(); + if (matching != null) break; + } // foreach cultureName + + return (T)matching; + } // FindMatchingCultureObject + } // abstract class LocalizedObject +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/BaseLogo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/BaseLogo.cs new file mode 100644 index 00000000..962f2def --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/BaseLogo.cs @@ -0,0 +1,243 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Concurrent; +using System.IO; +using System.Collections.Generic; +using System.Drawing; +using System.IO.Compression; +using IpTviewr.Common; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public abstract class BaseLogo + { + private static readonly ConcurrentDictionary Zips = new ConcurrentDictionary(); + + private BaseLogo() + { + // no-op + } // constructor + + internal BaseLogo(ILogoMapping mapping, string mappingKey, string entry, string uniqueKey) + { + Mapping = mapping ?? throw new ArgumentNullException(nameof(mapping)); + MappingKey = mappingKey ?? throw new ArgumentNullException(nameof(mappingKey)); + MappingEntry = entry ?? throw new ArgumentNullException(nameof(entry)); + Key = uniqueKey ?? throw new ArgumentNullException(nameof(uniqueKey)); + } // constructor + + internal ILogoMapping Mapping { get; } + + internal string MappingKey { get; } + + internal string MappingEntry { get; } + + public string Key { get; } + + public Image GetImage(LogoSize logoSize, bool noExceptions = true) + { + if (!IsSizeAvailable(logoSize)) + { + throw new NotSupportedException(); + } // if + + var stream = (Stream)null; + try + { + stream = Mapping.GetImage(MappingKey, MappingEntry, logoSize); + if (stream != null) return Image.FromStream(stream); + + if (noExceptions) return GetBrokenFile(logoSize); + throw new FileNotFoundException(ImageNotFoundExceptionText, $@"{MappingKey}: {MappingEntry}"); + } + catch (FileNotFoundException ex) when (noExceptions == false) + { + throw new FileNotFoundException(ImageLoadExceptionText, $@"{MappingKey}: {MappingEntry}", ex); + } + catch (OutOfMemoryException ex) when (noExceptions == false) + { + throw new InvalidOperationException(string.Format(ImageLoadExceptionText, $@"{MappingKey}: {MappingEntry}"), ex); + } + catch (Exception) when (noExceptions) + { + return GetBrokenFile(logoSize); + } + finally + { + stream?.Dispose(); + } // try-finally + } // GetImage + +#if DEBUG + public bool ImageExists(LogoSize logoSize, out bool substituted) + { + return Mapping.ImageExists(MappingKey, MappingEntry, logoSize, out substituted); + } // ImageExists +#endif + + public string GetLogoIconPath() + { + var iconPath = Path.Combine(AppConfig.Current.Folders.Logos.Cache, + $"{TextUtils.SanitizeFilename(Key, "~")}.ico"); + + var zipEntry = Mapping.GetIcon(MappingKey, MappingEntry, out var lastModifiedUtc); + if (zipEntry == null) return null; + + if (File.Exists(iconPath)) + { + File.SetAttributes(iconPath, FileAttributes.Normal); + var info = new FileInfo(iconPath); + var last = info.CreationTimeUtc; + if (info.LastWriteTimeUtc > last) last = info.LastWriteTimeUtc; + + if (lastModifiedUtc <= last) return iconPath; + } // if + + Directory.CreateDirectory(AppConfig.Current.Folders.Logos.Cache); + using (var output = new FileStream(iconPath, FileMode.Create, FileAccess.Write, FileShare.None)) + { + var buffer = new byte[1024]; + int read; + + using var stream = zipEntry.Open(); + while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer, 0, read); + } // while + } // using + + // ReSharper disable once AssignmentIsFullyDiscarded [assignment has a side effect] + _ = new FileInfo(iconPath) + { + CreationTimeUtc = lastModifiedUtc, + LastWriteTimeUtc = lastModifiedUtc, + LastAccessTimeUtc = lastModifiedUtc + }; + + return iconPath; + } // GetLogoIconPath + + #region Static methods + + public static Size LogoSizeToSize(LogoSize logoSize) + { + switch (logoSize) + { + case LogoSize.Size32: return new Size(32, 32); + case LogoSize.Size48: return new Size(48, 48); + case LogoSize.Size64: return new Size(64, 64); + case LogoSize.Size96: return new Size(96, 96); + case LogoSize.Size128: return new Size(128, 128); + case LogoSize.Size256: return new Size(256, 256); + default: + throw new IndexOutOfRangeException(); + } // switch + } // LogoSizeToSize + + public static string LogoSizeToString(LogoSize logoSize, bool withSize) + { + string text; + + switch (logoSize) + { + case LogoSize.Size32: text = Properties.Texts.LogoSize32; break; + case LogoSize.Size48: text = Properties.Texts.LogoSize48; break; + case LogoSize.Size64: text = Properties.Texts.LogoSize64; break; + case LogoSize.Size96: text = Properties.Texts.LogoSize96; break; + case LogoSize.Size128: text = Properties.Texts.LogoSize128; break; + case LogoSize.Size256: text = Properties.Texts.LogoSize256; break; + default: + throw new IndexOutOfRangeException(); + } // switch + + if (!withSize) return text; + + var size = LogoSizeToSize(logoSize); + return string.Format(Properties.Texts.LogoSizeWithSizeFormat, text, size.Width, size.Height); + } // LogoSizeToString + + public static List> GetListLogoSizes(bool withSize) + { + var result = new List>(6) + { + new KeyValuePair(LogoSize.Size32, LogoSizeToString(LogoSize.Size32, withSize)), + new KeyValuePair(LogoSize.Size48, LogoSizeToString(LogoSize.Size48, withSize)), + new KeyValuePair(LogoSize.Size64, LogoSizeToString(LogoSize.Size64, withSize)), + new KeyValuePair(LogoSize.Size96, LogoSizeToString(LogoSize.Size96, withSize)), + new KeyValuePair(LogoSize.Size128, LogoSizeToString(LogoSize.Size128, withSize)), + new KeyValuePair(LogoSize.Size256, LogoSizeToString(LogoSize.Size256, withSize)) + }; + + return result; + } // GetListLogoSizes + + public static Image GetBrokenFile(LogoSize logoSize) + { + switch (logoSize) + { + case LogoSize.Size32: return Properties.Resources.BrokenFile_32; + case LogoSize.Size48: return Properties.Resources.BrokenFile_48; + case LogoSize.Size64: return Properties.Resources.BrokenFile_64; + case LogoSize.Size96: return Properties.Resources.BrokenFile_96; + case LogoSize.Size128: return Properties.Resources.BrokenFile_128; + case LogoSize.Size256: return Properties.Resources.BrokenFile_256; + default: + throw new ArgumentOutOfRangeException(nameof(logoSize), logoSize, null); + } // switch + } // GetBrokenFile + + internal static ZipArchive GetZipArchive(string path) + { + return Zips.GetOrAdd(path, LoadZip); + + ZipArchive LoadZip(string key) + { + var input = new FileStream(key, FileMode.Open, FileAccess.Read, FileShare.Read); + return new ZipArchive(input, ZipArchiveMode.Read, false); + } // LoadZip + } // GetZipArchive + + internal static ZipArchiveEntry GetZipEntry(ZipArchive archive, string entryName) + { + var entry = archive.GetEntry(entryName); + if (entry != null) return entry; + + entryName = entryName.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + return archive.GetEntry(entryName); + } // GetEntry + + #endregion + + protected virtual bool IsSizeAvailable(LogoSize logoSize) + { + switch (logoSize) + { + case LogoSize.Size32: + case LogoSize.Size48: + case LogoSize.Size64: + case LogoSize.Size96: + case LogoSize.Size128: + case LogoSize.Size256: + return true; + default: + return false; + } // switch + } // IsSizeAvailable + + protected abstract string ImageNotFoundExceptionText { get; } + + protected abstract string ImageLoadExceptionText { get; } + } // class BaseLogo +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ILogoMapping.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ILogoMapping.cs new file mode 100644 index 00000000..0cf9a93c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ILogoMapping.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.IO; +using System.IO.Compression; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + internal interface ILogoMapping + { + Stream GetImage(string key, string entry, LogoSize size); + +#if DEBUG + bool ImageExists(string key, string entry, LogoSize size, out bool substituted); +#endif + + ZipArchiveEntry GetIcon(string key, string entry, out DateTime lastModifiedUtc); + } // interface ILogoMapping +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/LogoSize.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/LogoSize.cs new file mode 100644 index 00000000..8e0852a1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/LogoSize.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public enum LogoSize + { + [XmlEnum(Name="32x32")] + Size32 = 32, + + [XmlEnum(Name = "48x48")] + Size48 = 48, + + [XmlEnum(Name = "64x64")] + Size64 = 64, + + [XmlEnum(Name = "96x96")] + Size96 = 96, + + [XmlEnum(Name = "128x128")] + Size128 = 128, + + [XmlEnum(Name = "256x256")] + Size256 = 256, + } // enum LogoSize +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/LogosCollection.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/LogosCollection.cs new file mode 100644 index 00000000..40e9f063 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/LogosCollection.cs @@ -0,0 +1,48 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.IO; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + internal class LogosCollection + { + public LogosCollection(string name, string package, string archivePath, string key) + { + Name = name; + Package = package; + ArchivePath = archivePath; + Key = key; + } // LogosCollection + + public string Name { get; } + public string Package { get; } + public string ArchivePath { get; } + public string Key { get; } + + public DateTime GetLastModifiedUtc() + { + var info = new FileInfo(ArchivePath); + var result = info.CreationTimeUtc; + if (info.LastWriteTimeUtc > result) + { + result = info.LastWriteTimeUtc; + } // if + + return result; + } // GetLastModifiedUtc + + public override string ToString() => Key; + } // LogosCollection +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ProviderLogo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ProviderLogo.cs new file mode 100644 index 00000000..22a39244 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ProviderLogo.cs @@ -0,0 +1,27 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public class ProviderLogo : BaseLogo + { + internal ProviderLogo(ILogoMapping mapping, string mappingKey, string entry, string uniqueKey) : base(mapping, mappingKey, entry, uniqueKey) + { + // no-op + } // constructor + + protected override string ImageNotFoundExceptionText => AppConfig.Current.IpTvService.Texts.Provider.LogoNotFound; + + protected override string ImageLoadExceptionText => AppConfig.Current.IpTvService.Texts.Provider.LogoLoadError; + } // class ProviderLogo +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ProviderLogoMappings.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ProviderLogoMappings.cs new file mode 100644 index 00000000..6458ab12 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ProviderLogoMappings.cs @@ -0,0 +1,131 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Schema2014.Logos; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public class ProviderLogoMappings: ILogoMapping + { + private IDictionary _logos; + private IDictionary _collections; + + public string LogosPath { get; private set; } + + public ProviderLogoMappings(ProviderMappingsXml providerMappings, string logosPath) + { + Init(providerMappings, logosPath); + } // constructor + + public ProviderLogoMappings(string providerMappingsXmlFilename, string logosPath) + { + var providerMappings = LogosCommon.ParseProviderMappingsXml(providerMappingsXmlFilename); + + Init(providerMappings, logosPath); + } // constructor + + public ProviderLogo Get(string providerDomainName) + { + while (true) + { + // avoid infinite loop + if (providerDomainName == null) + { + providerDomainName = Properties.InvariantTexts.DefaultDomainNameProviderLogo; + } // if + + if (_logos.TryGetValue(providerDomainName, out var logoFile)) + { + var collection = _collections[providerDomainName]; + return new ProviderLogo(this, providerDomainName, logoFile, $@"{collection.Key}/{logoFile}"); + } // if + + // try 'parent' domain + var index = providerDomainName.IndexOf('.'); + providerDomainName = (index > 0) ? providerDomainName.Substring(index) : null; + } // while + } // Get + + private void Init(ProviderMappingsXml providerMappings, string logosPath) + { + LogosPath = logosPath; + + var q = from collection in providerMappings.Collections + from mp in collection.Mappings + select 0; + var count = q.Count(); + + _logos = new Dictionary(count, StringComparer.OrdinalIgnoreCase); + _collections = new Dictionary(count, StringComparer.OrdinalIgnoreCase); + + var entries = from collection in providerMappings.Collections + from mp in collection.Mappings + select new { Collection = collection, Mapping = mp }; + foreach (var entry in entries) + { + var domain = entry.Mapping.DomainName; + try + { + _logos.Add(domain, entry.Mapping.LogoFile); + _collections.Add(domain, new LogosCollection(name: entry.Collection.Name, + package: entry.Collection.Package, + archivePath: Path.Combine(logosPath, entry.Collection.Package) + ".zip", + key: $@"/provider/{entry.Collection.Package}")); + } + catch (ArgumentException ex) // duplicated key (domain name) + { + throw new ApplicationException( + string.Format(Properties.Texts.ExceptionLogosProviderMappingsDuplicatedDomain, entry.Mapping.DomainName), ex); + } // try-catch + } // foreach + } // Init + + #region ILogoMapping implementation + + Stream ILogoMapping.GetImage(string key, string entry, LogoSize size) + { + if (!_collections.TryGetValue(key, out var collection)) return null; + var zip = BaseLogo.GetZipArchive(collection.ArchivePath); + var entryName = $@"{entry}{Path.DirectorySeparatorChar}{(int)size}.png"; + var zipEntry = BaseLogo.GetZipEntry(zip, entryName); + + return zipEntry?.Open(); + } // ILogoMapping.GetImage + +#if DEBUG + bool ILogoMapping.ImageExists(string key, string entry, LogoSize size, out bool substituted) + { + substituted = false; + if (!_collections.TryGetValue(key, out var collection)) return false; + + var zip = BaseLogo.GetZipArchive(collection.ArchivePath); + var entryName = $@"{entry}{Path.DirectorySeparatorChar}{(int)size}.png"; + var zipEntry = BaseLogo.GetZipEntry(zip, entryName); + + return (zipEntry != null); + } // ILogoMapping.ImageExists +#endif + + ZipArchiveEntry ILogoMapping.GetIcon(string key, string entry, out DateTime lastModifiedUtc) + { + throw new NotSupportedException(); + } // ILogoMapping.GetImage + + #endregion + } // class ProviderLogoMappings +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogo.cs new file mode 100644 index 00000000..a1fb2807 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogo.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public class ServiceLogo : BaseLogo + { + public const string QualityDefault = "(default)"; + public const string QualityStandard = "SD"; + public const string QualityHigh = "HD"; + public const string QualityUltraHigh4K = "4K"; + public const string QualityUltraHigh8K = "8K"; + + private readonly string _quality; + + internal ServiceLogo(ILogoMapping mapping, string mappingKey, string entry, string uniqueKey, string quality) : base(mapping, mappingKey, entry, uniqueKey) + { + _quality = quality; + } // constructor + + protected override string ImageNotFoundExceptionText => Properties.Texts.ExceptionLogosServiceImageNotFound; + + protected override string ImageLoadExceptionText => Properties.Texts.ExceptionLogosServiceImageLoadError; + } // class ServiceLogo +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs new file mode 100644 index 00000000..e4d34c33 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs @@ -0,0 +1,33 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration.Logos +{ + partial class ServiceLogoMappings + { + public class ReplacementDomain + { + public bool IsMandatory + { + get; + internal set; + } // IsMandatory + + public string Replacement + { + get; + internal set; + } // Replacement + } // ReplacementDomain + } // partial class ServiceLogoMappings +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs new file mode 100644 index 00000000..15f4beab --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; +using IpTviewr.UiServices.Configuration.Schema2014.Logos; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + partial class ServiceLogoMappings + { + public class ServiceDomainMapping + { + public string DomainRedirection + { + get; + internal set; + } // DomainRedirection + + public IDictionary Logos + { + get; + internal set; + } // Logos + } // class ServiceDomainMapping + } // partial class +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogoMappings.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogoMappings.cs new file mode 100644 index 00000000..ba5e481e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Logos/ServiceLogoMappings.cs @@ -0,0 +1,300 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Schema2014.Logos; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; + +namespace IpTviewr.UiServices.Configuration.Logos +{ + public partial class ServiceLogoMappings : ILogoMapping + { + private IDictionary _domainMappings; + private IDictionary _serviceMappings; + private IDictionary _collections; + + public string BasePathLogos + { + get; + private set; + } // BasePathServiceLogos + + public ServiceLogoMappings(DomainMappingsXml domainMappings, ServiceMappingsXml serviceMappings, string logosPath) + { + Init(domainMappings, serviceMappings, logosPath); + } // constructor + + public ServiceLogoMappings(string domainMappingsXmlFilename, string serviceMappingsXmlFile, string logosPath) + { + var domainMappings = LogosCommon.ParseDomainMappingsXml(domainMappingsXmlFilename); + var serviceMappings = LogosCommon.ParseServiceMappingsXml(serviceMappingsXmlFile); + + Init(domainMappings, serviceMappings, logosPath); + } // constructor + + public ServiceLogo Get(string serviceDomainName, string providerDomain, string serviceName, string serviceTypeId) + { + while (true) + { + if (providerDomain == null) throw new ArgumentNullException(nameof(providerDomain)); + if (serviceDomainName == null) serviceDomainName = providerDomain; + if (serviceName == null) serviceName = Properties.InvariantTexts.ServiceNameAny; + + serviceDomainName = serviceDomainName.ToLowerInvariant(); + serviceName = serviceName.ToLowerInvariant(); + + var firstReplacementChance = true; + while (serviceDomainName != null) + { + // replace domain? + if (_domainMappings.TryGetValue(serviceDomainName, out var replacement)) + { + if ((replacement.IsMandatory) || (!firstReplacementChance)) + { + serviceDomainName = replacement.Replacement; + firstReplacementChance = true; + continue; + } // if + } // if + + if (!firstReplacementChance) + { + serviceDomainName = GetParentDomain(serviceDomainName); + continue; + } // if + + // locate service logo for given domain + if (!_serviceMappings.TryGetValue(serviceDomainName, out var serviceLogos)) + { + firstReplacementChance = false; + continue; + } // if + + if (!serviceLogos.Logos.TryGetValue(serviceName, out var serviceMapping)) + { + if (!serviceLogos.Logos.TryGetValue(Properties.InvariantTexts.ServiceNameAny, out serviceMapping)) + { + firstReplacementChance = false; + continue; + } // if + } // if + + var domain = serviceLogos.DomainRedirection ?? serviceDomainName; + return GetLogo(domain, serviceMapping); + } // while + + // avoid infinite recursion if default domain name contains no logos or doesn't exists + if (providerDomain == Properties.InvariantTexts.DefaultDomainNameServiceLogo) + { + return GetLogo(null, null); + } // if + + // obtain default logo + serviceDomainName = null; + providerDomain = Properties.InvariantTexts.DefaultDomainNameServiceLogo; + serviceName = serviceTypeId; + } // while + } // Get + + public ServiceLogo FromServiceKey(string serviceKey) + { + var pos = serviceKey.IndexOf('@'); + if (pos < 1) throw new ArgumentException(); + if ((pos + 1) == serviceKey.Length) throw new ArgumentException(); + + var service = serviceKey.Substring(0, pos); + var domain = serviceKey.Substring(pos + 1); + + return Get(null, domain, service, null); + } // FromServiceKey + + private ServiceLogo GetLogo(string domain, ServiceMapping mapping) + { + if ((domain == null) || (mapping?.Logo == null) || !_collections.TryGetValue(domain, out var collection)) + { + return new ServiceLogo(this, "", "", @"/services/", null); + } // if + + var entry = $@"{mapping.Quality}{(!string.IsNullOrEmpty(mapping.Quality) ? ":" : null)}{mapping.Logo}"; + + return new ServiceLogo(this, domain, entry, $@" /services/{collection.Name}/{domain}/{entry}", mapping.Quality); + } // GetLogo + + private static string GetParentDomain(string domainName) + { + var parts = domainName.Split('.'); + return parts.Length <= 2 ? null : string.Join(".", parts, 1, parts.Length - 1); + } // GetParentDomain + + private void Init(DomainMappingsXml domainMappings, ServiceMappingsXml serviceMappings, string logosPath) + { + BasePathLogos = logosPath; + _domainMappings = BuildMapping(domainMappings); + BuildMapping(serviceMappings); + } // Init + + public static Dictionary BuildMapping(DomainMappingsXml mapping) + { + var q = from package in mapping.Collections + from mp in package.Mappings + select 0; + var count = q.Count(); + + var entries = from collection in mapping.Collections + from mp in collection.Mappings + select new { Collection = collection, Mapping = mp }; + + var result = new Dictionary(count, StringComparer.OrdinalIgnoreCase); + foreach (var entry in entries) + { + try + { + result.Add(entry.Mapping.DomainName, new ReplacementDomain + { + IsMandatory = entry.Mapping.Mandatory, + Replacement = entry.Mapping.ReplacementDomain, + }); + } + catch (ArgumentException ex) // duplicated key (domain name) + { + throw new ApplicationException( + string.Format(Properties.Texts.ExceptionLogosDomainMappingsDuplicatedDomain, entry.Mapping.DomainName), ex); + } // try-catch + } // foreach + + return result; + } // BuildMapping + + private void BuildMapping(ServiceMappingsXml mapping) + { + var q = from collection in mapping.Collections + from domain in collection.Domains + select 0; + var count = q.Count(); + + _serviceMappings = new Dictionary(count, StringComparer.OrdinalIgnoreCase); + _collections = new Dictionary(count, StringComparer.OrdinalIgnoreCase); + + var entries = from collection in mapping.Collections + from domain in collection.Domains + select new { Collection = collection, Domain = domain }; + + foreach (var entry in entries) + { + var domainMappings = new ServiceDomainMapping() + { + DomainRedirection = entry.Domain.RedirectDomainName, + Logos = new Dictionary(entry.Domain.Mappings.Length, StringComparer.OrdinalIgnoreCase), + }; + try + { + _serviceMappings.Add(entry.Domain.DomainName, domainMappings); + _collections.Add(entry.Domain.DomainName, new LogosCollection(name: entry.Collection.Name, + package: entry.Collection.Package, + archivePath: Path.Combine(BasePathLogos, entry.Collection.Package) + ".zip", + key: $@"/service/{entry.Collection.Package}")); + } + catch (ArgumentException ex) // duplicated key (domain name) + { + throw new ApplicationException( + string.Format(Properties.Texts.ExceptionLogosServiceMappingsDuplicatedDomain, + entry.Domain.DomainName), ex); + } // try-catch + + foreach (var serviceMapping in entry.Domain.Mappings) + { + try + { + domainMappings.Logos.Add(serviceMapping.Name, serviceMapping); + } + catch (ArgumentException ex) // duplicated key (domain service name) + { + throw new ApplicationException( + string.Format(Properties.Texts.ExceptionLogosServiceMappingsDuplicatedService, + serviceMapping.Name, entry.Domain.DomainName), ex); + } // try-catch + } // foreach mp + } // foreach domain + } // BuildMapping + + #region ILogoMapping implementation + + Stream ILogoMapping.GetImage(string key, string entry, LogoSize size) + { + var quality = GetQuality(entry, out entry); + return GetZipEntry(key, entry, quality, ((int)size).ToString(), ".png", out _, out _)?.Open(); + } // ILogoMapping.GetImage + +#if DEBUG + bool ILogoMapping.ImageExists(string key, string entry, LogoSize size, out bool substituted) + { + var requestedQuality = GetQuality(entry, out entry); + var zipEntry = GetZipEntry(key, entry, requestedQuality, ((int)size).ToString(), ".png", out _, out var quality); + substituted = ReferenceEquals(requestedQuality, quality); + + return (zipEntry != null); + } // ILogoMapping.ImageExists +#endif + + ZipArchiveEntry ILogoMapping.GetIcon(string key, string entry, out DateTime lastModifiedUtc) + { + var quality = GetQuality(entry, out entry); + return GetZipEntry(key, entry, quality, entry, ".ico", out lastModifiedUtc, out _); + } // ILogoMapping.GetImage + + private ZipArchiveEntry GetZipEntry(string key, string entry, string requestedQuality, string zipFile, string extension, out DateTime lastModifiedUtc, out string quality) + { + lastModifiedUtc = DateTime.MinValue; + quality = null; + + if (!_collections.TryGetValue(key, out var collection)) return null; + + var zip = BaseLogo.GetZipArchive(collection.ArchivePath); + lastModifiedUtc = collection.GetLastModifiedUtc(); + + while (requestedQuality != null) + { + var entryName = $@"{key}{Path.DirectorySeparatorChar}{entry}{Path.DirectorySeparatorChar}{requestedQuality}{Path.DirectorySeparatorChar}{zipFile}{extension}"; + var zipEntry = BaseLogo.GetZipEntry(zip, entryName); + if (zipEntry != null) + { + quality = requestedQuality; + return zipEntry; + } // if + + requestedQuality = (requestedQuality == ServiceLogo.QualityDefault) ? null : ServiceLogo.QualityDefault; + } // while + + return null; + } // GetZipEntry + + private static string GetQuality(string entry, out string resultEntry) + { + int pos; + + if ((pos = entry.IndexOf(':')) >= 0) + { + resultEntry = entry.Substring(pos + 1); + return entry.Substring(0, pos); + } // if + + resultEntry = entry; + return ServiceLogo.QualityDefault; + } // GetQuality + + #endregion + } // class ServiceLogoMappings +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..b90dc54a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UI Services: Configuration")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Configuration")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3d30baba-6d2c-4b86-89f6-fdb6d01624b3")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/InvariantTexts.Designer.cs new file mode 100644 index 00000000..e450cdfb --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/InvariantTexts.Designer.cs @@ -0,0 +1,256 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Configuration.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class InvariantTexts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal InvariantTexts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to DVB-IPTV. + /// + internal static string DefaultDomainNameProviderLogo { + get { + return ResourceManager.GetString("DefaultDomainNameProviderLogo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IPTV. + /// + internal static string DefaultDomainNameServiceLogo { + get { + return ResourceManager.GetString("DefaultDomainNameServiceLogo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to domain-mappings.xml. + /// + internal static string FileLogoDomainMappings { + get { + return ResourceManager.GetString("FileLogoDomainMappings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to provider-mappings.xml. + /// + internal static string FileLogoProviderMappings { + get { + return ResourceManager.GetString("FileLogoProviderMappings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to service-mappings.xml. + /// + internal static string FileLogoServiceMappings { + get { + return ResourceManager.GetString("FileLogoServiceMappings", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to cache. + /// + internal static string FolderCache { + get { + return ResourceManager.GetString("FolderCache", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to logos. + /// + internal static string FolderLogosCache { + get { + return ResourceManager.GetString("FolderLogosCache", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to providers. + /// + internal static string FolderLogosProviders { + get { + return ResourceManager.GetString("FolderLogosProviders", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to logos. + /// + internal static string FolderLogosRoot { + get { + return ResourceManager.GetString("FolderLogosRoot", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to services. + /// + internal static string FolderLogosServices { + get { + return ResourceManager.GetString("FolderLogosServices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to modules. + /// + internal static string FolderModules { + get { + return ResourceManager.GetString("FolderModules", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to record-tasks. + /// + internal static string FolderRecordTasks { + get { + return ResourceManager.GetString("FolderRecordTasks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}::{1}. + /// + internal static string FormatServiceLogoKey { + get { + return ResourceManager.GetString("FormatServiceLogoKey", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IpTvRecorderLauncher.exe. + /// + internal static string RecorderLauncher { + get { + return ResourceManager.GetString("RecorderLauncher", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Software\AlphaCentaury.org\IPTViewr\movistar+\v{0}. + /// + internal static string RegistryKey_Root { + get { + return ResourceManager.GetString("RegistryKey_Root", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to FirstTimeConfig. + /// + internal static string RegistryValue_FirstTimeConfig { + get { + return ResourceManager.GetString("RegistryValue_FirstTimeConfig", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Folder.Base. + /// + internal static string RegistryValue_Folder_Base { + get { + return ResourceManager.GetString("RegistryValue_Folder_Base", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Folder.Install. + /// + internal static string RegistryValue_Folder_Install { + get { + return ResourceManager.GetString("RegistryValue_Folder_Install", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Installed. + /// + internal static string RegistryValue_Installed { + get { + return ResourceManager.GetString("RegistryValue_Installed", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <any>. + /// + internal static string ServiceNameAny { + get { + return ResourceManager.GetString("ServiceNameAny", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/InvariantTexts.resx similarity index 93% rename from 1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/InvariantTexts.resx index f3cac378..a7071cee 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/InvariantTexts.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - DBV-IPTV + DVB-IPTV IPTV @@ -133,19 +133,22 @@ service-mappings.xml - Cache + cache - Providers + providers - Logos + logos + + + logos - Services + services - RecordTasks + record-tasks {0}::{1} @@ -154,10 +157,7 @@ IpTvRecorderLauncher.exe - Software\movistartv.codeplex.com\IPTViewr\movistar+\v1.5.1010.0 - - - Analytics.ClientId + Software\AlphaCentaury.org\IPTViewr\movistar+\v{0} Folder.Base @@ -171,4 +171,10 @@ <any> + + modules + + + FirstTimeConfig + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Resources.Designer.cs new file mode 100644 index 00000000..707a9ada --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Resources.Designer.cs @@ -0,0 +1,256 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Configuration.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_AddVariable_16 { + get { + object obj = ResourceManager.GetObject("Action_AddVariable_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_128 { + get { + object obj = ResourceManager.GetObject("BrokenFile_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_16 { + get { + object obj = ResourceManager.GetObject("BrokenFile_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_256 { + get { + object obj = ResourceManager.GetObject("BrokenFile_256", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_32 { + get { + object obj = ResourceManager.GetObject("BrokenFile_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_48 { + get { + object obj = ResourceManager.GetObject("BrokenFile_48", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_64 { + get { + object obj = ResourceManager.GetObject("BrokenFile_64", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BrokenFile_96 { + get { + object obj = ResourceManager.GetObject("BrokenFile_96", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Flag_Blue_256x { + get { + object obj = ResourceManager.GetObject("Flag_Blue_256x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Flag_Downloading_256x { + get { + object obj = ResourceManager.GetObject("Flag_Downloading_256x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Flag_Green_256x { + get { + object obj = ResourceManager.GetObject("Flag_Green_256x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Flag_Red_256x { + get { + object obj = ResourceManager.GetObject("Flag_Red_256x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Flag_Yellow_256x { + get { + object obj = ResourceManager.GetObject("Flag_Yellow_256x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon GenericFile { + get { + object obj = ResourceManager.GetObject("GenericFile", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap NetworkSettings_32 { + get { + object obj = ResourceManager.GetObject("NetworkSettings_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon NotFound { + get { + object obj = ResourceManager.GetObject("NotFound", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon PlayerNotFound { + get { + object obj = ResourceManager.GetObject("PlayerNotFound", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TvPlayersSettings_32 { + get { + object obj = ResourceManager.GetObject("TvPlayersSettings_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Resources.resx new file mode 100644 index 00000000..b95c4348 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Resources.resx @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Action_AddVariable_16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\brokenfile_128.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BrokenFile_16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\brokenfile_256.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BrokenFile_32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BrokenFile_48.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BrokenFile_64.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BrokenFile_96.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\flag_blue_256x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\flag_downloading_256x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\flag_green_256x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\flag_red_256x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\flag_yellow_256x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\GenericFile.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\networksettings_32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\notfound.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\PlayerNotFound.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\tvplayerssettings_32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/SettingsTexts.Designer.cs similarity index 93% rename from 1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/SettingsTexts.Designer.cs index 11628062..2b9d1cd7 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/SettingsTexts.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Configuration.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.Configuration.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class SettingsTexts { diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/SettingsTexts.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/SettingsTexts.es.resx index e27502ec..482f7fa0 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/SettingsTexts.es.resx @@ -1,171 +1,171 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Algunos de los cambios que ha hecho requieren que reinicie la aplicación para que se hagan efectivos. - - - Configuración de red - - - Red - - - El proxy de multidifusión no puede estar en blanco. - - - protocol|Nombre del protocolo en minúsculas (rpt o udp) -protocolU|Nombre del protocolo en mayúsculas (RTP o UDP) -multicastAddress|Dirección IP de multidifusión del canal de TV -multicastPort|Puerto de multidifusión del canal de TV - Keep each parameter in a separate line. Never translate text before '|' - - - Ajustes de red - - - Editar el parámetro - - - Añadir un nuevo parámetro - - - ¡La lista de argumentos para ejecutar el reproductor de TV está vacía! -¿Desea continuar? - - - ¿Desea eliminar el reproductor '{0}'? - - - Confirmación de eliminación - - - Channel.Url|URL de ubicación del canal IPTV -Channel.Name|Nombre del canal -Channel.Description|Descripción del canal -Channel.Icon.Path|Ruta al archivo .ico del logo del canal - Keep each parameter in a separate line. Never translate text before '|' - - - Configuración de reproductores de TV - - - Reproductores - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Algunos de los cambios que ha hecho requieren que reinicie la aplicación para que se hagan efectivos. + + + Configuración de red + + + Red + + + El proxy de multidifusión no puede estar en blanco. + + + protocol|Nombre del protocolo en minúsculas (rpt o udp) +protocolU|Nombre del protocolo en mayúsculas (RTP o UDP) +multicastAddress|Dirección IP de multidifusión del canal de TV +multicastPort|Puerto de multidifusión del canal de TV + Keep each parameter in a separate line. Never translate text before '|' + + + Ajustes de red + + + Editar el parámetro + + + Añadir un nuevo parámetro + + + ¡La lista de argumentos para ejecutar el reproductor de TV está vacía! +¿Desea continuar? + + + ¿Desea eliminar el reproductor '{0}'? + + + Confirmación de eliminación + + + Channel.Url|URL de ubicación del canal IPTV +Channel.Name|Nombre del canal +Channel.Description|Descripción del canal +Channel.Icon.Path|Ruta al archivo .ico del logo del canal + Keep each parameter in a separate line. Never translate text before '|' + + + Configuración de reproductores de TV + + + Reproductores + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/SettingsTexts.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/SettingsTexts.resx index ca566595..b8c0b5f3 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/SettingsTexts.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/SettingsTexts.resx @@ -1,171 +1,171 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Some of the changes you have made require you to restart the application before they can take effect. - - - Network settings - - - Network - - - The multicast proxy can not be blank. - - - protocol|Name of the procotol, in lowercase (rpt or udp) -protocolU|Name of the protocol, in uppercase (RTP or UDP) -multicastAddress|Multicast IP address of TV channel -multicastPort|Multicast port of TV channel - Keep each parameter in a separate line. Never translate text before '|' - - - Network settings - - - Edit parameter - - - Add a new parameter - - - The list of arguments for executing the TV player is empty! -Do you wish to continue? - - - Do you want to remove the player '{0}'? - - - Delete conformation - - - Channel.Url|IPTV channel URL -Channel.Name|Name of the channel -Channel.Description|Description of the channel -Channel.Icon.Path|Path to channel logo .ico file - Keep each parameter in a separate line. Never translate text before '|' - - - TV players settings - - - TV players - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Some of the changes you have made require you to restart the application before they can take effect. + + + Network settings + + + Network + + + The multicast proxy can not be blank. + + + protocol|Name of the procotol, in lowercase (rpt or udp) +protocolU|Name of the protocol, in uppercase (RTP or UDP) +multicastAddress|Multicast IP address of TV channel +multicastPort|Multicast port of TV channel + Keep each parameter in a separate line. Never translate text before '|' + + + Network settings + + + Edit parameter + + + Add a new parameter + + + The list of arguments for executing the TV player is empty! +Do you wish to continue? + + + Do you want to remove the player '{0}'? + + + Delete conformation + + + Channel.Url|IPTV channel URL +Channel.Name|Name of the channel +Channel.Description|Description of the channel +Channel.Icon.Path|Path to channel logo .ico file + Keep each parameter in a separate line. Never translate text before '|' + + + TV players settings + + + TV players + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Texts.Designer.cs new file mode 100644 index 00000000..10277a89 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Texts.Designer.cs @@ -0,0 +1,742 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.UiServices.Configuration.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Execute the 'First-time Configuration Wizard' to configure the application.. + /// + internal static string AppConfigFirstTimeConfigNotExecuted { + get { + return ResourceManager.GetString("AppConfigFirstTimeConfigNotExecuted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The application is not properly configured.. + /// + internal static string AppConfigFirstTimeConfigNotExecutedCaption { + get { + return ResourceManager.GetString("AppConfigFirstTimeConfigNotExecutedCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Application not correctly installed. + /// + internal static string AppConfigRegistryCaption { + get { + return ResourceManager.GetString("AppConfigRegistryCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to find or open 'HKCU\{0}'.. + /// + internal static string AppConfigRegistryMissingKey { + get { + return ResourceManager.GetString("AppConfigRegistryMissingKey", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The value '{1}' is missing under 'HKCU\{0}'.. + /// + internal static string AppConfigRegistryMissingValue { + get { + return ResourceManager.GetString("AppConfigRegistryMissingValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to There is a problem accessing the application configuration from the Windows Registry: + ///{0} + /// + ///Please install the application using the official installer or repair the installation.. + /// + internal static string AppConfigRegistryText { + get { + return ResourceManager.GetString("AppConfigRegistryText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to find the 'base' folder at '{0}'.. + /// + internal static string AppConfigValidationBasePath { + get { + return ResourceManager.GetString("AppConfigValidationBasePath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to locate the 'logos' folder at '{0}'.. + /// + internal static string AppConfigValidationLogosPath { + get { + return ResourceManager.GetString("AppConfigValidationLogosPath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OK. + /// + internal static string ButtonOk { + get { + return ResourceManager.GetString("ButtonOk", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to SD TV. + /// + internal static string DvbServiceTypeDescription_01 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_01", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Radio (MPEG-1). + /// + internal static string DvbServiceTypeDescription_02 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_02", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Teletext. + /// + internal static string DvbServiceTypeDescription_03 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_03", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mosaic. + /// + internal static string DvbServiceTypeDescription_06 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_06", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Radio (HD). + /// + internal static string DvbServiceTypeDescription_10 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_10", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mosaic (HD). + /// + internal static string DvbServiceTypeDescription_11 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_11", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data. + /// + internal static string DvbServiceTypeDescription_12 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_12", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to DVB MHP. + /// + internal static string DvbServiceTypeDescription_16 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_16", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to HD TV (MPEG-2). + /// + internal static string DvbServiceTypeDescription_17 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_17", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to SD TV (AVC). + /// + internal static string DvbServiceTypeDescription_22 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_22", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to HD TV. + /// + internal static string DvbServiceTypeDescription_25 { + get { + return ResourceManager.GetString("DvbServiceTypeDescription_25", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/services/domain-mappings.xml'. + /// + internal static string ExceptionLogosDomainMappingsDuplicatedDomain { + get { + return ResourceManager.GetString("ExceptionLogosDomainMappingsDuplicatedDomain", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/providers/provider-mappings.xml'. + /// + internal static string ExceptionLogosProviderMappingsDuplicatedDomain { + get { + return ResourceManager.GetString("ExceptionLogosProviderMappingsDuplicatedDomain", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load service logo file\r\n{0}. + /// + internal static string ExceptionLogosServiceImageLoadError { + get { + return ResourceManager.GetString("ExceptionLogosServiceImageLoadError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Service logo file not found. + /// + internal static string ExceptionLogosServiceImageNotFound { + get { + return ResourceManager.GetString("ExceptionLogosServiceImageNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/services/service-mappings.xml'. + /// + internal static string ExceptionLogosServiceMappingsDuplicatedDomain { + get { + return ResourceManager.GetString("ExceptionLogosServiceMappingsDuplicatedDomain", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated service name '{0}' in 'logos/services/service-mappings.xml' for domain '{1}'. + /// + internal static string ExceptionLogosServiceMappingsDuplicatedService { + get { + return ResourceManager.GetString("ExceptionLogosServiceMappingsDuplicatedService", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load the application modules, probably due to the absence of one of them. Please reinstall the application.. + /// + internal static string LoadCompositionException { + get { + return ResourceManager.GetString("LoadCompositionException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Missing application modules. + /// + internal static string LoadCompositionExceptionCaption { + get { + return ResourceManager.GetString("LoadCompositionExceptionCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The user configuration file '{0}' is invalid or has severe errors. + ///{1} + /// + ///Please verify the XML syntax of the file and correct the detected errors.. + /// + internal static string LoadConfigUserConfigValidation { + get { + return ResourceManager.GetString("LoadConfigUserConfigValidation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to See exception details (below) for detailed error information.. + /// + internal static string LoadConfigUserConfigValidationException { + get { + return ResourceManager.GetString("LoadConfigUserConfigValidationException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Application configuration verification failure. + /// + internal static string LoadConfigValidationCaption { + get { + return ResourceManager.GetString("LoadConfigValidationCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load the content provider data. + /// + internal static string LoadContentProviderDataExceptionCaption { + get { + return ResourceManager.GetString("LoadContentProviderDataExceptionCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The content provider information file '{0}' is invalid or has severe errors. + ///{1} + /// + ///Please verify the XML syntax of the file and correct the detected errors.. + /// + internal static string LoadContentProviderDataValidation { + get { + return ResourceManager.GetString("LoadContentProviderDataValidation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Content provider data verification failure. + /// + internal static string LoadContentProviderDataValidationCaption { + get { + return ResourceManager.GetString("LoadContentProviderDataValidationCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to See exception details (below) for detailed error information.. + /// + internal static string LoadContentProviderDataValidationException { + get { + return ResourceManager.GetString("LoadContentProviderDataValidationException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load application modules. + /// + internal static string LoadMefCaption { + get { + return ResourceManager.GetString("LoadMefCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unexpected error during load operation. See exception details (below) for detailed error information.. + /// + internal static string LoadMefException { + get { + return ResourceManager.GetString("LoadMefException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading content provider data.... + /// + internal static string LoadProgress_ContentProvider { + get { + return ResourceManager.GetString("LoadProgress_ContentProvider", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading application modules.... + /// + internal static string LoadProgress_Mef { + get { + return ResourceManager.GetString("LoadProgress_Mef", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading application configuration.... + /// + internal static string LoadProgress_Start { + get { + return ResourceManager.GetString("LoadProgress_Start", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading user configuration and preferences.... + /// + internal static string LoadProgress_UserConfig { + get { + return ResourceManager.GetString("LoadProgress_UserConfig", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to load the user configuration. + /// + internal static string LoadUserConfigExceptionCaption { + get { + return ResourceManager.GetString("LoadUserConfigExceptionCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to User configuration verification failure. + /// + internal static string LoadUserConfigValidationCaption { + get { + return ResourceManager.GetString("LoadUserConfigValidationCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Larger. + /// + internal static string LogoSize128 { + get { + return ResourceManager.GetString("LogoSize128", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Huge. + /// + internal static string LogoSize256 { + get { + return ResourceManager.GetString("LogoSize256", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Small. + /// + internal static string LogoSize32 { + get { + return ResourceManager.GetString("LogoSize32", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Regular. + /// + internal static string LogoSize48 { + get { + return ResourceManager.GetString("LogoSize48", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Medium. + /// + internal static string LogoSize64 { + get { + return ResourceManager.GetString("LogoSize64", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Large. + /// + internal static string LogoSize96 { + get { + return ResourceManager.GetString("LogoSize96", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} ({1}x{2}). + /// + internal static string LogoSizeWithSizeFormat { + get { + return ResourceManager.GetString("LogoSizeWithSizeFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to '{0}' TV player can not be found at '{1}'.. + /// + internal static string PlayerConfigValidationPathNotFound { + get { + return ResourceManager.GetString("PlayerConfigValidationPathNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Check for updates. + /// + internal static string PushCheckForUpdates { + get { + return ResourceManager.GetString("PushCheckForUpdates", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Checking for updates.... + /// + internal static string PushCheckingForUpdates { + get { + return ResourceManager.GetString("PushCheckingForUpdates", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do not show this message again. + /// + internal static string PushDoNotShowAgain { + get { + return ResourceManager.GetString("PushDoNotShowAgain", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Click the link below to download update:. + /// + internal static string PushDownloadLink { + get { + return ResourceManager.GetString("PushDownloadLink", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to A new version is available. + /// + internal static string PushNewUpdate { + get { + return ResourceManager.GetString("PushNewUpdate", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No new versions are available. + /// + internal static string PushNoUpdates { + get { + return ResourceManager.GetString("PushNoUpdates", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Released on {0:yyyy/MM/dd}. + /// + internal static string PushReleasedOnFormat { + get { + return ResourceManager.GetString("PushReleasedOnFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Update server connection error. + /// + internal static string PushUpdateError { + get { + return ResourceManager.GetString("PushUpdateError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Version {0}. + /// + internal static string PushVersionFormat { + get { + return ResourceManager.GetString("PushVersionFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} recorder can not be found at '{1}'. + /// + internal static string RecorderConfigValidationPathNotFound { + get { + return ResourceManager.GetString("RecorderConfigValidationPathNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The <{1}> path value '{0}' has to be either an absolute volume path (like 'C:\folder') or an UNC (like '\\server\share').. + /// + internal static string RecordSaveLocationValidationAbsolutePath { + get { + return ResourceManager.GetString("RecordSaveLocationValidationAbsolutePath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The <{1}> Task Scheduler folder value '{0}' must start with '\' and must not end with '\'. + /// + internal static string RecordTaskSchedulerFolderValidationPath { + get { + return ResourceManager.GetString("RecordTaskSchedulerFolderValidationPath", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to At least one <{0}> tag has to be specified at <{1}> tag.. + /// + internal static string UserConfigValidationAtLeastOne { + get { + return ResourceManager.GetString("UserConfigValidationAtLeastOne", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Duplicated <{1}> item in <{0}> list. '{2}' value is '{3}'. + /// + internal static string UserConfigValidationDuplicatedEntry { + get { + return ResourceManager.GetString("UserConfigValidationDuplicatedEntry", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IP address. + /// + internal static string UserConfigValidationIpAddress { + get { + return ResourceManager.GetString("UserConfigValidationIpAddress", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IP port number. + /// + internal static string UserConfigValidationIpPort { + get { + return ResourceManager.GetString("UserConfigValidationIpPort", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <{0}> tag is missing or empty.. + /// + internal static string UserConfigValidationMissingEmpty { + get { + return ResourceManager.GetString("UserConfigValidationMissingEmpty", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Attribute '{0}' is missing or empty at <{1}> tag.. + /// + internal static string UserConfigValidationMissingEmptyAttribute { + get { + return ResourceManager.GetString("UserConfigValidationMissingEmptyAttribute", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <{0}> tag is missing or empty under <{1}> tag.. + /// + internal static string UserConfigValidationMissingEmptyOwner { + get { + return ResourceManager.GetString("UserConfigValidationMissingEmptyOwner", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <{0}> tag is missing or empty under <{1}> tag. Value of '{2}' is '{3}'.. + /// + internal static string UserConfigValidationMissingEmptyValue { + get { + return ResourceManager.GetString("UserConfigValidationMissingEmptyValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <{0}> tag is missing under <{1}> tag.. + /// + internal static string UserConfigValidationMissingTag { + get { + return ResourceManager.GetString("UserConfigValidationMissingTag", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Value '{2}' specified at <{0}> tag is not a valid {1}.. + /// + internal static string UserConfigValidationValueType { + get { + return ResourceManager.GetString("UserConfigValidationValueType", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Texts.es.resx new file mode 100644 index 00000000..c04d012a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Texts.es.resx @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + No se puede encontrar la carpeta 'base' en '{0}'. + + + No se puede encontrar la carpeta de 'logotipos' en '{0}'. + + + El nombre de dominio (domain name) '{0}' está duplicado en 'logos/services/domain-mappings.xml' + + + El nombre de dominio (domain name) '{0}' está duplicado en 'logos/providers/provider-mappings.xml' + + + Imposible cargar el archivo con el logo del servicio +{0} + + + El archivo con el logo del servicio no existe + + + El nombre de dominio (domain name) '{0}' está duplicado en 'logos/services/service-mappings.xml' + + + El nombre de servicio (service name) '{0}' está duplicado en 'logos/services/service-mappings.xml' en el dominio '{1}' + + + El archivo de configuración de usuario '{0}' no es válido o contiene errores graves. +{1} + +Verifique la sintáxis XML del archivo y solucione los errores detectados. + + + Consulte los detalles de la excepción (más abajo) para obtener información detallada del problema. + + + Error al validar la configuración de la aplicación + + + Imposible cargar la configuración de usuario + + + Error al validar la configuración y las preferencias de usuario + + + No se ha localizado el reproductor de TV '{0}' en '{1}'. + + + No se ha localizado el grabador externo '{0}' en '{1}'. + + + El valor '{0}' no es válido como ruta en la etiqueta <{1}>. Tiene que ser una ruta absoluta con letra de volumen (como 'C:\Carpeta') o una ubicación de red en formato 'UNC' (como '\\servidor\compartido'). + + + El valor '{0}' en la etiqueta <{1}> no es un nombre de carpeta válido para el Programador de Tareas. Debe comenzar forzosamente por '\' y no puede terminar en '\'. + + + Debe especificarse al menos una etiqueta <{0}> bajo la etiqueta <{1}>. + + + Elemento <{1}> duplicado en la lista <{0}>. El valor de '{2}' es '{3}' + + + dirección IP + + + número de puerto IP + + + La etiqueta <{0}> no existe o está vacía. + + + El attribute '{0}' falta o está vacío en la etiqueta <{1}>. + + + La etiqueta <{0}> no existe o está vacía bajo la etiqueta <{1}> tag. + + + La etiquete <{0}> no existe o está vacía bajo la etiqueta<{1}>. EL valor de '{2}' es '{3}'. + + + Falta una etiqueta <{0}> bajo la etiqueta <{1}>. + + + El valor '{2}' especificado en la etiqueta <{0}> no es un/una {1} válido. + + + Imposible cargar la información del proveedor de contenidos + + + El archivo de datos del proveedor de contenidos '{0}' no es válido o contiene errores graves. +{1} +Verifique la sintáxis XML del archivo y corrija los errores detectados. + + + Error al validar la información del proveedor de contenidos + + + Consulte los detalles de la excepción (más abajo) para obtener información detallada del problema. + + + La aplicación no está instalada correctamente + + + No se puede localizar o abrir 'HKCU\{0}'. + + + El valor '{1}' no existe bajo la clave 'HKCU\{0}'. + + + Se ha producido un error al acceder a la configuración de la aplicación en el Registro de Windows: +{0} + +Por favor, instale la aplicación utilizando el instalador oficial o repare la instalación. + + + Más grande + + + Enorme + + + Pequeño + + + Normal + + + Medio + + + Grande + + + {0} ({1}x{2}) + + + Leyendo la información del proveedor de contenidos... + + + Cargando la configuración de la aplicación... + + + Leyendo la configuración de usuario y preferencias... + + + TV SD + + + Radio (MPEG-1) + + + Teletexto + + + Mosaico + + + Radio HD + + + Mosaico HD + + + Datos + + + DVB MHP + + + TV HD (MPEG-2) + + + TV SD (AAC) + + + TV HD + + + No se han podido cargar los módulos de la aplicación, seguramente por la ausencia de uno de ellos. Por favor, reinstale la aplicacion. + + + Faltan módulos de la aplicación + + + Imposible cargar los módulos de la aplicación + + + Se ha producido un error inesperado al cargar los módulos de aplicación. +Consulte los detalles de la excepción (más abajo) para obtener información detallada del problema. + + + Cargando módulos de la aplicación... + + + Ejecute el 'Asistente de configuración inicial' para configurar la aplicación. + + + La aplicación no está debidamente configurada. + + + Buscar actualizaciones + + + Buscando actualizaciones... + + + No mostrar este mensaje de nuevo + + + Pulse en el enlace para descargar la actualización: + + + Una nueva versión está disponible + + + No hay actualizaciones disponibles + + + Fecha de la actualizacion: {0:yyyy/MM/dd} + + + Error de conexión con el servidor de actualizaciones + + + Versión {0} + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Texts.resx new file mode 100644 index 00000000..be678c9f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Properties/Texts.resx @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Unable to find the 'base' folder at '{0}'. + + + Unable to locate the 'logos' folder at '{0}'. + + + Duplicated domain name '{0}' in 'logos/services/domain-mappings.xml' + + + Duplicated domain name '{0}' in 'logos/providers/provider-mappings.xml' + + + Unable to load service logo file\r\n{0} + + + Service logo file not found + + + Duplicated domain name '{0}' in 'logos/services/service-mappings.xml' + + + Duplicated service name '{0}' in 'logos/services/service-mappings.xml' for domain '{1}' + + + The user configuration file '{0}' is invalid or has severe errors. +{1} + +Please verify the XML syntax of the file and correct the detected errors. + + + See exception details (below) for detailed error information. + + + Application configuration verification failure + + + Unable to load the user configuration + + + User configuration verification failure + + + '{0}' TV player can not be found at '{1}'. + + + {0} recorder can not be found at '{1}' + + + The <{1}> path value '{0}' has to be either an absolute volume path (like 'C:\folder') or an UNC (like '\\server\share'). + + + The <{1}> Task Scheduler folder value '{0}' must start with '\' and must not end with '\' + + + At least one <{0}> tag has to be specified at <{1}> tag. + + + Duplicated <{1}> item in <{0}> list. '{2}' value is '{3}' + + + IP address + + + IP port number + + + <{0}> tag is missing or empty. + + + Attribute '{0}' is missing or empty at <{1}> tag. + + + <{0}> tag is missing or empty under <{1}> tag. + + + <{0}> tag is missing or empty under <{1}> tag. Value of '{2}' is '{3}'. + + + <{0}> tag is missing under <{1}> tag. + + + Value '{2}' specified at <{0}> tag is not a valid {1}. + + + Unable to load the content provider data + + + The content provider information file '{0}' is invalid or has severe errors. +{1} + +Please verify the XML syntax of the file and correct the detected errors. + + + Content provider data verification failure + + + See exception details (below) for detailed error information. + + + Application not correctly installed + + + Unable to find or open 'HKCU\{0}'. + + + The value '{1}' is missing under 'HKCU\{0}'. + + + There is a problem accessing the application configuration from the Windows Registry: +{0} + +Please install the application using the official installer or repair the installation. + + + Larger + + + Huge + + + Small + + + Regular + + + Medium + + + Large + + + {0} ({1}x{2}) + + + Loading content provider data... + + + Loading application configuration... + + + Loading user configuration and preferences... + + + SD TV + + + Radio (MPEG-1) + + + Teletext + + + Mosaic + + + Radio (HD) + + + Mosaic (HD) + + + Data + + + DVB MHP + + + HD TV (MPEG-2) + + + SD TV (AVC) + + + HD TV + + + Unable to load the application modules, probably due to the absence of one of them. Please reinstall the application. + + + Missing application modules + + + Unable to load application modules + + + Unexpected error during load operation. See exception details (below) for detailed error information. + + + Loading application modules... + + + OK + + + Check for updates + + + Checking for updates... + + + Do not show this message again + + + Click the link below to download update: + + + A new version is available + + + No new versions are available + + + Released on {0:yyyy/MM/dd} + + + Update server connection error + + + Version {0} + + + Execute the 'First-time Configuration Wizard' to configure the application. + + + The application is not properly configured. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/IPushContext.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/IPushContext.cs new file mode 100644 index 00000000..a4d6e12f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/IPushContext.cs @@ -0,0 +1,24 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.Configuration.Push +{ + public interface IPushContext + { + bool IsHidden(Guid message); + + void AddHidden(Guid message); + } // interface IPushContext +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/IPushUpdateContext.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/IPushUpdateContext.cs new file mode 100644 index 00000000..3622b72f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/IPushUpdateContext.cs @@ -0,0 +1,24 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.Configuration.Push +{ + public interface IPushUpdateContext: IPushContext + { + Version GetAppVersion(); + + DateTime LastChecked { get; set; } + } // interface IPushUpdateContext +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/PushManager.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/PushManager.cs new file mode 100644 index 00000000..fab58174 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/PushManager.cs @@ -0,0 +1,184 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Serialization; +using IpTviewr.UiServices.Configuration.Push.UI; +using IpTviewr.UiServices.Configuration.Push.v1; +using System; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using IpTviewr.UiServices.Common.Forms; + +namespace IpTviewr.UiServices.Configuration.Push +{ + public static class PushManager + { + public const string BaseUrl = "https://raw.githubusercontent.com/wiki/AlphaCentaury/MovistarTV/push/"; + public const string BaseUrlAlt = "https://movistartv.alphacentaury.org/push/"; + + public const string UpdateFile = "update.v1.xml"; + public const string NewsFile = "news.v1.xml"; + + public static async Task CheckForUpdatesAsync(IPushUpdateContext context) + { + if (context == null) throw new ArgumentNullException(nameof(context)); + + var result = new PushUpdateResult + { + Context = context + }; + + var updateData = await Deserialize(UpdateFile); + result.Updates = updateData; + if (updateData == null) return result; + + var update = GetLatest(updateData, context); + result.LastUpdate = update; + context.LastChecked = DateTime.UtcNow; + + return result; + } // CheckForUpdatesUnattendedAsync + + public static async Task CheckForUpdatesUiAsync(Form owner, IPushUpdateContext context, TimeSpan checkEvery) + { + var elapsed = DateTime.UtcNow - context.LastChecked; + if (elapsed < checkEvery) return null; + + var result = await CheckForUpdatesAsync(context); + if (result.LastUpdate != null) + { + CommonBaseForm.BeginInvoke(owner, DisplayUpdate, owner, result); + } // if + + return result; + } // CheckForUpdatesUiAsync + + public static void CheckForUpdates(Form owner, IPushUpdateContext context) + { + if (owner == null) throw new ArgumentNullException(nameof(owner)); + if (context == null) throw new ArgumentNullException(nameof(context)); + + using var form = new UpdatesForm + { + UpdateContext = context + }; + + if (form.ShowDialog(owner) != DialogResult.OK) return; + if (form.DoNotShowAgain) context.AddHidden(form.UpdateData.Id); + } // CheckForUpdates + + public static void DisplayUpdate(Form owner, PushUpdateResult result) + { + if (owner == null) throw new ArgumentNullException(nameof(owner)); + if (result == null) throw new ArgumentNullException(nameof(result)); + if (result.LastUpdate == null) return; + + using var form = new UpdatesForm + { + UpdateContext = result.Context, + UpdateData = result.LastUpdate + }; + + if (form.ShowDialog(owner) != DialogResult.OK) return; + if (form.DoNotShowAgain) result.Context.AddHidden(result.LastUpdate.Id); + } // DisplayUpdate + + public static PushUpdate GetLatest(PushUpdates data, IPushUpdateContext context) + { + if ((data == null) || !data.UpdatesSpecified) return null; + + var appVersion = context.GetAppVersion(); + foreach (var update in data.Updates) + { + if (!Version.TryParse(update.Version, out var version)) continue; + + // we assume the latest version is ALWAYS at the top of the list + // meaning: the list MUST be sorted by descending version + + if (version <= appVersion) break; + if (!context.IsHidden(update.Id)) return update; + } // foreach + + return null; + } // GetLatest + + private static async Task Deserialize(string file) where T : class + { + HttpClient client = null; + T data = null; + + var tries = 1; + var main = true; + var alt = true; + + while (true) + { + // first-try + try + { + client = new HttpClient(); + if (main) + { + (data, main) = await Deserialize(client, BaseUrl + file); + } // if + + if ((data == null) && alt) + { + (data, alt) = await Deserialize(client, BaseUrlAlt + file); + } // if + + if ((data != null) || (tries >= 3) || (!main && !alt)) break; + } + catch + { + break; + } // try-catch + + tries++; + Thread.Sleep(1000); + } // while + + client?.Dispose(); + return data; + } // Deserialize + + private static async Task<(T data, bool canBeRetried)> Deserialize(HttpClient client, string url) where T : class + { + try + { + var uriBuilder = new UriBuilder(url) { Query = $"cache={DateTime.UtcNow.Ticks:D}" }; + var response = await client.GetAsync(uriBuilder.Uri); + + if (response.StatusCode == HttpStatusCode.NotFound) return (null, false); + if (!response.IsSuccessStatusCode) return (null, true); + + var stream = await response.Content.ReadAsStreamAsync(); + var data = await Task.Run(() => XmlSerialization.Deserialize(stream)); + + return (data, true); + } + catch (HttpRequestException) + { + // Error may be a transient condition + return (null, true); + } + catch + { + return (null, false); + } // catch + } // Deserialize + } // PushManager +} // class PushManager diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/PushUpdateResult.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/PushUpdateResult.cs new file mode 100644 index 00000000..892e750a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/PushUpdateResult.cs @@ -0,0 +1,26 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Push.v1; + +namespace IpTviewr.UiServices.Configuration.Push +{ + public sealed class PushUpdateResult + { + public IPushUpdateContext Context { get; set; } + + public PushUpdates Updates { get; set; } + + public PushUpdate LastUpdate { get; set; } + } // class PushUpdateResult +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.Designer.cs new file mode 100644 index 00000000..5d0aaf13 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.Designer.cs @@ -0,0 +1,142 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration.Push.UI +{ + partial class PushWarningForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PushWarningForm)); + this.labelCaption = new System.Windows.Forms.Label(); + this.imageListButtonIcons = new System.Windows.Forms.ImageList(this.components); + this.textBoxDetails = new System.Windows.Forms.TextBox(); + this.labelTitle = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonDetails = new System.Windows.Forms.Button(); + this.pictureBoxEx1 = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.checkBoxRead = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEx1)).BeginInit(); + this.SuspendLayout(); + // + // labelCaption + // + resources.ApplyResources(this.labelCaption, "labelCaption"); + this.labelCaption.Name = "labelCaption"; + // + // imageListButtonIcons + // + this.imageListButtonIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListButtonIcons.ImageStream"))); + this.imageListButtonIcons.TransparentColor = System.Drawing.Color.Transparent; + this.imageListButtonIcons.Images.SetKeyName(0, "Action_Hyperlink_16x16.png"); + this.imageListButtonIcons.Images.SetKeyName(1, "Action_Ok_16x16.png"); + // + // textBoxDetails + // + resources.ApplyResources(this.textBoxDetails, "textBoxDetails"); + this.textBoxDetails.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBoxDetails.Name = "textBoxDetails"; + this.textBoxDetails.ReadOnly = true; + // + // labelTitle + // + resources.ApplyResources(this.labelTitle, "labelTitle"); + this.labelTitle.Name = "labelTitle"; + // + // buttonOk + // + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.ImageList = this.imageListButtonIcons; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // buttonDetails + // + resources.ApplyResources(this.buttonDetails, "buttonDetails"); + this.buttonDetails.ImageList = this.imageListButtonIcons; + this.buttonDetails.Name = "buttonDetails"; + this.buttonDetails.UseVisualStyleBackColor = true; + this.buttonDetails.Click += new System.EventHandler(this.buttonDetails_Click); + // + // pictureBoxEx1 + // + resources.ApplyResources(this.pictureBoxEx1, "pictureBoxEx1"); + this.pictureBoxEx1.Name = "pictureBoxEx1"; + this.pictureBoxEx1.TabStop = false; + // + // checkBoxRead + // + resources.ApplyResources(this.checkBoxRead, "checkBoxRead"); + this.checkBoxRead.Name = "checkBoxRead"; + this.checkBoxRead.UseVisualStyleBackColor = true; + // + // PushWarningForm + // + this.AcceptButton = this.buttonOk; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.checkBoxRead); + this.Controls.Add(this.buttonDetails); + this.Controls.Add(this.labelTitle); + this.Controls.Add(this.textBoxDetails); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.labelCaption); + this.Controls.Add(this.pictureBoxEx1); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "PushWarningForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEx1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Common.Controls.PictureBoxEx pictureBoxEx1; + private System.Windows.Forms.Label labelCaption; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.TextBox textBoxDetails; + private System.Windows.Forms.Label labelTitle; + private System.Windows.Forms.Button buttonDetails; + private System.Windows.Forms.ImageList imageListButtonIcons; + private System.Windows.Forms.CheckBox checkBoxRead; + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.cs new file mode 100644 index 00000000..e1f7c579 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.cs @@ -0,0 +1,99 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Properties; +using System; +using System.ComponentModel; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Push.UI +{ + internal partial class PushWarningForm : Form + { + private string _detailsUrl; + private string _flagColor; + private string _markAsRead; + private string _dontShowAgain; + + public PushWarningForm() + { + InitializeComponent(); + Caption = null; + Title = null; + Details = null; + DetailsUrl = null; + FlagColor = null; + + var split = checkBoxRead.Text.Split('|'); + _markAsRead = split[0]; + _dontShowAgain = split[1]; + checkBoxRead.Text = null; + checkBoxRead.Visible = false; + } // constructor + + [DefaultValue(null)] + public string Caption + { + get => labelCaption.Text; + set => labelCaption.Text = value; + } // Caption + + [DefaultValue(null)] + public string Title + { + get => labelTitle.Text; + set => labelTitle.Text = value; + } // Title + + [DefaultValue(null)] + public string Details + { + get => textBoxDetails.Text; + set => textBoxDetails.Text = value; + } // Details + + [DefaultValue(null)] + public string DetailsUrl + { + get => _detailsUrl; + set + { + _detailsUrl = value; + buttonDetails.Visible = !string.IsNullOrEmpty(value); + } // set + } // DetailsUrl + + [DefaultValue(null)] + public string FlagColor + { + get => _flagColor; + set + { + _flagColor = value.ToLowerInvariant(); + pictureBoxEx1.Image = _flagColor switch + { + "green" => Resources.Flag_Green_256x, + "red" => Resources.Flag_Red_256x, + "yellow" => Resources.Flag_Yellow_256x, + "download" => Resources.Flag_Downloading_256x, + _ => Resources.Flag_Blue_256x, + }; + } // set + } // FlagColor + + private void buttonDetails_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.es.resx new file mode 100644 index 00000000..d97da766 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.es.resx @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABM + CQAAAk1TRnQBSQFMAgEBAgEAATABAAEwAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEgBgABEBoAAzEBTQJSAVEBoQFiAVgBUwHjAV8BWAFRAeMBUgJRAaEBMQIwAU0EAAMx + AU0CUgFRAaEBYgFYAVMB4wFfAVgBUQHjAVICUQGhATECMAFNyAADNQFVAXsBcgFrAecBzwG4AakB/wHr + AdYByAH/AeUBywG7Af8BswGVAXkB/wFkAVwBUwHnA0sBjgF7AXIBawHnAc8BuAGpAf8B6wHWAcgB/wHl + AcsBuwH/AbMBlQF5Af8BZAFcAVMB5wE1AjQBVcQAAlYBVQGyAeYB1gHLAf8BYAJdAcoBbgFhAVgB5gGP + AXkBYgH2AUcBJAEIAf8BQQEeAQMB/wFBAR4BAwH/AUEBHgEDAf8BXQFSAUoB6gFjAWABWwHWAWkBZQFg + AdQBXAFbAVoBwgG5AZwBiAH/A1UBssQAAZIBgwF3AfQE/wFZATkBIQH4AYsBSAEfAf8BtQGtAYIG/wH+ + AfcC/wHxAeYB/wH6AeMB1AH/AfMB1wHHAf8BVgJVAbEDJAE2AW4BaQFjAd8B7wHWAccB/wFkAU4BPQH0 + EAADDAEQAaMBpQGiAe8B8gH5AfAB/wHyAfkB8AH/AaMBpQGiAe8DDAEQmAADAQECAWECXQHKAfIB5gHe + Af8BnQFuAVkB/wFJATIBDAH/AVsBUwEjAf8BtgGqAYUB/wHTAbUBogH/AckBsAGYAf8B2gHAAa8B/wHL + AawBlgH/AVwBPgEuAfgBYQFYAVQB4QFdAlsBwwHLAbEBoQH/A1UBshAAA0cBgAGKAcMBeAH/ASUBRAEe + Af8BJQFEAR4B/wGKAcMBeAH/A0cBgJgAAxYBHgFsAVsBWAHeAccBqAGWAf8B7QHhAdcD/wH9Av8B9wHx + Af8B2AHEAbcB/wGdAY0BaAH/AYYBpAFRAf8BxQGuAZcB/wHtAeEB1wP/Af0C/wH3AfEB/wHYAcQBtwH/ + AXcBbQFkAecDNQFVDAADDAEQAaMBpQGiAe8BMQFeASgB/wElAUQBHgH/ASUBRAEeAf8BMQFeASgB/wGj + AaUBogHvAwwBEJQAAT0CPAFoAbsBMAEkAf8BogFeAT8B/wGTAaEBXAH/Aa0BowF3Af8BqQGdAXQB/wGT + AagBYgH/AZQBowFZAf8BxgFoAUQB/wHDAXABUAH/AcABkQFsAf8BuwGcAYMB/wG0AZEBcwH/AV0CWgHF + AzEBTRAAA0cBgAGKAcMBeAH/ASUBRAEeAf8BMQFeASgB/wExAV4BKAH/ASUBRAEeAf8BigHDAXgB/wNH + AYCUAAFZAVcBVgHCAaMBQgElAf8BrwFFASsB/wGjAVYBLAH/AWUBrAE0Af8BdwGnAUcB/wGZAZ8BUwH/ + Ab4BcgFEAf8BxgFaATgB/wHCAVIBNQH/AaIBaAErAf8BkgFpAS0B/wGqAVgBMwH/A1EBohAAAwwBEAGj + AaUBogHvATEBXgEoAf8BJQFEAR4B/wGKAcMBeAH/AYoBwwF4Af8BJQFEAR4B/wExAV4BKAH/AaMBpQGi + Ae8DDAEQkAABbAFbARUB/wGlAVoBLgH/Ab0BYgErAf8BwwFxAScB/wHIAXABKgH/AcQBbwEoAf8ByQF1 + ASwB/wHQAYgBOgH/AcwBeQFDAf8BzgFVATwB/wFMAaQBKgH/AScBrQElAf8BWwF2AR0B/wFpAVYBUQHf + EAADRwGAAfIB+QHwAf8B8gH5AfAB/wHyAfkB8AH/AaMBpQGiAe8BowGlAaIB7wExAV4BKAH/ASUBRAEe + Af8BigHDAXgB/wNHAYCQAAF4AV4BKgH8Ab4BSAEzAf8BuwFbASgB/wHFAXEBMAH/AcUBhwE+Af8B3gG1 + AU8B/wHxAcsBQAH/Ad8BrgE+Af8B1AGWAUQB/wHYAWUBQQH/AU0BzQFkAf8BFAHaAU0B/wEiAaQBGwH/ + AWkBVwFRAd8kAANHAYABigHDAXgB/wElAUQBHgH/ATEBXgEoAf8BowGlAaIB7wMMARCMAAFbAVkBWAHE + AU0BgwEKAf8BagGKASIB/wGCAakBQgH/AacBwAGXAf8B4QG8AakB/wHfAb4BVwH/AegBxAFHAf8B2gGq + AUwB/wHYAXUBRgH/AVYB0AF3Af8BLAHvAXIB/wFSAZsBMwH/A1EBoCQAAwwBEAGjAaUBogHvATEBXgEo + Af8BJQFEAR4B/wGKAcMBeAH/A0cBgIwAAzsBZAFFAZsBEwH/AU0B0AEpAf8BbgHpAXYB/wHOAf8B7QH/ + AuoB7gH/AeIB1AGoAf8B6AHTAWEB/wHfAbUBVAH/Ad0BiAFOAf8BZQHVAXgB/wEsAf8BkAH/AYMBcQEy + Af8DOAFcKAADRwGAAYoBwwF4Af8BJQFEAR4B/wExAV4BKAH/AaMBpQGiAe8DDAEQiAADCwEPAVwBWwFW + AcYBPAG6ASAB/wFKAecBYwH/AdwB/wH5Af8B4wHyAfQB/wHfAb4BmgH/Ad4BwwFaAf8B4AG5AVwB/wHT + AYsBUQH/AaMBtAFxAf8BgwGqAWQB/wFUAlIBpgMYASIoAAMMARABowGlAaIB7wHyAfkB8AH/AfIB+QHw + Af8B8gH5AfAB/wNHAYCMAAMaASUBbAFnAU8B6AFTAbsBOAH/AZsBwQGCAf8BuAHDAZcB/wG2AbsBbgH/ + Ac8BnAFHAf8B1wGrAVoB/wHLAYkBUAH/Ab0BkQFcAf8BWwJWAb4DLQFGAwQBBcwAAwEBAgMaASUCWgFY + AcABkgGdAUwB/wGCAbsBaAH/AZ0BugFzAf8BvQGUAVQB/wHPAZQBUgH/AbMBcwFNAfoBXgFfAVkB0wMx + AU4DBwEK2AADDAEQAzgBXQFTAlIBqQF5AWoBWwHlAXIBZAFbAeECUgFQAaMDNwFbAxUBHQMDAQTQAAFC + AU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AQABwAGBAv8EAAGAAQAC/wQAAYABAAL/ + BAABgAEAAfABPwYAAfABPwYAAeABHwUAAQEB4AEfBQABAwHAAQ8FAAEDAcABDwUAAQMB/gEHBQABAwH+ + AQcFAAEDAf8BAwUAAQMB/wEDBAABgAEDAv8EAAGAAQcC/wQAAeABDwL/BAAL + + + + &Cerrar + + + Ver &detalles... + + + + 257, 17 + + + Marcar como leído|No volver a mostrar de nuevo + + + + Inherit + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.resx new file mode 100644 index 00000000..6e157c4f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/PushForm.resx @@ -0,0 +1,426 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + NoControl + + + + MiddleLeft + + + 6 + + + 96, 109 + + + 516, 38 + + + labelTitle + + + 100, 25 + + + Action_Hyperlink_16x16.png + + + Top, Left, Right + + + 0 + + + PushWarningForm + + + pictureBoxEx1 + + + 1 + + + + True + + + 96, 55 + + + $this + + + textBoxDetails + + + 519, 18 + + + $this + + + $this + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + 125, 25 + + + 2 + + + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + 80, 80 + + + 0 + + + 4 + + + Zoom + + + label1 + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Microsoft Sans Serif, 11.25pt, style=Bold + + + $this + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABi + CQAAAk1TRnQBSQFMAgEBAgEAATQBAAE4AQABEAEAARABAAT/ASEBEAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEgBgABEBoAAzEBTQJSAVEBoQFkAVgBUQHjAV8BVgFOAeMBUgJRAaEBMQIwAU0EAAMx + AU0CUgFRAaEBZAFYAVEB4wFfAVYBTgHjAVICUQGhATECMAFNyAADNQFVAYABdgFtAecBzwG4AakB/wHr + AdYByAH/AeUBywG7Af8BswGVAXoB/wFmAVoBUQHnA0sBjgGAAXYBbQHnAc8BuAGpAf8B6wHWAcgB/wHl + AcsBuwH/AbMBlQF6Af8BZgFaAVEB5wE1AjQBVcQAAlkBVgGyAeYB1gHLAf8BYwFfAV0BygFxAWIBWAHm + AZIBewFjAfYBSAElAQkB/wFCAR8BBAH/AUIBHwEEAf8BQgEfAQQB/wFeAVEBSAHqAWUBYAFbAdYBbQFp + AWMB1AFgAV0BXAHCAbkBnAGIAf8CVQFUAbLEAAGYAYcBeQH0BP8BWAE3AR8B+AGLAUkBIAH/AbUBrQGC + Bv8B/gH3Av8B8QHmAf8B+gHjAdQB/wHzAdcBxwH/AVYBVQFTAbEDJAE2AXUBbgFmAd8B7wHWAccB/wFk + AUwBPAH0EAADDAEQAa0BrwGsAe8B8gH5AfAB/wHyAfkB8AH/Aa0BrwGsAe8DDAEQmAADAQECAWUBYAFd + AcoB8gHmAd4B/wGdAW8BWgH/AUoBMwENAf8BXAFUASQB/wG2AaoBhQH/AdMBtQGiAf8ByQGwAZgB/wHa + AcABrwH/AcsBrAGWAf8BXAE+ASsB+AFhAVYBUQHhAV8CXQHDAcsBsQGhAf8BVgJVAbIQAANHAYABigHD + AXkB/wEmAUUBHwH/ASYBRQEfAf8BigHDAXkB/wNHAYCYAAMWAR4BcgFbAVYB3gHHAagBlgH/Ae0B4QHX + A/8B/QL/AfcB8QH/AdgBxAG3Af8BnQGNAWkB/wGGAaQBUgH/AcUBrgGXAf8B7QHhAdcD/wH9Av8B9wHx + Af8B2AHEAbcB/wF7AW8BZgHnAzUBVQwAAwwBEAGtAa8BrAHvATIBXwEpAf8BJgFFAR8B/wEmAUUBHwH/ + ATIBXwEpAf8BrQGvAawB7wMMARCUAAE9AjwBaAG7ATEBJQH/AaIBXwFAAf8BkwGhAV0B/wGtAaMBeAH/ + AakBnQF1Af8BkwGoAWMB/wGUAaMBWgH/AcYBaQFFAf8BwwFxAVEB/wHAAZEBbQH/AbsBnAGDAf8BtAGR + AXQB/wFfAVwBWgHFAzEBTRAAA0cBgAGKAcMBeQH/ASYBRQEfAf8BMgFfASkB/wEyAV8BKQH/ASYBRQEf + Af8BigHDAXkB/wNHAYCUAAFbAVcBVAHCAaMBQwEmAf8BrwFGASwB/wGjAVcBLQH/AWYBrAE1Af8BeAGn + AUgB/wGZAZ8BVAH/Ab4BcwFFAf8BxgFbATkB/wHCAVMBNgH/AaIBaQEsAf8BkgFqAS4B/wGqAVkBNAH/ + AVIBUQFQAaIQAAMMARABrQGvAawB7wEyAV8BKQH/ASYBRQEfAf8BigHDAXkB/wGKAcMBeQH/ASYBRQEf + Af8BMgFfASkB/wGtAa8BrAHvAwwBEJAAAW0BXAEWAf8BpQFbAS8B/wG9AWMBLAH/AcMBcgEoAf8ByAFx + ASsB/wHEAXABKQH/AckBdgEtAf8B0AGIATsB/wHMAXoBRAH/Ac4BVgE9Af8BTQGkASsB/wEoAa0BJgH/ + AVwBdwEeAf8BbgFUAU8B3xAAA0cBgAHyAfkB8AH/AfIB+QHwAf8B8gH5AfAB/wGtAa8BrAHvAa0BrwGs + Ae8BMgFfASkB/wEmAUUBHwH/AYoBwwF5Af8DRwGAkAABeQFfASkB/AG+AUkBNAH/AbsBXAEpAf8BxQFy + ATEB/wHFAYcBPwH/Ad4BtQFQAf8B8QHLAUEB/wHfAa4BPwH/AdQBlgFFAf8B2AFmAUIB/wFOAc0BZQH/ + ARUB2gFOAf8BIwGkARwB/wFuAVcBTwHfJAADRwGAAYoBwwF5Af8BJgFFAR8B/wEyAV8BKQH/Aa0BrwGs + Ae8DDAEQjAABXgFZAVcBxAFOAYMBCwH/AWsBigEjAf8BggGpAUMB/wGnAcABlwH/AeEBvAGpAf8B3wG+ + AVgB/wHoAcQBSAH/AdoBqgFNAf8B2AF2AUcB/wFXAdABeAH/AS0B7wFzAf8BUwGbATQB/wNRAaAkAAMM + ARABrQGvAawB7wEyAV8BKQH/ASYBRQEfAf8BigHDAXkB/wNHAYCMAAM7AWQBRgGbARQB/wFOAdABKgH/ + AW8B6QF3Af8BzgH/Ae0B/wLqAe4B/wHiAdQBqAH/AegB0wFiAf8B3wG1AVUB/wHdAYgBTwH/AWYB1QF5 + Af8BLQH/AZAB/wGDAXIBMwH/AzgBXCgAA0cBgAGKAcMBeQH/ASYBRQEfAf8BMgFfASkB/wGtAa8BrAHv + AwwBEIgAAwsBDwFeAVsBVQHGAT0BugEhAf8BSwHnAWQB/wHcAf8B+QH/AeMB8gH0Af8B3wG+AZoB/wHe + AcMBWwH/AeABuQFdAf8B0wGLAVIB/wGjAbQBcgH/AYMBqgFlAf8BVAJSAaYDGAEiKAADDAEQAa0BrwGs + Ae8B8gH5AfAB/wHyAfkB8AH/AfIB+QHwAf8DRwGAjAADGgElAW8BaAFNAegBVAG7ATkB/wGbAcEBggH/ + AbgBwwGXAf8BtgG7AW8B/wHPAZwBSAH/AdcBqwFbAf8BywGJAVEB/wG9AZEBXQH/AV0CVgG+Ay0BRgME + AQXMAAMBAQIDGgElAV0BWgFXAcABkgGdAU0B/wGCAbsBaQH/AZ0BugF0Af8BvQGUAVUB/wHPAZQBUwH/ + AbgBdAFNAfoBXwFiAVcB0wMxAU4DBwEK2AADDAEQAzgBXQFVAVMBUgGpAX8BbAFZAeUBdwFmAVkB4QFT + AVIBUAGjAzcBWwMVAR0DAwEE0AABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEA + AcABgQL/BAABgAEAAv8EAAGAAQAC/wQAAYABAAHwAT8GAAHwAT8GAAHgAR8FAAEBAeABHwUAAQMBwAEP + BQABAwHAAQ8FAAEDAf4BBwUAAQMB/gEHBQABAwH/AQMFAAEDAf8BAwQAAYABAwL/BAABgAEHAv8EAAHg + AQ8C/xoACw== + + + + True + + + MiddleLeft + + + Action_Ok_16x16.png + + + 5 + + + 12, 12 + + + 93, 12 + + + 4 + + + imageListButtonIcons + + + label1 + + + Top, Right + + + 236, 17 + + + buttonOk + + + NoControl + + + NoControl + + + 1 + + + NoControl + + + $this + + + MiddleLeft + + + 5 + + + 248, 114 + + + Top, Left, Right + + + Top, Left, Right + + + NoControl + + + $this + + + 519, 18 + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + See &details... + + + Microsoft Sans Serif, 11.25pt + + + 3 + + + PushForm + + + 93, 34 + + + 6, 13 + + + 2 + + + $this + + + Mark as read|Don't show this message again + + + buttonDetails + + + 512, 109 + + + labelCaption + + + &Close + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 624, 148 + + + 3 + + + 0 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Vertical + + + checkBoxRead + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MiddleLeft + + + 17, 17 + + + True + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/UpdatesForm.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/UpdatesForm.Designer.cs new file mode 100644 index 00000000..b3ecba51 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/UpdatesForm.Designer.cs @@ -0,0 +1,178 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration.Push.UI +{ + partial class UpdatesForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.iconBox = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); + this.labelMessage = new System.Windows.Forms.Label(); + this.labelVersion = new System.Windows.Forms.Label(); + this.labelReleaseDate = new System.Windows.Forms.Label(); + this.labelDownload = new System.Windows.Forms.Label(); + this.linkDownload = new System.Windows.Forms.LinkLabel(); + this.checkDoNotShowAgain = new System.Windows.Forms.CheckBox(); + this.buttonOk = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.iconBox)).BeginInit(); + this.SuspendLayout(); + // + // iconBox + // + this.iconBox.Image = global::IpTviewr.UiServices.Configuration.Properties.Resources.Flag_Downloading_256x; + this.iconBox.Location = new System.Drawing.Point(12, 12); + this.iconBox.Name = "iconBox"; + this.iconBox.Size = new System.Drawing.Size(64, 64); + this.iconBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconBox.TabIndex = 0; + this.iconBox.TabStop = false; + // + // labelMessage + // + this.labelMessage.AutoSize = true; + this.labelMessage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelMessage.Location = new System.Drawing.Point(82, 12); + this.labelMessage.Name = "labelMessage"; + this.labelMessage.Size = new System.Drawing.Size(82, 16); + this.labelMessage.TabIndex = 1; + this.labelMessage.Text = "(Message)"; + // + // labelVersion + // + this.labelVersion.AutoSize = true; + this.labelVersion.Location = new System.Drawing.Point(82, 35); + this.labelVersion.Margin = new System.Windows.Forms.Padding(3, 7, 3, 5); + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Size = new System.Drawing.Size(48, 13); + this.labelVersion.TabIndex = 2; + this.labelVersion.Text = "(Version)"; + // + // labelReleaseDate + // + this.labelReleaseDate.AutoSize = true; + this.labelReleaseDate.Location = new System.Drawing.Point(82, 53); + this.labelReleaseDate.Margin = new System.Windows.Forms.Padding(3, 0, 3, 5); + this.labelReleaseDate.Name = "labelReleaseDate"; + this.labelReleaseDate.Size = new System.Drawing.Size(36, 13); + this.labelReleaseDate.TabIndex = 3; + this.labelReleaseDate.Text = "(Date)"; + // + // labelDownload + // + this.labelDownload.AutoSize = true; + this.labelDownload.Location = new System.Drawing.Point(82, 71); + this.labelDownload.Margin = new System.Windows.Forms.Padding(3, 0, 3, 5); + this.labelDownload.Name = "labelDownload"; + this.labelDownload.Size = new System.Drawing.Size(61, 13); + this.labelDownload.TabIndex = 4; + this.labelDownload.Text = "(Download)"; + // + // linkDownload + // + this.linkDownload.AutoSize = true; + this.linkDownload.Location = new System.Drawing.Point(82, 89); + this.linkDownload.Margin = new System.Windows.Forms.Padding(3, 0, 3, 10); + this.linkDownload.Name = "linkDownload"; + this.linkDownload.Size = new System.Drawing.Size(80, 13); + this.linkDownload.TabIndex = 5; + this.linkDownload.TabStop = true; + this.linkDownload.Text = "(Download link)"; + this.linkDownload.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkDownload_LinkClicked); + // + // checkDoNotShowAgain + // + this.checkDoNotShowAgain.AutoSize = true; + this.checkDoNotShowAgain.Location = new System.Drawing.Point(85, 115); + this.checkDoNotShowAgain.Name = "checkDoNotShowAgain"; + this.checkDoNotShowAgain.Size = new System.Drawing.Size(121, 17); + this.checkDoNotShowAgain.TabIndex = 6; + this.checkDoNotShowAgain.Text = "(Do not show again)"; + this.checkDoNotShowAgain.UseVisualStyleBackColor = true; + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Location = new System.Drawing.Point(352, 143); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(100, 26); + this.buttonOk.TabIndex = 7; + this.buttonOk.Text = "(OK)"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // UpdatesForm + // + this.AcceptButton = this.buttonOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(464, 181); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.checkDoNotShowAgain); + this.Controls.Add(this.linkDownload); + this.Controls.Add(this.labelDownload); + this.Controls.Add(this.labelReleaseDate); + this.Controls.Add(this.labelVersion); + this.Controls.Add(this.labelMessage); + this.Controls.Add(this.iconBox); + this.MaximumSize = new System.Drawing.Size(800, 220); + this.MinimizeBox = false; + this.Name = "UpdatesForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "UpdatesForm"; + ((System.ComponentModel.ISupportInitialize)(this.iconBox)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Common.Controls.PictureBoxEx iconBox; + private System.Windows.Forms.Label labelMessage; + private System.Windows.Forms.Label labelVersion; + private System.Windows.Forms.Label labelReleaseDate; + private System.Windows.Forms.Label labelDownload; + private System.Windows.Forms.LinkLabel linkDownload; + private System.Windows.Forms.CheckBox checkDoNotShowAgain; + private System.Windows.Forms.Button buttonOk; + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/UpdatesForm.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/UpdatesForm.cs new file mode 100644 index 00000000..ebd844e8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/UpdatesForm.cs @@ -0,0 +1,128 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration.Properties; +using IpTviewr.UiServices.Configuration.Push.v1; +using System; +using System.Globalization; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Push.UI +{ + internal partial class UpdatesForm : CommonBaseForm + { + private PushUpdate _update; + private bool _userRequested; + + /// + /// Wraps a IPushUpdateContext returning false to IsHidden and delegating the rest methods to the wrapped IPushUpdateContext. + /// This allows to always display the latest update when updates are manually checked, even if it was hidden. + /// + protected sealed class UpdateContextWrapper : IPushUpdateContext + { + private readonly IPushUpdateContext _context; + + public UpdateContextWrapper(IPushUpdateContext context) + { + _context = context; + } // constructor + + public bool IsHidden(Guid message) => false; + + public void AddHidden(Guid message) => _context.AddHidden(message); + + public Version GetAppVersion() => _context.GetAppVersion(); + + public DateTime LastChecked + { + get => _context.LastChecked; + set => _context.LastChecked = value; + } // LastChecked + } // class UpdateContextWrapper + + public UpdatesForm() + { + InitializeComponent(); + labelMessage.Text = Texts.PushCheckingForUpdates; + labelDownload.Text = Texts.PushDownloadLink; + checkDoNotShowAgain.Text = Texts.PushDoNotShowAgain; + buttonOk.Text = Texts.ButtonOk; + UpdateData = null; + } // constructor + + public PushUpdate UpdateData + { + get => _update; + set + { + labelVersion.Visible = value != null; + labelReleaseDate.Visible = value != null; + labelDownload.Visible = value != null; + linkDownload.Visible = value != null; + checkDoNotShowAgain.Visible = (value != null) && !_userRequested; + _update = value; + + if (value == null) return; + labelMessage.Text = Texts.PushNewUpdate; + labelVersion.Text = string.Format(Texts.PushVersionFormat, value.DisplayVersion); + labelReleaseDate.Text = string.Format(CultureInfo.CurrentCulture, Texts.PushReleasedOnFormat, value.ReleasedDate); + linkDownload.Text = value.Link; + iconBox.SetImage(Resources.Flag_Green_256x); + } // set + } // Update + + public IPushUpdateContext UpdateContext { get; set; } + + public bool DoNotShowAgain => checkDoNotShowAgain.Checked; + + private void linkDownload_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Launcher.OpenUrl(this, _update.DownloadUrl, HandleException, null); + } // linkDownload_LinkClicked + + protected override async void OnLoad(EventArgs e) + { + base.OnLoad(e); + + Text = Texts.PushCheckForUpdates; + if (UpdateData != null) return; + + _userRequested = true; + var result = await PushManager.CheckForUpdatesAsync(new UpdateContextWrapper(UpdateContext)); + OnPushUpdateResult(result); + } // OnLoad + + private void OnPushUpdateResult(PushUpdateResult result) + { + if (result.Updates == null) + { + iconBox.SetImage(Resources.Flag_Red_256x); + labelMessage.Text = Texts.PushUpdateError; + return; + } // if + + if (result.LastUpdate == null) + { + iconBox.SetImage(Resources.Flag_Blue_256x); + labelMessage.Text = Texts.PushNoUpdates; + } + else + { + UpdateData = result.LastUpdate; + } // if-else + } // OnPushUpdateResult + } // class UpdatesForm +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/UpdatesForm.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/UpdatesForm.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/UI/UpdatesForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushNews.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushNews.cs new file mode 100644 index 00000000..c8ea7fc0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushNews.cs @@ -0,0 +1,31 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Push.v1 +{ + [Serializable] + [XmlRoot("Push.News", Namespace = "http://alphacentaury.org/movistar+/Push.v1")] + public class PushNews + { + public DateTime Timestamp { get; set; } + + [XmlElement("news")] + public List News { get; set; } + + public bool NewsSpecified => (News != null) && (News.Count > 0); + } // class PushNews +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushNewsItem.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushNewsItem.cs new file mode 100644 index 00000000..f10b77c8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushNewsItem.cs @@ -0,0 +1,42 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Xml.Serialization; +using IpTviewr.Common.Serialization; + +namespace IpTviewr.UiServices.Configuration.Push.v1 +{ + [Serializable] + public class PushNewsItem + { + [XmlAttribute("timestamp")] + public DateTime Timestamp { get; set; } + + [XmlAttribute("breakingNews")] + [DefaultValue(false)] + public bool BreakingNews { get; set; } + + public Guid Id { get; set; } + + public string Title { get; set; } + + public XmlCDataText Content { get; set; } + + public XmlCDataText ContentRtf { get; set; } + + [XmlElement("Details")] + public string DetailsUrl { get; set; } + } // class PushNewsItem +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushUpdate.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushUpdate.cs new file mode 100644 index 00000000..1aa4b583 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushUpdate.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; +using IpTviewr.Common.Serialization; + +namespace IpTviewr.UiServices.Configuration.Push.v1 +{ + [Serializable] + public class PushUpdate + { + [XmlAttribute("timestamp")] + public DateTime Timestamp { get; set; } + + public Guid Id { get; set; } + + public string Version { get; set; } + + public string DisplayVersion { get; set; } + + public DateTime ReleasedDate { get; set; } + + [XmlElement("URL")] + public string DownloadUrl { get; set; } + + public string Link { get; set; } + } // class PushUpdate +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushUpdates.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushUpdates.cs new file mode 100644 index 00000000..9004778d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Push/v1/PushUpdates.cs @@ -0,0 +1,31 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Push.v1 +{ + [Serializable] + [XmlRoot("Push.Updates", Namespace = "http://alphacentaury.org/movistar+/Push.v1")] + public class PushUpdates + { + public DateTime Timestamp { get; set; } + + [XmlElement("Update")] + public List Updates { get; set; } + + public bool UpdatesSpecified => (Updates != null) && (Updates.Count > 0); + } // class PushUpdates +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/Action_AddVariable_16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Action_AddVariable_16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Config/Resources/Action_AddVariable_16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Action_AddVariable_16.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile.svg b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile.svg new file mode 100644 index 00000000..fec84c64 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_128.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_128.png new file mode 100644 index 00000000..6c09cc94 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_128.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_16.png new file mode 100644 index 00000000..a2102de9 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_16.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_24.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_24.png new file mode 100644 index 00000000..fb512ebb Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_24.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_256.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_256.png new file mode 100644 index 00000000..6c09cc94 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_256.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_32.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_32.png new file mode 100644 index 00000000..d80bcd35 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_32.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_48.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_48.png new file mode 100644 index 00000000..5655ec4a Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_48.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_64.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_64.png new file mode 100644 index 00000000..6c09cc94 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_64.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_96.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_96.png new file mode 100644 index 00000000..6c09cc94 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/BrokenFile_96.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Blue.ico b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Blue.ico new file mode 100644 index 00000000..df716a31 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Blue.ico differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Blue_256x.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Blue_256x.png new file mode 100644 index 00000000..6b64a34f Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Blue_256x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Downloading_256x.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Downloading_256x.png new file mode 100644 index 00000000..07cda65f Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Downloading_256x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Green.ico b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Green.ico new file mode 100644 index 00000000..e7e6ee35 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Green.ico differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Green_256x.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Green_256x.png new file mode 100644 index 00000000..ac79f63c Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Green_256x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Red.ico b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Red.ico new file mode 100644 index 00000000..4501db9c Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Red.ico differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Red_256x.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Red_256x.png new file mode 100644 index 00000000..5d6b913d Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Red_256x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Yellow.ico b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Yellow.ico new file mode 100644 index 00000000..cb454ac4 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Yellow.ico differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Yellow_256x.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Yellow_256x.png new file mode 100644 index 00000000..155c4609 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Flag_Yellow_256x.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile.ico b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile.ico new file mode 100644 index 00000000..eac48b65 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile.ico differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_32.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_32.png new file mode 100644 index 00000000..5f0060dd Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_32.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_40.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_40.png new file mode 100644 index 00000000..d3ccc691 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_40.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_48.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_48.png new file mode 100644 index 00000000..6d0d73a5 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_48.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_64.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_64.png new file mode 100644 index 00000000..550f2024 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/GenericFile_64.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Globe.ico b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Globe.ico new file mode 100644 index 00000000..c554be3b Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Globe.ico differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Globe_256x.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Globe_256x.png new file mode 100644 index 00000000..4496823c Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Globe_256x.png differ diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/NetworkSettings_32.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NetworkSettings_32.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Config/Resources/NetworkSettings_32.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NetworkSettings_32.png diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/NetworkSettings_48.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NetworkSettings_48.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Config/Resources/NetworkSettings_48.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NetworkSettings_48.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound.ico b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound.ico new file mode 100644 index 00000000..98de9a64 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound.ico differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_32.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_32.png new file mode 100644 index 00000000..984345ea Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_32.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_40.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_40.png new file mode 100644 index 00000000..4f5eb913 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_40.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_48.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_48.png new file mode 100644 index 00000000..45e8ca6e Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_48.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_64.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_64.png new file mode 100644 index 00000000..3f4da2dd Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/NotFound_64.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound.ico b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound.ico new file mode 100644 index 00000000..ee637c1e Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound.ico differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_32.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_32.png new file mode 100644 index 00000000..ba5ba0c1 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_32.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_40.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_40.png new file mode 100644 index 00000000..ad51f2d4 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_40.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_48.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_48.png new file mode 100644 index 00000000..f9d75fa7 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_48.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_64.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_64.png new file mode 100644 index 00000000..57754f07 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/PlayerNotFound_64.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/StatusUpdate.svg b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/StatusUpdate.svg new file mode 100644 index 00000000..beadf067 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/StatusUpdate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Texts.es.resx new file mode 100644 index 00000000..c2ea3feb --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/Texts.es.resx @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + No se puede encontrar la carpeta 'base' en '{0}'. + + + No se puede encontrar la carpeta de 'logotipos' en '{0}'. + + + El nombre de dominio (domain name) '{0}' está duplicado en 'logos/services/domain-mappings.xml' + + + El nombre de dominio (domain name) '{0}' está duplicado en 'logos/providers/provider-mappings.xml' + + + Imposible cargar el archivo con el logo del servicio +{0} + + + El archivo con el logo del servicio no existe + + + El nombre de dominio (domain name) '{0}' está duplicado en 'logos/services/service-mappings.xml' + + + El nombre de servicio (service name) '{0}' está duplicado en 'logos/services/service-mappings.xml' en el dominio '{1}' + + + El archivo de configuración de usuario '{0}' no es válido o contiene errores graves. +{1} + +Verifique la sintáxis XML del archivo y solucione los errores detectados. + + + Consulte los detalles de la excepción (más abajo) para obtener información detallada del problema. + + + Error al validar la configuración de la aplicación + + + Imposible cargar la configuración de usuario + + + Error al validar la configuración y las preferencias de usuario + + + No se ha localizado el reproductor de TV '{0}' en '{1}'. + + + No se ha localizado el grabador externo '{0}' en '{1}'. + + + El valor '{0}' no es válido como ruta en la etiqueta <{1}>. Tiene que ser una ruta absoluta con letra de volumen (como 'C:\Carpeta') o una ubicación de red en formato 'UNC' (como '\\servidor\compartido'). + + + El valor '{0}' en la etiqueta <{1}> no es un nombre de carpeta válido para el Programador de Tareas. Debe comenzar forzosamente por '\' y no puede terminar en '\'. + + + Debe especificarse al menos una etiqueta <{0}> bajo la etiqueta <{1}>. + + + Elemento <{1}> duplicado en la lista <{0}>. El valor de '{2}' es '{3}' + + + dirección IP + + + número de puerto IP + + + La etiqueta <{0}> no existe o está vacía. + + + El attribute '{0}' falta o está vacío en la etiqueta <{1}>. + + + La etiqueta <{0}> no existe o está vacía bajo la etiqueta <{1}> tag. + + + La etiquete <{0}> no existe o está vacía bajo la etiqueta<{1}>. EL valor de '{2}' es '{3}'. + + + Falta una etiqueta <{0}> bajo la etiqueta <{1}>. + + + El valor '{2}' especificado en la etiqueta <{0}> no es un/una {1} válido. + + + Imposible cargar la información del proveedor de contenidos + + + El archivo de datos del proveedor de contenidos '{0}' no es válido o contiene errores graves. +{1} +Verifique la sintáxis XML del archivo y corrija los errores detectados. + + + Error al validar la información del proveedor de contenidos + + + Consulte los detalles de la excepción (más abajo) para obtener información detallada del problema. + + + La aplicación no está instalada correctamente + + + No se puede localizar o abrir 'HKCU\{0}'. + + + El valor '{1}' no existe bajo la clave 'HKCU\{0}'. + + + Se ha producido un error al acceder a la configuración de la aplicación en el Registro de Windows: +{0} + +Por favor, instale la aplicación utilizando el instalador oficial o repare la instalación. + + + Más grande + + + Enorme + + + Pequeño + + + Normal + + + Medio + + + Grande + + + {0} ({1}x{2}) + + + Leyendo la información del proveedor de contenidos... + + + Cargando la configuración de la aplicación... + + + Leyendo la configuración de usuario y preferencias... + + + TV SD + + + Radio (MPEG-1) + + + Teletexto + + + Mosaico + + + Radio HD + + + Mosaico HD + + + Datos + + + DVB MHP + + + TV HD (MPEG-2) + + + TV SD (AAC) + + + TV HD + + + No se han podido cargar los módulos de la aplicación, seguramente por la ausencia de uno de ellos. Por favor, reinstale la aplicacion. + + + Faltan módulos de la aplicación + + + Imposible cargar los módulos de la aplicación + + + Se ha producido un error inesperado al cargar los módulos de aplicación. +Consulte los detalles de la excepción (más abajo) para obtener información detallada del problema. + + + Cargando módulos de la aplicación... + + + Aceptar + + + Buscar actualizaciones + + + Buscando actualizaciones + + + No volver a mostrar este mensaje + + + Pulse el enlace de abajo para descargar la actualización: + + + Hay una nueva versión disponible + + + No se han encontrado nuevas versiones + + + Publicado el día {0:yyyy/MM/dd} + + + Error en la conexión con el servidor de actualizaciones + + + Versión {0} + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/TvPlayersSettings_256.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/TvPlayersSettings_256.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Config/Resources/TvPlayersSettings_256.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/TvPlayersSettings_256.png diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/TvPlayersSettings_32.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/TvPlayersSettings_32.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Config/Resources/TvPlayersSettings_32.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/TvPlayersSettings_32.png diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/TvPlayersSettings_48.png b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/TvPlayersSettings_48.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Config/Resources/TvPlayersSettings_48.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/TvPlayersSettings_48.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/domain-mappings.xml b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/domain-mappings.xml new file mode 100644 index 00000000..8f5d7e3a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Resources/domain-mappings.xml @@ -0,0 +1,39 @@ + + + + + generic + + + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + imagenio.es + + diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/ConfigCommon.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/ConfigCommon.cs similarity index 82% rename from 1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/ConfigCommon.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/ConfigCommon.cs index 1540f535..228c1378 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/ConfigCommon.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/ConfigCommon.cs @@ -1,32 +1,38 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace IpTviewr.UiServices.Configuration.Schema2014.Config { public class ConfigCommon { - public const string ConfigXmlNamespace = "http://movistartv.codeplex.com/schema/2015:Configuration"; + public const string ConfigXmlNamespace = "http://movistartv.alphacentaury.org/schema/2019:Configuration"; internal static string Normalize(string value) { - if (value == null) return null; - return value.Trim(); + return value?.Trim(); } // Normalize internal static string ValidateArray(T[] array, string arrayElementTag, string arrayTag, string ownerTag) { if (array == null) { - return ConfigCommon.ErrorMissingTag(arrayTag, ownerTag); + return ErrorMissingTag(arrayTag, ownerTag); } // if if (array.Length < 1) { - return ConfigCommon.ErrorAtLeastOne(arrayElementTag, arrayTag); + return ErrorAtLeastOne(arrayElementTag, arrayTag); } // if return null; diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/EpgConfig.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/EpgConfig.cs new file mode 100644 index 00000000..360bf07b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/EpgConfig.cs @@ -0,0 +1,53 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + [Serializable] + [XmlType(TypeName = "EpgConfig", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class EpgConfig + { + public EpgConfig() + { + // no op; default constructor + } // constructor + + public EpgConfig(bool enabled, int autoUpdateHours, int maxDays) + { + Enabled = enabled; + AutoUpdateHours = autoUpdateHours; + MaxDays = maxDays; + } // constructor + + public bool Enabled + { + get; + set; + } // Enabled + + public int AutoUpdateHours + { + get; + set; + } // AutoUpdateHours + + public int MaxDays + { + get; + set; + } // MaxDays + } // class EpgConfig +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecordConfig.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecordConfig.cs new file mode 100644 index 00000000..31770844 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecordConfig.cs @@ -0,0 +1,63 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.IO; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + [Serializable] + [XmlType(TypeName="RecordConfig", Namespace=ConfigCommon.ConfigXmlNamespace)] + public class RecordConfig + { + [XmlArray(ElementName="SaveLocations", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem(ElementName="Location")] + public RecordSaveLocation[] SaveLocations + { + get; + set; + } // SaveLocations + + [XmlArray("TaskSchedulerFolders", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem(ElementName="Folder")] + public RecordTaskSchedulerFolder[] TaskSchedulerFolders + { + get; + set; + } // TaskSchedulerFolders + + [XmlArray("Recorders", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem("Recorder")] + public RecorderConfig[] Recorders + { + get; + set; + } // Recorders + + [XmlIgnore] + public string RecorderLauncherPath=>Path.Combine(AppConfig.Current.Folders.Install, Properties.InvariantTexts.RecorderLauncher); + + public string Validate(string ownerTag) + { + var validationError = RecordSaveLocation.ValidateArray(SaveLocations, "Location", "SaveLocations", ownerTag); + if (validationError != null) return validationError; + + validationError = RecordTaskSchedulerFolder.ValidateArray(TaskSchedulerFolders, "Folder", "TaskSchedulerFolders", ownerTag); + if (validationError != null) return validationError; + + validationError = RecorderConfig.ValidateArray(Recorders, "Recorder", "Recorders", ownerTag); + return validationError; + } // Validate + } // class RecordConfig +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs similarity index 75% rename from 1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs index 9bfb1275..3992aefc 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecordSaveLocation.cs @@ -1,20 +1,28 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Xml.Serialization; namespace IpTviewr.UiServices.Configuration.Schema2014.Config { [Serializable] - [XmlType("SaveLocation", Namespace=ConfigCommon.ConfigXmlNamespace)] + [XmlType("SaveLocation", Namespace = ConfigCommon.ConfigXmlNamespace)] public sealed class RecordSaveLocation : StringPair { public RecordSaveLocation() - : base() { // no op } // constructor @@ -37,21 +45,19 @@ where location.IsDefaultSaveLocation [XmlAttribute("name")] public string Name { - get { return Item1; } - set { Item1 = ConfigCommon.Normalize(value); } + get => Item1; + set => Item1 = ConfigCommon.Normalize(value); } // Name - [XmlText()] + [XmlText] public string Path { - get { return Item2; } - set { Item2 = ConfigCommon.Normalize(value); } + get => Item2; + set => Item2 = ConfigCommon.Normalize(value); } // Value - public bool IsDefaultSaveLocation - { - get { return string.IsNullOrEmpty(Name); } - } // IsDefaultSaveLocation + [XmlIgnore] + public bool IsDefaultSaveLocation => string.IsNullOrEmpty(Name); public string Validate(string ownerTag) { diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs similarity index 77% rename from 1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs index a902e1e6..5fffb4b8 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecordTaskSchedulerFolder.cs @@ -1,10 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Xml.Serialization; namespace IpTviewr.UiServices.Configuration.Schema2014.Config @@ -14,7 +22,6 @@ namespace IpTviewr.UiServices.Configuration.Schema2014.Config public class RecordTaskSchedulerFolder : StringPair { public RecordTaskSchedulerFolder() - : base() { // no op } // constructor @@ -28,15 +35,15 @@ public RecordTaskSchedulerFolder(string name, string path) [XmlAttribute("displayName")] public string Name { - get { return Item1; } - set { Item1 = ConfigCommon.Normalize(value); } + get => Item1; + set => Item1 = ConfigCommon.Normalize(value); } // Name [XmlText()] public string Path { - get { return Item2; } - set { Item2 = ConfigCommon.Normalize(value); } + get => Item2; + set => Item2 = ConfigCommon.Normalize(value); } // Value public string Validate(string ownerTag) diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecorderConfig.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecorderConfig.cs similarity index 82% rename from 1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecorderConfig.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecorderConfig.cs index 2b64fe10..14ec3c74 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecorderConfig.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/RecorderConfig.cs @@ -1,10 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Xml.Serialization; namespace IpTviewr.UiServices.Configuration.Schema2014.Config @@ -52,12 +60,12 @@ public string Validate(string ownerTag) var validationError = ConfigCommon.ValidateArray(Arguments, "Argument", "Arguments", ownerTag); if (validationError != null) return validationError; - for (int index = 0; index < Arguments.Length; index++) + for (var index = 0; index < Arguments.Length; index++) { Arguments[index] = ConfigCommon.Normalize(Arguments[index]); if (string.IsNullOrEmpty(Arguments[index])) { - ConfigCommon.ErrorMissingEmpty("Argument", "Arguments"); ; + ConfigCommon.ErrorMissingEmpty("Argument", "Arguments"); } // if } // for diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/UserConfig.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/UserConfig.cs new file mode 100644 index 00000000..2392a81e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Config/UserConfig.cs @@ -0,0 +1,83 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Config +{ + [Serializable] + [XmlRoot(ElementName = "UserConfiguration", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class UserConfig + { + private string[] _preferredLanguagesList; + + [XmlElement("PreferredLanguages")] + public string PreferredLanguages + { + get; + set; + } // PreferredLanguages + + [XmlElement("Record")] + public RecordConfig Record + { + get; + set; + } // Record + + [XmlElement("EPG")] + public EpgConfig Epg + { + get; + set; + } // Epg + + public bool ChannelNumberStandardDefinitionPriority + { + get; + set; + } // ChannelNumberStandardDefinitionPriority + + [XmlElement("Configuration")] + public XmlConfigurationItems Configuration + { + get; + set; + } // Configuration + + [XmlIgnore] + public string[] PreferredLanguagesList + { + get + { + if (_preferredLanguagesList == null) + { + _preferredLanguagesList = PreferredLanguages.Split(',', ';'); + } // if + + return _preferredLanguagesList; + } // get + } // PreferredLanguagesList + + internal string Validate() + { + string validationError; + var ownerTag = "UserConfiguration"; + + if (Record == null) return ConfigCommon.ErrorMissingTag("Record", ownerTag); + validationError = Record.Validate("Record"); + return validationError; + } // Validate + } // UserConfig +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs similarity index 82% rename from 1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs index 1c61a157..f635a922 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/BootstrapData.cs @@ -1,10 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Xml.Serialization; namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs new file mode 100644 index 00000000..58c594c9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs @@ -0,0 +1,42 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + /// + /// WARNING: Only 'Manual' is supported right now + /// + /// For now, we only support MANUAL bootstrapping + public enum BootstrapMethod + { + [XmlEnum("automatic")] + Auto, + + [XmlEnum("IANA")] + Iana, + + [XmlEnum("DVB-Service-DNS")] + DvbServiceDns, + + [XmlEnum("service-DNS-domain")] + ServiceDnsDomain, + + [XmlEnum("service-names")] + ServiceNames, + + [XmlEnum("manual")] + Manual + } // enum BootstrapMethod +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs new file mode 100644 index 00000000..cb05dd52 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + public class FriendlyNames + { + [XmlElement("ServiceProviders")] + public SpFriendlyNames[] Providers + { + get; + set; + } // Providers + } // class FriendlyNames +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/Identification.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/Identification.cs new file mode 100644 index 00000000..f20ae039 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/Identification.cs @@ -0,0 +1,43 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + [XmlType(Namespace=SerializationCommon.XmlNamespace, AnonymousType=true)] + public class Identification + { + [XmlAttribute("id")] + public string Id + { + get; + set; + } // Id + + [XmlElement("Localized")] + public LocalizedIdentification[] Localized + { + get; + set; + } // Localized + + public string LogosPackageName + { + get; + set; + } // LogosPackageName + } // class ContentProviderIdentification +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs new file mode 100644 index 00000000..ac901b46 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs @@ -0,0 +1,56 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Serialization; +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + [XmlRoot(ElementName = "IpTvProvider", Namespace = SerializationCommon.XmlNamespace)] + public class IpTvProviderData + { + public Identification Identification + { + get; + set; + } // Identification + + public BootstrapData Bootstrap + { + get; + set; + } // Bootstrap + + [XmlElement("FriendlyNames")] + public FriendlyNames FriendlyNames + { + get; + set; + } // FriendlyNames + + public static IpTvProviderData Load(string xmlPath) + { + return XmlSerialization.Deserialize(xmlPath,true); + } // Load + + public string Validate() + { + // TODO: validate content provider data + // The implementation of this method is not top-priority, as the xml is (for now) a 'private' file + + return null; + } // Validate + } // class IpTvProviderData +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs new file mode 100644 index 00000000..96cc2be5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs @@ -0,0 +1,24 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [XmlType(Namespace=SerializationCommon.XmlNamespace)] + public class LocalizedIdentification : LocalizedObject + { + public string Name; + public string Description; + } // class LocalizedIdentification +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs new file mode 100644 index 00000000..0c336aa0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + public class SerializationCommon + { + public const string XmlNamespace = "http://movistartv.alphacentaury.org/schema/2019:Configuration:ContentProvider"; + } // class CommonSerialization +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs new file mode 100644 index 00000000..73495245 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs @@ -0,0 +1,37 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + [XmlType(Namespace=SerializationCommon.XmlNamespace, AnonymousType=true)] + public class SpFriendlyName + { + [XmlAttribute("domainName")] + public string Domain + { + get; + set; + } // Domain + + [XmlText] + public string Name + { + get; + set; + } // Name + } // class SpFriendlyName +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs new file mode 100644 index 00000000..22c16488 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs @@ -0,0 +1,37 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider +{ + [Serializable] + [XmlType(TypeName="SP-FriendlyNames", Namespace=SerializationCommon.XmlNamespace)] + public class SpFriendlyNames : ILocalizedObject + { + [XmlAttribute("culture")] + public string CultureName + { + get; + set; + } // CultureName + + [XmlElement("Provider")] + public SpFriendlyName[] Names + { + get; + set; + } // Names + } // class ServiceProviderFriendlyName +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/DomainMappingsXml.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/DomainMappingsXml.cs new file mode 100644 index 00000000..2fdcded8 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/DomainMappingsXml.cs @@ -0,0 +1,55 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + [Serializable] + [XmlRoot(ElementName = "Logos-Domains", Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class DomainMappingsXml + { + [XmlElement("Collection")] + public DomainCollection[] Collections { get; set; } + } // class DomainMappingsXml + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class DomainCollection + { + [XmlAttribute("name")] + public string Name { get; set; } + + [XmlElement("Mapping")] + public DomainMapping[] Mappings { get; set; } + + public override string ToString() => $@"Domain collection: {Name}"; + } // DomainCollection + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class DomainMapping + { + [XmlAttribute("domainName")] + public string DomainName { get; set; } + + [XmlAttribute("mandatory")] + [DefaultValue(true)] + public bool Mandatory { get; set; } + + [XmlText] + public string ReplacementDomain { get; set; } + + public override string ToString() => $@"Domain mapping: {DomainName}=>{ReplacementDomain}"; + } // class DomainMapping +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/LogosCommon.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/LogosCommon.cs new file mode 100644 index 00000000..4f5c5d5c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/LogosCommon.cs @@ -0,0 +1,31 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + public class LogosCommon + { + public const string LogoMappingsXmlNamespace = "http://movistartv.alphacentaury.org/schema/2019:Configuration:Mappings"; + + public static ServiceMappingsXml ParseServiceMappingsXml(string filename) + => XmlSerialization.Deserialize(filename, true); + + public static DomainMappingsXml ParseDomainMappingsXml(string filename) + => XmlSerialization.Deserialize(filename, true); + + public static ProviderMappingsXml ParseProviderMappingsXml(string filename) + => XmlSerialization.Deserialize(filename, true); + } // class Common +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ProviderCollection.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ProviderCollection.cs new file mode 100644 index 00000000..6a2a6eae --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ProviderCollection.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ProviderCollection + { + [XmlAttribute("name")] + public string Name { get; set; } + + [XmlAttribute("package")] + public string Package { get; set; } + + [XmlElement("Mapping")] + public ProviderMapping[] Mappings { get; set; } + + public override string ToString() + { + return $"Provider collection: {Name} => {Package}"; + } // ToString + } // class ProviderCollection +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ProviderMapping.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ProviderMapping.cs new file mode 100644 index 00000000..07ca2556 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ProviderMapping.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ProviderMapping + { + [XmlAttribute("domainName")] + public string DomainName + { + get; + set; + } // Id + + [XmlAttribute("annotation")] + public string Annotation + { + get; + set; + } // Annotation + + [XmlAttribute("logo")] + public string LogoFile + { + get; + set; + } // LogoFile + + public override string ToString() + { + return $"Provider mapping: {DomainName}=>{LogoFile}"; + } // ToString + } // class ProviderMapping +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ProviderMappingsXml.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ProviderMappingsXml.cs new file mode 100644 index 00000000..10f93837 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ProviderMappingsXml.cs @@ -0,0 +1,26 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + [Serializable] + [XmlRoot(ElementName = "Logos-Providers", Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ProviderMappingsXml + { + [XmlElement("Collection")] + public ProviderCollection[] Collections { get; set; } + } // class ProviderMappingsXml +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ServiceMappingsXml.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ServiceMappingsXml.cs new file mode 100644 index 00000000..82c0b8ee --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Schema2014/Logos/ServiceMappingsXml.cs @@ -0,0 +1,81 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration.Schema2014.Logos +{ + [Serializable] + [XmlRoot(ElementName= "Logos-Services", Namespace=LogosCommon.LogoMappingsXmlNamespace)] + public class ServiceMappingsXml + { + [XmlElement("Collection")] + public ServiceCollection[] Collections { get; set; } + } // class ServiceMappingsXml + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ServiceCollection + { + [XmlAttribute("name")] + public string Name { get; set; } + + [XmlAttribute("package")] + public string Package { get; set; } + + [XmlElement("Domain")] + public ServiceDomains[] Domains { get; set; } + + public override string ToString() => $@"Service package: {Name} => {Package}"; + + public ServiceCollection ShallowClone() + { + return MemberwiseClone() as ServiceCollection; + } // ShallowClone + } // ServiceCollection + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ServiceDomains + { + [XmlAttribute("name")] + public string DomainName { get; set; } + + [XmlAttribute("redirectDomain")] + public string RedirectDomainName { get; set; } + + [XmlElement("Mapping")] + public ServiceMapping[] Mappings { get; set; } + + public override string ToString() => $"Service domain: {DomainName}"; + } // class ServiceDomains + + [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] + public class ServiceMapping + { + [XmlAttribute("serviceName")] + public string Name { get; set; } + + [XmlAttribute("logo")] + public string Logo { get; set; } + + [XmlAttribute("quality")] + public string Quality { get; set; } + +#if DEBUG + [XmlAttribute("remarks")] + public string Remarks { get; set; } +#endif + + public override string ToString() => $@"{Name} => {Logo}"; + } // class ServiceMapping +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/JsonSettingsProvider.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/JsonSettingsProvider.cs new file mode 100644 index 00000000..7e7cb47b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/JsonSettingsProvider.cs @@ -0,0 +1,134 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Specialized; +using System.Configuration; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Linq; + +namespace IpTviewr.UiServices.Configuration.Settings +{ + public sealed class JsonSettingsProvider : SettingsProvider, IApplicationSettingsProvider + { + private readonly object _lock = new object(); + private JsonSettingsStore _store; + + public JsonSettingsProvider() + { + ApplicationName = string.Empty; + } // constructor + + public static void Close(ApplicationSettingsBase settings) + { + foreach (var provider in settings.Providers) + { + if (!(provider is JsonSettingsProvider jsonProvider)) continue; + + jsonProvider.Close(); + } // foreach + } // SaveAndClose + + public void Close() + { + lock (_lock) + { + _store?.Close(); + } // lock + } // Close + + #region Overrides of ProviderBase + + [SuppressMessage("ReSharper", "ConstantNullCoalescingCondition", Justification = "Although marked as [NotNull] 'config' seems to be always null")] + public override void Initialize(string name, NameValueCollection config) + { + var folders = AppConfig.LoadFoldersConfiguration(out var result); + if (result.IsError) + { + throw new ConfigurationErrorsException(result.Message, result.InnerException); + } // if + + // TODO: avoid fixed location + var storePath = Path.GetFullPath(Path.Combine(folders.UserConfiguration, "user-config.json")); + _store = new JsonSettingsStore(storePath); + + config ??= new NameValueCollection(); + base.Initialize(!string.IsNullOrEmpty(name) ? name : nameof(JsonSettingsProvider), config); + } // Initialize + + #endregion + + #region Overrides of SettingsProvider + + public override string ApplicationName { get; set; } + + public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection collection) + { + // TODO: deal with application scoped settings => use ad-hoc instance of LocalFileSettingsProvider + + var result = new SettingsPropertyValueCollection(); + + lock (_lock) + { + _store.Load(); + + foreach (var property in collection.Cast()) + { + property.SerializeAs = SettingsSerializeAs.ProviderSpecific; + result.Add(_store[property]); + } // foreach + + return result; + } // lock + } // GetPropertyValues + + public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection) + { + lock (_lock) + { + var q = from propertyValue in collection.Cast() + where (propertyValue.IsDirty && !propertyValue.UsingDefaultValue) + select propertyValue; + + foreach (var propertyValue in q) + { + _store[propertyValue.Property] = propertyValue; + } // foreach + + _store.Save(); + } // lock + } // SetPropertyValues + + #endregion + + #region Implementation of IApplicationSettingsProvider + + public SettingsPropertyValue GetPreviousVersion(SettingsContext context, SettingsProperty property) + { + // GetPreviousVersion is not supported: return default value + return new SettingsPropertyValue(property) { PropertyValue = property.DefaultValue }; + } // GetPreviousVersion + + public void Reset(SettingsContext context) + { + // Reset is not supported: do nothing + } // Reset + + public void Upgrade(SettingsContext context, SettingsPropertyCollection properties) + { + // Upgrade is not supported: do nothing + } // Upgrade + + #endregion + } // class JsonSettingsProvider +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/JsonSettingsStore.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/JsonSettingsStore.cs new file mode 100644 index 00000000..54ad7720 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/JsonSettingsStore.cs @@ -0,0 +1,149 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Configuration; +using System.IO; +using IpTviewr.Common.Serialization; +using JetBrains.Annotations; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Serialization; + +namespace IpTviewr.UiServices.Configuration.Settings +{ + internal class JsonSettingsStore : IDisposable + { + private readonly JsonSerializer _serializer; + private static string _storePath; + private FileStream _file; + private JObject _store; + private bool _loaded; + private bool _isDirty; + + internal JsonSettingsStore([NotNull] string path) + { + _serializer = new JsonSerializer + { + Formatting = Formatting.Indented, + ContractResolver = new CamelCasePropertyNamesContractResolver(), + }; + + _storePath = path; + + if (File.Exists(path)) return; + + CreateEmptyStore(); + } // constructor + + public SettingsPropertyValue this[SettingsProperty property] + { + get => new SettingsPropertyValue(property) + { + PropertyValue = Get(property), + IsDirty = false, + Deserialized = true, + }; + set => Set(property, value.PropertyValue); + } // this[SettingsProperty] + + public void Load() + { + if (_loaded) return; + + OpenFile(); + using var reader = new StreamReader(_file, XmlSerialization.Utf8NoBomEncoding.Value, false, 4096, true); + _store = JObject.Load(new JsonTextReader(reader)); + _loaded = true; + } // Load + + public void Save() + { + if (!_isDirty) return; + + OpenFile(); + _file.Seek(0, SeekOrigin.Begin); + _file.SetLength(0); + + using (var writer = new StreamWriter(_file, XmlSerialization.Utf8NoBomEncoding.Value, 4096, true)) + { + using var jsonWriter = new JsonTextWriter(writer) + { + Formatting = Formatting.Indented + }; + _store.WriteTo(jsonWriter); + } // using + _file.Flush(true); + _isDirty = false; + } // Save + + public void Close() + { + if (_file == null) return; + + Save(); + _file.Close(); + _file = null; + } // Close + + public void Dispose() + { + Save(); + _file?.Close(); + _file = null; + } // Dispose + + private void OpenFile() + { + if (_file != null) return; + + _file = new FileStream(_storePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read, 4096); + _file.Seek(0, SeekOrigin.Begin); + } // OpenFile + + private object Get(SettingsProperty property) + { + if (_store.TryGetValue(property.Name, out var value)) + { + return value.ToObject(property.PropertyType, _serializer); + } // if + + return property.DefaultValue; + } // Get + + private void Set(SettingsProperty property, object value) + { + if (value == null) + { + if (!_store.ContainsKey(property.Name)) return; + + _store.Remove(property.Name); + } + else + { + _store[property.Name] = JToken.FromObject(value, _serializer); + } // if-else + + _isDirty = true; + } // Set + + private void CreateEmptyStore() + { + _store = new JObject(); + _isDirty = true; + _file = new FileStream(_storePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read, 4096); + Save(); + _loaded = true; + } // CreateEmptyStore + } // class JsonSettingsStore +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs similarity index 91% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs index 1c498106..9856ddce 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Configuration.Settings.Network.Editors { diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs similarity index 76% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs index f6a2c4ef..29147378 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.cs @@ -1,20 +1,24 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.UiServices.Configuration.Settings.Network.Editors { public partial class NetworkSettingsEditor : UserControl, IConfigurationItemEditor { - private int ManualUpdateLock; + private int _manualUpdateLock; public NetworkSettingsEditor() { @@ -31,15 +35,9 @@ public NetworkSettings Settings #region IConfigurationItemEditor implementation - UserControl IConfigurationItemEditor.UserInterfaceItem - { - get { return this; } - } // IConfigurationItemEditor.UserInterfaceItem + UserControl IConfigurationItemEditor.UserInterfaceItem => this; - bool IConfigurationItemEditor.SupportsWinFormsValidation - { - get { return false; } - } // IConfigurationItemEditor.SupportsWinFormsValidation + bool IConfigurationItemEditor.SupportsWinFormsValidation => false; public bool IsDataChanged { @@ -47,16 +45,13 @@ public bool IsDataChanged protected set; } // IsDataChanged - public bool IsAppRestartNeeded - { - get { return false; } - } // IsAppRestartNeeded + public bool IsAppRestartNeeded => false; bool IConfigurationItemEditor.Validate() { if ((checkBoxEnableMulticastProxy.Enabled) && (parametersEditorMulticastProxy.CommandLine == "")) { - MessageBox.Show(this, Properties.SettingsTexts.NetworkMulticastProxyValidation, Properties.SettingsTexts.NetworkValidationErrorCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + MessageBox.Show(this, Properties.SettingsTexts.NetworkMulticastProxyValidation, Properties.SettingsTexts.NetworkValidationErrorCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } // if @@ -85,19 +80,19 @@ void IConfigurationItemEditor.EditorClosed(bool userCancel) private void NetworkSettingsEditor_Load(object sender, EventArgs e) { - ManualUpdateLock++; + _manualUpdateLock++; checkBoxEnableMulticastProxy.Checked = Settings.MulticastProxy.IsEnabled; parametersEditorMulticastProxy.Enabled = checkBoxEnableMulticastProxy.Checked; parametersEditorMulticastProxy.OpenBraceText = MulticastProxy.ParameterOpenBrace; parametersEditorMulticastProxy.CloseBraceText = MulticastProxy.ParameterCloseBrace; parametersEditorMulticastProxy.CommandLine = Settings.MulticastProxy.ProxyConfiguration; parametersEditorMulticastProxy.ParametersList = Properties.SettingsTexts.NetworkUpdProxyParameters; - ManualUpdateLock--; + _manualUpdateLock--; } // NetworkSettingsEditor_Load private void checkBoxEnableMulticastProxy_CheckedChanged(object sender, EventArgs e) { - if (ManualUpdateLock > 0) return; + if (_manualUpdateLock > 0) return; parametersEditorMulticastProxy.Enabled = checkBoxEnableMulticastProxy.Checked; IsDataChanged = true; @@ -105,8 +100,8 @@ private void checkBoxEnableMulticastProxy_CheckedChanged(object sender, EventArg private void parametersEditorMulticastProxy_CommandLineChanged(object sender, EventArgs e) { - if (ManualUpdateLock > 0) return; - + if (_manualUpdateLock > 0) return; + IsDataChanged = true; } // parametersEditorMulticastProxy_CommandLineChanged } // class NetworkSettingsEditor diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.es.resx similarity index 98% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.es.resx index 0ea087df..99466558 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.es.resx @@ -1,143 +1,143 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - NoControl - - - ¡Advertencia! Las grabaciones existentes ya programadas no utilizarán la nueva configuración del proxy. Es necesario editarlas manualmente. - - - NoControl - - - NoControl - - - - 382, 17 - - - Utilizar un proxy de multifusión para canales de TV con emisión RTP o UDP - - - Proxy de multidifusión - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + NoControl + + + ¡Advertencia! Las grabaciones existentes ya programadas no utilizarán la nueva configuración del proxy. Es necesario editarlas manualmente. + + + NoControl + + + NoControl + + + + 382, 17 + + + Utilizar un proxy de multifusión para canales de TV con emisión RTP o UDP + + + Proxy de multidifusión + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/Editors/NetworkSettingsEditor.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/MulticastProxy.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/MulticastProxy.cs new file mode 100644 index 00000000..909813ba --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/MulticastProxy.cs @@ -0,0 +1,74 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using System; + +namespace IpTviewr.UiServices.Configuration.Settings.Network +{ + [Serializable] + public class MulticastProxy + { + public const string ParameterOpenBrace = "{param:"; + public const string ParameterCloseBrace = "}"; + + public static MulticastProxy GetDefaultSettings() + { + var result = new MulticastProxy() + { + IsEnabled = false, + ProxyConfiguration = "http://proxy-host:8888/{param:protocol}/{param:multicastAddress}:{param:multicastPort}" + }; + + return result; + } // GetDefaultSettings + + public bool IsEnabled + { + get; + set; + } // IsEnabled + + public string ProxyConfiguration + { + get; + set; + } // ProxyConfiguration + + public string GetProxiedLocationUrl(string protocol, string address, ushort port) + { + if (!IsEnabled) + { + return $"{protocol}://@{address}:{port}"; + } // if + + var paramKeys = new[] + { + "protocol", + "protocolU", + "multicastAddress", + "multicastPort" + }; + var paramValues = new[] + { + protocol, + protocol.ToUpperInvariant(), + address, + port.ToString() + }; + var parameters = ArgumentsManager.CreateParameters(paramKeys, paramValues, false); + + return ArgumentsManager.ExpandArgument(ProxyConfiguration, parameters, ParameterOpenBrace, ParameterCloseBrace, StringComparison.CurrentCultureIgnoreCase); + } // GetProxiedLocationUrl + } // class MulticastProxy +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/NetworkSettings.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/NetworkSettings.cs new file mode 100644 index 00000000..51c7f498 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/NetworkSettings.cs @@ -0,0 +1,59 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using System; +using System.Xml.Serialization; +using IpTviewr.Common.Configuration; + +namespace IpTviewr.UiServices.Configuration.Settings.Network +{ + [Serializable] + [XmlRoot("Network", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class NetworkSettings : IConfigurationItem + { + public static NetworkSettings GetDefaultSettings() + { + var result = new NetworkSettings() + { + MulticastProxy = MulticastProxy.GetDefaultSettings() + }; + + return result; + } // GetDefaultSettings + + public MulticastProxy MulticastProxy + { + get; + set; + } // MulticastProxy + + #region IConfigurationItem implementation + + bool IConfigurationItem.SupportsInitialization => false; + + bool IConfigurationItem.SupportsValidation => false; + + InitializationResult IConfigurationItem.Initialize() + { + throw new NotSupportedException(); + } // IConfigurationItem.Initialize + + string IConfigurationItem.Validate(string ownerTag) + { + throw new NotSupportedException(); + } // IConfigurationItem.Validate + + #endregion + } // class NetworkSettings +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs new file mode 100644 index 00000000..35209d85 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs @@ -0,0 +1,65 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; + +namespace IpTviewr.UiServices.Configuration.Settings.Network +{ + public class NetworkSettingsRegistration : IConfigurationItemRegistration + { + public const string ConfigurationGuid = "{BA2C8A80-A12A-48A2-91DE-1615D5CBA791}"; + private static int _myDirectIndex; + + public static NetworkSettings Settings + { + get => AppConfig.Current[_myDirectIndex] as NetworkSettings; + set => AppConfig.Current[_myDirectIndex] = value; + } // Settings + + public Guid Id => new Guid(ConfigurationGuid); + + public bool HasEditor => true; + + public Type ItemType => typeof(NetworkSettings); + + public IConfigurationItem CreateDefault() + { + return NetworkSettings.GetDefaultSettings(); + } // CreateDefault + + public string EditorDisplayName => Properties.SettingsTexts.NetworkDisplayName; + + public string EditorDescription => Properties.SettingsTexts.NetworkDescription; + + public Image EditorImage => Properties.Resources.NetworkSettings_32; + + public int EditorPriority => 9000; + + public IConfigurationItemEditor CreateEditor(IConfigurationItem data) + { + var editor = new Editors.NetworkSettingsEditor() + { + Settings = data as NetworkSettings + }; + + return editor; + } // CreateEditor + + public int DirectIndex + { + get => _myDirectIndex; + set => _myDirectIndex = value; + } // DirectIndex + } // class NetworkSettingsRegistration +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs similarity index 90% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs index fc3dbd9b..4568146a 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.Designer.cs @@ -1,4 +1,17 @@ -namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors { partial class TvPlayerEditorDialog { @@ -86,6 +99,7 @@ private void InitializeComponent() // selectPlayerDialog // this.selectPlayerDialog.DefaultExt = "exe"; + resources.ApplyResources(this.selectPlayerDialog, "selectPlayerDialog"); this.selectPlayerDialog.RestoreDirectory = true; this.selectPlayerDialog.SupportMultiDottedExtensions = true; // @@ -131,4 +145,4 @@ private void InitializeComponent() private Configuration.Editors.ArgumentsEditor argumentsEditor; private System.Windows.Forms.OpenFileDialog selectPlayerDialog; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs similarity index 78% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs index 20086639..905881af 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.cs @@ -1,14 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors @@ -42,7 +46,7 @@ private void TvPlayerEditorDialog_Load(object sender, EventArgs e) } else { - argumentsEditor.Arguments = new string[] + argumentsEditor.Arguments = new[] { "{param:Channel.Url}" }; @@ -88,9 +92,11 @@ private void buttonSelectPlayer_Click(object sender, EventArgs e) if (Player == null) { - Player = new TvPlayer(); - Player.Id = Guid.NewGuid(); - Player.Arguments = argumentsEditor.Arguments; + Player = new TvPlayer + { + Id = Guid.NewGuid(), + Arguments = argumentsEditor.Arguments + }; } // if IsDataChanged = true; @@ -120,7 +126,7 @@ private void buttonOk_Click(object sender, EventArgs e) { if (MessageBox.Show(this, Properties.SettingsTexts.TvPlayerArgumentsListEmpty, - this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, + Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) != DialogResult.Yes) { buttonOk.DialogResult = DialogResult.None; @@ -142,17 +148,24 @@ private void SetPlayerIcon() } // using } // SetPlayerIcon - private string GetPlayerName(string playerPath) + private static string GetPlayerName(string playerPath) { + string playerName = null; + try { var info = System.Diagnostics.FileVersionInfo.GetVersionInfo(playerPath); - return info.FileDescription; + playerName = info.FileDescription; + if (string.IsNullOrEmpty(playerName)) playerName = info.ProductName; } catch { - return Path.GetFileNameWithoutExtension(playerPath); + // ignore } // try-catch + + if (string.IsNullOrEmpty(playerName)) playerName = Path.GetFileNameWithoutExtension(playerPath); + + return playerName; } // GetPlayerName } // class TvPlayerEditorDialog } // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.es.resx similarity index 95% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.es.resx index 9a152c1a..f39ec9b9 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.es.resx @@ -1,132 +1,135 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Aceptar - - - &Cancelar - - - &Seleccionar... - - - Propiedades del reproductor de televisión - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Aceptar + + + &Cancelar + + + &Seleccionar... + + + Programas|*.exe + + + Propiedades del reproductor de televisión + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx similarity index 92% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx index 430c7096..9acb6ef0 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayerEditorDialog.resx @@ -112,23 +112,23 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + Top, Left, Right - + 50, 12 392, 20 - + 8 @@ -136,7 +136,7 @@ textPlayerName - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -160,7 +160,7 @@ textPlayerPath - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -196,7 +196,7 @@ buttonOk - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -232,7 +232,7 @@ buttonCancel - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -268,7 +268,7 @@ buttonSelectPlayer - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -295,7 +295,7 @@ picturePlayerIcon - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -303,9 +303,12 @@ 4 - + 17, 17 + + Programs|*.exe + Top, Bottom, Left, Right @@ -322,7 +325,7 @@ argumentsEditor - IpTviewr.UiServices.Configuration.Editors.ArgumentsEditor, UiServices.Configuration, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Configuration.Editors.ArgumentsEditor, UiServices.Configuration, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -330,7 +333,7 @@ 0 - + True @@ -339,6 +342,9 @@ 454, 282 + + NoControl + CenterParent @@ -349,12 +355,12 @@ selectPlayerDialog - System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 TvPlayerEditorDialog - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs similarity index 95% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs index 806f3bb7..34ed451b 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs new file mode 100644 index 00000000..9449dc60 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs @@ -0,0 +1,231 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors +{ + public partial class TvPlayersSettingsEditor : UserControl, IConfigurationItemEditor + { + private int _manualUpdateLock; + private List _players; + + public TvPlayersSettingsEditor() + { + InitializeComponent(); + } // constructor + + public TvPlayersSettings Settings + { + get; + set; + } // Settings + + #region IConfigurationItemEditor implementation + + UserControl IConfigurationItemEditor.UserInterfaceItem => this; + + bool IConfigurationItemEditor.SupportsWinFormsValidation => false; + + public bool IsDataChanged + { + get; + protected set; + } // IsDataChanged + + public bool IsAppRestartNeeded => false; + + bool IConfigurationItemEditor.Validate() + { + return true; + } // IConfigurationItemEditor.Validate + + IConfigurationItem IConfigurationItemEditor.GetNewData() + { + Settings.Players = _players.ToArray(); + + return Settings; + } // IConfigurationItemEditor.GetNewData + + void IConfigurationItemEditor.EditorClosing(out bool cancelClose) + { + cancelClose = false; + } // IConfigurationItemEditor.EditorClosing + + void IConfigurationItemEditor.EditorClosed(bool userCancel) + { + // no op + } // IConfigurationItemEditor.EditorClosed + + #endregion + + private void TvPlayersSettingsEditor_Load(object sender, EventArgs e) + { + listViewPlayers.SmallImageList = TvPlayersSettingsRegistration.Settings.PlayerIcons; + listViewPlayers.LargeImageList = TvPlayersSettingsRegistration.Settings.PlayerIcons; + + buttonEdit.Enabled = false; + buttonDelete.Enabled = false; + buttonSetDefault.Enabled = false; + + var tilesPerRow = 2; + listViewPlayers.TileSize = new Size((listViewPlayers.Width - SystemInformation.VerticalScrollBarWidth - 6) / tilesPerRow, + Settings.PlayerIcons.ImageSize.Height + 4); + + _manualUpdateLock++; + labelDefaultPlayer.Text = Settings.GetDefaultPlayer().Name; + checkBoxShortcut.Checked = !Settings.DirectLaunch; + _manualUpdateLock--; + + _players = new List(Settings.Players); + FillList(false, true); + } // TvPlayersSettingsEditor_Load + + private void listViewPlayers_SelectedIndexChanged(object sender, EventArgs e) + { + var player = (listViewPlayers.SelectedItems.Count > 0) ? (TvPlayer)listViewPlayers.SelectedItems[0].Tag : null; + + buttonEdit.Enabled = player != null; + buttonDelete.Enabled = player != null; + buttonSetDefault.Enabled = player != null; + + if (player == null) return; + + buttonDelete.Enabled = player.Id != Settings.DefaultPlayerId; + buttonSetDefault.Enabled = player.Id != Settings.DefaultPlayerId; + } // listViewPlayers_SelectedIndexChanged + + private void listViewPlayers_DoubleClick(object sender, EventArgs e) + { + buttonEdit.PerformClick(); + } // listViewPlayers_DoubleClick + + private void buttonEdit_Click(object sender, EventArgs e) + { + var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; + if (item == null) return; + + using var editor = new TvPlayerEditorDialog + { + Player = (TvPlayer) item.Tag + }; + if (editor.ShowDialog(this) != DialogResult.OK) return; + if (!editor.IsDataChanged) return; + + FillList(true, false); + IsDataChanged = true; + } // buttonEdit_Click + + private void buttonDelete_Click(object sender, EventArgs e) + { + var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; + if (item == null) return; + + var player = (TvPlayer)item.Tag; + + if (MessageBox.Show(this, + string.Format(Properties.SettingsTexts.TvPlayerDelete, player.Name), + Properties.SettingsTexts.TvPlayerDeleteCaption, + MessageBoxButtons.YesNo, MessageBoxIcon.Question, + MessageBoxDefaultButton.Button2) != DialogResult.Yes) return; + + item.Selected = false; + _players.Remove(player); + IsDataChanged = true; + FillList(false, false); + } // buttonDelete_Click + + private void buttonSetDefault_Click(object sender, EventArgs e) + { + var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; + if (item == null) return; + + var player = (TvPlayer)item.Tag; + Settings.DefaultPlayerId = player.Id; + IsDataChanged = true; + labelDefaultPlayer.Text = player.Name; + + // update list + FillList(true, true); + } // buttonSetDefault_Click + + private void buttonAdd_Click(object sender, EventArgs e) + { + using var editor = new TvPlayerEditorDialog(); + + if (editor.ShowDialog(this) != DialogResult.OK) return; + if (!editor.IsDataChanged) return; + + _players.Add(editor.Player); + FillList(false, false); + listViewPlayers.Items[listViewPlayers.Items.Count - 1].Selected = true; + } // buttonAdd_Click + + private void checkBoxShortcut_CheckedChanged(object sender, EventArgs e) + { + Settings.DirectLaunch = !checkBoxShortcut.Checked; + IsDataChanged = true; + } // checkBoxShortcut_CheckedChanged + + private void FillList(bool keepSelection, bool selectDefault) + { + FillList(listViewPlayers, _players, Settings.DefaultPlayerId, keepSelection, selectDefault, false); + } // FillList + + internal static void FillList(ListView list, ICollection players, Guid defaultPlayerId, bool keepSelection, bool selectDefault, bool ignoreMissingPlayers) + { + var selectedIndex = (list.SelectedItems.Count > 0) ? list.SelectedItems[0].Index : -1; + + list.BeginUpdate(); + list.Items.Clear(); + + foreach (var player in players) + { + var item = GetTvPlayerListItem(player, defaultPlayerId, list.Font, selectDefault); + if (!ignoreMissingPlayers || (item.ImageKey != TvPlayersSettings.PlayerNotFoundKey)) + { + list.Items.Add(item); + } + } // foreach + + if ((selectedIndex >= 0) && (keepSelection)) + { + list.Items[selectedIndex].Selected = true; + } // if + + list.EndUpdate(); + } // FillList + + private static ListViewItem GetTvPlayerListItem(TvPlayer player, Guid defaultPlayerId, Font listFont, bool selectDefault) + { + var item = new ListViewItem(player.Name) + { + Tag = player, + ImageKey = TvPlayersSettingsRegistration.Settings.GetPlayerIconKey(player.Path) + }; + + if (player.Id != defaultPlayerId) return item; + + item.Font = new Font(listFont, FontStyle.Bold); + if (selectDefault) + { + item.Selected = true; + } // if + + return item; + } // GetTvPlayerListItem + } // class TvPlayersSettingsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.es.resx index 7e1f41fb..9be373a6 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.es.resx @@ -1,151 +1,151 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Reproductor de televisión por defecto - - - &Añadir... - - - Por &defecto - - - &Eliminar... - - - &Editar... - - - Reproductores de televisión - - - Lanzar el reproductor con un acceso directo permite visualizar el icono del logotipo del canal en la barra de tareas, en lugar de mostrar el icono del reproductor. - - - - 268, 17 - - - Ejecutar el reproductor utilizando un acceso directo - - - Opciones - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Reproductor de televisión por defecto + + + &Añadir... + + + Por &defecto + + + &Eliminar... + + + &Editar... + + + Reproductores de televisión + + + Lanzar el reproductor con un acceso directo permite visualizar el icono del logotipo del canal en la barra de tareas, en lugar de mostrar el icono del reproductor. + + + + 268, 17 + + + Ejecutar el reproductor utilizando un acceso directo + + + Opciones + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.resx index 1111d69f..ead31f12 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.resx @@ -1,507 +1,507 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - - Top, Left, Right - - - Top, Left, Right - - - - 6, 16 - - - 452, 22 - - - - 0 - - - (Default player) - - - labelDefaultPlayer - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupDefaultPlayer - - - 0 - - - 3, 3 - - - 464, 41 - - - 0 - - - Default TV player - - - groupDefaultPlayer - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Top, Bottom, Left, Right - - - Bottom, Right - - - MiddleRight - - - NoControl - - - 358, 152 - - - 100, 25 - - - 4 - - - &Add new... - - - ImageBeforeText - - - buttonAdd - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPlayers - - - 0 - - - Bottom, Left - - - MiddleRight - - - NoControl - - - 218, 152 - - - 100, 25 - - - 3 - - - &Set default - - - ImageBeforeText - - - buttonSetDefault - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPlayers - - - 1 - - - Bottom, Left - - - MiddleRight - - - NoControl - - - 112, 152 - - - 100, 25 - - - 2 - - - &Delete... - - - ImageBeforeText - - - buttonDelete - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPlayers - - - 2 - - - Bottom, Left - - - MiddleRight - - - NoControl - - - 6, 152 - - - 100, 25 - - - 1 - - - &Edit... - - - ImageBeforeText - - - buttonEdit - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPlayers - - - 3 - - - Top, Bottom, Left, Right - - - 6, 19 - - - 452, 127 - - - 0 - - - listViewPlayers - - - System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPlayers - - - 4 - - - 3, 50 - - - 464, 183 - - - 1 - - - TV players - - - groupPlayers - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Bottom, Left, Right - - - Top, Left, Right - - - NoControl - - - 28, 42 - - - 430, 32 - - - 1 - - - Launching the player using a shortcut allows to display the channel logo icon in the taskbar, instead of displaying the player icon. - - - labelInfo - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupOptions - - - 0 - - - NoControl - - - 6, 42 - - - 16, 16 - - - CenterImage - - - 4 - - - pictureIconInfo - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupOptions - - - 1 - - - True - - - 9, 19 - - - 171, 17 - - - 0 - - - Launch player using a shortcut - - - checkBoxShortcut - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupOptions - - - 2 - - - 3, 239 - - - 464, 78 - - - 2 - - - Options - - - groupOptions - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 470, 320 - - - columnHeader1 - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - TvPlayersSettingsEditor - - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + + Top, Left, Right + + + Top, Left, Right + + + + 6, 16 + + + 452, 22 + + + + 0 + + + (Default player) + + + labelDefaultPlayer + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupDefaultPlayer + + + 0 + + + 3, 3 + + + 464, 41 + + + 0 + + + Default TV player + + + groupDefaultPlayer + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Top, Bottom, Left, Right + + + Bottom, Right + + + MiddleRight + + + NoControl + + + 358, 152 + + + 100, 25 + + + 4 + + + &Add new... + + + ImageBeforeText + + + buttonAdd + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPlayers + + + 0 + + + Bottom, Left + + + MiddleRight + + + NoControl + + + 218, 152 + + + 100, 25 + + + 3 + + + &Set default + + + ImageBeforeText + + + buttonSetDefault + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPlayers + + + 1 + + + Bottom, Left + + + MiddleRight + + + NoControl + + + 112, 152 + + + 100, 25 + + + 2 + + + &Delete... + + + ImageBeforeText + + + buttonDelete + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPlayers + + + 2 + + + Bottom, Left + + + MiddleRight + + + NoControl + + + 6, 152 + + + 100, 25 + + + 1 + + + &Edit... + + + ImageBeforeText + + + buttonEdit + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPlayers + + + 3 + + + Top, Bottom, Left, Right + + + 6, 19 + + + 452, 127 + + + 0 + + + listViewPlayers + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupPlayers + + + 4 + + + 3, 50 + + + 464, 183 + + + 1 + + + TV players + + + groupPlayers + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Bottom, Left, Right + + + Top, Left, Right + + + NoControl + + + 28, 42 + + + 430, 32 + + + 1 + + + Launching the player using a shortcut allows to display the channel logo icon in the taskbar, instead of displaying the player icon. + + + labelInfo + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupOptions + + + 0 + + + NoControl + + + 6, 42 + + + 16, 16 + + + CenterImage + + + 4 + + + pictureIconInfo + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupOptions + + + 1 + + + True + + + 9, 19 + + + 171, 17 + + + 0 + + + Launch player using a shortcut + + + checkBoxShortcut + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupOptions + + + 2 + + + 3, 239 + + + 464, 78 + + + 2 + + + Options + + + groupOptions + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 470, 320 + + + columnHeader1 + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + TvPlayersSettingsEditor + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs similarity index 89% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs index 3bffe085..74c318f3 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.Designer.cs @@ -1,4 +1,17 @@ -namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers { partial class SelectTvPlayerDialog { @@ -98,4 +111,4 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonOk; private System.Windows.Forms.ListView listViewPlayers; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs new file mode 100644 index 00000000..90f7b073 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs @@ -0,0 +1,60 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers +{ + public partial class SelectTvPlayerDialog : Form + { + public SelectTvPlayerDialog() + { + InitializeComponent(); + } // constructor + + public TvPlayer SelectedPlayer + { + get; + private set; + } // SelectedPlayer + + private void SelectTvPlayerDialog_Load(object sender, EventArgs e) + { + var settings = TvPlayersSettingsRegistration.Settings; + + buttonOk.Enabled = false; + + listViewPlayers.SmallImageList = settings.PlayerIcons; + listViewPlayers.LargeImageList = settings.PlayerIcons; + listViewPlayers.TileSize = new Size((listViewPlayers.Width - SystemInformation.VerticalScrollBarWidth - 6), + settings.PlayerIcons.ImageSize.Height + 4); + + TvPlayersSettingsEditor.FillList(listViewPlayers, settings.Players, settings.DefaultPlayerId, false, true, true); + } // SelectTvPlayerDialog_Load + + private void listViewPlayers_SelectedIndexChanged(object sender, EventArgs e) + { + SelectedPlayer = (listViewPlayers.SelectedItems.Count > 0) ? (TvPlayer)listViewPlayers.SelectedItems[0].Tag : null; + buttonOk.Enabled = (SelectedPlayer != null); + } // listViewPlayers_SelectedIndexChanged + + private void listViewPlayers_DoubleClick(object sender, EventArgs e) + { + buttonOk.PerformClick(); + } // listViewPlayers_DoubleClick + } // class SelectTvPlayerDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.es.resx index 3395d874..b5fda9cf 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.es.resx @@ -1,133 +1,133 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Cancelar - - - &Aceptar - - - - CenterParent - - - Seleccione un reproductor de TV - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Cancelar + + + &Aceptar + + + + CenterParent + + + Seleccione un reproductor de TV + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.resx index d5227a90..efb75a9b 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.resx @@ -1,249 +1,249 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 9 - - - &Cancel - - - - 6, 13 - - - - NoControl - - - 100, 25 - - - ImageBeforeText - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 7 - - - Bottom, Right - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - 0 - - - $this - - - Bottom, Right - - - 8 - - - ImageBeforeText - - - 1 - - - 116, 225 - - - 334, 262 - - - buttonOk - - - 12, 12 - - - buttonCancel - - - NoControl - - - columnHeader1 - - - 100, 25 - - - MiddleRight - - - SelectTvPlayerDialog - - - $this - - - MiddleRight - - - System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - &Ok - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 310, 207 - - - 222, 225 - - - listViewPlayers - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Select TV player - - - Top, Bottom, Left, Right - - - True - - - es - - - False - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 9 + + + &Cancel + + + + 6, 13 + + + + NoControl + + + 100, 25 + + + ImageBeforeText + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 7 + + + Bottom, Right + + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + 0 + + + $this + + + Bottom, Right + + + 8 + + + ImageBeforeText + + + 1 + + + 116, 225 + + + 334, 262 + + + buttonOk + + + 12, 12 + + + buttonCancel + + + NoControl + + + columnHeader1 + + + 100, 25 + + + MiddleRight + + + SelectTvPlayerDialog + + + $this + + + MiddleRight + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + &Ok + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 310, 207 + + + 222, 225 + + + listViewPlayers + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Select TV player + + + Top, Bottom, Left, Right + + + True + + + es + + + False + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/TvPlayer.cs similarity index 82% rename from 1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/TvPlayer.cs index ca4a9914..63cbf051 100644 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/TvPlayer.cs @@ -1,11 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.UiServices.Configuration.Schema2014.Config; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Xml.Serialization; namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers @@ -57,20 +64,22 @@ internal string Validate(string ownerTag) { return ConfigCommon.ErrorMissingEmpty("Path", ownerTag, "name", Name); } // if + /* if (!System.IO.File.Exists(Path)) { return string.Format(Properties.Texts.PlayerConfigValidationPathNotFound, Name, Path); } // if + */ var validationError = ConfigCommon.ValidateArray(Arguments, "Argument", "Arguments", ownerTag); if (validationError != null) return validationError; - for (int index = 0; index < Arguments.Length; index++) + for (var index = 0; index < Arguments.Length; index++) { Arguments[index] = ConfigCommon.Normalize(Arguments[index]); if (string.IsNullOrEmpty(Arguments[index])) { - ConfigCommon.ErrorMissingEmpty("Argument", "Arguments"); ; + ConfigCommon.ErrorMissingEmpty("Argument", "Arguments"); } // if } // for diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs new file mode 100644 index 00000000..9df7e966 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs @@ -0,0 +1,155 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using System; +using System.Drawing; +using System.IO; +using System.Windows.Forms; +using System.Xml.Serialization; +using IpTviewr.Common.Configuration; +using IpTviewr.UiServices.Configuration.Properties; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers +{ + [XmlRoot("TvPlayers", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class TvPlayersSettings : IConfigurationItem + { + internal const string PlayerNoIconKey = ""; + internal const string PlayerNotFoundKey = ""; + + private TvPlayer _defaultPlayer; + private Guid _defaultPlayerGuid; + + public TvPlayersSettings() + { + PlayerIcons = new ImageList + { + ImageSize = new Size(32, 32), + ColorDepth = ColorDepth.Depth32Bit + }; + } // constructor + + public Guid DefaultPlayerId + { + get => _defaultPlayerGuid; + set + { + _defaultPlayerGuid = value; + _defaultPlayer = null; + } // set + } // DefaultPlayerId + + public bool DirectLaunch + { + get; + set; + } // DirectLaunch + + [XmlArray("Players", Namespace = ConfigCommon.ConfigXmlNamespace)] + [XmlArrayItem("Player")] + public TvPlayer[] Players + { + get; + set; + } // Players + + public TvPlayer GetDefaultPlayer() + { + if (_defaultPlayer == null) + { + foreach (var player in Players) + { + if (player.Id == _defaultPlayerGuid) + { + _defaultPlayer = player; + break; + } // if + } // foreach + } // if + + return _defaultPlayer; + } // GetDefaultPlayer + + [XmlIgnore] + public ImageList PlayerIcons + { + get; + private set; + } // PlayerIcons + + public string GetPlayerIconKey(string playerPath) + { + if (PlayerIcons.Images.ContainsKey(playerPath)) return playerPath; + + Icon icon = null; + var key = playerPath; + + if (File.Exists(playerPath)) + { + try + { + icon = Icon.ExtractAssociatedIcon(playerPath); + } + catch + { + // ignore + } // try-catch + + if (icon == null) + { + key = PlayerNoIconKey; + if (PlayerIcons.Images.ContainsKey(key)) return key; + + icon = Resources.GenericFile; + } + } + else + { + key = PlayerNotFoundKey; + if (PlayerIcons.Images.ContainsKey(key)) return key; + + icon = Resources.NotFound; + } // if-else + + PlayerIcons.Images.Add(key, icon); + + return key; + } // GetPlayerIconKey + + public Image GetPlayerIcon(string playerPath) + { + var key = GetPlayerIconKey(playerPath); + return PlayerIcons.Images[key]; + } // GetPlayerIcon + + #region IConfigurationItem implementation + + bool IConfigurationItem.SupportsInitialization => false; + + bool IConfigurationItem.SupportsValidation => true; + + InitializationResult IConfigurationItem.Initialize() + { + throw new NotSupportedException(); + } // IConfigurationItem.Initialize + + string IConfigurationItem.Validate(string ownerTag) + { + var validationError = TvPlayer.ValidateArray(Players, "Player", "Players", ownerTag); + return validationError ?? null; + } // IConfigurationItem.Validate + + #endregion + } // class TvPlayersSettings +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs new file mode 100644 index 00000000..8d624e9f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs @@ -0,0 +1,68 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; + +namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers +{ + public class TvPlayersSettingsRegistration : IConfigurationItemRegistration + { + public const string ConfigurationGuid = "{AE75DE5D-11A9-4B0F-9EFB-242E70C022C9}"; + private static int _myDirectIndex; + + public static TvPlayersSettings Settings + { + get => AppConfig.Current[_myDirectIndex] as TvPlayersSettings; + set => AppConfig.Current[_myDirectIndex] = value; + } // Settings + + public Guid Id => new Guid(ConfigurationGuid); + + public bool HasEditor => true; + + public Type ItemType + // GetItemType + => + typeof(TvPlayersSettings); + + public IConfigurationItem CreateDefault() + { + return null; + } // CreateDefault + + public string EditorDisplayName => Properties.SettingsTexts.TvPlayersDisplayName; + + public string EditorDescription => Properties.SettingsTexts.TvPlayersDescription; + + public Image EditorImage => Properties.Resources.TvPlayersSettings_32; + + public int EditorPriority => 250; + + public IConfigurationItemEditor CreateEditor(IConfigurationItem data) + { + var editor = new Editors.TvPlayersSettingsEditor() + { + Settings = data as TvPlayersSettings + }; + + return editor; + } // CreateEditor + + public int DirectIndex + { + get => _myDirectIndex; + set => _myDirectIndex = value; + } // DirectIndex + } // class TvPlayersSettingsRegistration +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/StringPair.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/StringPair.cs new file mode 100644 index 00000000..35829c99 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/StringPair.cs @@ -0,0 +1,131 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration +{ + [Serializable] + public class StringPair + { + private int? _hashCode; + private string _item1, _item2; + + public StringPair() + { + // no op + } // constructor + + public StringPair(string item1, string item2) + { + _item1 = item1; + _item2 = item2; + } // constructor + + [XmlIgnore] + public string Item1 + { + get => _item1; + set + { + _item1 = value; + CalcHashCode(); + } // set + } // Item1 + + [XmlIgnore] + public string Item2 + { + get => _item2; + set + { + _item2 = value; + CalcHashCode(); + } // set + } // Item2 + + public string this[int index] + { + get + { + switch (index) + { + case 0: return Item1; + case 1: return Item2; + default: + throw new ArgumentOutOfRangeException(); + } // switch + } // get + set + { + switch (index) + { + case 0: Item1 = value; break; + case 1: Item2 = value; break; + default: + throw new ArgumentOutOfRangeException(); + } // switch + } // set + } // this[int] + + public void SetPair(string item1, string item2) + { + _item1 = item1; + _item2 = item2; + CalcHashCode(); + } // SetPair + + public override int GetHashCode() + { + if (!_hashCode.HasValue) + { + CalcHashCode(); + } // if + + return _hashCode.Value; + } // GetHashCode + + public override string ToString() + { + return $"<{Item1}, {Item2}>"; + } // ToString + + public override bool Equals(object obj) + { + var pair = obj as StringPair; + + if (ReferenceEquals(this, obj)) return true; + if (pair == null) return false; + + return ((pair.Item1 == Item1) && (pair.Item2 == Item2)); + } // Equals + + public static bool operator == (StringPair a, StringPair b) + { + if (ReferenceEquals(a, b)) return true; + if ((a == null) || (b == null)) return false; + return ((a.Item1 == b.Item1) && (a.Item2 == b.Item2)); + } // operator == + + public static bool operator !=(StringPair a, StringPair b) + { + return !(a == b); + } // operator != + + private void CalcHashCode() + { + _hashCode = ToString().GetHashCode(); + } // CalcHashCode + } // StringPair +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiContentProvider.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiContentProvider.cs new file mode 100644 index 00000000..47bed510 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiContentProvider.cs @@ -0,0 +1,55 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; +using System; +using System.Collections.Generic; + +namespace IpTviewr.UiServices.Configuration +{ + public class UiContentProvider + { + public UiContentProviderIdentification Identification + { + get; + protected set; + } // Identification + + public UiContentProviderFriendlyNames FriendlyNames + { + get; + protected set; + } // FriendlyNames + + public BootstrapData Bootstrap + { + get; + protected set; + } // Bootstrap + + public static UiContentProvider FromXmlConfiguration(IpTvProviderData contentProvider, IEnumerable uiCultures) + { + if (contentProvider == null) throw new ArgumentNullException(); + if (uiCultures == null) throw new ArgumentNullException(); + + var result = new UiContentProvider + { + Identification = UiContentProviderIdentification.FromXmlConfiguration(contentProvider.Identification, uiCultures), + FriendlyNames = UiContentProviderFriendlyNames.FromXmlConfiguration(contentProvider.FriendlyNames, uiCultures), + Bootstrap = contentProvider.Bootstrap + }; + + return result; + } // FromXmlConfiguration + } // class UiContentProvider +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiContentProviderFriendlyNames.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiContentProviderFriendlyNames.cs new file mode 100644 index 00000000..06f76c3a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiContentProviderFriendlyNames.cs @@ -0,0 +1,62 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; +using System; +using System.Collections.Generic; + +namespace IpTviewr.UiServices.Configuration +{ + public class UiContentProviderFriendlyNames + { + public IDictionary ServiceProvider + { + get; + protected set; + } // ServiceProvider + + public static UiContentProviderFriendlyNames FromXmlConfiguration(FriendlyNames friendlyNames, IEnumerable uiCultures) + { + if (friendlyNames == null) throw new ArgumentNullException(); + if (uiCultures == null) throw new ArgumentNullException(); + + var result = new UiContentProviderFriendlyNames + { + ServiceProvider = FromSpFriendlyNames(friendlyNames.Providers, uiCultures) + }; + + return result; + } // FromXmlConfiguration + + private static IDictionary FromSpFriendlyNames(SpFriendlyNames[] spNames, IEnumerable uiCultures) + { + if ((spNames == null) || (spNames.Length == 0)) + { + return new Dictionary(); + } // if + + // get list of localized names; if no culture was matched, get the first item of the array (we asume it's the default culture) + var matching = LocalizedObject.FindMatchingCultureObject(spNames, uiCultures); + var localizedNames = (matching != null) ? matching.Names : spNames[0].Names; + + // populate dictionary + var result = new Dictionary(localizedNames.Length, StringComparer.InvariantCultureIgnoreCase); + foreach (var serviceProvider in localizedNames) + { + result.Add(serviceProvider.Domain, serviceProvider.Name); + } // foreach + + return result; + } // LoadServiceProvider + } // class UiContentProviderFriendlyNames +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiContentProviderIdentification.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiContentProviderIdentification.cs new file mode 100644 index 00000000..739abdae --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiContentProviderIdentification.cs @@ -0,0 +1,71 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; +using System; +using System.Collections.Generic; + +namespace IpTviewr.UiServices.Configuration +{ + public class UiContentProviderIdentification + { + public string Id + { + get; + protected set; + } // Id + + public string DisplayName + { + get; + protected set; + } // DisplayName + + public string DisplayDescription + { + get; + protected set; + } // DisplayDescription + + public string LogosPackage + { + get; + protected set; + } // LogosPackage + + public static UiContentProviderIdentification FromXmlConfiguration(Identification identification, IEnumerable uiCultures) + { + if (identification == null) throw new ArgumentNullException(); + if (uiCultures == null) throw new ArgumentNullException(); + + var result = new UiContentProviderIdentification + { + + // id + Id = identification.Id + }; + + // identification + var matching = LocalizedObject.FindMatchingCultureObject(identification.Localized, uiCultures); + var localized = matching ?? identification.Localized[0]; + + result.DisplayName = localized.Name; + result.DisplayDescription = localized.Description; + + // packages names + result.LogosPackage = identification.LogosPackageName; + + return result; + } // FromXmlConfiguration + } // class UiContentProviderIdentification +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiServices.Config.csproj b/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiServices.Config.csproj new file mode 100644 index 00000000..08f8e882 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/UiServices.Config.csproj @@ -0,0 +1,429 @@ + + + + + Debug + AnyCPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75} + Library + Properties + IpTviewr.UiServices.Configuration + UiServices.Configuration + v4.6.2 + 512 + SAK + SAK + SAK + SAK + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + 8.0 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + 8.0 + + + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + + + ..\..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + ..\..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + True + True + CommonUiResources.resx + + + Form + + + ConfigurationForm.cs + + + UserControl + + + ArgumentsEditor.cs + + + UserControl + + + ArgumentEditor.cs + + + Form + + + ArgumentEditorDialog.cs + + + + + + + + + + + True + True + InvariantTexts.resx + + + True + True + Resources.resx + + + + + + + + + Form + + + PushForm.cs + + + Form + + + UpdatesForm.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + Texts.resx + + + True + True + SettingsTexts.resx + + + + + UserControl + + + NetworkSettingsEditor.cs + + + + + + Form + + + TvPlayerEditorDialog.cs + + + UserControl + + + TvPlayersSettingsEditor.cs + + + Form + + + SelectTvPlayerDialog.cs + + + + + + + + + + + + + ResXFileCodeGenerator + Designer + CommonUiResources.Designer.cs + + + ConfigurationForm.cs + + + ConfigurationForm.cs + + + ArgumentsEditor.cs + + + ArgumentsEditor.cs + + + ArgumentEditor.cs + + + ArgumentEditor.cs + + + ArgumentEditorDialog.cs + + + ArgumentEditorDialog.cs + + + ResXFileCodeGenerator + InvariantTexts.Designer.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + + + Designer + + + ResXFileCodeGenerator + Texts.Designer.cs + Designer + + + + ResXFileCodeGenerator + SettingsTexts.Designer.cs + + + PushForm.cs + + + PushForm.cs + + + UpdatesForm.cs + + + NetworkSettingsEditor.cs + + + NetworkSettingsEditor.cs + + + TvPlayerEditorDialog.cs + + + TvPlayerEditorDialog.cs + + + TvPlayersSettingsEditor.cs + + + TvPlayersSettingsEditor.cs + + + SelectTvPlayerDialog.cs + + + SelectTvPlayerDialog.cs + + + + + + + + + + + + + + + + + + + + + + + + + + Resources\Action_Add_16xM.png + + + Resources\Action_AttachFile_16x16.png + + + Resources\Action_Cancel_16x16.png + + + Resources\Action_Delete_16x16.png + + + Resources\Action_GoNextDown_16x16.png + + + Resources\Action_GoPreviousUp_16x16.png + + + Resources\Action_Ok_16x16.png + + + Resources\Action_Properties_16x16.png + + + Resources\Action_Property_Add_16x16.png + + + Resources\Action_Property_Edit_16x16.png + + + Resources\Status_Info_16x16.png + + + Resources\Status_Ok_SmallCircle_16x16.png + + + Resources\Status_Warning_16x16.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA} + IpTviewr.IpTvServices + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common + + + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} + UiServices.Common + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/XmlConfigurationItems.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Config/XmlConfigurationItems.cs new file mode 100644 index 00000000..f83c46a4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/XmlConfigurationItems.cs @@ -0,0 +1,56 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Configuration +{ + [Serializable] + public class XmlConfigurationItems + { + public static XmlElement GetXmlElement(Guid id, IConfigurationItem item) + { + var xDoc = new XmlDocument(); + var xNavigator = xDoc.CreateNavigator(); + using (var writer = xNavigator.AppendChild()) + { + var ser = new XmlSerializer(item.GetType()); + ser.Serialize(writer, item); + } // using + + var xAttr = xDoc.CreateAttribute("configurationId"); + xAttr.Value = id.ToString(); + xDoc.DocumentElement.Attributes.Append(xAttr); + + return xDoc.DocumentElement; + } // GetXmlElement + + [XmlArray("Registry")] + [XmlArrayItem("Type")] + public List Registry + { + get; + set; + } // Registry + + [XmlAnyElement] + public List XmlData + { + get; + set; + } // XmlData + } // class XmlConfigurationItems +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/licensing.xml b/1.5 'Kruger 60'/Assemblies/UiServices.Config/licensing.xml new file mode 100644 index 00000000..c9e835ca --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/licensing.xml @@ -0,0 +1,190 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Config/packages.config b/1.5 'Kruger 60'/Assemblies/UiServices.Config/packages.config new file mode 100644 index 00000000..78ce461e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Config/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs new file mode 100644 index 00000000..250bcb19 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs @@ -0,0 +1,25 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal interface ISettingsEditor + { + void SetContainer(ISettingsEditorContainer container); + + bool IsDataChanged + { + get; + } // IsDataChanged + } // internal interface ISettingsEditor +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs new file mode 100644 index 00000000..488f933a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal interface ISettingsEditorContainer + { + void SetDataChanged(); + } // internal interface ISettingsEditorContainer +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs new file mode 100644 index 00000000..7deddda5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs @@ -0,0 +1,43 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal interface ISettingsEditorModeColumns : ISettingsEditor + { + List> ColumnsList + { + set; + } // ColumnsList + + List> ColumnsNoneList + { + set; + } // ColumnsNoneList + + IList Columns + { + set; + } // Columns + + List SelectedColumns + { + get; + } // SelectedColumns + + Control GetUnderlyingControl(); + } // internal interface ISettingsEditorModeColumns +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs new file mode 100644 index 00000000..c9b40875 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal class SettingsEditorBaseUserControl : UserControl, ISettingsEditor + { + private ISettingsEditorContainer EditorContainer + { + get; + set; + } // EditorContainer + + #region ISettingsEditor implementation + + public void SetContainer(ISettingsEditorContainer container) + { + EditorContainer = container; + } // SetContainer + + public bool IsDataChanged + { + get; + private set; + } // IsDataChanged + + #endregion + + protected void SetDataChanged() + { + IsDataChanged = true; + EditorContainer?.SetDataChanged(); + } // SetDataChanged + } // internal class SettingsEditorBaseUserControl +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs new file mode 100644 index 00000000..1373ec42 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs @@ -0,0 +1,53 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal class SettingsEditorModeBaseColumn : SettingsEditorBaseUserControl, ISettingsEditorModeColumns + { + #region ISettingsEditorModeColumns implementation + + public List> ColumnsList + { + protected get; + set; + } // Columns + + public List> ColumnsNoneList + { + protected get; + set; + } // Columns + + public IList Columns + { + protected get; + set; + } // Columns + + // class should be abstract and this method as well + // however, being a UserControl, it can't be abstract to be used by WinForms designers + public virtual List SelectedColumns => throw new NotImplementedException(); + + public Control GetUnderlyingControl() + { + return this; + } // GetUnderlyingControl + + #endregion + } // SettingsEditorModeBaseColumn +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs similarity index 93% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs index 180979f3..7ee67a81 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs new file mode 100644 index 00000000..158be42a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs @@ -0,0 +1,66 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using IpTviewr.UiServices.Common.Controls; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal partial class SettingsEditorModeMultiColumn : SettingsEditorModeBaseColumn + { + private ListItemsManager _itemsManager; + + public SettingsEditorModeMultiColumn() + { + InitializeComponent(); + } // constructor + + public override List SelectedColumns => _itemsManager.GetListValues(); + + private void SettingsEditorModeMultiColumn_Load(object sender, EventArgs e) + { + _itemsManager = new ListItemsManager(listSelectedColumns, buttonRemove, buttonMoveUp, buttonMoveDown); + + comboColumns.DataSource = ColumnsList.AsReadOnly(); + buttonAddColumn.Enabled = (comboColumns.Items.Count > 0); + + _itemsManager.SetValueDictionary(ColumnsList, null); + _itemsManager.Add(Columns); + } // SettingsEditorModeMultiColumn_Load + + private void buttonAddColumn_Click(object sender, EventArgs e) + { + _itemsManager.Add((UiBroadcastListColumn)comboColumns.SelectedValue); + SetDataChanged(); + } // buttonAddColumn_Click + + private void buttonRemove_Click(object sender, EventArgs e) + { + _itemsManager.RemoveSelection(); + SetDataChanged(); + } // buttonRemove_Click + + private void buttonMoveUp_Click(object sender, EventArgs e) + { + _itemsManager.MoveSelectionUp(); + SetDataChanged(); + } // buttonMoveUp_Click + + private void buttonMoveDown_Click(object sender, EventArgs e) + { + _itemsManager.MoveSelectionDown(); + SetDataChanged(); + } // buttonMoveDown_Click + } // class SettingsEditorModeMultiColumn +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.es.resx index ebfb2140..0cf90db1 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.es.resx @@ -1,135 +1,135 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Baja una posición la columna seleccionada - - - Sube una posición la columna seleccionada - - - Elimina la columna seleccionada de la lista - - - Añade la columna al final de la lista - - - Columnas a mostrar - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Baja una posición la columna seleccionada + + + Sube una posición la columna seleccionada + + + Elimina la columna seleccionada de la lista + + + Añade la columna al final de la lista + + + Columnas a mostrar + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.resx diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs similarity index 86% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs index bd205f1a..046a9dcd 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs new file mode 100644 index 00000000..789c3b06 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs @@ -0,0 +1,54 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal partial class SettingsEditorModeSingleColumn : SettingsEditorModeBaseColumn + { + private int _manualUpdateLock; + + public SettingsEditorModeSingleColumn() + { + InitializeComponent(); + } // constructor + + public override List SelectedColumns + { + get + { + var result = new List(1); + result.Add((UiBroadcastListColumn)comboColumns.SelectedValue); + + return result; + } // get + } // SelectedColumns + + private void SettingsEditorModeMultiColumn_Load(object sender, EventArgs e) + { + _manualUpdateLock++; + comboColumns.DataSource = ColumnsList.AsReadOnly(); + comboColumns.SelectedValue = Columns[0]; + _manualUpdateLock--; + } // SettingsEditorModeMultiColumn_Load + + private void comboColumns_SelectedIndexChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + SetDataChanged(); + } // comboColumns_SelectedIndexChanged + } // class SettingsEditorModeSingleColumn +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.es.resx index e9d38a5f..59a683c1 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.es.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Información a mostrar - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Información a mostrar + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.resx index 8216742e..92f88c32 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.resx @@ -1,186 +1,186 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Top, Bottom, Left - - - - 6, 19 - - - 203, 21 - - - - 6 - - - comboColumns - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 0 - - - 0, 0 - - - 215, 175 - - - 12 - - - Data to display - - - groupBoxData - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 215, 175 - - - SettingsEditorModeSingleColumn - - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Bottom, Left + + + + 6, 19 + + + 203, 21 + + + + 6 + + + comboColumns + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + 0 + + + 0, 0 + + + 215, 175 + + + 12 + + + Data to display + + + groupBoxData + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 215, 175 + + + SettingsEditorModeSingleColumn + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs similarity index 90% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs index 7cab45a8..d9d9751e 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs similarity index 83% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs index 5288e240..90b52b24 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.cs @@ -1,20 +1,24 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors { internal partial class SettingsEditorModeTripleColumn : SettingsEditorModeBaseColumn { - private int ManualUpdateLock; + private int _manualUpdateLock; public SettingsEditorModeTripleColumn() { @@ -48,7 +52,7 @@ public override List SelectedColumns private void SettingsEditorModeTripleColumn_Load(object sender, EventArgs e) { - ManualUpdateLock++; + _manualUpdateLock++; comboFirstColumn.DataSource = ColumnsList.AsReadOnly(); comboSecondColumn.DataSource = ColumnsNoneList.AsReadOnly(); comboThirdColumn.DataSource = ColumnsNoneList.AsReadOnly(); @@ -76,19 +80,19 @@ private void SettingsEditorModeTripleColumn_Load(object sender, EventArgs e) comboThirdColumn.SelectedValue = Columns[2]; break; } // switch - ManualUpdateLock--; + _manualUpdateLock--; } // SettingsEditorModeTripleColumn_Load private void comboFirstColumn_SelectedIndexChanged(object sender, EventArgs e) { - if (ManualUpdateLock > 0) return; + if (_manualUpdateLock > 0) return; SetDataChanged(); } // comboFirstColumn_SelectedIndexChanged private void comboSecondColumn_SelectedIndexChanged(object sender, EventArgs e) { - if (ManualUpdateLock > 0) return; + if (_manualUpdateLock > 0) return; comboThirdColumn.Enabled = ((UiBroadcastListColumn)comboSecondColumn.SelectedValue) != UiBroadcastListColumn.None; if (!comboThirdColumn.Enabled) @@ -100,7 +104,7 @@ private void comboSecondColumn_SelectedIndexChanged(object sender, EventArgs e) private void comboThirdColumn_SelectedIndexChanged(object sender, EventArgs e) { - if (ManualUpdateLock > 0) return; + if (_manualUpdateLock > 0) return; SetDataChanged(); } // comboThirdColumn_SelectedIndexChanged diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.es.resx index e9d38a5f..59a683c1 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.es.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Información a mostrar - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Información a mostrar + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.resx index 94d1f3b3..761ece2e 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeTripleColumn.resx @@ -1,231 +1,231 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 6, 19 - - - groupBoxData - - - 6, 73 - - - 0, 0 - - - - 8 - - - - Top, Bottom, Left - - - 11 - - - $this - - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - 0 - - - 215, 175 - - - 0 - - - 6, 46 - - - comboSecondColumn - - - comboFirstColumn - - - 203, 21 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - groupBoxData - - - 6 - - - 203, 21 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - Data to display - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6, 13 - - - 203, 21 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - comboThirdColumn - - - groupBoxData - - - 10 - - - 215, 175 - - - SettingsEditorModeTripleColumn - - - True - - - es - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 6, 19 + + + groupBoxData + + + 6, 73 + + + 0, 0 + + + + 8 + + + + Top, Bottom, Left + + + 11 + + + $this + + + System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + 0 + + + 215, 175 + + + 0 + + + 6, 46 + + + comboSecondColumn + + + comboFirstColumn + + + 203, 21 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxData + + + groupBoxData + + + 6 + + + 203, 21 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + Data to display + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 13 + + + 203, 21 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + comboThirdColumn + + + groupBoxData + + + 10 + + + 215, 175 + + + SettingsEditorModeTripleColumn + + + True + + + es + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs similarity index 94% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs index 1696ca8b..e677a760 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs new file mode 100644 index 00000000..d7e6b7eb --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs @@ -0,0 +1,209 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + internal partial class SettingsEditorSorting : SettingsEditorBaseUserControl + { + private UiBroadcastListSortColumn[] _sortColumns; + private int _manualUpdateLock; + + public event EventHandler UseGlobalSortChanged; + + public SettingsEditorSorting() + { + InitializeComponent(); + } // constructor + + public List> ColumnsNoneList + { + private get; + set; + } // Columns + + public IList Sort + { + private get; + set; + } // Sort + + public bool UseGlobalSort + { + get; + set; + } // UseGlobalSort + + public bool ShowUseGlobalSort + { + get; + set; + } // ShowUseGlobalSort + + public List SelectedSort + { + get + { + var result = new List(_sortColumns.Length); + for (var index = 0; index < _sortColumns.Length; index++) + { + var sortColumn = _sortColumns[index]; + result.Add(sortColumn); + if (sortColumn.Column == UiBroadcastListColumn.None) break; + } // for index + + return result; + } // get + } // SelectedSort + + private void SettingsEditorSorting_Load(object sender, EventArgs e) + { + if (DesignMode) + { + ColumnsNoneList = UiBroadcastListManager.GetSortedColumnNames(true); + Sort = new List(); + } // if + + _sortColumns = new UiBroadcastListSortColumn[3]; + for (var index = 0; index < Math.Min(3, Sort.Count); index++) + { + _sortColumns[index] = Sort[index]; + } // for + for (var index = Sort.Count; index < 3; index++) + { + _sortColumns[index] = new UiBroadcastListSortColumn(UiBroadcastListColumn.None, false); + } // for + if (Sort.Count == 0) + { + _sortColumns[0] = new UiBroadcastListSortColumn(UiBroadcastListColumn.Number, false); + } // if + + _manualUpdateLock++; + comboThirdColumn.DataSource = ColumnsNoneList.AsReadOnly(); + comboSecondColumn.DataSource = ColumnsNoneList.AsReadOnly(); + comboFirstColumn.DataSource = ColumnsNoneList.AsReadOnly(); + + comboThirdColumn.SelectedValue = _sortColumns[2].Column; + comboSecondColumn.SelectedValue = _sortColumns[1].Column; + comboFirstColumn.SelectedValue = _sortColumns[0].Column; + + SetButtonDirectionStatus(buttonFirstDirection, 0, _sortColumns[0].IsAscending); + SetButtonDirectionStatus(buttonSecondDirection, 1, _sortColumns[1].IsAscending); + SetButtonDirectionStatus(buttonThirdDirection, 2, _sortColumns[2].IsAscending); + + checkGlobalSorting.Visible = ShowUseGlobalSort; + checkGlobalSorting.Checked = UseGlobalSort; + EnableCombos(); + + _manualUpdateLock--; + } // SettingsEditorSorting_Load + + private void comboFirstColumn_SelectedIndexChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + var value = (UiBroadcastListColumn)comboFirstColumn.SelectedValue; + _sortColumns[0].Column = value; + var enabled = (value != UiBroadcastListColumn.None); + buttonFirstDirection.Enabled = enabled; + + comboSecondColumn.Enabled = enabled; + comboSecondColumn.SelectedValue = ServiceSortComparer.GetSuggestedNextSortColumn(value); + SetButtonDirectionStatus(buttonSecondDirection, 1, _sortColumns[0].IsAscending); + + comboSecondColumn_SelectedIndexChanged(sender, e); + } // comboFirstColumn_SelectedIndexChanged + + private void comboSecondColumn_SelectedIndexChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + var value = (UiBroadcastListColumn)comboSecondColumn.SelectedValue; + _sortColumns[1].Column = value; + var enabled = (value != UiBroadcastListColumn.None); + buttonSecondDirection.Enabled = enabled; + SetButtonDirectionStatus(buttonThirdDirection, 2, _sortColumns[1].IsAscending); + + comboThirdColumn.Enabled = enabled; + comboThirdColumn.SelectedValue = ServiceSortComparer.GetSuggestedNextSortColumn(value); + + comboThirdColumn_SelectedIndexChanged(sender, e); + } // comboSecondColumn_SelectedIndexChanged + + private void comboThirdColumn_SelectedIndexChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + var value = (UiBroadcastListColumn)comboThirdColumn.SelectedValue; + _sortColumns[2].Column = value; + var enabled = (value != UiBroadcastListColumn.None); + buttonThirdDirection.Enabled = enabled; + + SetDataChanged(); + } // comboThirdColumn_SelectedIndexChanged + + private void buttonFirstDirection_Click(object sender, EventArgs e) + { + ToggleDirectionStatus(buttonFirstDirection, 0); + } // buttonFirstDirection_Click + + private void buttonSecondDirection_Click(object sender, EventArgs e) + { + ToggleDirectionStatus(buttonSecondDirection, 1); + } // buttonSecondDirection_Click + + private void buttonThirdDirection_Click(object sender, EventArgs e) + { + ToggleDirectionStatus(buttonThirdDirection, 2); + } // buttonThirdDirection_Click + + private void ToggleDirectionStatus(Button button, int index) + { + SetButtonDirectionStatus(button, index, !_sortColumns[index].IsAscending); + SetDataChanged(); + } // ToggleDirectionStatus + + private void SetButtonDirectionStatus(Button button, int index, bool isAscending) + { + _sortColumns[index].IsAscending = isAscending; + button.Image = isAscending ? Properties.Resources.Action_SortAscending_16x16 : Properties.Resources.Action_SortDescending_16x16; + toolTip.SetToolTip(button, isAscending ? Properties.SettingsEditor.SortAscendingTooltip : Properties.SettingsEditor.SortDescendingTooltip); + } // // SetButtonDirectionStatus + + private void checkGlobalSorting_CheckedChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + UseGlobalSort = checkGlobalSorting.Checked; + EnableCombos(); + SetDataChanged(); + + UseGlobalSortChanged?.Invoke(this, EventArgs.Empty); + } // checkGlobalSorting_CheckedChanged + + private void EnableCombos() + { + if (!ShowUseGlobalSort) return; + + comboFirstColumn.Enabled = UseGlobalSort; + comboSecondColumn.Enabled = UseGlobalSort; + comboThirdColumn.Enabled = UseGlobalSort; + buttonFirstDirection.Enabled = UseGlobalSort; + buttonSecondDirection.Enabled = UseGlobalSort; + buttonThirdDirection.Enabled = UseGlobalSort; + } // EnableCombos + } // class SettingsEditorSorting +}// namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.es.resx similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.es.resx index 1b9efee1..ee8a4eb2 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.es.resx @@ -1,130 +1,130 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 166, 17 - - - Ignorar la ordenación de cada vista - - - Ordenar la lista por - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 166, 17 + + + Ignorar la ordenación de cada vista + + + Ordenar la lista por + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.resx diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs similarity index 97% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs index 0e1db263..1c5e818d 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs new file mode 100644 index 00000000..a7ad2c9e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs @@ -0,0 +1,388 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; + +namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors +{ + public partial class UiBroadcastListSettingsEditor : UserControl, IConfigurationItemEditor, ISettingsEditorContainer + { + private int _manualUpdateLock; + private ToolStripButton[] _listModeItems; + private ISettingsEditorModeColumns[] _editorModeColumns; + private SettingsEditorSorting _editorGlobalSorting; + private SettingsEditorSorting[] _editorModeSorting; + + public UiBroadcastListSettingsEditor() + { + InitializeComponent(); + } // constructor + + public UiBroadcastListSettings Settings + { + get; + set; + } // Settings + + #region IConfigurationItemEditor implementation + + UserControl IConfigurationItemEditor.UserInterfaceItem => this; + + bool IConfigurationItemEditor.SupportsWinFormsValidation => false; + + public bool IsDataChanged + { + get; + protected set; + } // IsDataChanged + + public bool IsAppRestartNeeded + // IsAppRestartNeeded + => + false; + + bool IConfigurationItemEditor.Validate() + { + return true; + } // IConfigurationItemEditor.Validate + + IConfigurationItem IConfigurationItemEditor.GetNewData() + { + SaveGeneralTab(); + SaveModeSettingsTab(); + + return Settings; + } // IConfigurationItemEditor.GetNewData + + void IConfigurationItemEditor.EditorClosing(out bool cancelClose) + { + cancelClose = false; + } // IConfigurationItemEditor.EditorClosing + + void IConfigurationItemEditor.EditorClosed(bool userCancel) + { + // no op + } // IConfigurationItemEditor.EditorClosed + + #endregion + + #region ISettingsEditorContainer implementation + + void ISettingsEditorContainer.SetDataChanged() + { + IsDataChanged = true; + } // SetDataChanged + + protected void SetDataChanged() + { + IsDataChanged = true; + } // SetDataChanged + + #endregion + + private void UiBroadcastListSettingsEditor_Load(object sender, EventArgs e) + { + var sortedColumns = UiBroadcastListManager.GetSortedColumnNames(); + var sortedColumnsNone = UiBroadcastListManager.GetSortedColumnNames(true); + + // General tab + LoadGeneralTab(sortedColumnsNone); + + // Mode settings tab + LoadModeSettingsTab(sortedColumns, sortedColumnsNone); + } // UiBroadcastListSettingsEditor_Load + + #region General tab load/save + + private void LoadGeneralTab(List> sortedColumnsNone) + { + _listModeItems = new ToolStripButton[5]; + _listModeItems[0] = toolButtonDetails; + _listModeItems[1] = toolButtonLarge; + _listModeItems[2] = toolButtonSmall; + _listModeItems[3] = toolButtonList; + _listModeItems[4] = toolButtonTile; + _listModeItems[0].Tag = View.Details; + _listModeItems[1].Tag = View.LargeIcon; + _listModeItems[2].Tag = View.SmallIcon; + _listModeItems[3].Tag = View.List; + _listModeItems[4].Tag = View.Tile; + + _manualUpdateLock++; + + checkShowInactive.Checked = Settings.ShowInactiveServices; + checkShowHidden.Checked = Settings.ShowHiddenServices; + checkShowOutOfPackage.Checked = Settings.ShowOutOfPackage; + + _editorGlobalSorting = new SettingsEditorSorting + { + ColumnsNoneList = sortedColumnsNone, + Sort = Settings.GlobalSortColumns + }; + _editorGlobalSorting.SetContainer(this); + _editorGlobalSorting.Dock = DockStyle.Fill; + _editorGlobalSorting.UseGlobalSort = Settings.UseGlobalSortColumns; + _editorGlobalSorting.ShowUseGlobalSort = true; + _editorGlobalSorting.UseGlobalSortChanged += EditorGlobalSorting_UseGlobalSortChanged; + panelGlobalSorting.Controls.Add(_editorGlobalSorting); + + _manualUpdateLock--; + } // LoadGeneralTab + + private void SaveGeneralTab() + { + if (_editorGlobalSorting.IsDataChanged) + { + Settings.GlobalSortColumns = _editorGlobalSorting.SelectedSort; + Settings.UseGlobalSortColumns = _editorGlobalSorting.UseGlobalSort; + } // if + } // SaveGeneralTab + + #endregion + + #region General tab event handlers + + private void toolButtonDetails_Click(object sender, EventArgs e) + { + SetListMode(View.Details); + SetDataChanged(); + } // toolButtonDetails_Click + + private void toolButtonLarge_Click(object sender, EventArgs e) + { + SetListMode(View.LargeIcon); + SetDataChanged(); + } // toolButtonLarge_Click + + private void toolButtonSmall_Click(object sender, EventArgs e) + { + SetListMode(View.SmallIcon); + SetDataChanged(); + } // toolButtonSmall_Click + + private void toolButtonList_Click(object sender, EventArgs e) + { + SetListMode(View.List); + SetDataChanged(); + } // toolButtonList_Click + + private void toolButtonTile_Click(object sender, EventArgs e) + { + SetListMode(View.Tile); + SetDataChanged(); + } // toolButtonTile_Click + + private void SetListMode(View mode) + { + Settings.CurrentMode = mode; + foreach (var control in _listModeItems) + { + if (mode == (View)control.Tag) + { + control.BackColor = SystemColors.Highlight; + control.ForeColor = SystemColors.HighlightText; + } + else + { + control.BackColor = toolStripListMode.BackColor; + control.ForeColor = toolStripListMode.ForeColor; + } // if-else + } // foreach control + + comboMode.SelectedIndex = ViewToIndex(mode); + } // SetListMode + + private void checkShowInactive_CheckedChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + Settings.ShowInactiveServices = checkShowInactive.Checked; + SetDataChanged(); + } + + private void checkShowHidden_CheckedChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + Settings.ShowHiddenServices = checkShowHidden.Checked; + SetDataChanged(); + } // checkShowHidden_CheckedChanged + + private void checkShowOutOfPackage_CheckedChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + Settings.ShowOutOfPackage = checkShowOutOfPackage.Checked; + SetDataChanged(); + } // checkShowOutOfPackage_CheckedChanged + + private void EditorGlobalSorting_UseGlobalSortChanged(object sender, EventArgs e) + { + foreach (var editor in _editorModeSorting) + { + editor.Enabled = !_editorGlobalSorting.UseGlobalSort; + } // foreach editor + } // EditorGlobalSorting_UseGlobalSortChanged + + #endregion + + #region Mode settings tab load/save + + private void LoadModeSettingsTab(List> sortedColumns, List> sortedColumnsNone) + { + _editorModeColumns = new ISettingsEditorModeColumns[5]; + _editorModeColumns[0] = new SettingsEditorModeMultiColumn(); + _editorModeColumns[1] = new SettingsEditorModeSingleColumn(); + _editorModeColumns[2] = new SettingsEditorModeSingleColumn(); + _editorModeColumns[3] = new SettingsEditorModeSingleColumn(); + _editorModeColumns[4] = new SettingsEditorModeTripleColumn(); + + _editorModeSorting = new SettingsEditorSorting[5]; + _editorModeSorting[0] = new SettingsEditorSorting(); + _editorModeSorting[1] = new SettingsEditorSorting(); + _editorModeSorting[2] = new SettingsEditorSorting(); + _editorModeSorting[3] = new SettingsEditorSorting(); + _editorModeSorting[4] = new SettingsEditorSorting(); + + for (var index = 0; index < _editorModeColumns.Length; index++) + { + var editor = _editorModeColumns[index]; + var view = IndexToView(index); + editor.SetContainer(this); + editor.ColumnsList = sortedColumns; + editor.ColumnsNoneList = sortedColumnsNone; + editor.Columns = Settings[view].Columns; + } // for + + for (var index = 0; index < _editorModeSorting.Length; index++) + { + var editor = _editorModeSorting[index]; + var view = IndexToView(index); + editor.SetContainer(this); + editor.ColumnsNoneList = sortedColumnsNone; + editor.Sort = Settings[view].Sort; + editor.Enabled = !Settings.UseGlobalSortColumns; + } // for + + _manualUpdateLock++; + + comboLogoSize.ValueMember = "Key"; + comboLogoSize.DisplayMember = "Value"; + comboLogoSize.DataSource = BaseLogo.GetListLogoSizes(true).AsReadOnly(); + + checkShowGridlines.Checked = Settings.ShowGridlines; + + _manualUpdateLock--; + + SetListMode(Settings.CurrentMode); + } // private LoadModeSettingsTab + + private void SaveModeSettingsTab() + { + for (var index = 0; index < _editorModeColumns.Length; index++) + { + var editor = _editorModeColumns[index]; + if (!editor.IsDataChanged) continue; + + var view = IndexToView(index); + Settings[view].Columns = editor.SelectedColumns; + } // for + + for (var index = 0; index < _editorModeSorting.Length; index++) + { + var editor = _editorModeSorting[index]; + if (!editor.IsDataChanged) continue; + + var view = IndexToView(index); + Settings[view].Sort = editor.SelectedSort; + } // for + } // SaveGeneralTab + + private int ViewToIndex(View view) + { + switch (view) + { + case View.Details: return 0; + case View.LargeIcon: return 1; + case View.SmallIcon: return 2; + case View.List: return 3; + case View.Tile: return 4; + default: + throw new IndexOutOfRangeException(); + } // switch + } // ViewToIndex + + private View IndexToView(int index) + { + switch (index) + { + case 0: return View.Details; + case 1: return View.LargeIcon; + case 2: return View.SmallIcon; + case 3: return View.List; + case 4: return View.Tile; + default: + throw new IndexOutOfRangeException(); + } // switch + } // IndexToView + + #endregion + + #region Mode settings tab event handlers + + private void comboMode_SelectedIndexChanged(object sender, EventArgs e) + { + _manualUpdateLock++; + + var index = comboMode.SelectedIndex; + + panelModeColumns.Controls.Clear(); + panelModeColumns.Controls.Add(_editorModeColumns[index].GetUnderlyingControl()); + panelModeColumns.Controls[0].Dock = DockStyle.Fill; + + panelModeSorting.Controls.Clear(); + panelModeSorting.Controls.Add(_editorModeSorting[index]); + panelModeSorting.Controls[0].Dock = DockStyle.Fill; + + var view = IndexToView(comboMode.SelectedIndex); + comboLogoSize.SelectedValue = Settings[view].LogoSize; + checkShowGridlines.Visible = (view == View.Details); + + _manualUpdateLock--; + } // comboMode_SelectedIndexChanged + + private void comboLogoSize_SelectedIndexChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + var view = IndexToView(comboMode.SelectedIndex); + Settings[view].LogoSize = (LogoSize) comboLogoSize.SelectedValue; + SetDataChanged(); + } // comboLogoSize_SelectedIndexChanged + + private void checkShowGridlines_CheckedChanged(object sender, EventArgs e) + { + if (_manualUpdateLock > 0) return; + + Settings.ShowGridlines = checkShowGridlines.Checked; + SetDataChanged(); + } // checkShowGridlines_CheckedChanged + + #endregion + } // class UiBroadcastListSettingsEditor +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs new file mode 100644 index 00000000..940631f7 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.Discovery.BroadcastList +{ + public class ListSelectionChangedEventArgs: EventArgs + { + public ListSelectionChangedEventArgs() + { + // no op + } // constructor + + public ListSelectionChangedEventArgs(UiBroadcastService item) + { + Item = item; + } // constructor + + public UiBroadcastService Item + { + get; + set; + } // Item + } // class ListSelectionChangedEventArgs +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs new file mode 100644 index 00000000..7976c976 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.Discovery.BroadcastList +{ + public class ListStatusChangedEventArgs: EventArgs + { + public ListStatusChangedEventArgs() + { + // no op + } // constructor + + public ListStatusChangedEventArgs(bool hasItems) + { + HasItems = hasItems; + } // constructor + + public bool HasItems + { + get; + set; + } // HasItems + } // class ListStatusChangedEventArgs +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs similarity index 80% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs index 0ff8cdb3..01820334 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/ServiceSortComparer.cs @@ -1,31 +1,40 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; -using System.Linq; using System.Text; namespace IpTviewr.UiServices.Discovery.BroadcastList { public class ServiceSortComparer: IComparer { - private UiBroadcastListSettings Settings; - private IList Sort; - private StringBuilder Buffer; + private readonly UiBroadcastListSettings _settings; + private readonly IList _sort; + private readonly StringBuilder _buffer; public ServiceSortComparer(UiBroadcastListSettings settings, IList sort) { - Settings = settings; - Sort = sort; - Buffer = new StringBuilder(512); + _settings = settings; + _sort = sort; + _buffer = new StringBuilder(512); } // constructor public int Compare(UiBroadcastService x, UiBroadcastService y) { var compare = 0; - foreach (var sort in Sort) + foreach (var sort in _sort) { var sortColumn = sort.Column; if (sortColumn == UiBroadcastListColumn.None) break; @@ -33,8 +42,8 @@ public int Compare(UiBroadcastService x, UiBroadcastService y) var data1 = UiBroadcastListManager.GetColumnData(x, sortColumn); var data2 = UiBroadcastListManager.GetColumnData(y, sortColumn); - data1 = GetTextWithNumberForTextSorting(data1, Buffer); - data2 = GetTextWithNumberForTextSorting(data2, Buffer); + data1 = GetTextWithNumberForTextSorting(data1, _buffer); + data2 = GetTextWithNumberForTextSorting(data2, _buffer); compare = data1.CompareTo(data2); compare *= (sort.IsAscending ? 1 : -1); @@ -102,10 +111,10 @@ public static string GetTextWithNumberForTextSorting(string text) public static string GetTextWithNumberForTextSorting(string textWithNumbers, StringBuilder buffer) { - int start, pos; + int pos; buffer.Length = 0; - start = -1; + var start = -1; for (pos = 0; pos < textWithNumbers.Length; pos++) { @@ -122,27 +131,21 @@ public static string GetTextWithNumberForTextSorting(string textWithNumbers, Str buffer.Append(textWithNumbers[pos]); } // if-else } // for - if (start >= 0) - { - AddPartialNumber(textWithNumbers, buffer, ref start, pos - 1); - return buffer.ToString(); - } - else - { - return textWithNumbers; - } // if-else + + if (start < 0) return textWithNumbers; + + AddPartialNumber(textWithNumbers, buffer, ref start, pos - 1); + return buffer.ToString(); } // GetTextWithNumberForTextSorting private static int AddPartialNumber(string textWithNumbers, StringBuilder buffer, ref int start, int pos) { - string partial; - long number; - - partial = textWithNumbers.Substring(start, (pos - start) + 1); - number = long.Parse(partial); + var partial = textWithNumbers.Substring(start, (pos - start) + 1); + var number = long.Parse(partial); partial = number.ToString("00000000000000000000"); buffer.Append(partial); start = -1; + return start; } // AddPartialNumber } // class ServiceSortComparer diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs new file mode 100644 index 00000000..8d658c4a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs @@ -0,0 +1,42 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Discovery.BroadcastList +{ + public enum UiBroadcastListColumn + { + None = 0, + Name = 1, + Number = 2, + NumberAndName = 3, + NumberAndNameCrlf = 4, + NameAndNumber = 5, + Description = 6, + DvbType = 7, + LocationUrl = 8, + ShortName = 9, + Genre = 10, + GenreCode = 11, + ParentalRating = 12, + ParentalRatingCode = 13, + ServiceId = 14, + FullServiceId = 15, + UserName = 16, + UserNumber = 17, + OriginalName = 18, + OriginalNumber = 19, + IsActive = 20, + IsEnabled = 21, + LockLevel = 22, + } // UiBroadcastListViewColumn +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs similarity index 76% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs index fcd2373a..04cabd97 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListManager.cs @@ -1,12 +1,20 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Windows.Forms; -using IpTviewr.UiServices.Common.Properties; using System.Drawing; using IpTviewr.UiServices.Common.Controls; using IpTviewr.UiServices.Configuration.Logos; @@ -15,32 +23,33 @@ namespace IpTviewr.UiServices.Discovery.BroadcastList { - public class UiBroadcastListManager: IDisposable + public class UiBroadcastListManager : IDisposable { public const LogoSize SmallLogoSize = LogoSize.Size32; public const LogoSize LargeLogoSize = LogoSize.Size48; - private IList fieldBroadcastServices; - private IList DisplayedBroadcastServices; - private IEnumerable SortedBroadcastServices; - private UiBroadcastListSettings fieldOldSettings; - private UiBroadcastListSettings fieldSettings; - private UiBroadcastService fieldSelectedService; + private IList _broadcastServices; + private IList _displayedBroadcastServices; + private IEnumerable _sortedBroadcastServices; + private UiBroadcastListSettings _oldSettings; + private UiBroadcastListSettings _settings; + private UiBroadcastService _selectedService; private const int MinColumnWidth = 25; - private ImageList SmallImageList, LargeImageList; + private readonly ImageList _smallImageList; + private readonly ImageList _largeImageList; // TODO: Use fonts from Settings - private Font FontDetails; - private Font FontDetailsBold; - private Font FontNormal; - private Font FontNormalHidden; - private Font FontNormalNotAvailable; + private readonly Font _fontDetails; + private readonly Font _fontDetailsBold; + private readonly Font _fontNormal; + private readonly Font _fontNormalHidden; + private readonly Font _fontNormalNotAvailable; #region Static public methods public static List> GetColumnNames(bool withNone = false) { - var result = new List>(withNone? 22 : 21); + var result = new List>(withNone ? 22 : 21); if (withNone) { @@ -80,7 +89,7 @@ orderby item.Value select item; var count = withNone ? (names.Count + 1) : names.Count; - var result = new List>(names.Count); + var result = new List>(count); if (withNone) { result.Add(new KeyValuePair(UiBroadcastListColumn.None, Properties.ListViewManager.ColumnNone)); @@ -209,18 +218,17 @@ public static string GetColumnData(UiBroadcastService service, UiBroadcastListCo public UiBroadcastListManager(ListViewSortable listView, UiBroadcastListSettings settings, ImageList smallImageList, ImageList largeImageList, bool overrideDesignSettings) { - if (listView == null) throw new ArgumentNullException("listView"); if (settings == null) throw new ArgumentNullException("settings"); - ListView = listView; - SmallImageList = smallImageList; - LargeImageList = largeImageList; + ListView = listView ?? throw new ArgumentNullException("listView"); + _smallImageList = smallImageList; + _largeImageList = largeImageList; - FontNormal = new Font("Segoe UI Semibold", 10.0f, FontStyle.Regular); - FontNormalHidden = new Font("Segoe UI Semibold", 9.5f, FontStyle.Regular); - FontNormalNotAvailable = new Font("Segoe UI", 9, FontStyle.Regular); - FontDetails = new Font(ListView.Font.OriginalFontName, ListView.Font.SizeInPoints, FontStyle.Regular); - FontDetailsBold = new Font("Tahoma", 10.5f, FontStyle.Bold); + _fontNormal = new Font("Segoe UI Semibold", 10.0f, FontStyle.Regular); + _fontNormalHidden = new Font("Segoe UI Semibold", 9.5f, FontStyle.Regular); + _fontNormalNotAvailable = new Font("Segoe UI", 9, FontStyle.Regular); + _fontDetails = new Font(ListView.Font.OriginalFontName, ListView.Font.SizeInPoints, FontStyle.Regular); + _fontDetailsBold = new Font("Tahoma", 10.5f, FontStyle.Bold); InitListViewControl(overrideDesignSettings); ApplySettings(settings); @@ -243,15 +251,13 @@ public ListViewSortable ListView public IList BroadcastServices { - get - { - return fieldBroadcastServices; - } // get + get => _broadcastServices; set { - fieldBroadcastServices = value; - SortedBroadcastServices = null; - fieldSelectedService = null; + _broadcastServices = value; + _sortedBroadcastServices = null; + _selectedService = null; + ListView.Items.Clear(); ApplySorting(); FireStatusChanged(); FireSelectionChanged(); @@ -260,22 +266,19 @@ public IList BroadcastServices public UiBroadcastListSettings Settings { - get { return fieldSettings; } // get - set { ApplySettings(value); } // set + get => _settings; + set => ApplySettings(value); } // Settings public UiBroadcastService SelectedService { - get - { - return fieldSelectedService; - } // get + get => _selectedService; set { - UiBroadcastService selected = value; + var selected = value; // remove current selection - for (int index = 0; index < ListView.SelectedItems.Count; index++) + for (var index = 0; index < ListView.SelectedItems.Count; index++) { ListView.SelectedItems[0].Selected = false; } // for @@ -296,7 +299,7 @@ public UiBroadcastService SelectedService } // if // save selected service - fieldSelectedService = selected; + _selectedService = selected; } // set } // SelectedService @@ -306,14 +309,11 @@ public UiBroadcastListSortColumn SelectedSort private set; } // SelectedSort - public bool HasItems - { - get { return (BroadcastServices == null) ? false : BroadcastServices.Count > 0; } - } // HasItems + public bool HasItems => BroadcastServices != null && BroadcastServices.Count > 0; public void Refesh() { - DisplayedBroadcastServices = null; + _displayedBroadcastServices = null; ListView.BeginUpdate(); FillList(); ListView.EndUpdate(); @@ -356,23 +356,16 @@ public bool EnableService(UiBroadcastService service, bool isInactive, bool isHi public IList GetDisplayedBroadcastList() { - if (DisplayedBroadcastServices == null) - { - DisplayedBroadcastServices = GetDisplayBroadcastList(); - } // if - - return DisplayedBroadcastServices; + return _displayedBroadcastServices ?? (_displayedBroadcastServices = GetDisplayBroadcastList()); } // GetDisplayedBroadcastList public UiBroadcastListSettings ShowSettingsEditor(IWin32Window owner, bool autoApplyChanges) { - var result = ConfigurationForm.ShowConfigurationForm(owner, UiBroadcastListSettingsRegistration.RegistrationGuid, fieldSettings); + var result = ConfigurationForm.ShowConfigurationForm(owner, UiBroadcastListSettingsRegistration.RegistrationGuid, _settings); - if ((result != null) && (autoApplyChanges)) - { - SaveSettings(result); - Settings = result; - } // if + if ((result == null) || (!autoApplyChanges)) return result; + SaveSettings(result); + Settings = result; return result; } // ShowSettingsEditor @@ -398,9 +391,9 @@ private void FireStatusChanged() private void FireSelectionChanged() { var listItem = (ListView.SelectedItems.Count == 0) ? null : ListView.SelectedItems[0]; - fieldSelectedService = (listItem == null) ? null : (UiBroadcastService)listItem.Tag; - - OnSelectionChanged(this, new ListSelectionChangedEventArgs(fieldSelectedService)); + _selectedService = (UiBroadcastService)listItem?.Tag; + + OnSelectionChanged(this, new ListSelectionChangedEventArgs(_selectedService)); } // FireSelectionChanged #endregion @@ -412,15 +405,15 @@ public virtual void Dispose() if (Disposed) return; HookupEvents(false); - fieldBroadcastServices = null; + _broadcastServices = null; ListView.Items.Clear(); ListView = null; - if (FontNormal != null) FontNormal.Dispose(); - if (FontNormalHidden != null) FontNormalHidden.Dispose(); - if (FontNormalNotAvailable != null) FontNormalNotAvailable.Dispose(); - if (FontDetails != null) FontDetails.Dispose(); - if (FontDetailsBold != null) FontDetailsBold.Dispose(); + _fontNormal?.Dispose(); + _fontNormalHidden?.Dispose(); + _fontNormalNotAvailable?.Dispose(); + _fontDetails?.Dispose(); + _fontDetailsBold?.Dispose(); Disposed = true; } // Dispose @@ -443,16 +436,18 @@ private void HookupEvents(bool add) } // if-else } // HookupEvents - void ListView_SelectedIndexChanged(object sender, EventArgs e) + private void ListView_SelectedIndexChanged(object sender, EventArgs e) { FireSelectionChanged(); } // ListView_SelectedIndexChanged - void ListView_ColumnClick(object sender, ColumnClickEventArgs e) + private void ListView_ColumnClick(object sender, ColumnClickEventArgs e) { - var sortColumn = new UiBroadcastListSortColumn(); - sortColumn.Column = Settings.CurrentColumns[e.Column]; - sortColumn.IsAscending = sortColumn.Column == SelectedSort.Column? !SelectedSort.IsAscending : true; + var sortColumn = new UiBroadcastListSortColumn + { + Column = Settings.CurrentColumns[e.Column] + }; + sortColumn.IsAscending = sortColumn.Column == SelectedSort.Column ? !SelectedSort.IsAscending : true; if (Settings.UseGlobalSortColumns) { @@ -474,8 +469,8 @@ void ListView_ColumnClick(object sender, ColumnClickEventArgs e) private void InitListViewControl(bool overrideDesignSettings) { ListView.MultiSelect = false; - ListView.SmallImageList = SmallImageList; - ListView.LargeImageList = LargeImageList; + ListView.SmallImageList = _smallImageList; + ListView.LargeImageList = _largeImageList; ListView.SelfSorting = false; ListView.OwnerDraw = true; @@ -498,11 +493,11 @@ private void InitListViewControl(bool overrideDesignSettings) private void ApplySettings(UiBroadcastListSettings newSettings) { // save existing settings - var oldSettings = fieldOldSettings; + var oldSettings = _oldSettings; // save new settings - fieldOldSettings = XmlSerialization.Clone(newSettings); - fieldSettings = newSettings; + _oldSettings = XmlSerialization.Clone(newSettings); + _settings = newSettings; // rebuild list? if (NeedToRebuildList(oldSettings, newSettings)) @@ -528,10 +523,10 @@ private void ApplySettings(UiBroadcastListSettings newSettings) } // if-else } // ApplySettings - private void SaveSettings(UiBroadcastListSettings settings) + private static void SaveSettings(UiBroadcastListSettings settings) { UiBroadcastListSettingsRegistration.Settings = settings; - AppUiConfiguration.Current.Save(); + AppConfig.Current.Save(); } // SaveSettings private void BuildListLayout() @@ -540,16 +535,23 @@ private void BuildListLayout() ListView.Items.Clear(); ListView.Columns.Clear(); ListView.View = Settings.CurrentMode; - ListView.Font = (Settings.CurrentMode == View.Details) ? FontDetails : FontNormal; + ListView.Font = (Settings.CurrentMode == View.Details) ? _fontDetails : _fontNormal; var columns = Settings.CurrentColumns; foreach (var column in columns) { - ListView.Columns.Add(GetColumnName(column), GetColumnWidth(column)); + var name = GetColumnName(column); + var listColumn = new ColumnHeader() + { + Name = Enum.GetName(typeof(UiBroadcastListColumn), column), + Text = GetColumnName(column), + Width = GetColumnWidth(column), + }; + ListView.Columns.Add(listColumn); } // foreach - ListView.Columns[0].Width += SmallImageList.ImageSize.Width + 5; + ListView.Columns[0].Width += _smallImageList.ImageSize.Width + 5; - ApplyCosmeticSettings(null, fieldSettings); + ApplyCosmeticSettings(null, _settings); ApplySorting(); FillList(); ListView.EndUpdate(); @@ -562,15 +564,12 @@ public IList GetDisplayBroadcastList() return new List(0); } // if - var result = new List(fieldBroadcastServices.Count); - - foreach (var service in SortedBroadcastServices) - { - if ((service.IsInactive) && (!Settings.ShowInactiveServices)) continue; - if ((service.IsHidden) && (!Settings.ShowHiddenServices)) continue; - - result.Add(service); - } // foreach + var result = new List(_broadcastServices.Count); + var q = from service in _sortedBroadcastServices + where (!service.IsInactive) || (Settings.ShowInactiveServices) + where (!service.IsHidden) || (Settings.ShowHiddenServices) + select service; + result.AddRange(q); return result; } // GetDisplayBroadcastList @@ -578,7 +577,7 @@ public IList GetDisplayBroadcastList() private void FillList() { // save selected service - var savedSelectedService = fieldSelectedService; + var savedSelectedService = _selectedService; ListView.Items.Clear(); var services = GetDisplayedBroadcastList(); @@ -593,17 +592,22 @@ private void FillList() foreach (var service in services) { - var item = new ListViewItem(); - item.Tag = service; - item.Name = service.Key; - item.Text = GetColumnData(service, columns[0]); + var item = new ListViewItem + { + Tag = service, + Name = service.Key, + Text = GetColumnData(service, columns[0]), + }; - var subItems = new string[columns.Count - 1]; - var index = (int)0; + var subItems = new ListViewItem.ListViewSubItem[columns.Count - 1]; + var index = 0; foreach (var column in columns.Skip(1)) { - subItems[index] = GetColumnData(service, column); - index++; + subItems[index++] = new ListViewItem.ListViewSubItem + { + Text = GetColumnData(service, column), + Name = Enum.GetName(typeof(UiBroadcastListColumn), column) + }; } // foreach item.SubItems.AddRange(subItems); @@ -631,12 +635,11 @@ private bool ApplyCosmeticSettings(UiBroadcastListSettings oldSettings, UiBroadc changed = true; } // if - if ((oldSettings == null) || (oldSettings.TilesPerRow != newSettings.TilesPerRow)) - { - var tilesPerRow = Math.Max(newSettings.TilesPerRow, 1); - ListView.TileSize = new Size((ListView.Width - SystemInformation.VerticalScrollBarWidth - 6) / tilesPerRow, + if ((oldSettings != null) && (oldSettings.TilesPerRow == newSettings.TilesPerRow)) return changed; + + var tilesPerRow = Math.Max(newSettings.TilesPerRow, 1); + ListView.TileSize = new Size((ListView.Width - SystemInformation.VerticalScrollBarWidth - 6) / tilesPerRow, ListView.LargeImageList.ImageSize.Height + 6); - } // if return changed; } // ApplyCosmeticSettings @@ -652,31 +655,30 @@ private void ApplySorting() if (sortingColumn.Column == UiBroadcastListColumn.None) { - SortedBroadcastServices = fieldBroadcastServices; + _sortedBroadcastServices = _broadcastServices; } else { var comparer = new ServiceSortComparer(Settings, sortingColumns); - SortedBroadcastServices = fieldBroadcastServices.OrderBy(item => item, comparer); + _sortedBroadcastServices = _broadcastServices.OrderBy(item => item, comparer); } // if-else // force use of SortedBroadcastServices when filling the list - DisplayedBroadcastServices = null; + _displayedBroadcastServices = null; FillList(); // Update the 'arrow' in the header - if (Settings.CurrentMode == View.Details) - { - var q = from index in Enumerable.Range(0, Settings.CurrentColumns.Count) - where Settings.CurrentColumns[index] == sortingColumn.Column - select index; + if (Settings.CurrentMode != View.Details) return; - var columnIndex = q.DefaultIfEmpty(-1).First(); - ListView.Sort(columnIndex, sortingColumn.IsAscending); - } // if + var q = from index in Enumerable.Range(0, Settings.CurrentColumns.Count) + where Settings.CurrentColumns[index] == sortingColumn.Column + select index; + + var columnIndex = q.DefaultIfEmpty(-1).First(); + ListView.Sort(columnIndex, sortingColumn.IsAscending); } // ApplySorting - private bool NeedToRebuildList(UiBroadcastListSettings oldSettings, UiBroadcastListSettings newSettings) + private static bool NeedToRebuildList(UiBroadcastListSettings oldSettings, UiBroadcastListSettings newSettings) { // new settings? if (oldSettings == null) return true; @@ -686,17 +688,11 @@ private bool NeedToRebuildList(UiBroadcastListSettings oldSettings, UiBroadcastL // number of columns changed? var oldColumns = oldSettings.CurrentColumns; - var newColums = newSettings.CurrentColumns; - if (oldColumns.Count != newColums.Count) return true; + var newColumns = newSettings.CurrentColumns; + if (oldColumns.Count != newColumns.Count) return true; // columns changed - for (int index = 0; index < oldColumns.Count; index++) - { - if (oldColumns[index] != newColums[index]) - { - return true; - } // if - } // for + if (oldColumns.Where((oldColumn, index) => oldColumn != newColumns[index]).Any()) return true; // show/hide changed if (oldSettings.ShowHiddenServices != newSettings.ShowHiddenServices) return true; @@ -727,12 +723,7 @@ private bool CompareSortColumns(List oldColumns, List { if (oldColumns.Count != newColumns.Count) return false; - for (int index = 0; index < oldColumns.Count; index++) - { - if (oldColumns[index] != newColumns[index]) return false; - } // if - - return true; + return !oldColumns.Where((oldColumn, index) => oldColumn != newColumns[index]).Any(); } // CompareSortColumns private int GetColumnWidth(UiBroadcastListColumn column) @@ -749,46 +740,45 @@ private void EnableListItem(ListViewItem item, UiBroadcastService service, IList { item.UseItemStyleForSubItems = (Settings.CurrentMode == View.Details); item.ForeColor = SystemColors.GrayText; - item.Font = service.IsHidden ? FontNormalHidden : FontNormalNotAvailable; + item.Font = service.IsHidden ? _fontNormalHidden : _fontNormalNotAvailable; item.ImageKey = GetServiceLogoImageKey(service, true); } else { item.UseItemStyleForSubItems = false; item.ForeColor = ListView.ForeColor; - item.Font = (Settings.CurrentMode == View.Details) ? FontDetails : FontNormal; + item.Font = (Settings.CurrentMode == View.Details) ? _fontDetails : _fontNormal; item.ImageKey = GetServiceLogoImageKey(service, false); } // if-else // set certains columns as bold - if ((Settings.CurrentMode == View.Details) && (!item.UseItemStyleForSubItems)) + if ((Settings.CurrentMode != View.Details) || (item.UseItemStyleForSubItems)) return; + + var index = 0; + foreach (var column in columns) { - var index = (int)0; - foreach (var column in columns) + switch (column) { - switch (column) - { - case UiBroadcastListColumn.Name: - case UiBroadcastListColumn.NameAndNumber: - case UiBroadcastListColumn.Number: - case UiBroadcastListColumn.NumberAndName: - case UiBroadcastListColumn.NumberAndNameCrlf: - case UiBroadcastListColumn.OriginalName: - case UiBroadcastListColumn.OriginalNumber: - case UiBroadcastListColumn.UserName: - case UiBroadcastListColumn.UserNumber: - item.SubItems[index].Font = FontDetailsBold; - break; - } // switch - index++; - } // foreach - } // if + case UiBroadcastListColumn.Name: + case UiBroadcastListColumn.NameAndNumber: + case UiBroadcastListColumn.Number: + case UiBroadcastListColumn.NumberAndName: + case UiBroadcastListColumn.NumberAndNameCrlf: + case UiBroadcastListColumn.OriginalName: + case UiBroadcastListColumn.OriginalNumber: + case UiBroadcastListColumn.UserName: + case UiBroadcastListColumn.UserNumber: + item.SubItems[index].Font = _fontDetailsBold; + break; + } // switch + index++; + } // foreach } // EnableListItem private string GetServiceLogoImageKey(UiBroadcastService service, bool disabled) { var logo = service.Logo; - if (SmallImageList.Images.ContainsKey(logo.Key)) + if (_smallImageList.Images.ContainsKey(logo.Key)) { return disabled ? " " + logo.Key : logo.Key; } // if @@ -797,22 +787,22 @@ private string GetServiceLogoImageKey(UiBroadcastService service, bool disabled) var disabledKey = " " + key; // load small logo and add it to small image list - using (var image = logo.GetImage(SmallLogoSize, true)) + using (var image = logo.GetImage(SmallLogoSize)) { - SmallImageList.Images.Add(logo.Key, image); - using (var disabledImage = PictureBoxEx.ToGrayscale(image)) + _smallImageList.Images.Add(logo.Key, image); + using (var disabledImage = PictureBoxEx.ToGreyscale(image)) { - SmallImageList.Images.Add(disabledKey, disabledImage); + _smallImageList.Images.Add(disabledKey, disabledImage); } // using image } // using image // load large logo and add it to large image list - using (var image = logo.GetImage(LargeLogoSize, true)) + using (var image = logo.GetImage(LargeLogoSize)) { - LargeImageList.Images.Add(logo.Key, image); - using (var disabledImage = PictureBoxEx.ToGrayscale(image)) + _largeImageList.Images.Add(logo.Key, image); + using (var disabledImage = PictureBoxEx.ToGreyscale(image)) { - LargeImageList.Images.Add(disabledKey, disabledImage); + _largeImageList.Images.Add(disabledKey, disabledImage); } // using image } // using image diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs similarity index 80% rename from 1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs index 31f385c9..1200607e 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListModeSettings.cs @@ -1,12 +1,19 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== -using IpTviewr.Common.Serialization; using IpTviewr.UiServices.Configuration.Logos; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Windows.Forms; using System.Xml.Serialization; @@ -17,8 +24,10 @@ public class UiBroadcastListModeSettings { public static UiBroadcastListModeSettings GetDefaultSettings(View mode) { - var result = new UiBroadcastListModeSettings(); - result.Sort = ServiceSortComparer.GetSuggestedSortColumns(UiBroadcastListColumn.Number, true, 3); + var result = new UiBroadcastListModeSettings + { + Sort = ServiceSortComparer.GetSuggestedSortColumns(UiBroadcastListColumn.Number, true, 3) + }; switch (mode) { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs new file mode 100644 index 00000000..7bee9469 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs @@ -0,0 +1,217 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Windows.Forms; +using System.Xml.Serialization; +using IpTviewr.Common.Configuration; + +namespace IpTviewr.UiServices.Discovery.BroadcastList +{ + [Serializable] + [XmlRoot("UiBroadcastList", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class UiBroadcastListSettings : IConfigurationItem + { + private int[] _columnWidth; + + public class ModeViewSettings + { + public UiBroadcastListModeSettings Details + { + get; + set; + } // Details + + public UiBroadcastListModeSettings LargeIcon + { + get; + set; + } // LargeIcon + + public UiBroadcastListModeSettings SmallIcon + { + get; + set; + } // SmallIcon + + public UiBroadcastListModeSettings List + { + get; + set; + } // List + + public UiBroadcastListModeSettings Tile + { + get; + set; + } // Tile + } // class ModeViewSettings + + #region Static methods + + public static UiBroadcastListSettings GetDefaultSettings() + { + var result = new UiBroadcastListSettings + { + CurrentMode = View.Tile, + ShowGridlines = true, + ShowInactiveServices = true, + ShowOutOfPackage = true, + TilesPerRow = 4, + + ViewSettings = new ModeViewSettings + { + Details = UiBroadcastListModeSettings.GetDefaultSettings(View.Details), + LargeIcon = UiBroadcastListModeSettings.GetDefaultSettings(View.LargeIcon), + SmallIcon = UiBroadcastListModeSettings.GetDefaultSettings(View.SmallIcon), + List = UiBroadcastListModeSettings.GetDefaultSettings(View.List), + Tile = UiBroadcastListModeSettings.GetDefaultSettings(View.Tile) + }, + + GlobalSortColumns = ServiceSortComparer.GetSuggestedSortColumns(UiBroadcastListColumn.Number, true, 3), + UseGlobalSortColumns = false + }; + + // force creation of ColumnWidth field + _ = result.ColumnWidth[0]; + + return result; + } // GetDefaultSettings + + #endregion + + public View CurrentMode + { + get; + set; + } // CurrentMode + + [XmlIgnore] + public UiBroadcastListModeSettings this[View mode] + { + get + { + return mode switch + { + View.Details => ViewSettings.Details, + View.LargeIcon => ViewSettings.LargeIcon, + View.SmallIcon => ViewSettings.SmallIcon, + View.List => ViewSettings.List, + View.Tile => ViewSettings.Tile, + _ => throw new IndexOutOfRangeException(), + }; + } // get + set + { + switch (mode) + { + case View.Details: ViewSettings.Details = value; break; + case View.LargeIcon: ViewSettings.LargeIcon = value; break; + case View.SmallIcon: ViewSettings.SmallIcon = value; break; + case View.List: ViewSettings.List = value; break; + case View.Tile: ViewSettings.Tile = value; break; + default: + throw new IndexOutOfRangeException(); + } // switch + } // set + } // UiBroadcastListViewModeSettings + + public ModeViewSettings ViewSettings + { + get; + set; + } // ViewSettings + + [XmlArray("OverrideSortBy")] + [XmlArrayItem("Column")] + public List GlobalSortColumns + { + get; + set; + } // GlobalSortColumns + + [DefaultValue(false)] + [XmlElement("UseOverrideSortBy")] + public bool UseGlobalSortColumns + { + get; + set; + } // UseGlobalSortColumn + + [DefaultValue(false)] + public bool ShowInactiveServices + { + get; + set; + } // ShowInactiveServices + + [DefaultValue(false)] + public bool ShowHiddenServices + { + get; + set; + } // ShowHiddenServices + + [DefaultValue(false)] + public bool ShowOutOfPackage + { + get; + set; + } // ShowOutOfPackage + + [DefaultValue(false)] + public bool ShowGridlines + { + get; + set; + } // ShowGridlines + + public int TilesPerRow + { + get; + set; + } // TilesPerRow + + [XmlArrayItem("Width")] + public int[] ColumnWidth + { + get => _columnWidth ??= new int[23]; + set => _columnWidth = value; + } // ColumnWidth + + [XmlIgnore] + public IList CurrentColumns => this[CurrentMode].Columns.AsReadOnly(); + + #region IConfigurationItem implementation + + bool IConfigurationItem.SupportsInitialization => false; + + bool IConfigurationItem.SupportsValidation => false; + + InitializationResult IConfigurationItem.Initialize() + { + throw new NotSupportedException(); + } // IConfigurationItem.Initialize + + string IConfigurationItem.Validate(string ownerTag) + { + throw new NotSupportedException(); + } // IConfigurationItem.Validate + + #endregion + } // class UiBroadcastListViewSettings +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs new file mode 100644 index 00000000..3bced84b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs @@ -0,0 +1,68 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration; +using System; +using System.Drawing; + +namespace IpTviewr.UiServices.Discovery.BroadcastList +{ + public class UiBroadcastListSettingsRegistration : IConfigurationItemRegistration + { + public const string RegistrationGuid = "{68B9F98B-DB50-4A08-AF04-35457F0224FB}"; + private static int _myDirectIndex; + + public static UiBroadcastListSettings Settings + { + get => AppConfig.Current[_myDirectIndex] as UiBroadcastListSettings; + set => AppConfig.Current[_myDirectIndex] = value; + } // Settings + + public static Guid SettingsGuid => new Guid(RegistrationGuid); + + public Guid Id => new Guid(RegistrationGuid); + + public bool HasEditor => true; + + public Type ItemType => typeof(UiBroadcastListSettings); + + public IConfigurationItem CreateDefault() + { + return UiBroadcastListSettings.GetDefaultSettings(); + } // CreateDefault + + public string EditorDisplayName => Properties.SettingsEditor.DisplayName; + + public string EditorDescription => Properties.SettingsEditor.Description; + + public Image EditorImage => Properties.Resources.BroadcastListSettings_32x32; + + public int EditorPriority => 50; + + public IConfigurationItemEditor CreateEditor(IConfigurationItem data) + { + var editor = new Editors.UiBroadcastListSettingsEditor() + { + Settings = data as UiBroadcastListSettings + }; + + return editor; + } // CreateEditor + + public int DirectIndex + { + get => _myDirectIndex; + set => _myDirectIndex = value; + } // DirectIndex + } // UiBroadcastListSettingsRegistration +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs new file mode 100644 index 00000000..cbc04d9a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs @@ -0,0 +1,94 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Discovery.BroadcastList +{ + [Serializable] + public struct UiBroadcastListSortColumn + { + public UiBroadcastListSortColumn(UiBroadcastListColumn column, bool descending) + : this() + { + Column = column; + Descending = (column == UiBroadcastListColumn.None)? false : descending; + } // constructor + + [XmlAttribute("name")] + public UiBroadcastListColumn Column + { + get; + set; + } // Column + + [DefaultValue(false)] + [XmlAttribute("descending")] + public bool Descending + { + get; + set; + } // Descending + + [XmlIgnore] + public bool IsAscending + { + get => !Descending; + set => Descending = !value; + } // IsAscending + + public override bool Equals(object obj) + { + // if parameter is null return false + if (obj is null) return false; + + try + { + // return true if the fields match + return Equals((UiBroadcastListSortColumn)obj); + } + catch (InvalidCastException) + { + // if parameter cannot be cast to this type return false + return false; + } // try-catch + } // Equals + + public bool Equals(UiBroadcastListSortColumn column) + { + if (Column != column.Column) return false; + if (IsAscending == column.IsAscending) return true; + // special case + if (Column == UiBroadcastListColumn.None) return true; + + return false; + } // Equals + + public override int GetHashCode() + { + return IsAscending ? (int)Column : -1 * (int)Column; + } // GetHashCode + + public static bool operator == (UiBroadcastListSortColumn column1, UiBroadcastListSortColumn column2) + { + return column1.Equals(column2); + } // operator == + + public static bool operator !=(UiBroadcastListSortColumn column1, UiBroadcastListSortColumn column2) + { + return !column1.Equals(column2); + } // operator != + } // class UiBroadcastListViewSortColumn +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/LICENSE.ES.MD new file mode 100644 index 00000000..f245daed --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/LICENSE.ES.MD @@ -0,0 +1,195 @@ +# Biblioteca 'UiServices.Discovery' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/LICENSE.MD new file mode 100644 index 00000000..f5196da2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/LICENSE.MD @@ -0,0 +1,167 @@ +# Library 'UiServices.Discovery' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/License.txt b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/License.txt new file mode 100644 index 00000000..ee9cd5ea --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/License.txt @@ -0,0 +1,177 @@ +############################################################################## +## +## Library 'UiServices.Discovery' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® Exception Message Box License Terms + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. UiServices.DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..b7fa5e36 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UI Services: Discovery")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Discovery")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("76dfac48-fa82-45c9-b77a-6a1d58e3bfcd")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/InvariantTexts.Designer.cs new file mode 100644 index 00000000..f6d02059 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/InvariantTexts.Designer.cs @@ -0,0 +1,75 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Discovery.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class InvariantTexts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal InvariantTexts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to {0}@{1}. + /// + internal static string FormatServiceProviderKey { + get { + return ResourceManager.GetString("FormatServiceProviderKey", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/InvariantTexts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/InvariantTexts.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/Properties/InvariantTexts.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/InvariantTexts.resx diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/ListViewManager.Designer.cs similarity index 96% rename from 1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/ListViewManager.Designer.cs index d5a64a2f..dad46e7c 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/ListViewManager.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Discovery.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.Discovery.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class ListViewManager { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/ListViewManager.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/ListViewManager.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/ListViewManager.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/Properties/ListViewManager.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/ListViewManager.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Resources.Designer.cs new file mode 100644 index 00000000..86832b3b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Resources.Designer.cs @@ -0,0 +1,306 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Discovery.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Add_16xM { + get { + object obj = ResourceManager.GetObject("Action_Add_16xM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Delete_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoNextDown_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoNextDown_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoPreviousUp_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoPreviousUp_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_SortAscending_16x16 { + get { + object obj = ResourceManager.GetObject("Action_SortAscending_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_SortDescending_16x16 { + get { + object obj = ResourceManager.GetObject("Action_SortDescending_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap BroadcastListSettings_32x32 { + get { + object obj = ResourceManager.GetObject("BroadcastListSettings_32x32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ListView_Details_16x16 { + get { + object obj = ResourceManager.GetObject("ListView_Details_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ListView_List_16x16 { + get { + object obj = ResourceManager.GetObject("ListView_List_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ListView_MediumIcons_16x16 { + get { + object obj = ResourceManager.GetObject("ListView_MediumIcons_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ListView_SmallIcons_16x16 { + get { + object obj = ResourceManager.GetObject("ListView_SmallIcons_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ListView_Tiles_16x16 { + get { + object obj = ResourceManager.GetObject("ListView_Tiles_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MissingLogo128 { + get { + object obj = ResourceManager.GetObject("MissingLogo128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MissingLogo16 { + get { + object obj = ResourceManager.GetObject("MissingLogo16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MissingLogo24 { + get { + object obj = ResourceManager.GetObject("MissingLogo24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MissingLogo256 { + get { + object obj = ResourceManager.GetObject("MissingLogo256", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MissingLogo32 { + get { + object obj = ResourceManager.GetObject("MissingLogo32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MissingLogo48 { + get { + object obj = ResourceManager.GetObject("MissingLogo48", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MissingLogo64 { + get { + object obj = ResourceManager.GetObject("MissingLogo64", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MissingLogo96 { + get { + object obj = ResourceManager.GetObject("MissingLogo96", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Info_24x24 { + get { + object obj = ResourceManager.GetObject("Status_Info_24x24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Success_24x24 { + get { + object obj = ResourceManager.GetObject("Status_Success_24x24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Resources.resx new file mode 100644 index 00000000..55ed692a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Resources.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\..\common.ui\resources\action_add_16xm.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_copy_clip_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_gonextdown_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_gopreviousup_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_sortascending_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_sortdescending_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\broadcastlistsettings_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\listview_details_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\listview_list_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\listview_mediumicons_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\listview_smallicons_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\listview_tiles_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MissingLogo128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MissingLogo16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MissingLogo24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MissingLogo256.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MissingLogo32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MissingLogo48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MissingLogo64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\MissingLogo96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\status_info_24x24.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\status_success_24x24.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/SettingsEditor.Designer.cs similarity index 87% rename from 1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/SettingsEditor.Designer.cs index bc1b2700..c899a7d1 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/SettingsEditor.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Discovery.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.Discovery.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class SettingsEditor { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/SettingsEditor.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/SettingsEditor.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/SettingsEditor.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/Properties/SettingsEditor.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/SettingsEditor.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Texts.Designer.cs new file mode 100644 index 00000000..96aa9ecf --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Texts.Designer.cs @@ -0,0 +1,291 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Discovery.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to The list has been successfully refreshed, but it is empty.. + /// + internal static string BroadcastListRefreshEmpty { + get { + return ResourceManager.GetString("BroadcastListRefreshEmpty", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The channel list has been successfully refreshed.. + /// + internal static string BroadcastListRefreshSuccess { + get { + return ResourceManager.GetString("BroadcastListRefreshSuccess", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to obtain the list of TV channels/services. + /// + internal static string BroadcastListUnableRefresh { + get { + return ResourceManager.GetString("BroadcastListUnableRefresh", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Obtaining list of TV channels/services.... + /// + internal static string BroadcastObtainingList { + get { + return ResourceManager.GetString("BroadcastObtainingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Parsing and extracting the list of TV channels/services.... + /// + internal static string BroadcastParsingList { + get { + return ResourceManager.GetString("BroadcastParsingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No description is available for this TV channel/service. + /// + internal static string BroadcastUnknownDisplayDescription { + get { + return ResourceManager.GetString("BroadcastUnknownDisplayDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to xxx. + /// + internal static string ChannelNumberNone { + get { + return ResourceManager.GetString("ChannelNumberNone", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unknown: {0}.{1}. + /// + internal static string FormatBroadcastUnknownDisplayName { + get { + return ResourceManager.GetString("FormatBroadcastUnknownDisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unknown ({0}). + /// + internal static string FormatServiceTypeIdUnknown { + get { + return ResourceManager.GetString("FormatServiceTypeIdUnknown", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} channels have been reallocated. + /// + internal static string MergeResultChangedServicesCount { + get { + return ResourceManager.GetString("MergeResultChangedServicesCount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to (No new, discontinued or modified channels). + /// + internal static string MergeResultDetailsNoData { + get { + return ResourceManager.GetString("MergeResultDetailsNoData", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} channels have not changed. + /// + internal static string MergeResultEqualServicesCount { + get { + return ResourceManager.GetString("MergeResultEqualServicesCount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to There are {0} new channels. + /// + internal static string MergeResultNewServicesCount { + get { + return ResourceManager.GetString("MergeResultNewServicesCount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} channels have been discontinued. + /// + internal static string MergeResultRemovedServicesCount { + get { + return ResourceManager.GetString("MergeResultRemovedServicesCount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No channels have been reallocated. + /// + internal static string MergeResultZeroChangedServices { + get { + return ResourceManager.GetString("MergeResultZeroChangedServices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to All channels have changed!. + /// + internal static string MergeResultZeroEqualServices { + get { + return ResourceManager.GetString("MergeResultZeroEqualServices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to There are no new channels. + /// + internal static string MergeResultZeroNewServices { + get { + return ResourceManager.GetString("MergeResultZeroNewServices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No channels have been discontinued. + /// + internal static string MergeResultZeroRemovedServices { + get { + return ResourceManager.GetString("MergeResultZeroRemovedServices", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No. + /// + internal static string No { + get { + return ResourceManager.GetString("No", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <Not provided>. + /// + internal static string NotProvidedValue { + get { + return ResourceManager.GetString("NotProvidedValue", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Channel description and data. + /// + internal static string Payload02DisplayName { + get { + return ResourceManager.GetString("Payload02DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Packages and channel numbers. + /// + internal static string Payload05DisplayName { + get { + return ResourceManager.GetString("Payload05DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to EPG data source locations. + /// + internal static string Payload06DisplayName { + get { + return ResourceManager.GetString("Payload06DisplayName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The refreshing of the list has been cancelled by the user.. + /// + internal static string UserCancelListRefresh { + get { + return ResourceManager.GetString("UserCancelListRefresh", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Yes. + /// + internal static string Yes { + get { + return ResourceManager.GetString("Yes", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Texts.es.resx new file mode 100644 index 00000000..72047436 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Texts.es.resx @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + La lista se ha actualizado correctamente, pero no contiene canales o servicios. + + + La lista de canales se ha actualizado correctamente. + + + Obteniendo la lista de canales de TV o servicios... + + + Analizando y extrayendo la lista de servicios... + + + Propiedades del canal de TV o servicio + + + No existe una descripción de este canal de TV o servicio + + + xxx + + + Desconocido: {0}.{1} + + + Desconocido ({0}) + + + {0} canales modificados + + + (No hay canales nuevos, suprimidos o modificados) + + + {0} canales no han cambiado + + + {0} nuevos canales + + + {0} canales han sido suprimidos + + + No hay canales con contenido modificado + + + ¡Todos los canales han cambiado! + + + No hay nuevos canales + + + No hay canales suprimidos + + + No + + + <No suministrado> + + + Descripción y datos de los canales + + + Paquetes y números de canal + + + Ubicaciones de fuentes de datos EPG + + + La actualización de la lista ha sido cancelada por el usuario. + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Texts.resx new file mode 100644 index 00000000..17469285 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Properties/Texts.resx @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + The list has been successfully refreshed, but it is empty. + + + The channel list has been successfully refreshed. + + + Unable to obtain the list of TV channels/services + + + Obtaining list of TV channels/services... + + + Parsing and extracting the list of TV channels/services... + + + No description is available for this TV channel/service + + + xxx + + + Unknown: {0}.{1} + + + Unknown ({0}) + + + {0} channels have been reallocated + + + (No new, discontinued or modified channels) + + + {0} channels have not changed + + + There are {0} new channels + + + {0} channels have been discontinued + + + No channels have been reallocated + + + All channels have changed! + + + There are no new channels + + + No channels have been discontinued + + + No + + + <Not provided> + + + Channel description and data + + + Packages and channel numbers + + + EPG data source locations + + + The refreshing of the list has been cancelled by the user. + + + Yes + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Resources/Action_Copy_Clip_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/Action_Copy_Clip_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/Resources/Action_Copy_Clip_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/Action_Copy_Clip_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Resources/BroadcastListSettings_32x32.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/BroadcastListSettings_32x32.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/Resources/BroadcastListSettings_32x32.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/BroadcastListSettings_32x32.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo128.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo128.png new file mode 100644 index 00000000..85c788e2 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo128.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo16.png new file mode 100644 index 00000000..8a0d0439 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo16.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo24.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo24.png new file mode 100644 index 00000000..f7fa2bbc Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo24.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo256.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo256.png new file mode 100644 index 00000000..6d566783 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo256.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo32.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo32.png new file mode 100644 index 00000000..7693d7d1 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo32.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo48.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo48.png new file mode 100644 index 00000000..8930cc29 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo48.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo64.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo64.png new file mode 100644 index 00000000..00618286 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo64.png differ diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo96.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo96.png new file mode 100644 index 00000000..71a4f815 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/MissingLogo96.png differ diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Resources/NetworkSettings_32.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/NetworkSettings_32.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/Resources/NetworkSettings_32.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/NetworkSettings_32.png diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Resources/NetworkSettings_48.png b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/NetworkSettings_48.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/Resources/NetworkSettings_48.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Resources/NetworkSettings_48.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/SerializationCommon.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/SerializationCommon.cs new file mode 100644 index 00000000..f413c17b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/SerializationCommon.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Discovery +{ + internal class SerializationCommon + { + public const string XmlNamespace = "urn:AlphaCentaury:IpTViewr:2014:UiServices.Discovery"; + } // class SerializationCommon +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscovery.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscovery.cs new file mode 100644 index 00000000..4c996f5c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscovery.cs @@ -0,0 +1,170 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml.Serialization; + +namespace IpTviewr.UiServices.Discovery +{ + [Serializable] + [XmlRoot(ElementName="UI-BroadcastDiscovery", Namespace=SerializationCommon.XmlNamespace)] + public class UiBroadcastDiscovery + { + private IDictionary _servicesDictionary; + + public static UiBroadcastDiscoveryMergeResult Merge(UiBroadcastDiscovery oldDiscovery, UiBroadcastDiscovery newDiscovery) + { + if (newDiscovery == null) throw new ArgumentNullException("newDiscovery"); + + if (oldDiscovery == null) + { + return new UiBroadcastDiscoveryMergeResult() + { + RemovedServices = new List(), + NewServices = newDiscovery.Services.AsReadOnly(), + ChangedServices = new List(), + CountNotChanged = -1, + IsEmpty = (newDiscovery.Services.Count == 0) + }; + } // if + + var removedServices = new List(); + var newServices = new List(); + var changedServices = new List(); + var notChanged = 0; + + oldDiscovery.BuildServicesDictionary(); + newDiscovery.BuildServicesDictionary(); + + // detect new services and changes + foreach (var service in newDiscovery.Services) + { + if (oldDiscovery._servicesDictionary.TryGetValue(service.Key, out var oldService)) + { + if (service.IsSameService(oldService)) + { + notChanged++; + service.TransferMergeProperties(oldService); + } + else + { + changedServices.Add(service); + } // if-else + } + else + { + newServices.Add(service); + } // if-else + } // foreach service + + // detect removed services + foreach (var service in oldDiscovery.Services) + { + if (!newDiscovery._servicesDictionary.ContainsKey(service.Key)) + { + removedServices.Add(service); + } // if + } // foreach service + + oldDiscovery._servicesDictionary = null; + newDiscovery._servicesDictionary = null; + + var result = new UiBroadcastDiscoveryMergeResult() + { + RemovedServices = removedServices.AsReadOnly(), + NewServices = newServices.AsReadOnly(), + ChangedServices = changedServices.AsReadOnly(), + CountNotChanged = notChanged, + IsEmpty = (newDiscovery.Services.Count == 0) + }; + + return result; + } // Merge + + /// Used by Serialization + protected UiBroadcastDiscovery() + { + } // constructor + + public UiBroadcastDiscovery(BroadcastDiscoveryRoot discoveryXml, string providerDomainName, int version) + { + Create(discoveryXml, providerDomainName, version); + } // constructor + + [XmlAttribute("version")] + public int Version + { + get; + set; + } // Version + + public List Services + { + get; + set; + } // Services + + public UiBroadcastService this[int index] => Services[index]; + + + public UiBroadcastService this[string serviceKey] + { + get + { + if (_servicesDictionary == null) BuildServicesDictionary(); + return _servicesDictionary[serviceKey]; + } // get + } // this[string] + + public bool TryGetService(string serviceKey, out UiBroadcastService service) + { + if (_servicesDictionary == null) BuildServicesDictionary(); + return _servicesDictionary.TryGetValue(serviceKey, out service); + } // TryGetService + + public UiBroadcastService TryGetService(string serviceKey) + { + if (_servicesDictionary == null) BuildServicesDictionary(); + return _servicesDictionary.TryGetValue(serviceKey, out var service) ? service : null; + } // TryGetService + + private void Create(BroadcastDiscoveryRoot discoveryXml, string providerDomainName, int version) + { + var services = from offering in discoveryXml.BroadcastDiscovery + from list in offering.Services + from service in list.Services + select service; + + var uiServices = from service in services + select new UiBroadcastService(service, providerDomainName); + + var uiServicesList = new List(services.Count()); + uiServicesList.AddRange(uiServices); + + Version = version; + Services = uiServicesList; + } // Create + + private void BuildServicesDictionary() + { + _servicesDictionary = new Dictionary(Services.Count); + foreach (var service in Services) + { + _servicesDictionary.Add(service.Key, service); + } // foreach + } // BuildServicesDictionary + } // class UiBroadcastDiscovery +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs new file mode 100644 index 00000000..7adec606 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs @@ -0,0 +1,245 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization; +using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; +using Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery; +using IpTviewr.Common; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Cache; +using IpTviewr.UiServices.DvbStpClient; +using System; +using System.Net; +using System.Windows.Forms; +using Etsi.Ts102034.v010501.XmlSerialization.ContentGuideDiscovery; + +namespace IpTviewr.UiServices.Discovery +{ + public class UiBroadcastDiscoveryDownloader + { + #region EventArgs + public class CacheEventArgs : EventArgs + { + public CachedXmlDocument CachedDiscovery { get; set; } + + public CacheEventArgs() + { + // no op + } // default constructor + + public CacheEventArgs(CachedXmlDocument cachedDiscovery) + { + CachedDiscovery = cachedDiscovery; + } // constructor + } // class CacheEventArgs + + public class DownloadEventArgs : EventArgs + { + public UiDvbStpEnhancedDownloader Downloader { get; set; } + + public DownloadEventArgs() + { + // no op + } // default constructor + + public DownloadEventArgs(UiDvbStpEnhancedDownloader downloader) + { + Downloader = downloader; + } // constructor + } // class DownloadEventArgs + + public class MergeEventArgs: EventArgs + { + public UiBroadcastDiscovery Downloaded { get; set; } + public UiBroadcastDiscovery Current { get; set; } + + public MergeEventArgs() + { + // no-op + } // default constructor + + public MergeEventArgs(UiBroadcastDiscovery downloadedUiDiscovery, UiBroadcastDiscovery currentUiDiscovery) + { + Downloaded = downloadedUiDiscovery; + Current = currentUiDiscovery; + } // constructor + } // class MergeEventArgs + + public class AssignNumbersArgs: EventArgs + { + public UiBroadcastDiscovery Current { get; set; } + public PackageDiscoveryRoot PackageDiscovery { get; set; } + public UiServiceProvider ServiceProvider { get; set; } + public bool HighDefinitionPriority { get; set; } + + public AssignNumbersArgs() + { + // no-op + } // default constructor + + public AssignNumbersArgs(UiBroadcastDiscovery currentUiDiscovery, PackageDiscoveryRoot packageDiscovery, UiServiceProvider serviceProvider, bool highDefinitionPriority) + { + Current = currentUiDiscovery; + PackageDiscovery = packageDiscovery; + ServiceProvider = serviceProvider; + HighDefinitionPriority = highDefinitionPriority; + } // constructor + } // AssignNumbersArgs + #endregion + + public event EventHandler BeforeCacheLoad; + public event EventHandler AfterCacheLoad; + public event EventHandler BeforeDownload; + public event EventHandler AfterDownload; + public event EventHandler BeforeMerge; + public event EventHandler AfterMerge; + public event EventHandler BeforeAssignNumbers; + public event EventHandler AfterAssignNumbers; + public event EventHandler Exception; + + public UiBroadcastDiscovery BroadcastDiscovery { get; private set; } + public PackageDiscoveryRoot PackageDiscovery { get; private set; } + public BroadcastContentGuideDiscoveryRoot EpgDiscovery { get; private set; } + + public bool Download(Form ownerForm, UiServiceProvider serviceProvider, UiBroadcastDiscovery currentUiDiscovery, bool fromCache, bool? highDefinitionPriority = null, bool skipEpg = false) + { + try + { + BroadcastDiscovery = null; + PackageDiscovery = null; + if (!skipEpg) EpgDiscovery = null; + + if (fromCache) + { + OnBeforeCacheLoad(this, EventArgs.Empty); + var cachedBroadcastDiscovery = AppConfig.Current.Cache.LoadXmlDocument("UiBroadcastDiscovery", serviceProvider.Key); + var cachedPackageDiscovery = AppConfig.Current.Cache.LoadXmlDocument("PackageDiscovery", serviceProvider.Key); + var cachedEpgDiscovery = AppConfig.Current.Cache.LoadXmlDocument("BroadcastContentGuideDiscovery", serviceProvider.Key); + OnAfterCacheLoad(this, new CacheEventArgs(cachedBroadcastDiscovery)); + + BroadcastDiscovery = cachedBroadcastDiscovery?.Document; + PackageDiscovery = cachedPackageDiscovery?.Document; + if (!skipEpg) EpgDiscovery = cachedEpgDiscovery?.Document; + } // if + + if ((BroadcastDiscovery != null) && (PackageDiscovery != null) && (skipEpg || EpgDiscovery != null)) + { + return true; + } // if + + BroadcastDiscovery = null; + PackageDiscovery = null; + if (!skipEpg) EpgDiscovery = null; + + OnBeforeDownload(this, EventArgs.Empty); + var downloader = new UiDvbStpEnhancedDownloader() + { + Request = new UiDvbStpEnhancedDownloadRequest(3) + { + MulticastAddress = IPAddress.Parse(serviceProvider.Offering.Push[0].Address), + MulticastPort = serviceProvider.Offering.Push[0].Port, + Description = Properties.Texts.BroadcastObtainingList, + DescriptionParsing = Properties.Texts.BroadcastParsingList, + AllowXmlExtraWhitespace = false, + XmlNamespaceReplacer = NamespaceUnification.Replacer, + NoDataTimeout = 60000, // 60 seconds + ReceiveDatagramTimeout = 60000, // 60 seconds +#if DEBUG + DumpToFolder = AppConfig.Current.Folders.Cache +#endif + }, + TextUserCancelled = Properties.Texts.UserCancelListRefresh, + TextDownloadException = Properties.Texts.BroadcastListUnableRefresh, + }; + downloader.Request.AddPayload(0x02, null, Properties.Texts.Payload02DisplayName, typeof(BroadcastDiscoveryRoot)); + downloader.Request.AddPayload(0x05, null, Properties.Texts.Payload05DisplayName, typeof(PackageDiscoveryRoot)); + if (!skipEpg) downloader.Request.AddPayload(0x06, null, Properties.Texts.Payload06DisplayName, typeof(BroadcastContentGuideDiscoveryRoot)); + downloader.Download(ownerForm); + OnAfterDownload(this, new DownloadEventArgs(downloader)); + if (!downloader.IsOk) return false; + + var xmlDiscovery = downloader.Request.Payloads[0].XmlDeserializedData as BroadcastDiscoveryRoot; + BroadcastDiscovery = new UiBroadcastDiscovery(xmlDiscovery, serviceProvider.DomainName, downloader.Request.Payloads[0].SegmentVersion); + + OnBeforeMerge(this, new MergeEventArgs(BroadcastDiscovery, currentUiDiscovery)); + UiBroadcastDiscoveryMergeResultDialog.Merge(ownerForm, currentUiDiscovery, BroadcastDiscovery); + OnAfterMerge(this, new MergeEventArgs(BroadcastDiscovery, currentUiDiscovery)); + + PackageDiscovery = downloader.Request.Payloads[1].XmlDeserializedData as PackageDiscoveryRoot; + highDefinitionPriority ??= !AppConfig.Current.User.ChannelNumberStandardDefinitionPriority; + + OnBeforeAssignNumbers(this, new AssignNumbersArgs(BroadcastDiscovery, PackageDiscovery, serviceProvider, highDefinitionPriority.Value)); + UiServicesLogicalNumbers.AssignLogicalNumbers(BroadcastDiscovery, PackageDiscovery, serviceProvider.DomainName, highDefinitionPriority.Value); + OnAfterAssignNumbers(this, new AssignNumbersArgs(BroadcastDiscovery, PackageDiscovery, serviceProvider, highDefinitionPriority.Value)); + + if (!skipEpg) EpgDiscovery = downloader.Request.Payloads[2].XmlDeserializedData as BroadcastContentGuideDiscoveryRoot; + + AppConfig.Current.Cache.SaveXml("UiBroadcastDiscovery", serviceProvider.Key, BroadcastDiscovery.Version, BroadcastDiscovery); + AppConfig.Current.Cache.SaveXml("PackageDiscovery", serviceProvider.Key, 0, PackageDiscovery); + if (!skipEpg) AppConfig.Current.Cache.SaveXml("BroadcastContentGuideDiscovery", serviceProvider.Key, 0, EpgDiscovery); + + return true; + } + catch (Exception ex) + { + OnHandleException(this, new HandleExceptionEventArgs(ownerForm, null, Properties.Texts.BroadcastListUnableRefresh, ex)); + return false; + } // try-catch + } // Download + + protected void OnBeforeCacheLoad(object sender, EventArgs e) + { + BeforeCacheLoad?.Invoke(sender, e); + } // OnBeforeCacheLoad + + protected void OnAfterCacheLoad(object sender, CacheEventArgs e) + { + AfterCacheLoad?.Invoke(sender, e); + } // OnAfterCacheLoad + + protected void OnBeforeDownload(object sender, EventArgs e) + { + BeforeDownload?.Invoke(sender, e); + } // OnBeforeDownload + + protected void OnAfterDownload(object sender, DownloadEventArgs e) + { + AfterDownload?.Invoke(sender, e); + } // OnAfterDownload + + private void OnBeforeMerge(object sender, MergeEventArgs e) + { + BeforeMerge?.Invoke(sender, e); + } // OnBeforeMerge + + private void OnAfterMerge(object sender, MergeEventArgs e) + { + AfterMerge?.Invoke(sender, e); + } // OnAfterMerge + + private void OnBeforeAssignNumbers(object sender, AssignNumbersArgs e) + { + BeforeAssignNumbers?.Invoke(sender, e); + } // OnBeforeAssignNumbers + + private void OnAfterAssignNumbers(object sender, AssignNumbersArgs e) + { + AfterAssignNumbers?.Invoke(sender, e); + } // OnAfterAssignNumbers + + protected void OnHandleException(object sender, HandleExceptionEventArgs e) + { + Exception?.Invoke(sender, e); + } // OnHandleException + } // class UiBroadcastDiscoveryDownloader +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs new file mode 100644 index 00000000..b64f63ff --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs @@ -0,0 +1,50 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; + +namespace IpTviewr.UiServices.Discovery +{ + public class UiBroadcastDiscoveryMergeResult + { + public IList RemovedServices + { + get; + set; + } // RemovedServices + + public IList NewServices + { + get; + set; + } // NewServices + + public IList ChangedServices + { + get; + set; + } // ChangedServices + + public int CountNotChanged + { + get; + set; + } // CountNotChanged + + public bool IsEmpty + { + get; + set; + } // IsEmpty + } // class UiBroadcastDiscoveryMergeResult +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs similarity index 90% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs index 34ef7587..992a1e2f 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Discovery { @@ -80,7 +90,7 @@ private void InitializeComponent() this.buttonCopy.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.Action_Copy_Clip_16x16; this.buttonCopy.Name = "buttonCopy"; this.buttonCopy.UseVisualStyleBackColor = true; - this.buttonCopy.Click += new System.EventHandler(this.buttonCopy_Click); + this.buttonCopy.Click += new System.EventHandler(this.ButtonCopy_Click); // // UiBroadcastDiscoveryMergeResultDetailsDialog // @@ -107,4 +117,4 @@ private void InitializeComponent() private System.Windows.Forms.ColumnHeader columnHeader2; private System.Windows.Forms.Button buttonCopy; } // class UiBroadcastDiscoveryMergeResultDetailsDialog -} // namespace \ No newline at end of file +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs similarity index 76% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs index 75ed0637..2c13f520 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.cs @@ -1,11 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; @@ -27,11 +34,9 @@ public UiBroadcastDiscoveryMergeResult MergeResult private void UiBroadcastDiscoveryMergeResultDetailsDialog_Load(object sender, EventArgs e) { - List items; - if (MergeResult == null) return; - items = new List(); + var items = new List(); AddServices(items, MergeResult.NewServices, listViewDetails.Groups["Added"]); AddServices(items, MergeResult.RemovedServices, listViewDetails.Groups["Removed"]); AddServices(items, MergeResult.ChangedServices, listViewDetails.Groups["Changed"]); @@ -54,13 +59,13 @@ orderby item.Text } // if-else } // UiBroadcastDiscoveryMergeResultDetailsDialog_Load - private void buttonCopy_Click(object sender, EventArgs e) + private void ButtonCopy_Click(object sender, EventArgs e) { var output = new StringBuilder(); output.AppendLine("Display name\tService Name\tStatus"); - for (int index = 0; index < listViewDetails.Items.Count; index++) + for (var index = 0; index < listViewDetails.Items.Count; index++) { var item = listViewDetails.Items[index]; output.Append(item.SubItems[0].Text); @@ -74,14 +79,13 @@ private void buttonCopy_Click(object sender, EventArgs e) Clipboard.SetText(output.ToString()); } // buttonCopy_Click - private void AddServices(List items, IList services, ListViewGroup group) + private static void AddServices(List items, IList services, ListViewGroup group) { if ((services == null) || (services.Count == 0)) return; foreach(var service in services) { - var item = new ListViewItem(service.DisplayName); - item.Group = group; + var item = new ListViewItem(service.DisplayName) {Group = @group}; item.SubItems.Add(service.ServiceName); items.Add(item); diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDetailsDialog.resx diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs similarity index 94% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs index 552fcf5f..630acc55 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Discovery { @@ -123,7 +133,7 @@ private void InitializeComponent() this.buttonDetails.Image = global::IpTviewr.UiServices.Discovery.Properties.Resources.ListView_Details_16x16; this.buttonDetails.Name = "buttonDetails"; this.buttonDetails.UseVisualStyleBackColor = true; - this.buttonDetails.Click += new System.EventHandler(this.buttonDetails_Click); + this.buttonDetails.Click += new System.EventHandler(this.ButtonDetails_Click); // // pictureIconSuccess // @@ -173,4 +183,4 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonClose; private System.Windows.Forms.Button buttonDetails; } // class UiBroadcastDiscoveryMergeResultDialog -} // namespace \ No newline at end of file +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs similarity index 80% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs index 2351cd73..f92cd66e 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.cs @@ -1,13 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.UiServices.Discovery @@ -20,14 +24,13 @@ public static UiBroadcastDiscoveryMergeResult Merge(IWin32Window owner, UiBroadc { var result = UiBroadcastDiscovery.Merge(oldDiscovery, newDiscovery); - if (oldDiscovery != null) + if (oldDiscovery == null) return result; + + using (var dialog = new UiBroadcastDiscoveryMergeResultDialog()) { - using (var dialog = new UiBroadcastDiscoveryMergeResultDialog()) - { - dialog.MergeResult = result; - dialog.ShowDialog(owner); - } // using dialog - } // if + dialog.MergeResult = result; + dialog.ShowDialog(owner); + } // using dialog return result; } // Merge @@ -39,7 +42,7 @@ public UiBroadcastDiscoveryMergeResultDialog() private void UiBroadcastDiscoveryMergeResultDialog_Load(object sender, EventArgs e) { - this.Text = Owner.Text; + Text = Owner.Text; if (MergeResult.IsEmpty) { @@ -100,7 +103,7 @@ private void UiBroadcastDiscoveryMergeResultDialog_Load(object sender, EventArgs } // if-else } // UiBroadcastDiscoveryMergeResultDialog_Load - private void buttonDetails_Click(object sender, EventArgs e) + private void ButtonDetails_Click(object sender, EventArgs e) { using (var dlg = new UiBroadcastDiscoveryMergeResultDetailsDialog()) { diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastDiscoveryMergeResultDialog.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastService.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastService.cs new file mode 100644 index 00000000..ff4bcc29 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiBroadcastService.cs @@ -0,0 +1,571 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization; +using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Configuration.Settings.Network; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Xml.Serialization; +using Property = System.Collections.Generic.KeyValuePair; + +namespace IpTviewr.UiServices.Discovery +{ + [Serializable] + [XmlType(TypeName = "UI-BroadcastService", Namespace = SerializationCommon.XmlNamespace)] + public class UiBroadcastService + { + private string _displayOriginalName; + private string _displayShortName; + private string _displayDescription; + private string _displayGenre; + private string _displayGenreCode; + private string _displayParentalRating; + private string _displayParentalRatingCode; + private string _displayLockLevel; + private string _originalLocationUrl; + private string _displayServiceType; + [NonSerialized] + private ServiceLogo _logo; + + /// Used by Serialization + public UiBroadcastService() + { + } // constructor + + public override string ToString() => $"{ServiceLogicalNumber} {DisplayName}"; + + public static string GetKey(TextualIdentifier serviceIdentifier, string defaultDomainName) + { + var domain = serviceIdentifier.DomainName ?? defaultDomainName; + + return string.Format(Properties.InvariantTexts.FormatServiceProviderKey, serviceIdentifier.ServiceName.ToLowerInvariant(), domain.ToLowerInvariant()); + } // CreateKey + + public UiBroadcastService(IpService service, string providerDomainName) + { + Data = service ?? throw new ArgumentNullException("IpService service"); + DomainName = (Data.TextualIdentifier.DomainName ?? providerDomainName).ToLowerInvariant(); + Key = GetKey(service.TextualIdentifier, providerDomainName); + } // constructor + + #region Data for UI display + + [XmlIgnore] + public bool IsHighDefinitionTv + { + get + { + switch (ServiceType) + { + case "17": // HD TV (MPEG-2) + case "25": // HD TV (AVC) + return true; + default: + return false; + } // switch + } // get + } // IsHighDefinitionTv + + [XmlIgnore] + public bool IsStandardDefinitionTv + { + get + { + switch (ServiceType) + { + case "1": // SD TV + case "22": // SD TV (AVC) + return true; + default: + return false; + } // switch + } // get + } // IsStandardDefinitionTv + + [XmlIgnore] + public bool IsTelevisionService + { + get + { + switch (ServiceType) + { + case "1": // SD TV + case "22": // SD TV (AVC) + case "17": // HD TV (MPEG-2) + case "25": // HD TV (AVC) + return true; + default: + return false; + } // switch + } // get + } // IsTelevisionService + + [XmlIgnore] + public string DisplayLogicalNumber => UserLogicalNumber ?? (ServiceLogicalNumber ?? Properties.Texts.ChannelNumberNone); + + [XmlIgnore] + public string DisplayName => UserDisplayName ?? DisplayOriginalName; + + [XmlIgnore] + public string DisplayShortName => _displayShortName ?? (_displayShortName = GetDisplayShortName()); + + [XmlIgnore] + public string DisplayOriginalName => _displayOriginalName ?? (_displayOriginalName = GetDisplayOriginalName()); + + [XmlIgnore] + public string DisplayDescription => _displayDescription ?? (_displayDescription = GetDisplayDescription()); + + [XmlIgnore] + public string DisplayServiceType => _displayServiceType ?? (_displayServiceType = GetDisplayServiceType()); + + [XmlIgnore] + public string DisplayLocationUrl => LocationUrl ?? Properties.Texts.NotProvidedValue; + + [XmlIgnore] + public string DisplayGenre => _displayGenre ?? (_displayGenre = GetDisplayGenre()); + + [XmlIgnore] + public string DisplayGenreCode => _displayGenreCode ?? (_displayGenreCode = GetDisplayGenreCode()); + + [XmlIgnore] + public string DisplayParentalRating => _displayParentalRating ?? (_displayParentalRating = GetDisplayParentalRating()); + + [XmlIgnore] + public string DisplayParentalRatingCode => _displayParentalRatingCode ?? (_displayParentalRatingCode = GetDisplayParentalRatingCode()); + + [XmlIgnore] + public string DisplayLockLevel => _displayLockLevel ?? (_displayLockLevel = GetDisplayLockLevel()); + + #endregion + + #region UI additional data + + public string DomainName + { + get; + set; + } // DomainName + + [XmlIgnore] + public ServiceLogo Logo => _logo ?? (_logo = GetLogo()); + + public string Key + { + get; + set; + } // Key + + [DefaultValue(false)] + public bool IsInactive + { + get; + set; + } // IsInactive + + public string ServiceLogicalNumber + { + get; + set; + } // ServiceLogicalNumber + + #endregion + + #region User defined data + + [DefaultValue(false)] + public bool IsHidden + { + get; + set; + } // IsHidden + + [DefaultValue(0)] + public int LockLevel + { + get; + set; + } // LockLevel + + [DefaultValue(null)] + public string UserDisplayName + { + get; + set; + } // UserDisplayName + + [DefaultValue(null)] + public string UserLogicalNumber + { + get; + set; + } // UserLogicalNumber + + #endregion + + #region Shortcuts for underlying BroadcastService data + + [XmlElement(Namespace = IpService.Namespace)] + public IpService Data + { + get; + set; + } // Data + + [XmlIgnore] + public string ServiceName => Data.TextualIdentifier.ServiceName; + + [XmlIgnore] + public string FullServiceName => ServiceName + "." + DomainName; + + [XmlIgnore] + public TextualIdentifier ReplacementService + { + get + { + var replacements = Data.ServiceInformation?.ReplacementService; + if (replacements == null || (replacements.Length == 0)) return null; + + var q = from r in replacements + let ti = r.TextualIdentifier + where ti != null + select ti; + var replacement = q.FirstOrDefault(); + + return replacement; + } // get + } // ReplacementService + + [XmlIgnore] + public string ServiceType => Data.ServiceInformation?.ServiceType; + + [XmlIgnore] + public string LocationUrl + { + get + { + var networkSettings = NetworkSettingsRegistration.Settings; + if (networkSettings?.MulticastProxy == null || (networkSettings.MulticastProxy.IsEnabled == false)) + { + return OriginalLocationUrl; + } // if + + return GetProxiedLocationUrl(networkSettings.MulticastProxy); + } // get + } // LocationUrl + + [XmlIgnore] + public string OriginalLocationUrl => _originalLocationUrl ?? (_originalLocationUrl = GetLocationUrl()); + + #endregion + + public bool IsSameService(UiBroadcastService service) + { + if (Key != service.Key) return false; + if (LocationUrl != service.LocationUrl) return false; + if (DisplayOriginalName != service.DisplayOriginalName) return false; + return ServiceType == service.ServiceType; + } // IsSameService + + // v1.0 RC 0: code moved from ChannelList > ChanneListForm.cs > DumpProperties(UiBroadcastService) + + public IList DumpProperties() + { + var properties = new List + { + new Property("Name (display)", DisplayName), + new Property("Description (display)", DisplayDescription), + new Property("Type (display)", DisplayServiceType), + new Property("Location URL (display)", DisplayLocationUrl), + new Property("Is active", (!IsInactive).ToString()) + }; + + + if (Data.ServiceLocation == null) + { + properties.Add(new Property("Service location", null)); + } + else + { + properties.Add(new Property("Service location (multicast)", Data.ServiceLocation?.IpMulticastAddress?.Url)); + + if (Data.ServiceLocation.RtspUrl == null) + { + properties.Add(new Property("Service location (RTSP)", null)); + } + else + { + properties.Add(new Property("Service location (RTSP control URL)", Data.ServiceLocation.RtspUrl.ControlUrl)); + properties.Add(new Property("Service location (RTSP)", Data.ServiceLocation.RtspUrl.Value)); + } // if + + properties.Add(new Property("Service location (broadcast system)", Data.ServiceLocation.BroadcastSystem)); + } // if-else + + if (Data.TextualIdentifier == null) + { + properties.Add(new Property("Textual identifier", null)); + } + else + { + properties.Add(new Property("Identifier: Service name", Data.TextualIdentifier.ServiceName)); + properties.Add(new Property("Identifier: Domain", Data.TextualIdentifier.DomainName)); + } // if-else + + if ((Data.DvbTriplet == null) || (Data.DvbTriplet.Length == 0)) + { + properties.Add(new Property("DVB Triplet", null)); + } + else + { + var q = from triplet in Data.DvbTriplet + select new Property("DVB Triplet", $"OrigNetId='{triplet.OrigNetId}', TSId='{triplet.TsId}', ServiceId='{triplet.ServiceId}'"); + properties.AddRange(q); + } // if-else + + properties.Add(new Property("Max bitrate", Data.MaxBitrate)); + + if (Data.ServiceInformation == null) + { + properties.Add(new Property("Service information", null)); + } + else + { + properties.Add(new Property("Service type", Data.ServiceInformation.ServiceType)); + properties.Add(new Property("Primary information source", Data.ServiceInformation.PrimaryServiceInformationSource.ToString())); + if (Data.ServiceInformation.Name == null) + { + properties.Add(new Property("Name", null)); + } + else + { + var q = from txt in Data.ServiceInformation.Name + select Utils.GetLanguageProperty("Name", txt); + properties.AddRange(q); + } // if-else + if (Data.ServiceInformation.Description == null) + { + properties.Add(new Property("Description", null)); + } + else + { + var q = from txt in Data.ServiceInformation.Description + select Utils.GetLanguageProperty("Description", txt); + properties.AddRange(q); + } // if-else + + if ((Data.ServiceInformation.ServiceDescriptionLocation == null) || (Data.ServiceInformation.ServiceDescriptionLocation.Length == 0)) + { + properties.Add(new Property("Description location", null)); + } + else + { + var q = from location in Data.ServiceInformation.ServiceDescriptionLocation + select new Property("Description location", location.Value); + properties.AddRange(q); + } // if-else + if (Data.ServiceInformation.ContentGenre == null) + { + properties.Add(new Property("Content genre", null)); + } + else + { + var buffer = new StringBuilder(); + foreach (var b in Data.ServiceInformation.ContentGenre) + { + buffer.AppendFormat("{0:X2} ", b); + } // foreach + properties.Add(new Property("Content genre", buffer.ToString())); + } // if-else + + // ServiceInformation.ReplacementService + if (Data.ServiceInformation.ReplacementService == null) + { + properties.Add(new Property("Replacement service", null)); + } + else + { + foreach (var replacement in Data.ServiceInformation.ReplacementService) + { + var triplet = replacement.DvbTriplet as DvbTriplet; + if (replacement.DvbTriplet != null) + { + properties.Add(new Property("Replacement service", + $"DVB Triplet: OrigNetId='{triplet.OrigNetId}', TSId='{triplet.TsId}', ServiceId='{triplet.ServiceId}'")); + } // if + var textual = replacement.TextualIdentifier; + if (textual != null) + { + properties.Add(new Property("Replacement service", + $"Identifier: Name='{textual.ServiceName}', Domain='{textual.DomainName}'")); + + } // if + if ((triplet == null) && (textual == null)) + { + properties.Add(new Property("Replacement service", null)); + } // if + properties.Add(new Property("Replacement type", replacement.Kind)); + } // foreach + } // if-else + + // ServiceInformation.MosaicDescription + properties.Add(new Property("Has mosaic description", (Data.ServiceInformation.MosaicDescription != null).ToString())); + + // ServiceInformation.AnnouncementSupport + properties.Add(new Property("Has announcement support", (Data.ServiceInformation.AnnouncementSupport != null).ToString())); + + // ServiceInformation.ExtraData + properties.Add(new Property("Has out-of-schema data", (Data.ServiceInformation.ExtraData != null).ToString())); + } // if-else + + // AudioAttributes + properties.Add(new Property("Has audio details", (Data.AudioAttributes != null).ToString())); + + // VideoAttributes + properties.Add(new Property("Has video details", (Data.VideoAttributes != null).ToString())); + + return properties; + } // DumpProperties + + internal void TransferMergeProperties(UiBroadcastService service) + { + IsInactive = service.IsInactive; + IsHidden = service.IsHidden; + LockLevel = service.LockLevel; + UserDisplayName = service.UserDisplayName; + UserLogicalNumber = service.UserLogicalNumber; + } // TransferMergeProperties + + #region Data extraction for underlying BroadcastService + + private string GetDisplayOriginalName() + { + if (Data.ServiceInformation == null) + { + return string.Format(Properties.Texts.FormatBroadcastUnknownDisplayName, + Data.TextualIdentifier.ServiceName, DomainName); + } // if + + var text = Data.ServiceInformation.Name.SafeGetLanguageValue(AppConfig.Current.User.PreferredLanguagesList, true, null); + return text ?? string.Format(Properties.Texts.FormatBroadcastUnknownDisplayName, Data.TextualIdentifier.ServiceName, DomainName); + } // GetDisplayOriginalName + + private string GetDisplayShortName() + { + if (Data.ServiceInformation == null) return Properties.Texts.NotProvidedValue; + + var text = Data.ServiceInformation.ProprietaryShortName.SafeGetLanguageValue(AppConfig.Current.User.PreferredLanguagesList, true, null); + return text ?? Properties.Texts.NotProvidedValue; + } // GetDisplayShortName + + private string GetDisplayDescription() + { + if (Data.ServiceInformation == null) return Properties.Texts.BroadcastUnknownDisplayDescription; + + var text = Data.ServiceInformation.Description.SafeGetLanguageValue(AppConfig.Current.User.PreferredLanguagesList, true, null); + return text ?? Properties.Texts.BroadcastUnknownDisplayDescription; + } // GetDisplayDescription + + private string GetLocationUrl() + { + return Data.ServiceLocation?.LocationUrl; + } // GetLocationUrl + + private string GetProxiedLocationUrl(MulticastProxy proxy) + { + if (Data?.ServiceLocation == null) return null; + if (Data.ServiceLocation.IpMulticastAddress == null) + { + return Data.ServiceLocation.RtspUrl?.Value; + } // if + + var multicast = Data.ServiceLocation.IpMulticastAddress; + return proxy.GetProxiedLocationUrl(multicast.Protocol, multicast.Address, multicast.Port); + } // GetProxiedLocationUrl + + private string GetDisplayServiceType() + { + if (Data.ServiceInformation == null) + { + return Properties.Texts.NotProvidedValue; + } // if-else + + var serviceType = ServiceType; + if (!AppConfig.Current.DescriptionServiceTypes.TryGetValue(serviceType, out var serviceTypeDescription)) + { + serviceTypeDescription = string.Format(Properties.Texts.FormatServiceTypeIdUnknown, serviceType); + } // if + + return serviceTypeDescription; + } // GetDisplayServiceType + + private string GetDisplayGenre() + { + return Data.ServiceInformation?.ProprietaryGenre != null ? Data.ServiceInformation.ProprietaryGenre.Name : Properties.Texts.NotProvidedValue; + } // GetDisplayGenre + + private string GetDisplayGenreCode() + { + if (Data.ServiceInformation?.ProprietaryGenre == null) + { + return Properties.Texts.NotProvidedValue; + } // if + + var code = Data.ServiceInformation.ProprietaryGenre.Code; + return code.StartsWith("urn:miviewtv:cs:GenreCS:", StringComparison.InvariantCultureIgnoreCase) ? code.Substring(21) : code; + } // GetDisplayGenreCode + + private string GetDisplayParentalRating() + { + if ((Data.ServiceInformation?.ProprietaryParentalGuidance?.ParentalRating?.Name?.Length ?? 0) == 0) + { + return Properties.Texts.NotProvidedValue; + } // if + + return Data.ServiceInformation.ProprietaryParentalGuidance.ParentalRating.Name[0].Value; + } // GetDisplayParentalRating + + private string GetDisplayParentalRatingCode() + { + if (Data.ServiceInformation?.ProprietaryParentalGuidance?.ParentalRating == null) + { + return Properties.Texts.NotProvidedValue; + } // if + + var code = Data.ServiceInformation.ProprietaryParentalGuidance.ParentalRating.TermUrl; + return code.StartsWith("urn:dvb:metadata:cs:ParentalGuidanceCS:", StringComparison.InvariantCultureIgnoreCase) ? code.Substring(36) : code; + } // GetDisplayParentalRatingCode + + private string GetDisplayLockLevel() + { + // TODO: GetDisplayLockLevel + return Properties.Texts.NotProvidedValue; + } // GetDisplayLockLevel + + private ServiceLogo GetLogo() + { + return AppConfig.Current.ServiceLogoMappings.Get(Data.TextualIdentifier.DomainName, + DomainName, + Data.TextualIdentifier.ServiceName, + ServiceType); + } // GetLogo + + #endregion + } // class UiBroadcastService +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiProviderDiscovery.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiProviderDiscovery.cs similarity index 77% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiProviderDiscovery.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiProviderDiscovery.cs index d93e1fe2..f5a92443 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiProviderDiscovery.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiProviderDiscovery.cs @@ -1,11 +1,20 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Xml.Serialization; namespace IpTviewr.UiServices.Discovery @@ -27,6 +36,8 @@ public IList Providers public static UiServiceProvider GetUiServiceProviderFromKey(ProviderDiscoveryRoot discoveryXml, string serviceKey) { + if (discoveryXml.ServiceProviderDiscovery == null) return null; + var providers = from discovery in discoveryXml.ServiceProviderDiscovery from provider in discovery.Providers let uiProvider = new UiServiceProvider(provider) diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiServiceProvider.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiServiceProvider.cs new file mode 100644 index 00000000..be5093da --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiServiceProvider.cs @@ -0,0 +1,162 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization; +using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using System; +using System.Collections.Generic; +using System.Linq; +using Property = System.Collections.Generic.KeyValuePair; + +namespace IpTviewr.UiServices.Discovery +{ + public class UiServiceProvider + { + private string _displayName; + private string _displayDescription; + private ProviderLogo _logo; + + public UiServiceProvider(ServiceProvider provider) + { + Data = provider ?? throw new ArgumentNullException("ServiceProvider provider"); + Key = provider.DomainName.ToLowerInvariant(); + } // constructor + + public ServiceProvider Data + { + get; + } // Data + + public string Key + { + get; + } // Key + + public string DomainName => Data.DomainName; + + public ProviderOffering Offering => Data.Offering; + + public string DisplayName => _displayName ??= GetDisplayName(); + + public string DisplayDescription => _displayDescription ??= GetDisplayDescription(); + + public ProviderLogo Logo => _logo ??= GetLogo(); + + public override string ToString() => DomainName; + + public IList DumpProperties() + { + var properties = new List(); + + var text = Data.Name.SafeGetLanguageItem(AppConfig.Current.User.PreferredLanguagesList, true); + properties.Add(Utils.GetLanguageProperty("Name (display)", text)); + text = Data.Description.SafeGetLanguageItem(AppConfig.Current.User.PreferredLanguagesList, true); + properties.Add(Utils.GetLanguageProperty("Description (display)", text)); + properties.Add(new Property("Domain name", DomainName)); + properties.Add(new Property("Logo URI", Data.LogoUrl)); + + if (Offering.Push != null) + { + foreach (var push in Offering.Push) + { + if (push.PayloadId == null) + { + properties.Add(new Property("Push offering", + $"{push.Address}:{push.Port}")); + } + else + { + properties.Add(new Property("Push offering", + $"{push.Address}:{push.Port} with {push.PayloadId.Length} payloads")); + } // if-else + } // foreach push + } + else + { + properties.Add(new Property("Push offering list", null)); + } // if-else + + if (Offering.Pull != null) + { + foreach (var pull in Offering.Pull) + { + if (pull.PayloadId == null) + { + properties.Add(new Property("Pull offering", + $"{pull.Location}")); + } + else + { + properties.Add(new Property("Pull offering", + $"{pull.Location} with {pull.PayloadId.Length} payloads")); + } // if-else + } // foreach pull + } + else + { + properties.Add(new Property("Pull offering list", null)); + } // if-else + + if (Data.Name != null) + { + var q = from txt in Data.Name + select Utils.GetLanguageProperty("Name", txt); + properties.AddRange(q); + } + else + { + properties.Add(new Property("Name list", null)); + } // if-else + + if (Data.Description != null) + { + var q = from txt in Data.Description + select Utils.GetLanguageProperty("Description", txt); + properties.AddRange(q); + } + else + { + properties.Add(new Property("Description list", null)); + } // if-else + + return properties; + } // DumpProperties + + private string GetDisplayName() + { + var result = Data.Name.SafeGetLanguageValue(AppConfig.Current.User.PreferredLanguagesList, AppConfig.Current.DisplayPreferredOrFirst, null); + if (result != null) return result; + + var providerTexts = AppConfig.Current.IpTvService.Texts.Provider; + if (AppConfig.Current.ContentProvider.FriendlyNames.ServiceProvider.TryGetValue(Data.DomainName, out var friendlyName)) + { + return string.Format(providerTexts.FormatFriendlyName, friendlyName, Data.DomainName.ToLowerInvariant()); + } // if + + return string.Format(providerTexts.FormatUnknownName, Data.DomainName.ToLowerInvariant()); + } // GetDisplayName + + private string GetDisplayDescription() + { + var result = Data.Description.SafeGetLanguageValue(AppConfig.Current.User.PreferredLanguagesList, AppConfig.Current.DisplayPreferredOrFirst, null); + return result ?? AppConfig.Current.IpTvService.Texts.Provider.UnknownDisplayDescription; + } // GetDisplayDescription + + private ProviderLogo GetLogo() + { + return AppConfig.Current.ProviderLogoMappings.Get(DomainName); + } // GetLogo + } // class UiServiceProvider +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiServices.Discovery.csproj similarity index 91% rename from 1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj rename to 1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiServices.Discovery.csproj index c1c976ee..1abd4b4a 100644 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiServices.Discovery.csproj +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiServices.Discovery.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.UiServices.Discovery UiServices.Discovery - v4.5.2 + v4.6.2 512 SAK SAK @@ -26,6 +26,7 @@ prompt 4 false + 8 pdbonly @@ -35,19 +36,16 @@ prompt 4 false + 8 - - - - - + Properties\AssemblySolutionInfo.cs @@ -147,17 +145,21 @@ + + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} + IpTviewr.IpTvServices + - {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3} DvbStpClient - {b91c438d-0333-4d06-86cd-74ce82df6f40} + {B91C438D-0333-4D06-86CD-74CE82DF6F40} Etsi.Ts102034 - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} @@ -175,6 +177,7 @@ SettingsEditorSorting.cs + Designer @@ -202,21 +205,27 @@ SettingsEditorModeMultiColumn.cs + Designer SettingsEditorModeMultiColumn.cs + Designer SettingsEditorModeSingleColumn.cs + Designer SettingsEditorModeSingleColumn.cs + Designer SettingsEditorModeTripleColumn.cs + Designer SettingsEditorModeTripleColumn.cs + Designer SettingsEditorSorting.cs @@ -287,6 +296,17 @@ Resources\Status_Success_24x24.png + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiServicesLogicalNumbers.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiServicesLogicalNumbers.cs new file mode 100644 index 00000000..64b00d46 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/UiServicesLogicalNumbers.cs @@ -0,0 +1,248 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery; +using System.Collections.Generic; +using System.Linq; + +namespace IpTviewr.UiServices.Discovery +{ + public class UiServicesLogicalNumbers + { + private readonly UiBroadcastDiscovery _uiDiscovery; + private readonly PackageDiscoveryRoot _packageDiscovery; + private readonly string _defaultDomain; + private readonly bool _highDefinitionPriority; + + private class LogicalNumberChannels + { + private readonly ServicesCount SD = new ServicesCount(); + private readonly ServicesCount HD = new ServicesCount(); + + public void Add(UiBroadcastService uiService) + { + var servicesCount = (IsHighDefinitionTv(uiService)) ? HD : SD; + servicesCount.Add(uiService); + } // Add + + public IEnumerable GetSortedServices(bool highDefinitionPriority) + { + var list1 = highDefinitionPriority ? HD.GetSortedServices() : SD.GetSortedServices(); + var list2 = highDefinitionPriority ? SD.GetSortedServices() : HD.GetSortedServices(); + + return list1.Concat(list2); + } // GetSortedServices + } // LogicalNumberChannels + + private class ServicesCount + { + private readonly IDictionary _services = new Dictionary(); + + public void Add(UiBroadcastService uiService) + { + if (_services.TryGetValue(uiService, out var count)) + { + _services[uiService] = count + 1; + } + else + { + count = 1; + _services.Add(uiService, count); + } // if-else + } // Add + + public IEnumerable GetSortedServices() + { + var q = from entry in _services + orderby entry.Value descending + select entry.Key; + + return q; + } // GetSortedServices + } // ServicesCount + + public static void ClearLogicalNumbers(UiBroadcastDiscovery uiDiscovery) + { + foreach (var service in uiDiscovery.Services) + { + service.ServiceLogicalNumber = null; + } // foreach service + } // ClearLogicalNumbers + + public static void AssignLogicalNumbers(UiBroadcastDiscovery uiDiscovery, PackageDiscoveryRoot packageDiscovery, string defaultDomain, bool highDefinitionPriority = true) + { + var aux = new UiServicesLogicalNumbers(uiDiscovery, packageDiscovery, defaultDomain, highDefinitionPriority); + aux.Assign(); + } // AssignLogicalNumbers + + public static bool IsHighDefinitionTv(UiBroadcastService uiService) + { + // TODO: get this information in a content provider agnostic way + // Create IContentProvider and a default implementation + // Specific details of movistar+ will be provided by an overriden version of the default implementation + + // movistar+ specific + if (uiService.IsHighDefinitionTv) return true; + if (uiService.ServiceType == "1") return false; // 1 == SD TV MPEG-2 + if (uiService.ServiceType == "22") + { + if (uiService.ReplacementService != null) return true; + } // if + + return false; + } // IsHighDefinitionTv + + private UiServicesLogicalNumbers(UiBroadcastDiscovery uiDiscovery, PackageDiscoveryRoot packageDiscovery, string defaultDomain, bool highDefinitionPriority, bool clear = false) + { + _uiDiscovery = uiDiscovery; + _packageDiscovery = packageDiscovery; + _defaultDomain = defaultDomain; + _highDefinitionPriority = highDefinitionPriority; + } // constructor + + private void Assign() + { + var packages = _packageDiscovery.GetPackages(); + + // step 1: create list of logical numbers and the associated channels + var numbers = GetNumbersList(packages); + + // step 2: count channels + var cumulativeNumbers = GetCumulativeNumbers(numbers); + + // step 3: assign number to channels + AssignNumbers(cumulativeNumbers); + + // step 4: assign number to unreferenced channels + AssignUnreferenced(); + } // Assign + + private Dictionary> GetNumbersList(IEnumerable packages) + { + var numbers = new Dictionary>(); + + foreach (var package in packages) + { + foreach (var service in package.Services) + { + if (service.TextualIdentifiers == null) continue; // no services assigned to logical number + + foreach (var textualIdentifier in service.TextualIdentifiers) + { + var uiServiceKey = UiBroadcastService.GetKey(textualIdentifier, _defaultDomain); + var uiService = _uiDiscovery.TryGetService(uiServiceKey); + if (uiService == null) continue; // service not found in global list of services + + // get list of services assigned to logical number, or create if not found + if (!numbers.TryGetValue(service.LogicalChannelNumber, out var listUiServices)) + { + listUiServices = new List(); + numbers.Add(service.LogicalChannelNumber, listUiServices); + } // if + + listUiServices.Add(uiService); + } // foreach textualIdentifier + } // foreach service + } // foreach package + + return numbers; + } // GetNumbersList + + private static Dictionary GetCumulativeNumbers(Dictionary> numbers) + { + var cumulativeNumbers = new Dictionary(numbers.Count); + + foreach (var entry in numbers) + { + var temp = new LogicalNumberChannels(); + cumulativeNumbers.Add(entry.Key, temp); + foreach (var uiService in entry.Value) + { + temp.Add(uiService); + } // foreach + } // foreach entry + + return cumulativeNumbers; + } // GetCumulativeNumbers + + private void AssignNumbers(Dictionary cumulativeNumbers) + { + // TODO: feature request: give priority to user-overriden logical numbers, treat them as assigned by packges, or ignore them + + var numbers = new Dictionary(_uiDiscovery.Services.Count); + + foreach (var entry in cumulativeNumbers) + { + // format logical number + var logicalNumber = int.TryParse(entry.Key, out var number) ? $"{number:000}" : entry.Key; + + // assign numbers, in order of priority + var uiServices = entry.Value.GetSortedServices(_highDefinitionPriority); + foreach (var uiService in uiServices) + { + if (uiService == null) continue; + AssignNumber(uiService, logicalNumber, numbers); + } // foreach + } // foreach entry + }// AssignNumbers + + private static void AssignNumber(UiBroadcastService uiService, string logicalNumber, IDictionary numbers) + { + string serviceLogicalNumber; + int count; + if (!numbers.TryGetValue(logicalNumber, out _)) + { + // number not assigned; assign direct logical number + serviceLogicalNumber = logicalNumber; + uiService.ServiceLogicalNumber = serviceLogicalNumber; + count = 0; + } + else + { + // number already assigned + var prefix = IsHighDefinitionTv(uiService) ? "H" : "S"; + serviceLogicalNumber = prefix + logicalNumber; + + // avoid duplicated H/S numbers + if (!numbers.TryGetValue(serviceLogicalNumber, out count)) + { + // H/S number not assigned; assign H/S logical number + count = 0; + uiService.ServiceLogicalNumber = serviceLogicalNumber; + } + else + { + // H/S number already assign; create unique H/S number by adding a sufix leter + uiService.ServiceLogicalNumber = $"{serviceLogicalNumber}{(char)('a' + (count - 1))}"; + } // if-else + } // if-else + + // increase count + numbers[serviceLogicalNumber] = count + 1; + } // AssignNumber + + private void AssignUnreferenced() + { + var noNumber = 1; + + var q = from uiService in _uiDiscovery.Services + where uiService.ServiceLogicalNumber == null + select uiService; + + foreach (var uiService in q) + { + uiService.ServiceLogicalNumber = $"X{noNumber++:000}"; + } // foreach uiService + } // AssignUnreferenced + } // class UiServicesLogicalNumbers +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Utils.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Utils.cs new file mode 100644 index 00000000..8e07a102 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/Utils.cs @@ -0,0 +1,28 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization.Common; +using Property = System.Collections.Generic.KeyValuePair; + +namespace IpTviewr.UiServices.Discovery +{ + internal class Utils + { + public static Property GetLanguageProperty(string name, MultilingualText text) + { + if (text == null) return new Property(name, null); + if (text.Language == null) return new Property(name, text.Value); + return new Property($"{name} ({text.Language})", text.Value); + } // GetLanguageProperty + } // internal class Utils +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/licensing.xml b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/licensing.xml new file mode 100644 index 00000000..7000a049 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Discovery/licensing.xml @@ -0,0 +1,204 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs similarity index 95% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs index e8ca26a4..d65df347 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.DvbStpClient { @@ -212,4 +222,4 @@ private void InitializeComponent() private IpTviewr.UiServices.Common.Controls.ListViewSortable listViewPayloads; private System.Windows.Forms.ImageList imageListPayloadStatus; } // class DvbStpEnhancedDownloadDialog -} // namespace \ No newline at end of file +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs new file mode 100644 index 00000000..0b7123ea --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs @@ -0,0 +1,515 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Telemetry; +using IpTviewr.DvbStp.Client; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.DvbStpClient +{ + // TODO: use CommonForm and adjust for exception handling + public partial class DvbStpEnhancedDownloadDialog : Form + { + private string _formatProgressPercentage; + private string _formatEllapsedTime; + private char _dataReceptionSymbol; + private BackgroundWorker _worker; + private bool _allowFormToClose; + private CancellationTokenSource _cancellationTokenSource; + private DateTime _startTime; + private double[] _payloadProgress; + private double _globalProgress; + private int _unusedDataCount; + + private enum ProgressKind + { + SectionReceived = -1, + DownloadStarted = 0, + SegmentDownloadStarted = 10, + SegmentSectionReceived = 15, + SegmentDownloadRestarted = 18, + SegmentDownloadCompleted = 19, + Completed = 999, + } // enum ProgressKind + + private class SegmentProgressReport + { + public int ReceivedSections; + public int SectionCount; + public int Index; + } // SegmentProgressReport + + public UiDvbStpEnhancedDownloadRequest Request + { + get; + set; + } // Request + + public UiDvbStpEnhancedDownloadResponse Response + { + get; + private set; + } // Response + + public string TelemetryScreenName + { + get; + private set; + } // TelemetryScreenName + + public DvbStpEnhancedDownloadDialog() + { + InitializeComponent(); + } // constructor + + public DvbStpEnhancedDownloadDialog(UiDvbStpEnhancedDownloadRequest request) + : this() + { + Request = request; + } // constructor + + #region Dialog events + + private void Dialog_Load(object sender, EventArgs e) + { + if (Request == null) throw new ArgumentNullException(); + + TelemetryScreenName = $"{GetType().Name}: {Request.MulticastAddress}:{Request.MulticastPort}"; + + if (!string.IsNullOrEmpty(Request.Description)) + { + labelDownloadingPayloadName.Text = Request.Description; + } // if + labelDownloadSource.Text = string.Format(labelDownloadSource.Text, Request.MulticastAddress, Request.MulticastPort); + _formatProgressPercentage = labelProgressPct.Text; + _formatEllapsedTime = labelEllapsedTime.Text; + _dataReceptionSymbol = labelDataReception.Text[0]; + + labelProgressPct.Text = null; + labelDataReception.Text = null; + labelReceiving.Visible = false; + labelEllapsedTime.Text = null; + + foreach (var segment in Request.Payloads) + { + var displayName = segment.DisplayName ?? $"Payload 0x{segment.PayloadId:X2}"; + var item = new ListViewItem(displayName); + item.SubItems.Add("-"); + item.SubItems.Add("-"); + item.ImageKey = "Waiting"; + item.Tag = segment; + listViewPayloads.Items.Add(item); + } // foreach + + _payloadProgress = new double[Request.Payloads.Count]; + + Response = new UiDvbStpEnhancedDownloadResponse(); + } // Dialog_Load + + private void Dialog_Shown(object sender, EventArgs e) + { + // TODO: user overload with extra data and get rid of TelemetryScreenName + AppTelemetry.ScreenEvent(AppTelemetry.LoadEvent, TelemetryScreenName); + StartDownload(); + } // Dialog_Shown + + private void Dialog_FormClosing(object sender, FormClosingEventArgs e) + { + if ((e.CloseReason != CloseReason.UserClosing) && (e.CloseReason != CloseReason.None)) return; + + if (_allowFormToClose) return; + + e.Cancel = true; + CancelDownload(); + } // Dialog_FormClosing + + #endregion + + #region Controls events + + private void buttonRequestCancel_Click(object sender, EventArgs e) + { + CancelDownload(); + } // buttonRequestCancel_Click + + private void timerEllapsed_Tick(object sender, EventArgs e) + { + DisplayEllapsedTime(); + } // timerEllapsed_Tick + + private void timerClose_Tick(object sender, EventArgs e) + { + CloseForm(); + } // timerClose_Tick + + #endregion + + private void StartDownload() + { + _startTime = DateTime.Now; + timerEllapsed.Enabled = true; + DisplayEllapsedTime(); + + _cancellationTokenSource = new CancellationTokenSource(); + _worker = new BackgroundWorker + { + WorkerReportsProgress = true, + WorkerSupportsCancellation = true + }; + _worker.ProgressChanged += Worker_ProgressChanged; + _worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + _worker.DoWork += Worker_DoWork; + _worker.RunWorkerAsync(Thread.CurrentThread); + } // StartDownload + + private void CancelDownload() + { + buttonRequestCancel.Enabled = false; + labelDownloadingPayloadName.Text = Properties.Texts.CancellingDownloadOperation; + + Response.UserCancelled = true; + _worker.CancelAsync(); + _cancellationTokenSource.Cancel(); + } // CancelDownload + + private void StartClose() + { + buttonRequestCancel.Enabled = false; + if (Request.DialogCloseDelay <= 0) CloseForm(); + + timerClose.Interval = Request.DialogCloseDelay; + timerClose.Enabled = true; + } // private StartClose + + private void CloseForm() + { + timerClose.Enabled = false; + _allowFormToClose = true; + Close(); + } // CloseForm + + private void DisplayEllapsedTime() + { + var ellapsed = DateTime.Now - _startTime; + var ellapsedRounded = new TimeSpan(ellapsed.Days, ellapsed.Hours, ellapsed.Minutes, ellapsed.Seconds); + + labelEllapsedTime.Text = string.Format(_formatEllapsedTime, ellapsedRounded); + } // DisplayEllapsedTime + + #region Worker events + + private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + timerEllapsed.Enabled = false; + + _worker.Dispose(); + _worker = null; + + _cancellationTokenSource.Dispose(); + _cancellationTokenSource = null; + + Response.UserCancelled = e.Cancelled; + Response.DownloadException = e.Error; + if ((!e.Cancelled) && (e.Error == null)) + { + Response.IsOk = true; + } // if + + StartClose(); + } // Worker_RunWorkerCompleted + + private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + switch ((ProgressKind)e.ProgressPercentage) + { + case ProgressKind.SectionReceived: + DisplayDataReception(e); + break; + case ProgressKind.DownloadStarted: + progressBar.Style = ProgressBarStyle.Continuous; + progressBar.Value = 0; + labelProgressPct.Text = string.Format(_formatProgressPercentage, 0); + break; + case ProgressKind.SegmentDownloadStarted: + case ProgressKind.SegmentSectionReceived: + case ProgressKind.SegmentDownloadRestarted: + case ProgressKind.SegmentDownloadCompleted: + DisplaySegmentProgress(e); + break; + case ProgressKind.Completed: + DisplayParsingData(e); + break; + } // switch + } // Worker_ProgressChanged + + private void DisplayDataReception(ProgressChangedEventArgs e) + { + bool isKnowPayloadId; + ListViewItem item; + + var received = e.UserState as DvbStpSimpleClient.SectionReceivedEventArgs; + labelReceiving.Visible = true; + labelDataReception.Text = new string(_dataReceptionSymbol, (received.DatagramCount) % 6); + + isKnowPayloadId = false; + for (var index=0; index GetDvbStpClientSegmentInfoList() + { + var list = new List(Request.Payloads.Count); + foreach (var item in Request.Payloads) + { + list.Add(item); + } // foreach + + return list; + } // GetDvbStpClientSegmentInfoList + + private void Deserialize() + { + if (Request.AvoidDeserialization) return; + _worker.ReportProgress((int)ProgressKind.Completed); + + foreach (var payload in Request.Payloads) + { + if (payload.XmlType != null) + { + payload.XmlDeserializedData = UiDvbStpBaseDownloadResponse.ParsePayload(payload.XmlType, + payload.Data, + payload.PayloadId, + !Request.AllowXmlExtraWhitespace, + Request.XmlNamespaceReplacer); + } // if + + if (!Request.KeepRawData) + { + payload.Data = null; + } // if + } // foreach + } // Deserialize + +#if DEBUG + private void DumpPayloads() + { + if (string.IsNullOrEmpty(Request.DumpToFolder)) return; + + foreach (var payload in Request.Payloads) + { + if (payload.Data != null) + { + var filename = Path.Combine(Request.DumpToFolder, $"DvbStpEnhancedDownloadDialog_P{payload.PayloadId:X2}_S{payload.SegmentId.Value:X4}v{payload.SegmentVersion:X2}.xml"); + File.WriteAllBytes(filename, payload.Data); + } // if + } // foreach + } // DumpPayloads +#endif + + #endregion + + #region DvbStpClient event handlers + + private void DvbStpClient_DownloadStarted(object sender, DvbStpEnhancedClient.DownloadStartedEventArgs e) + { + _worker.ReportProgress((int)ProgressKind.DownloadStarted, e); + } // DvbStpClient_DownloadStarted + + private void DvbStpClient_SectionReceived(object sender, DvbStpSimpleClient.SectionReceivedEventArgs e) + { + _worker.ReportProgress((int)ProgressKind.SectionReceived, e); + } // DvbStpClient_SectionReceived + + private void DvbStpClient_SegmentDownloadStarted(object sender, DvbStpEnhancedClient.SegmentSectionReceivedEventArgs e) + { + var data = new SegmentProgressReport() + { + Index = e.SegmentListIndex, + ReceivedSections = e.SectionsReceived, + SectionCount = e.SectionCount + }; + _worker.ReportProgress((int)ProgressKind.SegmentDownloadStarted, data); + } // StpClient_SegmentDownloadStarted + + private void DvbStpClient_SegmentSectionReceived(object sender, DvbStpEnhancedClient.SegmentSectionReceivedEventArgs e) + { + var data = new SegmentProgressReport() + { + Index = e.SegmentListIndex, + ReceivedSections = e.SectionsReceived, + SectionCount = e.SectionCount + }; + _worker.ReportProgress((int)ProgressKind.SegmentSectionReceived, data); + } // DvbStpClient_SegmentDownloadStarted + + private void DvbStpClient_SegmentDownloadRestarted(object sender, DvbStpEnhancedClient.SegmentDownloadRestartedEventArgs e) + { + var data = new SegmentProgressReport() + { + Index = e.SegmentListIndex, + ReceivedSections = 0, + SectionCount = e.SectionCount + }; + _worker.ReportProgress((int)ProgressKind.SegmentDownloadRestarted, data); + } // DvbStpClient_SegmentDownloadRestarted + + private void DvbStpClient_SegmentDownloadCompleted(object sender, DvbStpEnhancedClient.SegmentDownloadCompletedEventArgs e) + { + var data = new SegmentProgressReport() + { + Index = e.SegmentListIndex, + ReceivedSections = e.SectionCount, + SectionCount = e.SectionCount + }; + _worker.ReportProgress((int)ProgressKind.SegmentDownloadCompleted, data); + } // DvbStpClient_SegmentDownloadCompleted + + #endregion + } // class DvbStpDownloadMultiDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.resx diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs similarity index 94% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs index b498bbba..cd60b256 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.DvbStpClient { @@ -165,4 +175,4 @@ private void InitializeComponent() private System.Windows.Forms.Label labelEllapsedTime; private System.Windows.Forms.Timer timerEllapsed; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs new file mode 100644 index 00000000..ae3a124f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs @@ -0,0 +1,329 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Telemetry; +using IpTviewr.DvbStp.Client; +using System; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.DvbStpClient +{ + // TODO: use CommonForm and adjust for exception handling + public partial class DvbStpSimpleDownloadDialog : Form + { + private string _formatProgressPercentage; + private string _formatSectionProgress; + private string _formatEllapsedTime; + private char _dataReceptionSymbol; + private int _dataReceptionCount; + private BackgroundWorker _worker; + private bool _allowFormToClose; + private CancellationTokenSource _cancellationTokenSource; + private DateTime _startTime; + + public UiDvbStpSimpleDownloadRequest Request + { + get; + set; + } // Request + + public UiDvbStpSimpleDownloadResponse Response + { + get; + private set; + } // Response + + public string TelemetryScreenName + { + get; + private set; + } // TelemetryScreenName + + public DvbStpSimpleDownloadDialog() + { + InitializeComponent(); + } // constructor + + public DvbStpSimpleDownloadDialog(UiDvbStpSimpleDownloadRequest request) + : this() + { + Request = request; + } // constructor + + #region DownloadDlg events + + private void DownloadDlg_Load(object sender, EventArgs e) + { + if (Request == null) throw new ArgumentNullException(); + + TelemetryScreenName = $"{GetType().Name}: {Request.MulticastAddress}:{Request.MulticastPort} 0x{Request.PayloadId:X2}"; + + if (!string.IsNullOrEmpty(Request.Description)) + { + labelDownloadingPayloadName.Text = Request.Description; + } // if + labelDownloadSource.Text = string.Format(labelDownloadSource.Text, Request.MulticastAddress, Request.MulticastPort); + _formatProgressPercentage = labelProgressPct.Text; + _formatSectionProgress = labelSectionProgress.Text; + _formatEllapsedTime = labelEllapsedTime.Text; + _dataReceptionSymbol = labelDataReception.Text[0]; + + labelProgressPct.Text = null; + labelSectionProgress.Text = null; + labelDataReception.Text = null; + labelReceiving.Visible = false; + labelEllapsedTime.Text = null; + + Response = new UiDvbStpSimpleDownloadResponse(); + } // DownloadDlg_Load + + private void DownloadDlg_Shown(object sender, EventArgs e) + { + // TODO: user overload with extra data and get rid of TelemetryScreenName + AppTelemetry.ScreenEvent(AppTelemetry.LoadEvent, TelemetryScreenName); + StartDownload(); + } // DownloadDlg_Shown + + private void DownloadDlg_FormClosing(object sender, FormClosingEventArgs e) + { + if ((e.CloseReason != CloseReason.UserClosing) && (e.CloseReason != CloseReason.None)) return; + + if (_allowFormToClose) return; + + e.Cancel = true; + CancelDownload(); + } // DownloadDlg_FormClosing + + #endregion + + #region Controls events + + private void buttonRequestCancel_Click(object sender, EventArgs e) + { + CancelDownload(); + } // buttonRequestCancel_Click + + private void timerEllapsed_Tick(object sender, EventArgs e) + { + DisplayEllapsedTime(); + } // timerEllapsed_Tick + + private void timerClose_Tick(object sender, EventArgs e) + { + CloseForm(); + } // timerClose_Tick + + #endregion + + private void StartDownload() + { + _startTime = DateTime.Now; + timerEllapsed.Enabled = true; + DisplayEllapsedTime(); + + _cancellationTokenSource = new CancellationTokenSource(); + _worker = new BackgroundWorker + { + WorkerReportsProgress = true, + WorkerSupportsCancellation = true + }; + _worker.ProgressChanged += Worker_ProgressChanged; + _worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + _worker.DoWork += Worker_DoWork; + _worker.RunWorkerAsync(Thread.CurrentThread); + } // StartDownload + + private void CancelDownload() + { + buttonRequestCancel.Enabled = false; + labelDownloadingPayloadName.Text = Properties.Texts.CancellingDownloadOperation; + + Response.UserCancelled = true; + _worker.CancelAsync(); + _cancellationTokenSource.Cancel(); + } // CancelDownload + + private void StartClose() + { + buttonRequestCancel.Enabled = false; + if (Request.DialogCloseDelay <= 0) CloseForm(); + + timerClose.Interval = Request.DialogCloseDelay; + timerClose.Enabled = true; + } // private StartClose + + private void CloseForm() + { + timerClose.Enabled = false; + _allowFormToClose = true; + Close(); + } // CloseForm + + private void DisplayEllapsedTime() + { + var ellapsed = DateTime.Now - _startTime; + var ellapsedRounded = new TimeSpan(ellapsed.Days, ellapsed.Hours, ellapsed.Minutes, ellapsed.Seconds); + + labelEllapsedTime.Text = string.Format(_formatEllapsedTime, ellapsedRounded); + } // DisplayEllapsedTime + + #region Worker events + + private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + timerEllapsed.Enabled = false; + + _worker.Dispose(); + _worker = null; + + _cancellationTokenSource.Dispose(); + _cancellationTokenSource = null; + + Response.UserCancelled = e.Cancelled; + Response.DownloadException = e.Error; + if ((!e.Cancelled) && (e.Error == null)) + { + Response.PayloadData = e.Result as byte[]; + } // if + + StartClose(); + } // Worker_RunWorkerCompleted + + private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + if (e.ProgressPercentage < 0) + { + DisplayDataReception(e); + } + else if (e.ProgressPercentage < int.MaxValue) + { + DisplaySectionReception(e); + } + else + { + DisplayParsingData(e); + } // if-else + } // Worker_ProgressChanged + + private void DisplaySectionReception(ProgressChangedEventArgs e) + { + if (progressBar.Style == ProgressBarStyle.Marquee) progressBar.Style = ProgressBarStyle.Continuous; + + var sectionReceivedArgs = e.UserState as DvbStpSimpleClient.PayloadSectionReceivedEventArgs; + labelProgressPct.Text = string.Format(_formatProgressPercentage, e.ProgressPercentage / 1000.0); + labelSectionProgress.Text = string.Format(_formatSectionProgress, sectionReceivedArgs.SectionsReceived, sectionReceivedArgs.SectionCount); + progressBar.Value = e.ProgressPercentage / 10; + } // DisplaySectionReception + + private void DisplayDataReception(ProgressChangedEventArgs e) + { + _dataReceptionCount++; + labelReceiving.Visible = true; + labelDataReception.Text = new string(_dataReceptionSymbol, (_dataReceptionCount % 6)); + } // DisplayDataReception + + private void DisplayParsingData(ProgressChangedEventArgs e) + { + labelDownloadingPayloadName.Text = Request.DescriptionParsing; + labelReceiving.Text = Properties.Texts.CompletedDownloadDataReception; + labelReceiving.Font = new Font(labelReceiving.Font, FontStyle.Bold); + labelDataReception.Text = null; + labelDownloadSource.Visible = false; + } // DisplayParsingData + + #endregion + + #region BackgroundWorker DoWork + + private void Worker_DoWork(object sender, DoWorkEventArgs e) + { + DvbStpSimpleClient dvbStpClient; + byte[] payload; + + InitWorker(e); + + dvbStpClient = new DvbStpSimpleClient(Request.MulticastAddress, Request.MulticastPort, _cancellationTokenSource.Token); + try + { + payload = dvbStpClient.GetPayload(Request.PayloadId, Request.SegmentId); + Response.Version = dvbStpClient.SegmentVersion; + e.Result = payload; +#if DEBUG + if ((payload != null) && (Request.DumpToFile != null)) + { + File.WriteAllBytes(Request.DumpToFile, payload); + } // if +#endif + if ((Request.PayloadDataType != null) && (payload != null)) + { + _worker.ReportProgress(int.MaxValue); + Response.DeserializedPayloadData = UiDvbStpBaseDownloadResponse.ParsePayload(Request.PayloadDataType, payload, Request.PayloadId, !Request.AllowXmlExtraWhitespace, Request.XmlNamespaceReplacer); + } // if + } + finally + { + e.Cancel = _worker.CancellationPending; + dvbStpClient.Close(); + } // finally + } // Worker_DoWork + + private void InitWorker(DoWorkEventArgs e) + { + // set worker thread name (for debugging purposes) + var currentThread = Thread.CurrentThread; + currentThread.Name = "DvbStpSimpleDownloadDialog BackgroundWorker"; + + // inherit parent thead culture settings + var parentThread = e.Argument as Thread; + if (parentThread != null) + { + currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case + currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread + } // if + } // InitWorker + + private DvbStpSimpleClient CreateDvbStpClient() + { + var dvbStpClient = new DvbStpSimpleClient(Request.MulticastAddress, Request.MulticastPort, _cancellationTokenSource.Token) + { + ReceiveDatagramTimeout = Request.ReceiveDatagramTimeout + }; + dvbStpClient.ReceiveDatagramTimeout = Request.ReceiveDatagramTimeout; + dvbStpClient.NoDataTimeout = Request.NoDataTimeout; + dvbStpClient.SectionReceived += StpClient_SectionReceived; + dvbStpClient.PayloadSectionReceived += StpClient_PayloadSectionReceived; + + return dvbStpClient; + } // CreateDvbStpClient + + #endregion + + #region StpClient event handlers + + private void StpClient_SectionReceived(object sender, DvbStpSimpleClient.SectionReceivedEventArgs e) + { + _worker.ReportProgress(-1, e); + } // StpClient_SectionReceived + + private void StpClient_PayloadSectionReceived(object sender, DvbStpSimpleClient.PayloadSectionReceivedEventArgs e) + { + _worker.ReportProgress((e.SectionsReceived * 1000) / e.SectionCount, e); + } // StpClient_PayloadSectionReceived + + #endregion + } // class DvbStpSimpleDownloadDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/LICENSE.ES.MD new file mode 100644 index 00000000..de874a6b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/LICENSE.ES.MD @@ -0,0 +1,149 @@ +# Biblioteca 'UiServices.DvbStpClient' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. UiServices.DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/LICENSE.MD new file mode 100644 index 00000000..94b22761 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/LICENSE.MD @@ -0,0 +1,121 @@ +# Library 'UiServices.DvbStpClient' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. UiServices.DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/License.txt b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/License.txt new file mode 100644 index 00000000..5fba7951 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/License.txt @@ -0,0 +1,140 @@ +############################################################################## +## +## Library 'UiServices.DvbStpClient' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® Exception Message Box License Terms + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. UiServices.DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..d35941c5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UiServices.DvbStpClient")] +[assembly: AssemblyDescription("IpTviewr.UiServices.DvbStpClient")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e3918f69-9952-42eb-a538-f9fb93858387")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Resources.Designer.cs new file mode 100644 index 00000000..811269af --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Resources.Designer.cs @@ -0,0 +1,116 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.DvbStpClient.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.DvbStpClient.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_Red_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_Red_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DvbStpDownload_128x128 { + get { + object obj = ResourceManager.GetObject("DvbStpDownload_128x128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DvbStpDownload_Error_32x32 { + get { + object obj = ResourceManager.GetObject("DvbStpDownload_Error_32x32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DvbStpDownload_Error_48x48 { + get { + object obj = ResourceManager.GetObject("DvbStpDownload_Error_48x48", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Resources.resx new file mode 100644 index 00000000..85c3e204 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\..\common.ui\resources\action_cancel_red_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\dvbstpdownload_128x128.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\dvbstpdownload_error_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\dvbstpdownload_error_48x48.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Texts.Designer.cs new file mode 100644 index 00000000..ca3a5d4d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Texts.Designer.cs @@ -0,0 +1,208 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.DvbStpClient.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.DvbStpClient.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Please wait. Canceling download.... + /// + internal static string CancellingDownloadOperation { + get { + return ResourceManager.GetString("CancellingDownloadOperation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data reception is complete. + /// + internal static string CompletedDownloadDataReception { + get { + return ResourceManager.GetString("CompletedDownloadDataReception", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:N0} of {1:N0}. + /// + internal static string DownloadFragmentProgressFormat { + get { + return ResourceManager.GetString("DownloadFragmentProgressFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Other, non related data. + /// + internal static string DownloadOtherData { + get { + return ResourceManager.GetString("DownloadOtherData", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0:P1}. + /// + internal static string DownloadSegmentProgressFormat { + get { + return ResourceManager.GetString("DownloadSegmentProgressFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to HELP!. + /// + internal static string HandleExceptionHelpButton { + get { + return ResourceManager.GetString("HandleExceptionHelpButton", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An error has ocurred while fetching data. + /// + internal static string HelperExceptionCaption { + get { + return ResourceManager.GetString("HelperExceptionCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An error has ocurred while fetching data. + /// + internal static string HelperExceptionText { + get { + return ResourceManager.GetString("HelperExceptionText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Request cancelled. + /// + internal static string HelperUserCancelledCaption { + get { + return ResourceManager.GetString("HelperUserCancelledCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The download of the data has been cancelled by the user.. + /// + internal static string HelperUserCancelledText { + get { + return ResourceManager.GetString("HelperUserCancelledText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The received data can't be successfully parsed and extracted. + ///Payload Id: 0x{0:X2}. Data type: {1}.. + /// + internal static string ParsePayloadException { + get { + return ResourceManager.GetString("ParsePayloadException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset2 Symbol;}} + ///{\colortbl ;\red0\green0\blue255;} + ///{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sl240\slmult1\qc\lang10\f0\fs22{\pict\wmetafile8\picw1270\pich1270\picwgoal720\pichgoal720 + ///010009000003ca0d00000000a10d000000000400000003010800050000000b0200000000050000 + ///000c0230003000030000001e0004000000070104000400000007010400a10d0000410b2000cc00 + ///30003000000000003000300000000000280000003000000030000000 [rest of string was truncated]";. + /// + internal static string RtfTroubleshootingGuide { + get { + return ResourceManager.GetString("RtfTroubleshootingGuide", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} + /// + ///Unable to receive data from movistar+ servers due to connectivity issues. (Reason: {1}) + ///Power-cycle your router and try again in a few minutes. + /// + ///If the problem persists, please click “HELP!” for guidance on how to troubleshoot connectivity issues.. + /// + internal static string SocketException { + get { + return ResourceManager.GetString("SocketException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} + /// + ///Data reception from movistar+ servers took too much time. This might be an indication of poor network performance or WiFi reception. + ///Power-cycle your router and try again in a few minutes. + /// + ///If the problem persists, please click “HELP!” for guidance on how to troubleshoot connectivity issues.. + /// + internal static string TimeoutException { + get { + return ResourceManager.GetString("TimeoutException", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Texts.es.resx new file mode 100644 index 00000000..39c82653 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Texts.es.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Espere, por favor. Cancelando la descarga... + + + Completada la recepción de datos + + + {0:N0} de {1:N0} + + + Otros datos no relacionados + + + {0:P1} + + + ¡AYUDA! + + + Se ha producido un error al obtener la información + + + Se ha producido un error al obtener la información + + + Petición cancelada + + + La descarga de la información ha sido cancelada por el usuario. + + + Los datos recibidos no son válidos y no es posible extraer su información. +Identificador de datos: 0x{0:X2}. Tipo de datos: {1}. + + + + ..\resources\guiaresolucionproblemas.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + {0} + +No es posible recibir información de los servidores de movistar+ por problemas de conectividad. (Razón: {1}) +Por favor, apague y encienda su router e inténtelo de nuevo pasados unos minutos. + +Si el problema persiste, haga clic en el botón “¡AYUDA!” para obtener orientación sobre cómo solucionar problemas de conectividad. + + + {0} + +La recepción de información de los servidores de movistar+ tardó demasiado tiempo. Ésto puede ser indicativo de un rendimiento inadecuado de la red o de problemas de conectividad WiFi. +Por favor, apague y encienda su router e inténtelo de nuevo pasados unos minutos. + +Si el problema persiste, haga clic en el botón “¡AYUDA!” para obtener orientación sobre cómo solucionar problemas de conectividad. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Texts.resx new file mode 100644 index 00000000..fa57f8bc --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Properties/Texts.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Please wait. Canceling download... + + + Data reception is complete + + + {0:N0} of {1:N0} + + + Other, non related data + + + {0:P1} + + + HELP! + + + An error has ocurred while fetching data + + + An error has ocurred while fetching data + + + Request cancelled + + + The download of the data has been cancelled by the user. + + + The received data can't be successfully parsed and extracted. +Payload Id: 0x{0:X2}. Data type: {1}. + + + + ..\resources\troubleshootingguide.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + {0} + +Unable to receive data from movistar+ servers due to connectivity issues. (Reason: {1}) +Power-cycle your router and try again in a few minutes. + +If the problem persists, please click “HELP!” for guidance on how to troubleshoot connectivity issues. + + + {0} + +Data reception from movistar+ servers took too much time. This might be an indication of poor network performance or WiFi reception. +Power-cycle your router and try again in a few minutes. + +If the problem persists, please click “HELP!” for guidance on how to troubleshoot connectivity issues. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/DvbStpDownload_128x128.png b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/DvbStpDownload_128x128.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/DvbStpDownload_128x128.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/DvbStpDownload_128x128.png diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/DvbStpDownload_Error_32x32.png b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/DvbStpDownload_Error_32x32.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/DvbStpDownload_Error_32x32.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/DvbStpDownload_Error_32x32.png diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/DvbStpDownload_Error_48x48.png b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/DvbStpDownload_Error_48x48.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/DvbStpDownload_Error_48x48.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/DvbStpDownload_Error_48x48.png diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/GuiaResolucionProblemas.rtf b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/GuiaResolucionProblemas.rtf similarity index 82% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/GuiaResolucionProblemas.rtf rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/GuiaResolucionProblemas.rtf index ed356e2f..90839306 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/GuiaResolucionProblemas.rtf +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/GuiaResolucionProblemas.rtf @@ -1,6 +1,7 @@ -{\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset2 Symbol;}} +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 Symbol;}} {\colortbl ;\red0\green0\blue255;} -{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sl240\slmult1\qc\lang10\f0\fs22{\pict\wmetafile8\picw1270\pich1270\picwgoal720\pichgoal720 +{\*\generator Riched20 10.0.18362}\viewkind4\uc1 +\pard\sl240\slmult1\qc\f0\fs22\lang10{\pict{\*\picprop}\wmetafile8\picw1270\pich1270\picwgoal720\pichgoal720 010009000003ca0d00000000a10d000000000400000003010800050000000b0200000000050000 000c0230003000030000001e0004000000070104000400000007010400a10d0000410b2000cc00 300030000000000030003000000000002800000030000000300000000100180000000000001b00 @@ -184,30 +185,53 @@ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff040000002701ffff0300000000 00 }\b\fs28\par + \pard\sa200\sl276\slmult1\qc Gu\'eda de resoluci\'f3n de problemas de conexi\'f3n\b0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Este programa requiere, forzosamente, tener contratado movistar+ en modalidad de fibra (FFTH) o ADSL en Espa\'f1a. La conexi\'f3n por sat\'e9lite no es compatible.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i\fs22 No existe constancia de que este programa funcione para clientes de Movistar de otros pa\'edses distintos de Espa\'f1a.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Compruebe que el equipo tiene conexi\'f3n activa a Internet y que est\'e1 conectado a la red LAN o WiFi de su casa. Igualmente, compruebe que el decodificador proporcionado por Movistar funciona correctamente y recibe canales.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Si el decodificador no funciona o falla la conexi\'f3n a Internet, llame al servicio de aver\'edas de Movistar (1002).\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Este programa no permite acceder al contenido de movistar+ desde fuera de casa, al igual que tampoco lo permite el decodificar f\'edsico oficial de Movistar.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Pruebe a reiniciar el router. La mayor parte de los problemas de conexi\'f3n son debidos a "saturaci\'f3n" del router.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Para las modalidades con ADSL, apague el router ADSL, espere 20 o 30 segundos, enci\'e9ndalo de nuevo y espere 2 \'f3 3 minutos hasta que se estabilice la conexi\'f3n.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Para las modalidades con fibra (FFTH), apague primero el router WiFi y luego el router de fibra. Espere 20 o 30 segundos y encienda el router de fibra. Una vez reestablecida la conexi\'f3n de la fibra tras 1 o 2 minutos, encienda el router WiFi y espere 2 o 3 minutos hasta que se estabilice la conexi\'f3n.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Si est\'e1 utilizando una conexi\'f3n WiFi, pruebe a conectar el equipo directamente por cable al router ADSL o, en caso de la fibra, al router WiFi conectado al router de fibra.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Si est\'e1 conectado de manera indirecta con tecnolog\'edas como PLC o HomePlug, pruebe igualmente a conectarse directamente por cable.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Si no est\'e1 utilizando el router WiFi o ADSL proporcionado oficialmente por movistar, es posible que este equipo est\'e9 bloqueando las se\'f1ales de red necesarias para acceder a los servicios de informaci\'f3n de movistar+. Utilice \'fanicamente el router proporcionado y configurado por movistar.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Compruebe que el Firewall (cortafuegos) de Windows no est\'e1 impidiendo la conexi\'f3n.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 A diferencia de otros sistemas de recepci\'f3n de v\'eddeo, movistar+ env\'eda la informaci\'f3n mediante multidifusi\'f3n UDP, lo que requiere que el programa "abra" puertos en el equipo para recibir la informaci\'f3n. Por defecto, el Firewall de Windows bloquea este tipo de conexi\'f3n.\i0\par -\i{\pntext\f1\'B7\tab}Apague, de manera temporal, el Firewall de Windows y compruebe si el problema se resuelve.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Aseg\'farese de que haber permitido la conexi\'f3n a trav\'e9s del Firewall durante el uso del asistente de configuraci\'f3n inicial. Si no lo hizo as\'ed, el Firewall de Windows bloquear\'e1 para siempre la conexi\'f3n, incluso si m\'e1s adelante se utiliza el asistente para abrir el Firewall. Para resolver este problema, tiene que entrar en la configuraci\'f3n avanzada del Firewall y eliminar las conexiones bloqueadas a los archivos ".exe" que conforman el producto.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Se han informado de casos en los que el problema es debido a una configuraci\'f3n personalizada del router WiFi o ADSL. Aunque es dr\'e1stico, se recomienda realizar un reset del router, para volver a la configuraci\'f3n de f\'e1brica.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Llame al servicio de aver\'edas de movistar (1002) para solicitar asistencia de c\'f3mo hacer un reset del router y volver a la configuraci\'f3n oficial de Movistar.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i\'a1No haga, en ning\'fan caso, un reset a f\'e1brica del router de fibra!\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Llegados a este punto, el problema puede estar en la configuraci\'f3n del adaptador de red.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Compruebe que la direcci\'f3n IP del equipo se ha asignado de manera autom\'e1tica (mediante DHCP). Aunque las configuraciones est\'e1ticas son v\'e1lidas, hay que descartar posibles fuentes de problemas.\i0\par -\i{\pntext\f1\'B7\tab}Pruebe a deshabilitar todos los adaptadores de red, a excepci\'f3n del correspondiente al cable LAN o la conexi\'f3n WiFi. Algunos adaptadores de red pueden interferir con la recepci\'f3n de la informaci\'f3n de multidifusi\'f3n.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i En las propiedades del adaptador de red, desactive temporalmente todos los protocolos de red y elementos del adaptador, excepto TCP/IP versi\'f3n 4.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sa200\sl276\slmult1\qj\fs24 Como \'faltima prueba, desconecte todos los aparatos conectados a Internet (m\'f3viles, tabletas, televisi\'f3n...) incluyendo el propio decodificador de televisi\'f3n de movistar.\par -\pard\sa200\sl276\slmult1\qj Visite la p\'e1gina web de documentaci\'f3n del programa, en {\field{\*\fldinst{HYPERLINK "http://movistartv.codeplex.com/documentation/"}}{\fldrslt{\ul\cf1 http://movistartv.codeplex.com/documentation/}}}\f0\fs24 , por si hubiera una gu\'eda m\'e1s actualizada o m\'e1s detallada. \b\fs22 Esta gu\'eda de resoluci\'f3n de problemas de conexi\'f3n se proporciona de forma meramente orientativa y sin garant\'eda de ning\'fan tipo.\b0\fs24\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Este programa requiere, forzosamente, tener contratado movistar+ en modalidad de fibra (FFTH) o ADSL en Espa\'f1a. La conexi\'f3n por sat\'e9lite no es compatible.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i\fs22 No existe constancia de que este programa funcione para clientes de Movistar de otros pa\'edses distintos de Espa\'f1a.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Compruebe que el equipo tiene conexi\'f3n activa a Internet y que est\'e1 conectado a la red LAN o WiFi de su casa. Igualmente, compruebe que el decodificador proporcionado por Movistar funciona correctamente y recibe canales.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Si el decodificador no funciona o falla la conexi\'f3n a Internet, llame al servicio de aver\'edas de Movistar (1002).\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Este programa no permite acceder al contenido de movistar+ desde fuera de casa, al igual que tampoco lo permite el decodificar f\'edsico oficial de Movistar.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Pruebe a reiniciar el router. La mayor parte de los problemas de conexi\'f3n son debidos a "saturaci\'f3n" del router.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Para las modalidades con fibra (FFTH), apague primero el router WiFi y luego el router de fibra. Espere 20 o 30 segundos y encienda el router de fibra. Una vez reestablecida la conexi\'f3n de la fibra tras 1 o 2 minutos, encienda el router WiFi y espere 2 o 3 minutos hasta que se estabilice la conexi\'f3n.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Para las modalidades con ADSL, apague el router ADSL, espere 20 o 30 segundos, enci\'e9ndalo de nuevo y espere 2 \'f3 3 minutos hasta que se estabilice la conexi\'f3n.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Si est\'e1 utilizando una conexi\'f3n WiFi, pruebe a conectar el equipo directamente por cable al router ADSL o, en caso de la fibra, al router WiFi conectado al router de fibra.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Si est\'e1 conectado de manera indirecta con tecnolog\'edas como PLC o HomePlug, pruebe igualmente a conectarse directamente por cable.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Si no est\'e1 utilizando el router WiFi o ADSL proporcionado oficialmente por movistar, es posible que este equipo est\'e9 bloqueando las se\'f1ales de red necesarias para acceder a los servicios de informaci\'f3n de movistar+. Utilice \'fanicamente el router proporcionado y configurado por movistar.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Compruebe que el Firewall (cortafuegos) de Windows no est\'e1 impidiendo la conexi\'f3n.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 A diferencia de otros sistemas de recepci\'f3n de v\'eddeo, movistar+ env\'eda la informaci\'f3n mediante multidifusi\'f3n UDP, lo que requiere que el programa "abra" puertos en el equipo para recibir la informaci\'f3n. Por defecto, el Firewall de Windows bloquea este tipo de conexi\'f3n.\i0\par +{\pntext\f2\'B7\tab}\i Apague, de manera temporal, el Firewall de Windows y compruebe si el problema se resuelve.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Aseg\'farese de que haber permitido la conexi\'f3n a trav\'e9s del Firewall durante el uso del asistente de configuraci\'f3n inicial. Si no lo hizo as\'ed, el Firewall de Windows bloquear\'e1 para siempre la conexi\'f3n, incluso si m\'e1s adelante se utiliza el asistente para abrir el Firewall. Para resolver este problema, tiene que entrar en la configuraci\'f3n avanzada del Firewall y eliminar las conexiones bloqueadas a los archivos ".exe" que conforman el producto.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Llegados a este punto, el problema puede estar en la configuraci\'f3n del adaptador de red.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Compruebe que la direcci\'f3n IP del equipo se ha asignado de manera autom\'e1tica (mediante DHCP). Aunque las configuraciones est\'e1ticas son v\'e1lidas, hay que descartar posibles fuentes de problemas.\i0\par +{\pntext\f2\'B7\tab}\i Pruebe a deshabilitar todos los adaptadores de red, a excepci\'f3n del correspondiente al cable LAN o la conexi\'f3n WiFi. Algunos adaptadores de red pueden interferir con la recepci\'f3n de la informaci\'f3n de multidifusi\'f3n.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i En las propiedades del adaptador de red, desactive temporalmente todos los protocolos de red y elementos del adaptador, excepto TCP/IP versi\'f3n 4.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Si sigue sin funcionar, debe reiniciar la configuraci\'f3n de red de Windows.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Abra una ventana de comandos en modo de administrador.\i0\par +{\pntext\f2\'B7\tab}\i Escriba "\i0\f1 netsh winsock reset\i\f0 " y pulse Intro.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Espere a que termine el comando y REINICIE el equipo.\i0\par + +\pard\sa200\sl276\slmult1\qj\fs24\par +Visite la p\'e1gina web de documentaci\'f3n del programa, en {{\field{\*\fldinst{HYPERLINK https://www.alphacentaury.org/temas/movistartv/ }}{\fldrslt{https://www.alphacentaury.org/temas/movistartv/\ul0\cf0}}}}\f0\fs24 , por si hubiera una gu\'eda m\'e1s actualizada o m\'e1s detallada. \b\fs22 Esta gu\'eda de resoluci\'f3n de problemas de conexi\'f3n se proporciona de forma meramente orientativa y sin garant\'eda de ning\'fan tipo.\b0\fs24\par } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkDownloadIcon_128x128.png b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkDownloadIcon_128x128.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkDownloadIcon_128x128.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkDownloadIcon_128x128.png diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkDownloadIcon_256x256.png b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkDownloadIcon_256x256.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkDownloadIcon_256x256.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkDownloadIcon_256x256.png diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkIcon_128x128.png b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkIcon_128x128.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkIcon_128x128.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkIcon_128x128.png diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkIcon_256x256.png b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkIcon_256x256.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkIcon_256x256.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkIcon_256x256.png diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkInternetIcon_128x128.png b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkInternetIcon_128x128.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkInternetIcon_128x128.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkInternetIcon_128x128.png diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkInternetIcon_256x256.png b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkInternetIcon_256x256.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/NetworkInternetIcon_256x256.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/NetworkInternetIcon_256x256.png diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/TroubleshootingGuide.rtf b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/TroubleshootingGuide.rtf similarity index 82% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/TroubleshootingGuide.rtf rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/TroubleshootingGuide.rtf index 50a71361..36c8acea 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Resources/TroubleshootingGuide.rtf +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/Resources/TroubleshootingGuide.rtf @@ -1,6 +1,7 @@ -{\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset2 Symbol;}} +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset0 Courier New;}{\f2\fnil\fcharset2 Symbol;}} {\colortbl ;\red0\green0\blue255;} -{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sl240\slmult1\qc\lang10\f0\fs22{\pict\wmetafile8\picw1270\pich1270\picwgoal720\pichgoal720 +{\*\generator Riched20 10.0.18362}\viewkind4\uc1 +\pard\sl240\slmult1\qc\f0\fs22\lang10{\pict{\*\picprop}\wmetafile8\picw1270\pich1270\picwgoal720\pichgoal720 010009000003ca0d00000000a10d000000000400000003010800050000000b0200000000050000 000c0230003000030000001e0004000000070104000400000007010400a10d0000410b2000cc00 300030000000000030003000000000002800000030000000300000000100180000000000001b00 @@ -184,30 +185,53 @@ ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffff040000002701ffff0300000000 00 }\b\fs28\par + \pard\sa200\sl276\slmult1\qc Connection Troubleshooting Guide\b0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 This program requires, necessarily, having contracted movistar+ in either fiber (FFTH) or DSL mode in Spain. The satellite connection is not supported.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i\fs22 There is no evidence that this program works for Movistar customers from countries other than Spain.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Make sure your computer has an active Internet connection and connected to the LAN or WiFi in your home. Also, check that the decoder provided by Movistar works properly and you receive channels.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 If the decoder does not work or the Internet connection fails, contact Movistar support (1002).\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i This program does not allows you to access to the contents of movistar+ away from home, as neither the official Movistar physical decoder does.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Try restarting the router. Most connection problems are due to "saturation" of the router.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 For DSL connections: switch off the DSL router, wait 20 to 30 seconds,turn it on again and wait 2 to 3 minutes until the connection is stable.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i For fiber (FFTH) connections: turn off the WiFi router and then the fiber router. Wait 20 or 30 seconds and power on the router fiber. Allow 1 to 2 minutes for the fiber router to boot and then turn on the WiFi router. Wait 2 to 3 minutes until the connection is stable.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 If you are using a WiFi connection, try connecting the computer directly to the DSL or WiFi router using a LAN cable.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 If you are connected indirectly with technologies such as PLC or HomePlug, also try connecting directly by cable.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i If you are not using the WiFi or DSL router officially provided by Movistar, the network equipment may be blocking the necessary network signals to access movistar+ information services. Only use the router provided and configured by movistar.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Make sure the Windows Firewall is not blocking the connection.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Unlike other video broadcasting systems, movistar + sends the information via multicast UDP. This requires the program to "open" ports on your computer to receive the information. By default, Windows Firewall blocks this kind of connections.\i0\par -\i{\pntext\f1\'B7\tab}Temporaril turn off the Windows Firewall and see if the problem is resolved.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Make sure connections were allowed through the firewall while using the initial setup wizard. If you did not do so, Windows Firewall will block the connection forever, even if you later use the wizard to open the Firewall. To resolve this problem, you need to access the Advanced Firewall settings and eliminate blocked connections to ".exe" files that make up this program.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 There have been reported cases in which the problem is due to a custom configuration of the DSL or WiFi router. Though it is drastic, try and perform a reset of the router, as to return to factory settings.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Contact Movistar support (1002) for assistance on how to reset the router and return to the official Movistar configuration.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Under any circumstances: do not reset the fiber router to factory settings!\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 At this point, the problem may be in the configuration of the network adapter.\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Make sure the computer's IP address is assigned automatically (DHCP). Although static configurations are valid, we must rule out possible sources of problems.\i0\par -\i{\pntext\f1\'B7\tab}Try disabling all network adapters, except for the LAN cable or WiFi connection. Some network adapters can interfere with reception of the multicast information.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i In the properties of the network adapter, temporarily disable the all adapter elements and network protocols except TCP / IP version 4.\i0\par -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-284\li284\sa200\sl276\slmult1\qj\fs24 As a final test, disconnect all devices connected to the Internet (mobile phones, tablets, television sets...) including the movistar+ decoder itself.\par -\pard\sa200\sl276\slmult1\qj Visit the program documentation website at {\field{\*\fldinst{HYPERLINK "http://movistartv.codeplex.com/documentation/"}}{\fldrslt{\ul\cf1 http://movistartv.codeplex.com/documentation/}}}\f0\fs24 , should there be a more updated or more detailed guide. \b\fs22 This Troubleshooting Guide is merely orientative and provided without warranty of any kind.\b0\fs24\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 This program requires, necessarily, having contracted movistar+ in either fiber (FFTH) or DSL mode in Spain. The satellite connection is not supported.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i\fs22 There is no evidence that this program works for Movistar customers from countries other than Spain.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Make sure your computer has an active Internet connection and connected to the LAN or WiFi in your home. Also, check that the decoder provided by Movistar works properly and you receive channels.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 If the decoder does not work or the Internet connection fails, contact Movistar support (1002).\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i This program does not allows you to access to the contents of movistar+ away from home, as neither the official Movistar physical decoder does.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Try restarting the router. Most connection problems are due to "saturation" of the router.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 For fiber (FFTH) connections: turn off the WiFi router and then the fiber router. Wait 20 or 30 seconds and power on the router fiber. Allow 1 to 2 minutes for the fiber router to boot and then turn on the WiFi router. Wait 2 to 3 minutes until the connection is stable.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i For DSL connections: switch off the DSL router, wait 20 to 30 seconds,turn it on again and wait 2 to 3 minutes until the connection is stable.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 If you are using a WiFi connection, try connecting the computer directly to the DSL or WiFi router using a LAN cable.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 If you are connected indirectly with technologies such as PLC or HomePlug, also try connecting directly by cable.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i If you are not using the WiFi or DSL router officially provided by Movistar, the network equipment may be blocking the necessary network signals to access movistar+ information services. Only use the router provided and configured by movistar.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 Make sure the Windows Firewall is not blocking the connection.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Unlike other video broadcasting systems, movistar + sends the information via multicast UDP. This requires the program to "open" ports on your computer to receive the information. By default, Windows Firewall blocks this kind of connections.\i0\par +{\pntext\f2\'B7\tab}\i Temporaril turn off the Windows Firewall and see if the problem is resolved.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Make sure connections were allowed through the firewall while using the initial setup wizard. If you did not do so, Windows Firewall will block the connection forever, even if you later use the wizard to open the Firewall. To resolve this problem, you need to access the Advanced Firewall settings and eliminate blocked connections to ".exe" files that make up this program.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 At this point, the problem may be in the configuration of the network adapter.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Make sure the computer's IP address is assigned automatically (DHCP). Although static configurations are valid, we must rule out possible sources of problems.\i0\par +{\pntext\f2\'B7\tab}\i Try disabling all network adapters, except for the LAN cable or WiFi connection. Some network adapters can interfere with reception of the multicast information.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i In the properties of the network adapter, temporarily disable the all adapter elements and network protocols except TCP / IP version 4.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li284\sl276\slmult1\qj\fs24 If you're still having problems, you need to reset the Windows Network Settings.\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sl276\slmult1\qj\i\fs22 Run Comand Prompt as administrator.\i0\par +{\pntext\f2\'B7\tab}\i Type "\i0\f1 netsh winsock reset\i\f0 " and press Enter.\i0\par + +\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-284\li568\sa200\sl276\slmult1\qj\i Wait for the command to run and RESTART your computer.\i0\par + +\pard\sa200\sl276\slmult1\qj\fs24\par +Visit the program documentation website at {{\field{\*\fldinst{HYPERLINK https://www.alphacentaury.org/temas/movistartv/ }}{\fldrslt{https://www.alphacentaury.org/temas/movistartv/\ul0\cf0}}}}\f0\fs24 , should there be a more updated or more detailed guide. \b\fs22 This Troubleshooting Guide is merely orientative and provided without warranty of any kind.\b0\fs24\par } \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs similarity index 75% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs index 0d268025..f3ceac90 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpBaseDownloadRequest.cs @@ -1,9 +1,19 @@ -using System; -using System.Collections.Generic; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; using System.ComponentModel; -using System.Linq; using System.Net; -using System.Text; namespace IpTviewr.UiServices.DvbStpClient { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs new file mode 100644 index 00000000..8e463141 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs @@ -0,0 +1,55 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Serialization; +using System; +using System.IO; + +namespace IpTviewr.UiServices.DvbStpClient +{ + public abstract class UiDvbStpBaseDownloadResponse + { + public Exception DownloadException + { + get; + set; + } // DownloadException + + public bool UserCancelled + { + get; + set; + } // UserCancelled + + public static object ParsePayload(Type payloadType, byte[] payloadData, byte payloadId, bool trimExtraWhitespace, Func namespaceReplacer) + { + try + { + using (var input = new MemoryStream(payloadData, false)) + { + return XmlSerialization.Deserialize(input, payloadType, trimExtraWhitespace, namespaceReplacer); + } // using input + } + catch (Exception ex) + { + throw new ApplicationException(string.Format(Properties.Texts.ParsePayloadException, + payloadId, payloadType.FullName), ex); + } // try-catch + } // ParsePayload + + public static T ParsePayload(byte[] payloadData, byte payloadId, bool trimExtraWhitespace, Func namespaceReplacer) where T : class + { + return ParsePayload(typeof(T), payloadData, payloadId, trimExtraWhitespace, namespaceReplacer) as T; + } // ParsePayload + } // abstract class UiDvbStpBaseDownloadResponse +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs new file mode 100644 index 00000000..60a22a05 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs @@ -0,0 +1,120 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Microsoft.SqlServer.MessageBox; +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Common.Forms; +using System; +using System.Net.Sockets; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.DvbStpClient +{ + public abstract class UiDvbStpBaseDownloader + { + // "Input" properties + + public string CaptionUserCancelled + { + get; + set; + } // CaptionUserCancelled + + public string TextUserCancelled + { + get; + set; + } // TextUserCancelled + + public string TextDownloadException + { + get; + set; + } // TextDownloadException + + // "Return" properties + + public bool IsOk + { + get; + private set; + } // IsOk + + protected string TelemetryScreenName + { + get; + set; + } // TelemetryScreenName + + public void Download(IWin32Window owner) + { + var response = ShowDialog(owner); + + IsOk = ((response.UserCancelled == false) && (response.DownloadException == null)); + + if (response.UserCancelled) + { + var box = new ExceptionMessageBox() + { + Caption = CaptionUserCancelled ?? Properties.Texts.HelperUserCancelledCaption, + Text = TextUserCancelled ?? Properties.Texts.HelperUserCancelledText, + Beep = true, + Symbol = ExceptionMessageBoxSymbol.Information + }; + box.Show(owner); + + return; + } // if + + if (response.DownloadException != null) + { + HandleException(owner, response.DownloadException); + } // if + } // Download + + protected abstract UiDvbStpBaseDownloadResponse ShowDialog(IWin32Window owner); + + private void HandleException(IWin32Window owner, Exception ex) + { + var message = TextDownloadException ?? Properties.Texts.HelperExceptionText; + AppTelemetry.ScreenException(ex, TelemetryScreenName, message); + + switch (ex) + { + case SocketException isSocket: + message = string.Format(Properties.Texts.SocketException, message, isSocket.SocketErrorCode); + break; + case TimeoutException _: + message = string.Format(Properties.Texts.TimeoutException, message); + break; + } // switch + + var box = new ExceptionMessageBox() + { + Buttons = ExceptionMessageBoxButtons.Custom, + InnerException = ex, + Text = message, + DefaultButton = ExceptionMessageBoxDefaultButton.Button2, + CustomSymbol = Properties.Resources.DvbStpDownload_Error_48x48 + }; + box.SetButtonText(ExceptionMessageBox.OKButtonText, Properties.Texts.HandleExceptionHelpButton); + box.Show(owner); + + if (box.CustomDialogResult == ExceptionMessageBoxDialogResult.Button2) + { + AppTelemetry.CustomEvent(TelemetryScreenName, "ShowDialog", "UiServices.DvbStpClient.HelpDialog", TelemetryScreenName); + HelpDialog.ShowRtfHelp(owner, Properties.Texts.RtfTroubleshootingGuide); + } // if + } // HandleException + } // abstract class UiDvbStpBaseDownloader +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs new file mode 100644 index 00000000..1c364847 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs @@ -0,0 +1,54 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.DvbStp.Client; +using System; + +namespace IpTviewr.UiServices.DvbStpClient +{ + public class UiDvbStpClientSegmentInfo: DvbStpClientSegmentInfo + { + public UiDvbStpClientSegmentInfo() + { + // no op + } // constructor + + public UiDvbStpClientSegmentInfo(byte payloadId, short? segmentId, string displayName, Type xmlType) + : base(payloadId, segmentId) + { + DisplayName = displayName; + XmlType = xmlType; + } // constructor + + // Required IN parameter + public string DisplayName + { + get; + set; + } // DisplayName + + // Required IN parameter + public Type XmlType + { + get; + set; + } // XmlType + + // Out parameter + public object XmlDeserializedData + { + get; + set; + } // XmlDeserializedData + } // class UiDvbStpClientSegmentInfo +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs similarity index 75% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs index 73df9752..3fb123cd 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadRequest.cs @@ -1,7 +1,18 @@ -using System; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; using System.Collections.Generic; -using System.Linq; -using System.Text; namespace IpTviewr.UiServices.DvbStpClient { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs new file mode 100644 index 00000000..8a8a996a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs @@ -0,0 +1,24 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.DvbStpClient +{ + public class UiDvbStpEnhancedDownloadResponse : UiDvbStpBaseDownloadResponse + { + public bool IsOk + { + get; + set; + } // IsOk + } // class UiDvbStpEnhancedDownloadResponse +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs new file mode 100644 index 00000000..2479d41d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace IpTviewr.UiServices.DvbStpClient +{ + public sealed class UiDvbStpEnhancedDownloader : UiDvbStpBaseDownloader + { + // "Input" properties + + public UiDvbStpEnhancedDownloadRequest Request + { + get; + set; + } // Request + + // "Return" properties + + public UiDvbStpEnhancedDownloadResponse Response + { + get; + private set; + } // Response + + protected override UiDvbStpBaseDownloadResponse ShowDialog(IWin32Window owner) + { + using (var dlg = new DvbStpEnhancedDownloadDialog(Request)) + { + dlg.ShowDialog(owner); + TelemetryScreenName = dlg.TelemetryScreenName; + Response = dlg.Response; + return Response; + } // using + } // ShowDialog + } // UiDvbStpEnhancedDownloader +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs new file mode 100644 index 00000000..ed85ac57 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs @@ -0,0 +1,46 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.DvbStpClient +{ + public class UiDvbStpSimpleDownloadRequest: UiDvbStpBaseDownloadRequest + { + public byte PayloadId + { + get; + set; + } // PayloadId + + public short? SegmentId + { + get; + set; + } // SegmentId + + public Type PayloadDataType + { + get; + set; + } // PayloadDataType + +#if DEBUG + public string DumpToFile + { + get; + set; + } // DumpToFile +#endif + } // class DownloadDlgRequestData +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs new file mode 100644 index 00000000..823be6e2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.DvbStpClient +{ + public class UiDvbStpSimpleDownloadResponse : UiDvbStpBaseDownloadResponse + { + public byte Version + { + get; + set; + } // Version + + public byte[] PayloadData + { + get; + set; + } // PayloadData + + public object DeserializedPayloadData + { + get; + set; + } // DeserializedPayloadData + } // class DvbStpDownloadResponse +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs new file mode 100644 index 00000000..3a6231f7 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace IpTviewr.UiServices.DvbStpClient +{ + public sealed class UiDvbStpSimpleDownloader : UiDvbStpBaseDownloader + { + // "Input" properties + + public UiDvbStpSimpleDownloadRequest Request + { + get; + set; + } // Request + + // "Return" properties + + public UiDvbStpSimpleDownloadResponse Response + { + get; + private set; + } // Response + + protected override UiDvbStpBaseDownloadResponse ShowDialog(IWin32Window owner) + { + using (var dlg = new DvbStpSimpleDownloadDialog(Request)) + { + dlg.ShowDialog(owner); + TelemetryScreenName = dlg.TelemetryScreenName; + Response = dlg.Response; + return Response; + } // using + } // ShowDialog + } // UiDvbStpSimpleDownloader +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj similarity index 93% rename from 1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj rename to 1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj index 5db7e88a..eb4adfbc 100644 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/UiServices.DvbStpClient.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.UiServices.DvbStpClient UiServices.DvbStpClient - v4.5.2 + v4.6.2 512 SAK SAK @@ -42,16 +42,11 @@ ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - - + Properties\AssemblySolutionInfo.cs @@ -90,12 +85,12 @@ - {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3} DvbStpClient - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} @@ -118,6 +113,7 @@ ResXFileCodeGenerator Resources.Designer.cs + Designer @@ -133,6 +129,7 @@ Resources\Action_Ok_16x16.png + @@ -144,6 +141,8 @@ + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/licensing.xml b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/licensing.xml new file mode 100644 index 00000000..58d27c6e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.DvbStpClient/licensing.xml @@ -0,0 +1,157 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.Designer.cs similarity index 86% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.Designer.cs index e73d8411..909a5268 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.EPG { @@ -35,15 +45,13 @@ private void InitializeComponent() System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); this.dataGridPrograms = new System.Windows.Forms.DataGridView(); - this.buttonOk = new System.Windows.Forms.Button(); this.columnChannel = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.columnProgramNow = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.columnProgramThen = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.columnProgramAfter = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.pictureProgramThumbnail = new IpTviewr.UiServices.EPG.EpgProgramPictureBox(); + this.buttonOk = new System.Windows.Forms.Button(); this.epgMiniGuide = new IpTviewr.UiServices.EPG.EpgMiniGuideButtons(); ((System.ComponentModel.ISupportInitialize)(this.dataGridPrograms)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureProgramThumbnail)).BeginInit(); this.SuspendLayout(); // // dataGridPrograms @@ -78,14 +86,6 @@ private void InitializeComponent() this.dataGridPrograms.ShowRowErrors = false; this.dataGridPrograms.SelectionChanged += new System.EventHandler(this.dataGridPrograms_SelectionChanged); // - // buttonOk - // - resources.ApplyResources(this.buttonOk, "buttonOk"); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOk.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Ok_16x16; - this.buttonOk.Name = "buttonOk"; - this.buttonOk.UseVisualStyleBackColor = true; - // // columnChannel // this.columnChannel.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; @@ -114,14 +114,13 @@ private void InitializeComponent() this.columnProgramAfter.Name = "columnProgramAfter"; this.columnProgramAfter.ReadOnly = true; // - // pictureProgramThumbnail + // buttonOk // - resources.ApplyResources(this.pictureProgramThumbnail, "pictureProgramThumbnail"); - this.pictureProgramThumbnail.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.pictureProgramThumbnail.Cursor = System.Windows.Forms.Cursors.Hand; - this.pictureProgramThumbnail.InitialImage = global::IpTviewr.UiServices.EPG.Properties.Resources.EpgNoProgramImage; - this.pictureProgramThumbnail.Name = "pictureProgramThumbnail"; - this.pictureProgramThumbnail.TabStop = false; + resources.ApplyResources(this.buttonOk, "buttonOk"); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::IpTviewr.UiServices.EPG.Properties.CommonUiResources.Action_Ok_16x16; + this.buttonOk.Name = "buttonOk"; + this.buttonOk.UseVisualStyleBackColor = true; // // epgMiniGuide // @@ -139,7 +138,6 @@ private void InitializeComponent() resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.buttonOk); - this.Controls.Add(this.pictureProgramThumbnail); this.Controls.Add(this.epgMiniGuide); this.Controls.Add(this.dataGridPrograms); this.MinimizeBox = false; @@ -147,7 +145,6 @@ private void InitializeComponent() this.ShowInTaskbar = false; this.Load += new System.EventHandler(this.EpgBasicGridDialog_Load); ((System.ComponentModel.ISupportInitialize)(this.dataGridPrograms)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureProgramThumbnail)).EndInit(); this.ResumeLayout(false); } @@ -157,10 +154,9 @@ private void InitializeComponent() private System.Windows.Forms.DataGridView dataGridPrograms; private System.Windows.Forms.Button buttonOk; private IpTviewr.UiServices.EPG.EpgMiniGuideButtons epgMiniGuide; - private IpTviewr.UiServices.EPG.EpgProgramPictureBox pictureProgramThumbnail; private System.Windows.Forms.DataGridViewTextBoxColumn columnChannel; private System.Windows.Forms.DataGridViewTextBoxColumn columnProgramNow; private System.Windows.Forms.DataGridViewTextBoxColumn columnProgramThen; private System.Windows.Forms.DataGridViewTextBoxColumn columnProgramAfter; } // class EpgBasicGridDialog -} // namespace \ No newline at end of file +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.cs new file mode 100644 index 00000000..ae058473 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.cs @@ -0,0 +1,248 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using IpTviewr.Common.Telemetry; +using IpTviewr.Services.EpgDiscovery; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Discovery.BroadcastList; +using IpTviewr.Common; + +namespace IpTviewr.UiServices.EPG +{ + public partial class EpgBasicGridDialog : CommonBaseForm + { + private IList _servicesList; + private UiBroadcastService _initialService; + private UiBroadcastService _selectedService; + private IEpgLinkedList[] _epgPrograms; + private EpgDataStore _datastore; + private int _selectedRowIndex; + private DateTime _localReferenceTime; + private bool _isGridReady; + + public static DialogResult ShowGrid(CommonBaseForm parentForm, IList list, UiBroadcastService currentService, EpgDataStore datastore) + { + using (var dialog = new EpgBasicGridDialog()) + { + dialog._servicesList = list; + dialog._initialService = currentService; + dialog._datastore = datastore; + return dialog.ShowDialog(parentForm); + } // using + } // ShowGrid + + public EpgBasicGridDialog() + { + InitializeComponent(); + Icon = Properties.Resources.Epg; + } // constructor + + #region Event handlers + + private void EpgBasicGridDialog_Load(object sender, EventArgs e) + { + _epgPrograms = new IEpgLinkedList[_servicesList.Count]; + ChangeSelectedRow(-1); + + var workerOptions = new BackgroundWorkerOptions() + { + OutputData = _epgPrograms, + BackgroundTask = AsyncGetEpgPrograms, + AfterTask = FillGrid, + AllowAutoClose = true, + TaskDescription = Properties.Texts.EpgDataLoadingList, + AllowCancelButton = true, + }; + + var result = BackgroundWorkerDialog.RunWorkerAsync(this, workerOptions); + var close = false; + if (workerOptions.OutputException != null) + { + HandleException(new ExceptionEventData(Properties.Texts.ObtainingListException, workerOptions.OutputException)); + close = true; + } // if + if (result != DialogResult.OK) + { + close = true; + } // if + + if (close) + { + Visible = false; + Close(); + } // if + } // EpgBasicGridDialog_Load + + private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) + { + if (!_isGridReady) return; + + var cell = (dataGridPrograms.SelectedCells.Count > 0) ? dataGridPrograms.SelectedCells[0] : null; + if (cell == null) + { + ChangeSelectedRow(-1); + } + else + { + ChangeSelectedRow(cell.RowIndex); + + // don't allow to select the service + if (cell.ColumnIndex == 0) + { + var row = dataGridPrograms.Rows[_selectedRowIndex]; + row.Cells[1].Selected = true; + + // changing the selected cell will cause SelectionChanged to be fired + // thus making unnecesary to call DisplayProgramData() + return; + } // if + + DisplayProgramData(cell.ColumnIndex); + } // if-else + } // dataGridPrograms_SelectionChanged + + #endregion + + private void FillGrid(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) + { + if (dialog.QueryCancel()) return; + dialog.SetProgressText("Filling the list..."); + + var serviceRowIndex = -1; + foreach (var service in _servicesList) + { + var name = UiBroadcastListManager.GetColumnData(service, UiBroadcastListColumn.NumberAndName); + var rowIndex = dataGridPrograms.Rows.Add(name); + + if (service.Key == _initialService?.Key) + { + serviceRowIndex = rowIndex; + } // if + + // TODO: use ListManager view options for hidden and inactive programs (to show or no to show) + if ((service.IsHidden) || (service.IsInactive)) + { + dataGridPrograms.Rows[rowIndex].DefaultCellStyle.ForeColor = SystemColors.GrayText; + } // if + } // foreach + + for (var index = 0; index < _epgPrograms.Length; index++) + { + int cellIndex; + var row = dataGridPrograms.Rows[index]; + + var node = _epgPrograms[index]?.Requested; + cellIndex = 1; + while ((node != null) && (cellIndex < 4)) + { + var cell = row.Cells[cellIndex]; + cell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft; + cell.Value = node.Program.Title; + node = node.Next; + cellIndex++; + } // while + + // mark remaining cells as empty + for (; cellIndex < 4; cellIndex++) + { + var cell = row.Cells[cellIndex]; + cell.Style.ForeColor = SystemColors.GrayText; + cell.Value = Properties.Texts.EpgNoInformationShort; + cell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; + } // for cellIndex + } // for index + + _selectedService = null; + _isGridReady = true; + + if (serviceRowIndex >= 0) + { + dataGridPrograms.CurrentCell = dataGridPrograms.Rows[serviceRowIndex].Cells[1]; + } + else + { + _selectedRowIndex = -1; + } // if-else + } // FillGrid + + private void AsyncGetEpgPrograms(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) + { + IEpgLinkedList servicePrograms; + + dialog.SetProgressText("Requesting data for channels..."); + + _localReferenceTime = DateTime.Now; + var programs = _datastore.GetAllPrograms(_localReferenceTime, 0, 2); + + dialog.SetProgressText("Sorting information..."); + + var index = -1; + foreach (var service in _servicesList) + { + index++; + + // TODO: do NOT assume .imagenio.es + var fullServiceName = service.ServiceName + ".imagenio.es"; + var fullAlternateServiceName = service.ReplacementService?.ServiceName + ".imagenio.es"; + + if (!programs.TryGetValue(fullServiceName, out servicePrograms)) + { + if (!programs.TryGetValue(fullAlternateServiceName, out servicePrograms)) + { + continue; + } // if + } // if + + _epgPrograms[index] = servicePrograms; + } // foreach + } // AsyncGetEpgPrograms + + private void DisplayProgramData(int cellIndex) + { + if (cellIndex < 1) + { + epgMiniGuide.Visible = false; + } + else + { + epgMiniGuide.Visible = true; + epgMiniGuide.GoTo(cellIndex); + } // if-else + } // DisplayProgramData + + private void ChangeSelectedRow(int rowIndex) + { + if (rowIndex == _selectedRowIndex) return; + _selectedRowIndex = rowIndex; + _selectedService = (rowIndex >= 0)? _servicesList[rowIndex] : null; + + if (rowIndex == -1) + { + epgMiniGuide.Visible = false; + return; + } // if + + var epgPrograms = _epgPrograms[rowIndex]; + var singleServiceDataStore = new EpgSingleServiceDataStore(_selectedService.FullServiceName, epgPrograms); + + epgMiniGuide.LoadEpgPrograms(_selectedService, _localReferenceTime, false); + epgMiniGuide.SetEpgDataStore(singleServiceDataStore, false); + epgMiniGuide.Visible = true; + } // ChangeSelectedRow + } // class EpgBasicGridDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.resx similarity index 89% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.resx index 16d8e827..5f0b3ad7 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgBasicGridDialog.resx @@ -157,7 +157,7 @@ $this - 3 + 2 Bottom, Right @@ -195,44 +195,14 @@ 0 - - Bottom, Left - - - NoControl - - - 12, 310 - - - 120, 90 - - - Zoom - - - 42 - - - pictureProgramThumbnail - - - IpTviewr.UiServices.EPG.EpgProgramPictureBox, UiServices.EPG, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 1 - Bottom, Left, Right - 138, 312 + 12, 312 - 484, 88 + 610, 88 1 @@ -247,7 +217,7 @@ $this - 2 + 1 True diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgChannelPrograms.Designer.cs similarity index 96% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgChannelPrograms.Designer.cs index 37805f7d..f54f8b94 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgChannelPrograms.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.EPG { @@ -215,4 +225,4 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonDisplayChannel; private EpgProgramMiniBar EpgProgramDetails; } // class EpgChannelPrograms -} // namespace \ No newline at end of file +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgChannelPrograms.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgChannelPrograms.cs new file mode 100644 index 00000000..178fcf46 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgChannelPrograms.cs @@ -0,0 +1,203 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Core; +using IpTviewr.Services.EpgDiscovery; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.EPG +{ + public partial class EpgChannelPrograms : CommonBaseForm + { + DateTime _referenceTime; + private Font _boldListFont, _italicListFont; + + public int DaysDelta + { + get; + set; + } // DaysDelta + + public UiBroadcastService Service + { + get; + set; + } // ChannelLog + + public string FullServiceName + { + get; + set; + } // FullServiceName + + public string FullAlternateServiceName + { + get; + set; + } // FullAlternateServiceName + + public string EpgDatabase + { + get; + set; + } // EpgDatabase + + public EpgChannelPrograms() + { + InitializeComponent(); + } // constructor + + private void DisposeForm(bool disposing) + { + if (!disposing) return; + + _boldListFont?.Dispose(); + _italicListFont?.Dispose(); + } // DisposeForm + + private void EpgChannelPrograms_Load(object sender, EventArgs e) + { + pictureChannelLogo.Image = Service.Logo.GetImage(LogoSize.Size48); + labelChannelName.Text = $"{Service.DisplayLogicalNumber} - {Service.DisplayName}"; + + _boldListFont = new Font(listPrograms.Font, FontStyle.Bold); + _italicListFont = new Font(listPrograms.Font, FontStyle.Italic); + + comboBoxDate.SelectedIndex = DaysDelta; + buttonDisplayChannel.Enabled = false; + buttonRecordChannel.Enabled = false; + } // EpgChannelPrograms_Load + + private void comboBoxDate_SelectedIndexChanged(object sender, EventArgs e) + { + DaysDelta = comboBoxDate.SelectedIndex; + StartLoadEpg(); + } // comboBoxDate_SelectedIndexChanged + + private void listPrograms_SelectedIndexChanged(object sender, EventArgs e) + { + var epgProgram = (listPrograms.SelectedItems.Count != 0) ? (EpgProgram)listPrograms.SelectedItems[0].Tag : null; + EpgProgramDetails.Visible = (epgProgram != null); + EpgProgramDetails.DisplayData(Service, epgProgram, _referenceTime, "Programa"); + + buttonDisplayChannel.Enabled = (epgProgram != null) && (epgProgram.LocalStartTime <= _referenceTime) && (epgProgram.LocalEndTime > _referenceTime); + buttonRecordChannel.Enabled = (epgProgram != null) && (epgProgram.LocalEndTime >= _referenceTime); + } // listPrograms_SelectedIndexChanged + + private void buttonDisplayChannel_Click(object sender, EventArgs e) + { + ExternalTvPlayer.ShowTvChannel(this, Service); + } // buttonDisplayChannel_Click + + private void buttonRecordChannel_Click(object sender, EventArgs e) + { + NotImplementedBox.ShowBox(this, "buttonRecordChannel"); + } // buttonRecordChannel_Click + + private void StartLoadEpg() + { + if (listPrograms.Items.Count > 0) + { + listPrograms.Items.Clear(); + var item = listPrograms.Items.Add(""); + item.SubItems.Add("Leyendo información de guía de programas..."); + } // if + + comboBoxDate.Enabled = false; + EpgProgramDetails.Visible = false; + + ThreadPool.QueueUserWorkItem(LoadEpg); + } // StartLoadEpg + + private void LoadEpg(object state) + { + _referenceTime = DateTime.Now; + var start = new DateTime(_referenceTime.Year, _referenceTime.Month, _referenceTime.Day).AddDays(DaysDelta); + var end = start.AddDays(1); + // TODO: EPG + //var epgPrograms = EpgDbSerialization.GetServiceEvents(EpgDatabase, FullServiceName, FullAlternateServiceName, start, end); + //this.BeginInvoke(new Action>(ShowEpg), epgPrograms); + } // LoadEpg + + private void ShowEpg(IList epgPrograms) + { + EpgProgram last; + ListViewItem item, select; + + last = null; + select = null; + + listPrograms.BeginUpdate(); + listPrograms.Items.Clear(); + + foreach (var epgProgram in epgPrograms) + { + if ((last != null) && (last.LocalEndTime != epgProgram.LocalStartTime)) + { + item = new ListViewItem(last.LocalEndTime.ToShortTimeString()) + { + UseItemStyleForSubItems = false + }; + item.SubItems.Add("Información de programa no disponible"); + item.SubItems[1].Font = _italicListFont; + } + else + { + item = new ListViewItem(epgProgram.LocalStartTime.ToShortTimeString()) + { + UseItemStyleForSubItems = false, + Font = _boldListFont, + Tag = epgProgram + }; + item.SubItems.Add(epgProgram.Title); + item.ToolTipText = epgProgram.Title; + } // if-else + listPrograms.Items.Add(item); + last = epgProgram; + + if ((select == null) && (epgProgram.LocalStartTime <= _referenceTime) && (epgProgram.LocalEndTime > _referenceTime)) + { + select = item; + } // if + } // foreach + + if (epgPrograms.Count == 0) + { + item = new ListViewItem("--:--"); + item.SubItems.Add("Información de programas no disponible para este canal"); + item.UseItemStyleForSubItems = false; + listPrograms.Items.Add(item); + } // if + columnHeaderTitle.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); + + if (select != null) + { + select.Selected = (DaysDelta == 0); + select.EnsureVisible(); + select.IndentCount = 3; + listPrograms.Focus(); + } // if + + listPrograms.EndUpdate(); + + comboBoxDate.Enabled = true; + } // ShowEpg + } // class EpgChannelPrograms +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgChannelPrograms.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgChannelPrograms.resx new file mode 100644 index 00000000..7080a7d1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgChannelPrograms.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgEventMiniBar.Designer.cs similarity index 95% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgEventMiniBar.Designer.cs index 6e2b8e55..31adda3d 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgEventMiniBar.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.EPG { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgEventMiniBar.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgEventMiniBar.cs new file mode 100644 index 00000000..76f51053 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgEventMiniBar.cs @@ -0,0 +1,82 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Windows.Forms; +using IpTviewr.Common; +using IpTviewr.UiServices.Discovery; +using IpTviewr.Services.EpgDiscovery; + +namespace IpTviewr.UiServices.EPG +{ + public partial class EpgProgramMiniBar : UserControl + { + private UiBroadcastService _service; + private EpgProgram _epgProgram; + + public EpgProgramMiniBar() + { + InitializeComponent(); + } // constructor + + public void DisplayData(UiBroadcastService service, EpgProgram epgProgram, DateTime referenceTime, string caption) + { + _service = service; + _epgProgram = epgProgram; + + labelProgramCaption.Text = caption; + labelProgramCaption.Visible = caption != null; + labelProgramTime.Visible = (epgProgram != null); + labelProgramDetails.Visible = (epgProgram != null); + pictureProgramThumbnail.ImageLocation = null; + buttonProgramProperties.Visible = (epgProgram != null); + pictureProgramThumbnail.Cursor = (epgProgram != null) ? Cursors.Hand : Cursors.Default; + + if (_epgProgram == null) + { + labelProgramTitle.Text = Properties.Texts.EpgNoInformation; + pictureProgramThumbnail.Image = Properties.Resources.EpgNoProgramImage; + } + else + { + labelProgramTitle.Text = _epgProgram.Title; + labelProgramTime.Text = $"{FormatString.DateTimeFromToMinutes(_epgProgram.LocalStartTime, _epgProgram.LocalEndTime, referenceTime)} ({FormatString.TimeSpanTotalMinutes(_epgProgram.Duration, FormatString.Format.Extended)})"; + labelProgramDetails.Text = $"{((_epgProgram.Genre != null) ? _epgProgram.Genre.Description : Properties.Texts.EpgNoGenre)} / {((_epgProgram.ParentalRating != null) ? _epgProgram.ParentalRating.Description : Properties.Texts.EpgNoParentalRating)}"; + + pictureProgramThumbnail.Image = Properties.Resources.EpgLoadingProgramImage; + pictureProgramThumbnail.ImageLocation = null; + // TODO: EPG + // pictureProgramThumbnail.ImageLocation = IpTvService.Current.EpgInfo.GetEpgProgramThumbnailUrl(service, EpgProgram, false); + } // if-else + } // DisplayData + + private void buttonProgramProperties_Click(object sender, EventArgs e) + { + EpgExtendedInfoDialog.ShowExtendedInfo(this, _service, _epgProgram); + } // buttonProgramProperties_Click + + private void pictureProgramThumbnail_LoadCompleted(object sender, AsyncCompletedEventArgs e) + { + if ((e.Error != null) || (e.Cancelled)) + { + (sender as PictureBox).Image = Properties.Resources.EpgNoProgramImage; + } // if + } // pictureProgramThumbnail_LoadCompleted + + private void pictureProgramThumbnail_Click(object sender, EventArgs e) + { + EpgExtendedInfoDialog.ShowExtendedInfo(this, _service, _epgProgram); + } // pictureProgramThumbnail_Click + } // class EpgProgramMiniBar +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgEventMiniBar.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgEventMiniBar.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs similarity index 95% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs index 36bd1d39..cfa2b5a9 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.EPG { @@ -204,4 +214,4 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem contextRtfMenuSelectAll; private System.Windows.Forms.Label labelAdditionalDetails; } // class EpgExtendedInfoDialog -} // namespace \ No newline at end of file +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.cs similarity index 88% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.cs index 90e52957..e204b57d 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.cs @@ -1,29 +1,32 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; using System.Text; using System.Windows.Forms; -using IpTviewr.Core.IpTvProvider; // TODO: EPG -// using IpTviewr.Core.IpTvProvider.EPG; +// using IpTviewr.Core.IpTvService.EPG; using IpTviewr.UiServices.Common.Forms; -using IpTviewr.UiServices.Configuration.Logos; using IpTviewr.UiServices.Discovery; -using IpTviewr.UiServices.Discovery.BroadcastList; using IpTviewr.Services.EpgDiscovery; namespace IpTviewr.UiServices.EPG { public partial class EpgExtendedInfoDialog : Form { - private Encoding Ansi1252Encoding; - private DateTime ReferenceTime; + private readonly Encoding _ansi1252Encoding; + // private DateTime _referenceTime; public static void ShowExtendedInfo(IWin32Window owner, UiBroadcastService service, EpgProgram epgProgram) { @@ -44,8 +47,8 @@ public static void ShowExtendedInfo(IWin32Window owner, UiBroadcastService servi public EpgExtendedInfoDialog() { InitializeComponent(); - this.Icon = Properties.Resources.Epg; - Ansi1252Encoding = Encoding.GetEncoding(1252); + Icon = Properties.Resources.Epg; + _ansi1252Encoding = Encoding.GetEncoding(1252); } // constructor // TODO: EPG @@ -59,7 +62,7 @@ public ProgramEpgInfo ProgramInfo private void EpgExtendedInfoDialog_Load(object sender, EventArgs e) { - ReferenceTime = DateTime.Now; + // _referenceTime = DateTime.Now; buttonPrevious.Visible = false; //(NavigationCallback != null); buttonNext.Visible = false; // (NavigationCallback != null); @@ -87,7 +90,7 @@ private void EpgExtendedInfoDialog_Load(object sender, EventArgs e) pictureProgramPreview.Image = Properties.Resources.EpgLoadingProgramImage; pictureProgramPreview.ImageLocation = null; // TODO: EPG - // pictureProgramPreview.ImageLocation = IpTvProvider.Current.EpgInfo.GetEpgProgramThumbnailUrl(ProgramInfo.Service, ProgramInfo.Base, true); + // pictureProgramPreview.ImageLocation = IpTvService.Current.EpgInfo.GetEpgProgramThumbnailUrl(ProgramInfo.Service, ProgramInfo.Base, true); buttonShowProgram.Enabled = false; buttonRecordProgram.Enabled = false; @@ -96,7 +99,7 @@ private void EpgExtendedInfoDialog_Load(object sender, EventArgs e) private void EpgExtendedInfoDialog_Shown(object sender, EventArgs e) { // TODO: EPG - // ProgramInfo.Extended = IpTvProvider.Current.EpgInfo.GetEpgInfo(ProgramInfo.Service, ProgramInfo.Base, true); + // ProgramInfo.Extended = IpTvService.Current.EpgInfo.GetEpgInfo(ProgramInfo.Service, ProgramInfo.Base, true); // if (ProgramInfo.Extended == null) // { richTextProgramData.Text = Properties.EpgRtf.NullProgramData; @@ -202,8 +205,8 @@ private string ToUnicodeRtf(string text) if (text == null) return null; // quick check - bool found = false; - for (int index = 0; index < text.Length; index++) + var found = false; + for (var index = 0; index < text.Length; index++) { if (text[index] > 127) { found = true; break; } } // for @@ -211,7 +214,7 @@ private string ToUnicodeRtf(string text) if (!found) return text; var buffer = new StringBuilder(); - for (int index = 0; index < text.Length; index++) + for (var index = 0; index < text.Length; index++) { var c = text[index]; if (c < 127) @@ -231,9 +234,9 @@ private string ToUnicodeRtf(string text) } else { - var ansiChar = Ansi1252Encoding.GetBytes(new char[] { c })[0]; - var ansiCharRtf = (ansiChar <= 127) ? ansiChar.ToString() : string.Format("\\'{0:x0}", ansiChar); - buffer.AppendFormat("\\u{0}{1}", (c <= 32767) ? (int)c : ((int)c) - 32768, ansiCharRtf); + var ansiChar = _ansi1252Encoding.GetBytes(new[] { c })[0]; + var ansiCharRtf = (ansiChar <= 127) ? ansiChar.ToString() : $"\\'{ansiChar:x0}"; + buffer.AppendFormat("\\u{0}{1}", (c <= 32767) ? (int)c : c - 32768, ansiCharRtf); } // if-else } // for diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgExtendedInfoDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgExtendedInfoDialog.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.Designer.cs similarity index 96% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.Designer.cs index f5700fb4..7b799ccd 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.EPG { diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.cs similarity index 81% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.cs index 279882f8..f1539d51 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.cs @@ -1,31 +1,34 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Services.SqlServerCE; using IpTviewr.Common; +using IpTviewr.Services.EpgDiscovery; +using IpTviewr.UiServices.Common.Controls; +using IpTviewr.UiServices.Common.Forms; using IpTviewr.UiServices.Discovery; using IpTviewr.UiServices.Record; -using IpTviewr.UiServices.Common.Forms; -using IpTviewr.Core.IpTvProvider; -using IpTviewr.Services.EpgDiscovery; +using System; +using System.ComponentModel; using System.Threading; -using IpTviewr.UiServices.Common.Controls; +using IpTviewr.Core; namespace IpTviewr.UiServices.EPG { public partial class EpgMiniGuide : CommonBaseUserControl { - private EpgProgram[] EpgPrograms; - private int EpgIndex; - private int CurrentRequestId; + private EpgProgram[] _epgPrograms; + private int _epgIndex; + private int _currentRequestId; private class LoadEpgProgramsData { @@ -58,10 +61,7 @@ public UiBroadcastService SelectedService private set; } // SelectedService - public EpgProgram SelectedProgram - { - get { return (EpgPrograms == null) ? null : EpgPrograms[EpgIndex]; } - } // SelectedProgram + public EpgProgram SelectedProgram => _epgPrograms?[_epgIndex]; public DateTime LocalReferenceTime { @@ -69,7 +69,7 @@ public DateTime LocalReferenceTime private set; } // ReferenceTime - public EpgDatastore Datastore + public EpgDataStore Datastore { get; private set; @@ -120,25 +120,40 @@ public EpgMiniGuide() #region Public methods - public void LoadEpgPrograms(UiBroadcastService service, DateTime localReferenceTime, EpgDatastore datastore, bool async = true) + public void LoadEpgPrograms(UiBroadcastService service, DateTime localReferenceTime, bool async = true) { SelectedService = service; LocalReferenceTime = localReferenceTime.TruncateToMinutes(); - Datastore = datastore; // clean-up UI ClearEpgPrograms(); pictureChannelLogo.SetImage(service?.Logo.GetImage(Configuration.Logos.LogoSize.Size48)); - BeginLoadEpgPrograms(async); + if (Datastore != null) + { + BeginLoadEpgPrograms(async); + } // if } // LoadEpgPrograms + public void SetEpgDataStore(EpgDataStore dataStore, bool async = true) + { + Datastore = dataStore; + if (dataStore != null) + { + BeginLoadEpgPrograms(async); + } + else + { + ClearEpgPrograms(); + } // if-else + } // SetEpgDataStore + public void ClearEpgPrograms() { timerLoadingData.Enabled = false; SetAutoRefreshTimer(false); - EpgPrograms = null; - EpgIndex = -1; + _epgPrograms = null; + _epgIndex = -1; pictureChannelLogo.SetImage(null); @@ -167,10 +182,10 @@ public void RefreshEpgPrograms(DateTime localReferenceTime) public EpgProgram[] GetEpgPrograms() { - if (EpgPrograms == null) return null; + if (_epgPrograms == null) return null; - var result = new EpgProgram[EpgPrograms.Length]; - Array.Copy(EpgPrograms, result, EpgPrograms.Length); + var result = new EpgProgram[_epgPrograms.Length]; + Array.Copy(_epgPrograms, result, _epgPrograms.Length); return result; } // GetEpgPrograms @@ -182,12 +197,12 @@ public void GoTo(int epgIndex) public void GoBack() { - DisplayEpgProgram(EpgIndex - 1); + DisplayEpgProgram(_epgIndex - 1); } // GoBack public void GoForward() { - DisplayEpgProgram(EpgIndex + 1); + DisplayEpgProgram(_epgIndex + 1); } // GoFoward #endregion @@ -251,7 +266,7 @@ private void buttonDisplayChannel_Click(object sender, EventArgs e) ButtonClicked?.Invoke(this, new EpgMiniBarButtonClickedEventArgs(Button.Show)); if (ManualActions) return; - ExternalTvPlayer.ShowTvChannel(ParentForm, SelectedService, true); + ExternalTvPlayer.ShowTvChannel(ParentForm, SelectedService); } // buttonDisplayChannel_Click private void buttonRecordChannel_Click(object sender, EventArgs e) @@ -259,7 +274,7 @@ private void buttonRecordChannel_Click(object sender, EventArgs e) ButtonClicked?.Invoke(this, new EpgMiniBarButtonClickedEventArgs(Button.Record)); if (ManualActions) return; - RecordHelper.RecordProgram(ParentForm as CommonBaseForm, SelectedService, SelectedProgram, LocalReferenceTime, true); + RecordHelper.RecordProgram(ParentForm as CommonBaseForm, SelectedService, SelectedProgram, LocalReferenceTime); } // buttonRecordChannel_Click #endregion @@ -269,7 +284,7 @@ private void buttonRecordChannel_Click(object sender, EventArgs e) private void BeginLoadEpgPrograms(bool async) { if (IsDisabled) return; - if (CurrentRequestId == int.MaxValue) CurrentRequestId = 0; + if (_currentRequestId == int.MaxValue) _currentRequestId = 0; if (async) { @@ -283,10 +298,10 @@ private void BeginLoadEpgPrograms(bool async) var data = new LoadEpgProgramsData() { - RequestId = Interlocked.Increment(ref CurrentRequestId), + RequestId = Interlocked.Increment(ref _currentRequestId), FullServiceName = fullServiceName, FullAlternateServiceName = fullAlternateServiceName, - ReferenceTime = this.LocalReferenceTime + ReferenceTime = LocalReferenceTime }; if (async) @@ -301,12 +316,12 @@ private void BeginLoadEpgPrograms(bool async) private void LoadEpgPrograms(LoadEpgProgramsData data) { - var programs = Datastore.GetPrograms(data.FullServiceName, LocalReferenceTime, 1, 2); + var programs = Datastore?.GetPrograms(data.FullServiceName, LocalReferenceTime, 1, 2); // try alternate service if no EPG data if ((programs == null) && (data.FullAlternateServiceName != null)) { - programs = Datastore.GetPrograms(data.FullAlternateServiceName, LocalReferenceTime, 1, 2); + programs = Datastore?.GetPrograms(data.FullAlternateServiceName, LocalReferenceTime, 1, 2); } // if // populate data @@ -339,13 +354,13 @@ private void LoadEpgProgramsEnded(LoadEpgProgramsData data) { // ignore data if not from current request // as data is loading async, "old" load request may arrive if channel is quickly changed - if (data.RequestId != CurrentRequestId) return; + if (data.RequestId != _currentRequestId) return; timerLoadingData.Enabled = false; SetAutoRefreshTimer(true); - EpgPrograms = data.EpgPrograms; - buttonFullView.Enabled = (EpgPrograms != null); + _epgPrograms = data.EpgPrograms; + buttonFullView.Enabled = (_epgPrograms != null); DisplayEpgProgram((data.EpgPrograms != null)? 1 : 0); } @@ -360,14 +375,14 @@ private void DisplayEpgProgram(int index) TimeSpan ellapsed; if ((index < 0) || (index > 3)) return; - EpgIndex = index; + _epgIndex = index; epgProgressBar.Visible = (index == 1); labelEndTime.Visible = (index == 1); labelStartTime.Visible = (index == 1); labelFromTo.Visible = (index != 1); - var epgProgram = EpgPrograms?[EpgIndex]; + var epgProgram = _epgPrograms?[_epgIndex]; buttonDetails.Enabled = DetailsEnabled && (epgProgram != null) && (!epgProgram.IsBlank); labelProgramTitle.Text = (epgProgram != null) ? epgProgram.Title : Properties.Texts.EpgNoInformation; @@ -381,28 +396,28 @@ private void DisplayEpgProgram(int index) return; } // if - switch (EpgIndex) + switch (_epgIndex) { case 0: labelFromTo.Text = FormatString.DateTimeFromToMinutes(epgProgram.LocalStartTime, epgProgram.LocalEndTime, LocalReferenceTime); ellapsed = (LocalReferenceTime - epgProgram.LocalEndTime); labelEllapsed.Text = string.Format(Properties.Texts.ProgramEnded, FormatString.TimeSpanTotalMinutes(ellapsed, FormatString.Format.Extended)); - EnableBackForward(false, EpgPrograms[1] != null); + EnableBackForward(false, _epgPrograms[1] != null); break; case 1: - labelStartTime.Text = string.Format("{0:HH:mm}", epgProgram.LocalStartTime); - labelEndTime.Text = string.Format("{0:t}", epgProgram.LocalEndTime); + labelStartTime.Text = $"{epgProgram.LocalStartTime:HH:mm}"; + labelEndTime.Text = $"{epgProgram.LocalEndTime:t}"; ellapsed = (LocalReferenceTime - epgProgram.LocalStartTime); epgProgressBar.MaximumValue = epgProgram.Duration.TotalMinutes; epgProgressBar.Value = ellapsed.TotalMinutes; labelEllapsed.Text = string.Format(Properties.Texts.ProgramStarted, FormatString.TimeSpanTotalMinutes(ellapsed, FormatString.Format.Extended)); - EnableBackForward(EpgPrograms[0] != null, EpgPrograms[2] != null); + EnableBackForward(_epgPrograms[0] != null, _epgPrograms[2] != null); break; default: labelFromTo.Text = FormatString.DateTimeFromToMinutes(epgProgram.LocalStartTime, epgProgram.LocalEndTime, LocalReferenceTime); ellapsed = (epgProgram.LocalStartTime - LocalReferenceTime); labelEllapsed.Text = string.Format(Properties.Texts.ProgramWillStart, FormatString.TimeSpanTotalMinutes(ellapsed, FormatString.Format.Extended)); - EnableBackForward(SafeGetItem(EpgPrograms, EpgIndex - 1) != null, SafeGetItem(EpgPrograms, EpgIndex + 1) != null); + EnableBackForward(SafeGetItem(_epgPrograms, _epgIndex - 1) != null, SafeGetItem(_epgPrograms, _epgIndex + 1) != null); break; } // switch } // DisplayEpgProgram @@ -412,16 +427,16 @@ private void GoToNearestIndex(int epgIndex) if (epgIndex < 0) epgIndex = 0; if (epgIndex > 3) epgIndex = 3; - if (EpgPrograms == null) + if (_epgPrograms == null) { DisplayEpgProgram(0); return; } // if // look forward - for (int index=epgIndex; index<4;index++) + for (var index=epgIndex; index<4;index++) { - if (EpgPrograms[index] != null) + if (_epgPrograms[index] != null) { DisplayEpgProgram(index); return; @@ -429,9 +444,9 @@ private void GoToNearestIndex(int epgIndex) } // for // look backwards - for (int index=epgIndex; index>=0;index--) + for (var index=epgIndex; index>=0;index--) { - if (EpgPrograms[index] != null) + if (_epgPrograms[index] != null) { DisplayEpgProgram(index); return; diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.es.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuide.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuide.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.Designer.cs similarity index 86% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.Designer.cs index 717a50e0..234685f2 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.EPG { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.cs new file mode 100644 index 00000000..aa38cce3 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.cs @@ -0,0 +1,23 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.EPG +{ + public partial class EpgMiniGuideButtons : EpgMiniGuide + { + public EpgMiniGuideButtons() + { + InitializeComponent(); + } // constructor + } // class EpgMiniGuideButtons +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.es.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.resx similarity index 99% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.resx index f0807166..4876815a 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideButtons.resx @@ -126,7 +126,7 @@ - 109, 63 + 163, 63 100, 25 @@ -159,7 +159,7 @@ Standard - 3, 63 + 57, 63 100, 25 @@ -201,7 +201,7 @@ Standard - 215, 63 + 269, 63 100, 25 diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideEventArgs.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideEventArgs.cs new file mode 100644 index 00000000..54fa8738 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgMiniGuideEventArgs.cs @@ -0,0 +1,52 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.UiServices.EPG +{ + public class EpgMiniBarButtonClickedEventArgs : EventArgs + { + public EpgMiniBarButtonClickedEventArgs(EpgMiniGuide.Button button) + { + Button = button; + } // constructor + + public EpgMiniGuide.Button Button + { + get; + private set; + } // Button + } // class EpgMiniBarButtonClickedEventArgs + + public class EpgMiniBarNavigationButtonsChangedEventArgs : EventArgs + { + public EpgMiniBarNavigationButtonsChangedEventArgs(bool backEnabled, bool forwardEnabled) + { + IsBackEnabled = backEnabled; + IsForwardEnabled = forwardEnabled; + } // constructor + + public bool IsBackEnabled + { + get; + private set; + } // IsBackEnabled + + public bool IsForwardEnabled + { + get; + private set; + } // IsForwardEnabled + } // class EpgMiniBarNavigationButtonsChangedEventArgs +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.Designer.cs similarity index 90% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.Designer.cs index 35052d62..042eed19 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.EPG { @@ -108,4 +118,4 @@ private void InitializeComponent() private EpgProgramMiniBar EpgProgramNow; private EpgProgramMiniBar EpgProgramThen; } // class EpgNowThenDialog -} // namespace \ No newline at end of file +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.cs new file mode 100644 index 00000000..477d8ebb --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.cs @@ -0,0 +1,56 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Telemetry; +using IpTviewr.Services.EpgDiscovery; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; +using System; +using System.Windows.Forms; +using IpTviewr.UiServices.Common.Forms; + +namespace IpTviewr.UiServices.EPG +{ + public partial class EpgNowThenDialog : CommonBaseForm + { + private UiBroadcastService _service; + private EpgProgram[] _epgPrograms; + private DateTime _referenceTime; + + public EpgNowThenDialog() + { + InitializeComponent(); + } // constructor + + public static void ShowEpgPrograms(UiBroadcastService service, EpgProgram[] epg, IWin32Window owner, DateTime referenceTime) + { + using (var form = new EpgNowThenDialog()) + { + form._service = service; + form._epgPrograms = epg; + form._referenceTime = referenceTime; + form.ShowDialog(owner); + } // using form + } // ShowEpgBasicData + + private void FormBasicEpgData_Load(object sender, EventArgs e) + { + pictureChannelLogo.Image = _service.Logo.GetImage(LogoSize.Size48); + labelChannelName.Text = $"{_service.DisplayLogicalNumber}\r\n{_service.DisplayName}"; + + EpgProgramBefore.DisplayData(_service, (_epgPrograms != null) ? _epgPrograms[0] : null, _referenceTime, Properties.Texts.EpgProgramBeforeCaption); + EpgProgramNow.DisplayData(_service, (_epgPrograms != null) ? _epgPrograms[1] : null, _referenceTime, Properties.Texts.EpgProgramNowCaption); + EpgProgramThen.DisplayData(_service, (_epgPrograms != null) ? _epgPrograms[2] : null, _referenceTime, Properties.Texts.EpgProgramThenCaption); + } // FormBasicEpgData_Load + } // class EpgNowThenDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgNowThenDialog.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgProgramPictureBox.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgProgramPictureBox.cs new file mode 100644 index 00000000..807806c9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgProgramPictureBox.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Services.EpgDiscovery; +using IpTviewr.UiServices.Common.Controls; +using System.Drawing; + +namespace IpTviewr.UiServices.EPG +{ + internal class EpgProgramPictureBox: PictureBoxEx + { + public void LoadProgramImageAsync(EpgProgram epgProgram, bool portrait) + { + if ((epgProgram == null)) // || (!IpTvService.Current.EpgInfo.Capabilities.HasFlag(EpgProviderCapabilities.ProgramThumbnail))) + { + OnProgramImageLoaded(null, portrait); + } + else + { + OnProgramImageLoaded(null, portrait); + // TODO: async load program image + } // if-else + } // LoadProgramImageAsync + + private void OnProgramImageLoaded(Image image, bool portrait) + { + if (image == null) + { + SetImage(portrait ? Properties.Resources.EpgNoProgramImageVertical : Properties.Resources.EpgNoProgramImage); + } + else + { + SetImage(image); + } // if-else + } // OnProgramImageLoaded + } // class EpgProgramPictureBox +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgProgressBarFixed.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgProgressBarFixed.cs new file mode 100644 index 00000000..8e4d0b09 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/EpgProgressBarFixed.cs @@ -0,0 +1,107 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.EPG +{ + public class EpgProgressBarFixed: Control + { + private Image _barBase, _barFilled; + private double _min, _max, _progressValue; + + public EpgProgressBarFixed() + { + _min = 0; + _max = 100; + _progressValue = _min; + } // constructor + + [DefaultValue(0.0)] + public double MinimumValue + { + get => _min; + set + { + if (_min > _max) throw new ArgumentOutOfRangeException(); + _min = value; + if (_progressValue < _min) Value = _min; + } // set + } // MinimumValue + + [DefaultValue(100.0)] + public double MaximumValue + { + get => _max; + set + { + if (_max < _min) throw new ArgumentOutOfRangeException(); + _max = value; + if (_progressValue > _max) Value = _max; + } // set + } // MaximumValue + + public double ValueRange => _max - _min; + + [DefaultValue(0.0)] + public double Value + { + get => _progressValue; + set + { + var old = _progressValue; + _progressValue = value; + if (_progressValue < _min) _progressValue = _min; + if (_progressValue > _max) _progressValue = _max; + if (Math.Abs(_progressValue - old) > 0.01) + { + Invalidate(); + } // if + } // set + } // Value + + protected override void OnCreateControl() + { + base.OnCreateControl(); + _barBase = Properties.Resources.ProgressBarBase; + _barFilled = Properties.Resources.ProgressBarFilled; + } // OnCreateControl + + protected override Size DefaultSize => new Size(125, 20); + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) return; + + _barBase?.Dispose(); + _barFilled?.Dispose(); + _barBase = null; + _barFilled = null; + } // Dispose + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + if (_barBase == null) return; + + var width = (int)(((_progressValue - _min) * _barFilled.Width) / ValueRange); + + e.Graphics.DrawImage(_barFilled, 0, 0, new Rectangle(0, 0, width, _barFilled.Height), GraphicsUnit.Pixel); + e.Graphics.DrawImage(_barBase, width, 0, new Rectangle(width, 0, _barBase.Width - width, _barBase.Height), GraphicsUnit.Pixel); + } // OnPaint + } // class EpgProgressBarFixed +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/LICENSE.ES.MD new file mode 100644 index 00000000..05c6a130 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/LICENSE.ES.MD @@ -0,0 +1,363 @@ +# Biblioteca 'UiServices.EPG' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.Core +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTViewr.Native +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.EpgDiscovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. Services.Record +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. Services.Record.Serialization +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. Services.SqlServerCE +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. UiServices.DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. UiServices.EPG +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 16. UiServices.Forms +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 17. UiServices.Record +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + +#### 4. TaskScheduler +_Paquete 'nuget' por David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/LICENSE.MD new file mode 100644 index 00000000..0270a37a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/LICENSE.MD @@ -0,0 +1,335 @@ +# Library 'UiServices.EPG' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.Core +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTViewr.Native +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.EpgDiscovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. Services.Record +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. Services.Record.Serialization +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. Services.SqlServerCE +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. UiServices.DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. UiServices.EPG +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 16. UiServices.Forms +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 17. UiServices.Record +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + +#### 4. TaskScheduler +_'nuget' package by David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/License.txt b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/License.txt new file mode 100644 index 00000000..2d35cb4c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/License.txt @@ -0,0 +1,339 @@ +############################################################################## +## +## Library 'UiServices.EPG' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.Core +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. IpTViewr.Native +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. Services.EpgDiscovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. Services.Record +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. Services.Record.Serialization +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. Services.SqlServerCE +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. UiServices.DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +15. UiServices.EPG +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +16. UiServices.Forms +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +17. UiServices.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + +4. TaskScheduler +------------------------------ +'nuget' package by David Hall +Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..441cc2ac --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute parameters to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UI Services: EPG")] +[assembly: AssemblyDescription("IpTviewr.UiServices.EPG")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b719e3c6-c6e5-4f3d-a764-1a466bc40402")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/CommonUiResources.Designer.cs new file mode 100644 index 00000000..52fb5305 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/CommonUiResources.Designer.cs @@ -0,0 +1,166 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.EPG.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class CommonUiResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal CommonUiResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.CommonUiResources", typeof(CommonUiResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Back_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Back_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Close_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Close_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Forward_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Forward_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_FullView_16x16 { + get { + object obj = ResourceManager.GetObject("Action_FullView_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Play_LG_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Play_LG_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Properties_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Record_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Record_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/CommonUiResources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/CommonUiResources.resx new file mode 100644 index 00000000..57fd6e29 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/CommonUiResources.resx @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\..\Common.UI\Resources\Action_Cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\Common.UI\Resources\Action_Close_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\Common.UI\Resources\Action_Ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\Common.UI\Resources\Action_Back_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\Common.UI\Resources\Action_Forward_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\Common.UI\Resources\Action_Fullview_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\Common.UI\Resources\Action_Record_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\Common.UI\Resources\Action_Play_LG_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\Common.UI\resources\action_copy_clip_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\Common.UI\resources\action_properties_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/EpgRtf.Designer.cs similarity index 94% rename from 1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/EpgRtf.Designer.cs index 5e0bd718..e0981ac6 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/EpgRtf.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.EPG.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.EPG.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class EpgRtf { diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/EpgRtf.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/EpgRtf.es.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/EpgRtf.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Properties/EpgRtf.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/EpgRtf.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Resources.Designer.cs new file mode 100644 index 00000000..f04921e4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Resources.Designer.cs @@ -0,0 +1,166 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.EPG.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Epg_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Epg_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Epg_Play_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Epg_Play_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Epg_Record_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Epg_Record_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon Epg { + get { + object obj = ResourceManager.GetObject("Epg", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap EpgLoadingProgramImage { + get { + object obj = ResourceManager.GetObject("EpgLoadingProgramImage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap EpgLoadingProgramImageVertical { + get { + object obj = ResourceManager.GetObject("EpgLoadingProgramImageVertical", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap EpgNoProgramImage { + get { + object obj = ResourceManager.GetObject("EpgNoProgramImage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap EpgNoProgramImageVertical { + get { + object obj = ResourceManager.GetObject("EpgNoProgramImageVertical", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ProgressBarBase { + get { + object obj = ResourceManager.GetObject("ProgressBarBase", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ProgressBarFilled { + get { + object obj = ResourceManager.GetObject("ProgressBarFilled", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Resources.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Resources.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Texts.Designer.cs new file mode 100644 index 00000000..e8dc177e --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Texts.Designer.cs @@ -0,0 +1,201 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.EPG.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Loading program information.... + /// + internal static string EpgDataLoading { + get { + return ResourceManager.GetString("EpgDataLoading", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading EPG data.... + /// + internal static string EpgDataLoadingList { + get { + return ResourceManager.GetString("EpgDataLoadingList", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No data. + /// + internal static string EpgNoData { + get { + return ResourceManager.GetString("EpgNoData", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Genre not available. + /// + internal static string EpgNoGenre { + get { + return ResourceManager.GetString("EpgNoGenre", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Program information is not available. + /// + internal static string EpgNoInformation { + get { + return ResourceManager.GetString("EpgNoInformation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Not available. + /// + internal static string EpgNoInformationShort { + get { + return ResourceManager.GetString("EpgNoInformationShort", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Parental rating not available. + /// + internal static string EpgNoParentalRating { + get { + return ResourceManager.GetString("EpgNoParentalRating", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to After. + /// + internal static string EpgProgramAfterCaption { + get { + return ResourceManager.GetString("EpgProgramAfterCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Before. + /// + internal static string EpgProgramBeforeCaption { + get { + return ResourceManager.GetString("EpgProgramBeforeCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Now. + /// + internal static string EpgProgramNowCaption { + get { + return ResourceManager.GetString("EpgProgramNowCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Then. + /// + internal static string EpgProgramThenCaption { + get { + return ResourceManager.GetString("EpgProgramThenCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to There was an error retrieving the list of programs. + /// + internal static string ObtainingListException { + get { + return ResourceManager.GetString("ObtainingListException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ended {0} ago. + /// + internal static string ProgramEnded { + get { + return ResourceManager.GetString("ProgramEnded", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Started {0} ago. + /// + internal static string ProgramStarted { + get { + return ResourceManager.GetString("ProgramStarted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Will start in {0}. + /// + internal static string ProgramWillStart { + get { + return ResourceManager.GetString("ProgramWillStart", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Texts.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Texts.es.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Texts.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Properties/Texts.resx diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/Action_Epg_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/Action_Epg_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Play_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/Action_Epg_Play_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Play_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/Action_Epg_Play_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Record_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/Action_Epg_Record_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/Action_Epg_Record_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/Action_Epg_Record_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/Epg.ico b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/Epg.ico similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/Epg.ico rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/Epg.ico diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/EpgLoadingProgramImage.png b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/EpgLoadingProgramImage.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/EpgLoadingProgramImage.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/EpgLoadingProgramImage.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/EpgLoadingProgramImageVertical.png b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/EpgLoadingProgramImageVertical.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/EpgLoadingProgramImageVertical.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/EpgLoadingProgramImageVertical.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/EpgNoProgramImage.png b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/EpgNoProgramImage.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/EpgNoProgramImage.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/EpgNoProgramImage.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/EpgNoProgramImageVertical.png b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/EpgNoProgramImageVertical.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/EpgNoProgramImageVertical.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/EpgNoProgramImageVertical.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/ProgressBarBase.png b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/ProgressBarBase.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/ProgressBarBase.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/ProgressBarBase.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/Resources/ProgressBarFilled.png b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/ProgressBarFilled.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.EPG/Resources/ProgressBarFilled.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/Resources/ProgressBarFilled.png diff --git a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/UiServices.EPG.csproj similarity index 89% rename from 1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj rename to 1.5 'Kruger 60'/Assemblies/UiServices.EPG/UiServices.EPG.csproj index f38c3365..c309e6d2 100644 --- a/1.5 'Kruger 60'/UiServices.EPG/UiServices.EPG.csproj +++ b/1.5 'Kruger 60'/Assemblies/UiServices.EPG/UiServices.EPG.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.UiServices.EPG UiServices.EPG - v4.5.2 + v4.6.2 512 SAK SAK @@ -38,20 +38,11 @@ - - - False - C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - - - - + Properties\AssemblySolutionInfo.cs @@ -193,6 +184,7 @@ Resources\Action_Properties_16x16.png + @@ -205,25 +197,25 @@ - + + {968C6EEB-1E79-446A-96AE-69CB225E1C37} + IpTViewr.Core + + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} - Core.IpTvProvider + IpTviewr.IpTvServices {b91c438d-0333-4d06-86cd-74ce82df6f40} Etsi.Ts102034 - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common {5a171dbb-855c-452b-93c6-229c7aa6c7a6} - Services.EPG.Serialization - - - {3a053f34-4edf-4071-b966-923255a0ae14} - Services.SqlServerCE + Services.EpgDiscovery {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} @@ -242,6 +234,10 @@ UiServices.Record + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Core + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Record + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record.Serialization + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.SqlServerCE + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Forms + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MIT + David Hall + Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/DiscoveryDialogs.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/DiscoveryDialogs.cs new file mode 100644 index 00000000..ba19b2fb --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/DiscoveryDialogs.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; + +namespace IpTviewr.UiServices.Forms +{ + public static class DiscoveryDialogs + { + public static void ShowServiceProviderDetails(Form parent, UiServiceProvider provider) + { + if (provider == null) throw new ArgumentNullException(nameof(provider)); + + using var dlg = new PropertiesDialog + { + Caption = AppConfig.Current.IpTvService.Texts.Provider.PropertiesCaption, + ItemProperties = provider.DumpProperties(), + Description = provider.DisplayName, + ItemIcon = provider.Logo.GetImage(LogoSize.Size64), + }; + dlg.ShowDialog(parent); + } // ShowServiceProviderDetails + } // class DiscoveryDialogs +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/LICENSE.ES.MD new file mode 100644 index 00000000..fdc1d1ee --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/LICENSE.ES.MD @@ -0,0 +1,201 @@ +# Biblioteca 'UiServices.Forms' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Forms +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/LICENSE.MD new file mode 100644 index 00000000..c129f089 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/LICENSE.MD @@ -0,0 +1,173 @@ +# Library 'UiServices.Forms' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Forms +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/License.txt b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/License.txt new file mode 100644 index 00000000..16d20529 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/License.txt @@ -0,0 +1,182 @@ +############################################################################## +## +## Library 'UiServices.Forms' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® Exception Message Box License Terms + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. UiServices.DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. UiServices.Forms +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.Designer.cs similarity index 95% rename from 1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.Designer.cs index 33a13960..441f9fc3 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Forms { @@ -206,4 +216,4 @@ private void InitializeComponent() private System.Windows.Forms.Timer timerEllapsed; private System.Windows.Forms.Button buttonClose; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.cs new file mode 100644 index 00000000..2bbc4bff --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.cs @@ -0,0 +1,495 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.Forms.Properties; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Drawing; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Forms +{ + //CA1301 Avoid duplicate accelerators Define unique accelerators for the following controls in 'MulticastScannerDialog' that all currently use &C as an accelerator: MulticastScannerDialog.buttonRequestCancel, MulticastScannerDialog.buttonClose. ChannelList MulticastScannerDialog.cs 23 + //This is OK. Both buttons are never active at the same time; in fact, one replaces the other when scan is completed (or cancelled) + [SuppressMessage("Microsoft.Globalization", "CA1301:AvoidDuplicateAccelerators")] + public partial class MulticastScannerDialog : CommonBaseForm + { + private const int UdpMaxDatagramSize = 65535; + private string _formatProgressPercentage; + private string _formatScanningProgress; + private string _formatEllapsedTime; + private BackgroundWorker _worker; + private bool _allowFormToClose; + private DateTime _startTime; + private bool _refreshNeeded; + + #region Inner classes + + public enum ScanResult + { + NotScanned = 0, + Active = 1, + Inactive = 2, + Skipped = 10, + Error = 20 + } // ScanResult + + public class ScanResultEventArgs: EventArgs + { + public ScanResult ScanResult; + public UiBroadcastService Service; + public bool WasInactive; + public bool IsInList; + + public bool IsOk => ((ScanResult == ScanResult.Active) || (ScanResult == ScanResult.Inactive)); + + public bool IsInactive => (ScanResult == ScanResult.Inactive); + } // class ScanResultEventArgs + + public class ScanCompletedEventArgs : EventArgs + { + public bool Cancelled + { + get; + internal set; + } // Cancelled + + public Exception Error + { + get; + internal set; + } // Error + + public bool IsListRefreshNeeded + { + get; + internal set; + } // IsListRefreshNeeded + } // ScanCompletedEventArgs + + private enum ProgressReportKind + { + Started, + Ended, + Progress, + Scanned, + } // ProgressReportKind + + private class Stats + { + public int Active, Inactive, Skipped, Error; + public int Count, Total; + } // class Stats + + private class ProgressData : Stats + { + public ScanResult ScanResult; + public UiBroadcastService Service; + public Image Logo; + public bool WasInactive; + + public ProgressData ShallowClone() + { + return MemberwiseClone() as ProgressData; + } // ShallowClone + } // ProgressData + + #endregion + + public MulticastScannerDialog() + { + InitializeComponent(); + Timeout = 5000; + } // constructor + + public event EventHandler ChannelScanResult; + public event EventHandler ScanCompleted; + + public IEnumerable BroadcastServices + { + get; + set; + } // BroadcastServices + + /// In milliseconds + public int Timeout + { + get; + set; + } // Timeout + + public bool ScanInProgress + { + get; + private set; + } // ScanInProgress + + private int BroadcastServicesCount + { + get; + set; + } // BroadcastServicesCount + + #region Form events + + private void DialogMulticastServiceScanner_Load(object sender, EventArgs e) + { + _formatProgressPercentage = labelProgressPercentage.Text; + _formatScanningProgress = labelScanning.Text; + _formatEllapsedTime = labelEllapsedTime.Text; + + BroadcastServicesCount = BroadcastServices.Count(); + DisplayStats(new Stats() { Total = BroadcastServicesCount }); + labelEllapsedTime.Text = null; + labelServiceName.Text = null; + labelServiceUrl.Text = null; + pictureBoxServiceLogo.Visible = false; + buttonRequestCancel.Enabled = false; + } // DialogMulticastServiceScanner_Load + + private void DialogMulticastServiceScanner_Shown(object sender, EventArgs e) + { + StartScan(); + } // DialogMulticastServiceScanner_Shown + + private void DialogMulticastServiceScanner_FormClosing(object sender, FormClosingEventArgs e) + { + if ((e.CloseReason != CloseReason.UserClosing) && (e.CloseReason != CloseReason.None)) return; + + if (_allowFormToClose) return; + + e.Cancel = true; + CancelScan(); + } // DialogMulticastServiceScanner_FormClosing + + private void DialogMulticastServiceScanner_FormClosed(object sender, FormClosedEventArgs e) + { + Dispose(); + } // DialogMulticastServiceScanner_FormClosed + + #endregion + + private void buttonRequestCancel_Click(object sender, EventArgs e) + { + CancelScan(); + } // buttonRequestCancel_Click + + private void buttonClose_Click(object sender, EventArgs e) + { + _allowFormToClose = true; + Close(); + } // buttonClose_Click + + private void timerEllapsed_Tick(object sender, EventArgs e) + { + DisplayEllapsedTime(); + } // timerEllapsed_Tick + + private void DisplayStats(Stats stats) + { + if (listViewStats.Items.Count == 0) + { + listViewStats.Items.Add(new ListViewItem(new[] { MulticastScanner.Active, "-"})); + listViewStats.Items.Add(new ListViewItem(new[] { MulticastScanner.Dead, "-" })); + listViewStats.Items.Add(new ListViewItem(new[] { MulticastScanner.Error, "-" })); + listViewStats.Items.Add(new ListViewItem(new[] { MulticastScanner.Skipped, "-" })); + listViewStats.Items.Add(new ListViewItem(new[] { MulticastScanner.Total, "-" })); + for (var index = 0; index < listViewStats.Items.Count; index++) + { + listViewStats.Items[index].UseItemStyleForSubItems = false; + listViewStats.Items[index].SubItems[1].Font = labelServiceName.Font; + } // for + } + else + { + listViewStats.Items[0].SubItems[1].Text = stats.Active.ToString("N0"); + listViewStats.Items[1].SubItems[1].Text = stats.Inactive.ToString("N0"); + listViewStats.Items[2].SubItems[1].Text = stats.Error.ToString("N0"); + listViewStats.Items[3].SubItems[1].Text = stats.Skipped.ToString("N0"); + listViewStats.Items[4].SubItems[1].Text = stats.Count.ToString("N0"); + } // if-else + + var progress = (stats.Total > 0) ? stats.Count / ((double)stats.Total) : 1; + labelProgressPercentage.Text = string.Format(_formatProgressPercentage, progress); + progressBar.Value = (int) (progress * 1000); + labelScanning.Text = string.Format(_formatScanningProgress, stats.Count, stats.Total); + } // DisplayStats + + private void DisplayEllapsedTime() + { + var ellapsed = DateTime.Now - _startTime; + var ellapsedRounded = new TimeSpan(ellapsed.Days, ellapsed.Hours, ellapsed.Minutes, ellapsed.Seconds); + + labelEllapsedTime.Text = string.Format(_formatEllapsedTime, ellapsedRounded); + } // DisplayEllapsedTime + + private void StartScan() + { + _refreshNeeded = false; + + _startTime = DateTime.Now; + timerEllapsed.Enabled = true; + DisplayEllapsedTime(); + + _worker = new BackgroundWorker + { + WorkerReportsProgress = true, + WorkerSupportsCancellation = true + }; + _worker.ProgressChanged += Worker_ProgressChanged; + _worker.RunWorkerCompleted += Worker_RunWorkerCompleted; + _worker.DoWork += Worker_DoWork; + ScanInProgress = true; + _worker.RunWorkerAsync(Thread.CurrentThread); + } // StartScan + + private void CancelScan() + { + buttonRequestCancel.Enabled = false; + labelCaption.Text = MulticastScanner.ScanningCancelling; + + _worker.CancelAsync(); + } // CancelScan + + #region Worker events + + private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + timerEllapsed.Enabled = false; + _worker.Dispose(); + _worker = null; + buttonRequestCancel.Enabled = false; + + if (e.Cancelled) + { + labelCaption.Text = MulticastScanner.ScanningCancelled; + } + else if (e.Error == null) + { + labelCaption.Text = MulticastScanner.ScanningCompleted; + } + else if (e.Error != null) + { + labelCaption.Text = MulticastScanner.ScanningError; + HandleException(new ExceptionEventData(e.Error)); + } // if-else + + _allowFormToClose = true; + ScanInProgress = false; + + // replace cancel button with close button + buttonRequestCancel.Visible = false; + buttonClose.Location = buttonRequestCancel.Location; + buttonClose.Size = buttonRequestCancel.Size; + buttonClose.Visible = true; + + if (ScanCompleted != null) + { + var eventArgs = new ScanCompletedEventArgs() + { + Cancelled = e.Cancelled, + Error = e.Error, + IsListRefreshNeeded = _refreshNeeded + }; + ScanCompleted(this, eventArgs); + } // if + } // Worker_RunWorkerCompleted + + private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + ProgressData progress; + + progress = e.UserState as ProgressData; + switch ((ProgressReportKind)e.ProgressPercentage) + { + case ProgressReportKind.Started: + buttonRequestCancel.Enabled = true; + pictureBoxServiceLogo.Visible = true; + break; + case ProgressReportKind.Ended: + buttonRequestCancel.Enabled = false; + labelScanning.Visible = false; + labelServiceName.Visible = false; + labelServiceUrl.Visible = false; + pictureBoxServiceLogo.Visible = false; + ReplaceLogo(null); + DisplayStats(progress); + break; + case ProgressReportKind.Progress: + labelServiceName.Text = progress.Service.DisplayName; + labelServiceUrl.Text = progress.Service.DisplayLocationUrl; + ReplaceLogo(progress.Logo); + DisplayStats(progress); + break; + case ProgressReportKind.Scanned: + NotifyScanResult(progress); + break; + } // switch + } // Worker_ProgressChanged + + private void NotifyScanResult(ProgressData progress) + { + var isInactive = (progress.ScanResult == ScanResult.Inactive); + + if (ChannelScanResult == null) + { + progress.Service.IsInactive = isInactive; + return; + } // if + + var e = new ScanResultEventArgs() + { + ScanResult = progress.ScanResult, + Service = progress.Service, + WasInactive = progress.WasInactive, + }; + + ChannelScanResult(this, e); + + if ((e.WasInactive != isInactive) && (!e.IsInList)) + { + _refreshNeeded = true; + } // if + } // NotifyScanResult + + private void ReplaceLogo(Image newLogo) + { + var currentLogo = pictureBoxServiceLogo.Image; + pictureBoxServiceLogo.Image = newLogo; + currentLogo?.Dispose(); + } // ReplaceLogo + + #endregion + + #region BackgroundWorker DoWork + + private void Worker_DoWork(object sender, DoWorkEventArgs e) + { + ProgressData progress; + byte[] buffer; + + // inherit parent thead culture settings + var parentThread = e.Argument as Thread; + if (parentThread != null) + { + var currentThread = Thread.CurrentThread; + currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case + currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread + } // if + + _worker.ReportProgress((int)ProgressReportKind.Started); + + buffer = new byte[UdpMaxDatagramSize]; + progress = new ProgressData() { Total = BroadcastServicesCount }; + + foreach (var service in BroadcastServices) + { + if (_worker.CancellationPending) break; + + // set progress for current service + progress.ScanResult = ScanResult.NotScanned; + progress.Service = service; + progress.Logo = service.Logo.GetImage(LogoSize.Size64); + progress.WasInactive = progress.Service.IsInactive; + + _worker.ReportProgress((int)ProgressReportKind.Progress, progress.ShallowClone()); + progress.Count++; + + progress.ScanResult = ScanService(service, buffer); + switch (progress.ScanResult) + { + case ScanResult.Active: + progress.Active++; + break; + case ScanResult.Inactive: + progress.Inactive++; + break; + + case ScanResult.Skipped: + progress.Skipped++; + break; + + case ScanResult.Error: + progress.Error++; + break; + } // switch + + _worker.ReportProgress((int)ProgressReportKind.Scanned, progress.ShallowClone()); + } // foreach + + _worker.ReportProgress((int)ProgressReportKind.Ended, progress.ShallowClone()); + e.Cancel = _worker.CancellationPending; + } // Worker_DoWork + + private ScanResult ScanService(UiBroadcastService service, byte[] buffer) + { + Socket s; + + if ((service.Data.ServiceLocation == null) || (service.Data.ServiceLocation.IpMulticastAddress == null)) + { + return ScanResult.Skipped; + } // if + + s = null; + try + { + var multicastData = new MulticastOption(IPAddress.Parse(service.Data.ServiceLocation.IpMulticastAddress.Address), IPAddress.Any); + s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); + s.ReceiveTimeout = Timeout; + s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, multicastData); + s.Bind(new IPEndPoint(IPAddress.Any, service.Data.ServiceLocation.IpMulticastAddress.Port)); + } + catch + { + s?.Dispose(); + s = null; + } // try-catch + + if (s == null) return ScanResult.Error; + + try + { + s.Receive(buffer); + return ScanResult.Active; + } + catch (SocketException ex) + { + if (ex.SocketErrorCode == SocketError.TimedOut) + { + return ScanResult.Inactive; + } + else + { + return ScanResult.Error; + } // if + } + finally + { + s.Close(); + } // finally + } // ScanService + + #endregion + } // class +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerDialog.resx diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs similarity index 94% rename from 1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs index d253cd46..7ea224f3 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Forms { @@ -73,10 +83,10 @@ private void InitializeComponent() 0, 0}); this.numericTimeout.Minimum = new decimal(new int[] { - 250, + 1, 0, 0, - 196608}); + 0}); this.numericTimeout.Name = "numericTimeout"; this.numericTimeout.Value = new decimal(new int[] { 3, @@ -162,7 +172,6 @@ private void InitializeComponent() this.Name = "MulticastScannerOptionsDialog"; this.ShowIcon = false; this.ShowInTaskbar = false; - this.Load += new System.EventHandler(this.MulticastScannerOptionsDialog_Load); ((System.ComponentModel.ISupportInitialize)(this.numericTimeout)).EndInit(); this.groupScanWhat.ResumeLayout(false); this.groupScanWhat.PerformLayout(); @@ -186,4 +195,4 @@ private void InitializeComponent() private System.Windows.Forms.RadioButton radioScanAll; private System.Windows.Forms.Label labelInfo; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.cs new file mode 100644 index 00000000..c3c0b2c3 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.cs @@ -0,0 +1,59 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using IpTviewr.UiServices.Common.Forms; + +namespace IpTviewr.UiServices.Forms +{ + public partial class MulticastScannerOptionsDialog : CommonBaseForm + { + public MulticastScannerOptionsDialog() + { + InitializeComponent(); + } // constructor + + public enum ScanWhatList + { + AllServices, + ActiveServices, + DeadServices + } // ScanWhatList + + /// + /// Timeout, in milliseconds + /// + public int Timeout + { + get; + private set; + } // Timeout + + public ScanWhatList ScanList + { + get; + private set; + } // ScanList + + private void buttonStart_Click(object sender, EventArgs e) + { + Timeout = (int)(numericTimeout.Value * 1000); + + // What + if (radioScanAll.Checked) ScanList = ScanWhatList.AllServices; + else if (radioScanActive.Checked) ScanList = ScanWhatList.ActiveServices; + else if (radioScanDead.Checked) ScanList = ScanWhatList.DeadServices; + else ScanList = ScanWhatList.AllServices; + } // buttonStart_Click + } // AskMulticastScannerDlg +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.resx similarity index 93% rename from 1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.resx index 8ebf0fc5..3371dee0 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/MulticastScannerOptionsDialog.resx @@ -112,20 +112,20 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + True - + Microsoft Sans Serif, 8.25pt, style=Bold - + NoControl @@ -145,7 +145,7 @@ labelCaption - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -175,7 +175,7 @@ labelScanTimeout - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -196,7 +196,7 @@ numericTimeout - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -232,7 +232,7 @@ buttonStart - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -262,7 +262,7 @@ radioScanDead - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupScanWhat @@ -292,7 +292,7 @@ radioScanActive - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupScanWhat @@ -322,7 +322,7 @@ radioScanAll - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 groupScanWhat @@ -346,7 +346,7 @@ groupScanWhat - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -376,7 +376,7 @@ labelInfo - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -412,7 +412,7 @@ buttonRequestCancel - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -439,7 +439,7 @@ pictureIcon - IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.30.0, Culture=neutral, PublicKeyToken=null + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null $this @@ -447,7 +447,7 @@ 7 - + True @@ -456,9 +456,6 @@ 484, 181 - - NoControl - CenterParent @@ -469,6 +466,6 @@ MulticastScannerOptionsDialog - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0e2a8c72 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute parameters to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UI Services: Forms")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Forms")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("02eda313-a279-429c-b594-5219b6394f2a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/CommonUiResources.Designer.cs new file mode 100644 index 00000000..efcc20c2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/CommonUiResources.Designer.cs @@ -0,0 +1,126 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Forms.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class CommonUiResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal CommonUiResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.CommonUiResources", typeof(CommonUiResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Copy_Table { + get { + object obj = ResourceManager.GetObject("Action_Copy_Table", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Properties_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Refresh_Blue_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Refresh_Blue_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Run_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Run_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/CommonUiResources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/CommonUiResources.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Properties/CommonUiResources.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/CommonUiResources.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs new file mode 100644 index 00000000..7a8434de --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs @@ -0,0 +1,75 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Forms.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class DiscoveryTexts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal DiscoveryTexts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.DiscoveryTexts", typeof(DiscoveryTexts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to The refreshing of the list has been cancelled by the user.. + /// + internal static string UserCancelListRefresh { + get { + return ResourceManager.GetString("UserCancelListRefresh", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/DiscoveryTexts.es.resx similarity index 89% rename from 1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/DiscoveryTexts.es.resx index 055cb8ee..85c84adf 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/DiscoveryTexts.es.resx @@ -112,23 +112,11 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - No ha sido posible obtener la lista de proveedores de servicios - - - Obteniendo la lista de proveedores de servicios... - - - Analizando y extrayendo la lista de proveedores... - - - Propiedades del proveedor de servicios - La actualización de la lista ha sido cancelada por el usuario. diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/DiscoveryTexts.resx similarity index 90% rename from 1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/DiscoveryTexts.resx index 2dfa256c..46739caa 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/DiscoveryTexts.resx @@ -112,23 +112,11 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Unable to obtain the list of service providers - - - Obtaining the list of service providers... - - - Parsing and extracting the list of providers... - - - Properties of the service provider - The refreshing of the list has been cancelled by the user. diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/MulticastScanner.Designer.cs similarity index 90% rename from 1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/MulticastScanner.Designer.cs index 1aa35383..724e6233 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/MulticastScanner.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Forms.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.Forms.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class MulticastScanner { diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/MulticastScanner.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/MulticastScanner.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/MulticastScanner.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Properties/MulticastScanner.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/MulticastScanner.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/Resources.Designer.cs new file mode 100644 index 00000000..b2a8e163 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/Resources.Designer.cs @@ -0,0 +1,76 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Forms.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ScanTv_128x128 { + get { + object obj = ResourceManager.GetObject("ScanTv_128x128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/Resources.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Properties/Resources.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Properties/Resources.resx diff --git a/1.5 'Kruger 60'/UiServices.Forms/Resources/128-scan-tv.png b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/128-scan-tv.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Resources/128-scan-tv.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/128-scan-tv.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Cancel_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Cancel_16x16.png new file mode 100644 index 00000000..5fcec020 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Cancel_16x16.png differ diff --git a/1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Copy_Table.png b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Copy_Table.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Copy_Table.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Copy_Table.png diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Ok_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Ok_16x16.png new file mode 100644 index 00000000..caac04de Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Ok_16x16.png differ diff --git a/1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Properties_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Properties_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Properties_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Properties_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Refresh_Blue_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Refresh_Blue_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Refresh_Blue_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Refresh_Blue_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Run_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Run_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Forms/Resources/Action_Run_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/Resources/Action_Run_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.Designer.cs similarity index 93% rename from 1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.Designer.cs index 8895b850..1887285c 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Forms { @@ -138,4 +148,4 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.ImageList imageListProvidersLarge; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.cs new file mode 100644 index 00000000..276ef079 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.cs @@ -0,0 +1,266 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using Etsi.Ts102034.v010501.XmlSerialization; +using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; +using IpTviewr.Common; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; +using IpTviewr.UiServices.Discovery; +using IpTviewr.UiServices.DvbStpClient; +using System; +using System.Drawing; +using System.Linq; +using System.Net; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Forms +{ + public partial class SelectProviderDialog : CommonBaseForm + { + private UiProviderDiscovery _providersDiscovery; + + public SelectProviderDialog() + { + InitializeComponent(); + } // constructor + + public UiServiceProvider SelectedServiceProvider + { + get; + set; + } // SelectedServiceProvider + + private void SelectProviderDialog_Load(object sender, EventArgs e) + { + if (!SafeCall(SelectProviderDialog_Load_Implementation, sender, e)) + { + Close(); + } // if + } // SelectProviderDialog_Load + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + + if (_providersDiscovery != null) return; + SafeCall(LoadServiceProviderList, false, out _); + } // OnShown + + private void listViewServiceProviders_SelectedIndexChanged(object sender, EventArgs e) + { + SafeCall(SelectedIndexChanged); + } // listViewServiceProviders_SelectedIndexChanged + + private void listViewServiceProviders_DoubleClick(object sender, EventArgs e) + { + if (SelectedServiceProvider != null) + { + buttonOk.PerformClick(); + } // if + } // listViewServiceProviders_DoubleClick + + private void buttonRefreshServiceProviderList_Click(object sender, EventArgs e) + { + SafeCall(buttonRefreshServiceProviderList_Click_Implementation, sender, e); + } // buttonRefreshServiceProviderList_Click + + private void buttonProviderDetails_Click(object sender, EventArgs e) + { + SafeCall(buttonProviderDetails_Click_Implementation, sender, e); + } // buttonProviderDetails_Click + + #region Event handlers implemention + + private void SelectProviderDialog_Load_Implementation(object sender, EventArgs e) + { + Text = AppConfig.Current.IpTvService.Texts.Provider.SelectCaption; + if (SelectedServiceProvider == null) + { + SelectedIndexChanged(); + } // if + LoadServiceProviderList(true); + } // SelectProviderDialog_Load_Implementation + + private void buttonRefreshServiceProviderList_Click_Implementation(object sender, EventArgs e) + { + LoadServiceProviderList(false); + } // buttonRefreshServiceProviderList_Click_Implementation + + private void buttonProviderDetails_Click_Implementation(object sender, EventArgs e) + { + if (SelectedServiceProvider == null) return; + + DiscoveryDialogs.ShowServiceProviderDetails(this, SelectedServiceProvider); + } // buttonProviderDetails_Click_Implementation + + #endregion + + public static UiServiceProvider GetLastUserSelectedProvider(string lastSelectedServiceProvider) + { + var lastSelectedProvider = lastSelectedServiceProvider; + if (string.IsNullOrEmpty(lastSelectedProvider)) return null; + + var baseIpAddress = AppConfig.Current.ContentProvider.Bootstrap.MulticastAddress; + var discovery = AppConfig.Current.Cache.LoadXml("ProviderDiscovery", baseIpAddress); + if (discovery == null) return null; + + return UiProviderDiscovery.GetUiServiceProviderFromKey(discovery, lastSelectedProvider); + } // GetLastUserSelectedProvider + + private bool LoadServiceProviderList(bool fromCache) + { + var providerTexts = AppConfig.Current.IpTvService.Texts.Provider; + try + { + var baseIpAddress = AppConfig.Current.ContentProvider.Bootstrap.MulticastAddress; + + // can load from cache? + ProviderDiscoveryRoot discovery = null; + if (fromCache) + { + discovery = AppConfig.Current.Cache.LoadXml("ProviderDiscovery", baseIpAddress); + if (discovery?.ServiceProviderDiscovery == null) + { + return false; + } // if + } // if + + if (discovery == null) + { + var basePort = AppConfig.Current.ContentProvider.Bootstrap.MulticastPort; + + var downloader = new UiDvbStpSimpleDownloader() + { + Request = new UiDvbStpSimpleDownloadRequest() + { + PayloadId = 0x01, + SegmentId = null, // accept any segment + MulticastAddress = IPAddress.Parse(baseIpAddress), + MulticastPort = basePort, + Description = providerTexts.ObtainingList, + DescriptionParsing = providerTexts.ParsingList, + PayloadDataType = typeof(ProviderDiscoveryRoot), + AllowXmlExtraWhitespace = false, + XmlNamespaceReplacer = NamespaceUnification.Replacer, + NoDataTimeout = 60000, // 60 seconds + ReceiveDatagramTimeout = 60000, // 60 seconds + }, + TextUserCancelled = Properties.DiscoveryTexts.UserCancelListRefresh, + TextDownloadException = providerTexts.ListRefreshError, + }; + downloader.Download(this); + if (!downloader.IsOk) return false; + + discovery = downloader.Response.DeserializedPayloadData as ProviderDiscoveryRoot; + AppConfig.Current.Cache.SaveXml("ProviderDiscovery", baseIpAddress, downloader.Response.Version, discovery); + } // if + + _providersDiscovery = new UiProviderDiscovery(discovery); + FillServiceProviderList(); + + return true; + } + catch (Exception ex) + { + HandleException(new ExceptionEventData(providerTexts.ListRefreshError, ex)); + return false; + } // try-catch + } // LoadServiceProviderList + + private void SelectedIndexChanged() + { + if (listViewServiceProviders.SelectedItems.Count > 0) + { + SelectedServiceProvider = listViewServiceProviders.SelectedItems[0].Tag as UiServiceProvider; + } + else + { + SelectedServiceProvider = null; + } // if-else + + buttonProviderDetails.Enabled = (SelectedServiceProvider != null); + buttonOk.Enabled = (SelectedServiceProvider != null); + } // SelectedIndexChanged + + private void FillServiceProviderList() + { + ListViewItem[] listItems; + ListViewItem selectedItem; + int index; + int maxWidth; + + listViewServiceProviders.BeginUpdate(); + listViewServiceProviders.Items.Clear(); + + if (_providersDiscovery == null) + { + listViewServiceProviders.EndUpdate(); + return; + } // if + + listItems = new ListViewItem[_providersDiscovery.Providers.Count()]; + index = 0; + selectedItem = null; + + foreach (var provider in _providersDiscovery.Providers) + { + var item = new ListViewItem(provider.DisplayName) + { + ImageKey = GetProviderLogoKey(provider.Logo) + }; + item.SubItems.Add(provider.DisplayDescription); + item.Tag = provider; + item.Name = provider.Key; + if ((SelectedServiceProvider != null) && (provider.Key == SelectedServiceProvider.Key)) + { + selectedItem = item; + } // if + + listItems[index++] = item; + } // foreach + listViewServiceProviders.Items.AddRange(listItems); + + // trick for calculating the tile size width + // let the ListView do all of the math and item measuring + listViewServiceProviders.View = View.Details; + listViewServiceProviders.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); + maxWidth = listViewServiceProviders.Columns[0].Width; + listViewServiceProviders.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); + maxWidth = Math.Max(maxWidth, listViewServiceProviders.Columns[1].Width); + + listViewServiceProviders.TileSize = new Size(imageListProvidersLarge.ImageSize.Width + 6 + maxWidth, imageListProvidersLarge.ImageSize.Height + 6); + listViewServiceProviders.View = View.Tile; + + listViewServiceProviders.EndUpdate(); + + if (selectedItem == null) return; + + selectedItem.Selected = true; + selectedItem.EnsureVisible(); + } // FillServiceProviderList + + private string GetProviderLogoKey(ProviderLogo logo) + { + if (imageListProvidersLarge.Images.ContainsKey(logo.Key)) return logo.Key; + + using (var image = logo.GetImage(LogoSize.Size32)) + { + imageListProvidersLarge.Images.Add(logo.Key, image); + } // using image + + return logo.Key; + } // GetProviderLogoKey + } // class SelectProviderDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.es.resx similarity index 96% rename from 1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.es.resx index ea80fbfe..6fa17f42 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.es.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Detalles... @@ -129,7 +129,4 @@ &Cerrar - - Selección de proveedor de servicios - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.resx similarity index 93% rename from 1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.resx index 81b2a251..aaa260d3 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/SelectProviderDialog.resx @@ -112,34 +112,35 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + False - + Name - + False - + Description - + Top, Bottom, Left, Right - + Tahoma, 10pt - + 17, 17 - + 32, 32 @@ -149,7 +150,6 @@ 460, 275 - 0 @@ -303,9 +303,9 @@ 0 - + True - + 6, 13 @@ -316,7 +316,7 @@ CenterParent - Select service provider + SelectProviderDialog NameColumn diff --git a/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/UiServices.Forms.csproj similarity index 89% rename from 1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj rename to 1.5 'Kruger 60'/Assemblies/UiServices.Forms/UiServices.Forms.csproj index 6cf9de5c..0932265a 100644 --- a/1.5 'Kruger 60'/UiServices.Forms/UiServices.Forms.csproj +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/UiServices.Forms.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.UiServices.Forms UiServices.Forms - v4.5.2 + v4.6.2 512 SAK SAK @@ -26,6 +26,7 @@ prompt 4 false + 8.0 pdbonly @@ -35,21 +36,19 @@ prompt 4 false + 8.0 - - - - - + Properties\AssemblySolutionInfo.cs + True True @@ -133,6 +132,9 @@ + + + @@ -142,17 +144,17 @@ + + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} + IpTviewr.IpTvServices + - {b91c438d-0333-4d06-86cd-74ce82df6f40} + {B91C438D-0333-4D06-86CD-74CE82DF6F40} Etsi.Ts102034 - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} - Services.Record.Serialization + IpTviewr.Common {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} @@ -163,11 +165,11 @@ UiServices.Config - {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C} UiServices.Discovery - {ba481e42-f570-4d2c-94d4-21c4cce27762} + {BA481E42-F570-4D2C-94D4-21C4CCE27762} UiServices.DvbStpClient diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Forms/licensing.xml b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/licensing.xml new file mode 100644 index 00000000..cdd5c36b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Forms/licensing.xml @@ -0,0 +1,307 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/IRecordingScheduleFragment.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/IRecordingScheduleFragment.cs new file mode 100644 index 00000000..6db72c31 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/IRecordingScheduleFragment.cs @@ -0,0 +1,36 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Services.Record.Serialization; +using System; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Record.Controls +{ + internal interface IRecordingScheduleFragment + { + UserControl UserControl + { + get; + } // UserControl + + RecordScheduleKind Kind + { + get; + } // Kind + + void UpdateStartDate(DateTime startDate); + void SetSchedule(RecordSchedule schedule); + RecordSchedule GetSchedule(); + } // interface IRecordingScheduleFragment +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs similarity index 87% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs index 02a14a3c..463fcc9d 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record.Controls { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs new file mode 100644 index 00000000..b2cd41c5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs @@ -0,0 +1,60 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; +using IpTviewr.Services.Record.Serialization; + +namespace IpTviewr.UiServices.Record.Controls +{ + internal partial class RecordingDailyScheduleFragment : UserControl, IRecordingScheduleFragment + { + private RecordDaily _schedule; + + public RecordingDailyScheduleFragment() + { + InitializeComponent(); + } // constructor + + #region IRecordingScheduleFragment + + public UserControl UserControl => this; + + public RecordScheduleKind Kind => RecordScheduleKind.Daily; + + public void UpdateStartDate(DateTime startDate) + { + _schedule.StartDate = startDate; + } // UpdateStartDate + + public void SetSchedule(RecordSchedule schedule) + { + _schedule = (RecordDaily)schedule; + + numericRecurEvery.Value = _schedule.RecurEveryDays; + } // SetSchedule + + public RecordSchedule GetSchedule() + { + _schedule.RecurEveryDays = (short)numericRecurEvery.Value; + + return _schedule; + } // GetSchedule + + #endregion + + private void SchedulePatternDaily_Load(object sender, EventArgs e) + { + } // SchedulePatternDaily_Load + } // class SchedulePatternDaily +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDailyScheduleFragment.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.Designer.cs similarity index 94% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.Designer.cs index 48c51689..1cd997d4 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record.Controls { @@ -46,18 +56,18 @@ private void InitializeComponent() // // comboQuickSetting // + resources.ApplyResources(this.comboQuickSetting, "comboQuickSetting"); this.comboQuickSetting.BackColor = System.Drawing.SystemColors.Window; this.comboQuickSetting.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboQuickSetting.FormattingEnabled = true; - resources.ApplyResources(this.comboQuickSetting, "comboQuickSetting"); this.comboQuickSetting.Name = "comboQuickSetting"; this.comboQuickSetting.SelectedIndexChanged += new System.EventHandler(this.comboQuickSetting_SelectedIndexChanged); // // dateTimeEndTime // + resources.ApplyResources(this.dateTimeEndTime, "dateTimeEndTime"); this.dateTimeEndTime.CausesValidation = false; this.dateTimeEndTime.Format = System.Windows.Forms.DateTimePickerFormat.Time; - resources.ApplyResources(this.dateTimeEndTime, "dateTimeEndTime"); this.dateTimeEndTime.Name = "dateTimeEndTime"; this.dateTimeEndTime.ShowUpDown = true; this.dateTimeEndTime.ValueChanged += new System.EventHandler(this.dateTimeEndDate_ValueChanged); @@ -65,8 +75,8 @@ private void InitializeComponent() // // dateTimeEndDate // - this.dateTimeEndDate.CausesValidation = false; resources.ApplyResources(this.dateTimeEndDate, "dateTimeEndDate"); + this.dateTimeEndDate.CausesValidation = false; this.dateTimeEndDate.Name = "dateTimeEndDate"; this.dateTimeEndDate.ValueChanged += new System.EventHandler(this.dateTimeEndDate_ValueChanged); this.dateTimeEndDate.Validating += new System.ComponentModel.CancelEventHandler(this.dateTimeEndDate_Validating); diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.cs similarity index 78% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.cs index 9a569b3f..ac80160e 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.cs @@ -1,13 +1,20 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; using System.ComponentModel; -using System.Drawing; -using System.Data; using System.Linq; -using System.Text; using System.Windows.Forms; using IpTviewr.Services.Record.Serialization; using IpTviewr.UiServices.Record.Properties; @@ -17,13 +24,13 @@ namespace IpTviewr.UiServices.Record.Controls { public partial class RecordingDuration : UserControl { - private int ManualUpdate; - private bool AvoidRecursion; - private RecordScheduleKind ScheduleKind; - private DateTime StartDateTime; - private TimeSpan fieldRecordTimeSpan; - private DateTime fieldEndDateTime; - private bool IsScheduledProgram; + private int _manualUpdate; + private bool _avoidRecursion; + private RecordScheduleKind _scheduleKind; + private DateTime _startDateTime; + private TimeSpan _fieldRecordTimeSpan; + private DateTime _fieldEndDateTime; + private bool _isScheduledProgram; public RecordingDuration() { @@ -35,38 +42,33 @@ public RecordingDuration() private TimeSpan RecordTimeSpan { - get - { - return fieldRecordTimeSpan; - } // get + get => _fieldRecordTimeSpan; set { - fieldRecordTimeSpan = value; - if (AvoidRecursion) return; + _fieldRecordTimeSpan = value; + if (_avoidRecursion) return; - AvoidRecursion = true; + _avoidRecursion = true; OnTimeSpanChanged(); OnEndDateTimeChanged(); - AvoidRecursion = false; + _avoidRecursion = false; } // set } // RecordTimeSpan private DateTime EndDateTime { - get - { - return fieldEndDateTime; - } // get + get => _fieldEndDateTime; +// get set { - fieldEndDateTime = value.TruncateToSeconds(1); - if (AvoidRecursion) return; + _fieldEndDateTime = value.TruncateToSeconds(); + if (_avoidRecursion) return; - AvoidRecursion = true; + _avoidRecursion = true; OnEndDateTimeChanged(); OnTimeSpanChanged(); - AvoidRecursion = false; + _avoidRecursion = false; } // set } // EndDateTime @@ -83,7 +85,7 @@ public void SetDuration(DateTime startDateTime, RecordScheduleKind kind, RecordD } else { - IsScheduledProgram = (kind == RecordScheduleKind.RightNow); + _isScheduledProgram = (kind == RecordScheduleKind.RightNow); radioEndDateTime.Checked = true; EndDateTime = duration.EndDateTime.Value; } // if-else @@ -115,24 +117,24 @@ public RecordDuration GetDuration() public void SetStartTime(DateTime startDateTime) { - ManualUpdate++; + _manualUpdate++; - StartDateTime = startDateTime; + _startDateTime = startDateTime; if (!radioEndDateTime.Checked) { - EndDateTime = StartDateTime + RecordTimeSpan; + EndDateTime = _startDateTime + RecordTimeSpan; } else { - RecordTimeSpan = EndDateTime - StartDateTime; + RecordTimeSpan = EndDateTime - _startDateTime; } // if-else - ManualUpdate--; + _manualUpdate--; } // UpdateStartTime public void SetScheduleKind(RecordScheduleKind kind) { - ScheduleKind = kind; + _scheduleKind = kind; OnScheduleKindChanged(); } // SetScheduleKind @@ -147,7 +149,7 @@ private void radio_CheckedChanged(object sender, EventArgs e) private void comboQuickSetting_SelectedIndexChanged(object sender, EventArgs e) { - if (ManualUpdate > 0) return; + if (_manualUpdate > 0) return; if (comboQuickSetting.SelectedItem == null) return; RecordTimeSpan = ((KeyValuePair)comboQuickSetting.SelectedItem).Value; @@ -155,7 +157,7 @@ private void comboQuickSetting_SelectedIndexChanged(object sender, EventArgs e) private void timeSpanLength_ValueChanged(object sender, EventArgs e) { - if (ManualUpdate > 0) return; + if (_manualUpdate > 0) return; RecordTimeSpan = timeSpanLength.Value; } // timeSpanLength_ValueChanged @@ -167,15 +169,15 @@ private void timeSpanLength_Validating(object sender, CancelEventArgs e) { e.Cancel = true; MessageBox.Show(this, ControlTexts.RecordingTimeInvalidTimeSpan, ControlTexts.RecordingTimeValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); - this.Parent.Focus(); - this.Focus(); + Parent.Focus(); + Focus(); } // if RecordTimeSpan = span; } // timeSpanLength_Validating private void dateTimeEndDate_ValueChanged(object sender, EventArgs e) { - if (ManualUpdate > 0) return; + if (_manualUpdate > 0) return; EndDateTime = GetEndDateTime(); } // dateTimeEndDate_ValueChanged @@ -198,9 +200,9 @@ public void OnScheduleKindChanged() { bool showEndMargin; - if (ScheduleKind == RecordScheduleKind.RightNow) + if (_scheduleKind == RecordScheduleKind.RightNow) { - radioTimeSpan.Enabled = !IsScheduledProgram; + radioTimeSpan.Enabled = !_isScheduledProgram; showEndMargin = radioEndDateTime.Checked; } else @@ -232,8 +234,8 @@ private void InitComboQuickSettings(ComboBox combo) combo.DisplayMember = "Key"; combo.ValueMember = "Value"; converter = new TimeSpanConverter(); - linesSeparators = new string[] { "\r\n" }; - lineSeparators = new string[] { " ~ " }; + linesSeparators = new[] { "\r\n" }; + lineSeparators = new[] { " ~ " }; lines = ControlTexts.RecordTimeQuickSettings.Split(linesSeparators, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { @@ -247,15 +249,15 @@ private void UpdateComboQuickSettingsSelection(TimeSpan span) { var q = from index in Enumerable.Range(0, comboQuickSetting.Items.Count) let item = (KeyValuePair)comboQuickSetting.Items[index] - where (TimeSpan)item.Value == span + where item.Value == span select index + 1; var indexToSelect = (q.FirstOrDefault()) - 1; if (indexToSelect != comboQuickSetting.SelectedIndex) { - ManualUpdate++; + _manualUpdate++; comboQuickSetting.SelectedIndex = indexToSelect; - ManualUpdate--; + _manualUpdate--; } // if } // UpdateComboQuickSettingsSelection @@ -264,40 +266,40 @@ private void UpdateUpDownTimeSpan(TimeSpan span) if (span.TotalSeconds <= 0) span = TimeSpan.Zero; if (span.Days > timeSpanLength.MaxDays) span = new TimeSpan(timeSpanLength.MaxDays, 23, 59, 59); - ManualUpdate++; + _manualUpdate++; timeSpanLength.Value = span; RecordTimeSpan = span; - ManualUpdate--; + _manualUpdate--; } // UpdateUpDownTimeSpan private void OnTimeSpanChanged() { - ManualUpdate++; + _manualUpdate++; UpdateComboQuickSettingsSelection(RecordTimeSpan); UpdateUpDownTimeSpan(RecordTimeSpan); - ManualUpdate--; + _manualUpdate--; if (!radioEndDateTime.Checked) { - EndDateTime = StartDateTime + RecordTimeSpan; + EndDateTime = _startDateTime + RecordTimeSpan; } // if } // OnTimeSpanChanged private void OnEndDateTimeChanged() { - ManualUpdate++; + _manualUpdate++; dateTimeEndDate.Value = EndDateTime; dateTimeEndTime.Value = EndDateTime; - ManualUpdate--; + _manualUpdate--; - RecordTimeSpan = EndDateTime - StartDateTime; + RecordTimeSpan = EndDateTime - _startDateTime; } // OnEndDateTimeChanged private DateTime GetEndDateTime() @@ -313,21 +315,21 @@ private void ValidateEndDateTime(DateTimePicker sender, CancelEventArgs e) { TimeSpan span; - span = GetEndDateTime() - StartDateTime; + span = GetEndDateTime() - _startDateTime; if (span.TotalSeconds < 0) { e.Cancel = true; MessageBox.Show(Parent, ControlTexts.RecordingTimeInvalidDateTime, ControlTexts.RecordingTimeValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); - this.Parent.Focus(); - this.Focus(); + Parent.Focus(); + Focus(); return; } // if if (span.TotalSeconds < 60) { e.Cancel = true; MessageBox.Show(Parent, ControlTexts.RecordingTimeInvalidTimeSpan, ControlTexts.RecordingTimeValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); - this.Parent.Focus(); - this.Focus(); + Parent.Focus(); + Focus(); return; } // if if (span.TotalDays > timeSpanLength.MaxDays) @@ -335,8 +337,8 @@ private void ValidateEndDateTime(DateTimePicker sender, CancelEventArgs e) e.Cancel = true; MessageBox.Show(Parent, string.Format(ControlTexts.RecordingTimeDateTimeSpanMaxValue, timeSpanLength.MaxDays), ControlTexts.RecordingTimeValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); - this.Parent.Focus(); - this.Focus(); + Parent.Focus(); + Focus(); } // if } // ValidateEndDateTime diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.es.resx similarity index 88% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.es.resx index acf7fec7..c0e5e790 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.es.resx @@ -112,18 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 179, 17 - - - Utilizar tiempos predeterminados: - + 223, 17 @@ -136,4 +130,19 @@ Especificar el tiempo de grabación: + + 228, 122 + + + minutos + + + 182, 120 + + + 176, 17 + + + Añadir un margen de seguridad: + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.resx index c44c6134..8cfcc31b 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDuration.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingDuration.resx @@ -117,250 +117,250 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 279, 23 - - - 146, 21 - - - - 1 - - - comboQuickSetting + + + NoControl - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 7 - - $this + + timeSpanLength - - 4 + + labelEndMarginSufix + 241, 72 - - 75, 20 - - - 11 + + NoControl - - dateTimeEndTime + + $this - - System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 - + $this - - 5 + + 20, 23 + + + checkBoxEndMargin + + + $this 20, 72 - - 215, 20 - - - 10 + + 40, 20 dateTimeEndDate - - System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this + + 4 - - 6 + + 12 - - True + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl + + 75, 20 - - 0, 49 + + $this - - 198, 17 + + 6, 13 - - 9 + + 253, 20 Specify recording end date and time: - - radioEndDateTime + + 151, 17 - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 8 - - $this + + 11 - - 7 + + dateTimeEndTime - - True + + 165, 122 - - NoControl + + 2 + + + 0, 49 0, 0 - - 151, 17 - - - 2 - - - Specify total record length: - radioTimeSpan - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 8 - - - 20, 23 + + System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 253, 20 + + 15 - - 12 + + 1 - - timeSpanLength + + $this - - IpTviewr.UiServices.Common.Controls.TimeSpanUpDown, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this + + radioEndDateTime 3 - - True + + $this - - NoControl + + Center - - 165, 122 + + 1 - - 43, 13 + + True - - 15 + + True minutes - - labelEndMarginSufix + + $this - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0, 121 - + $this - - 0 + + 113, 17 - - 119, 120 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 40, 20 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Specify total record length: 14 - - Center - - - numericEndMargin + + 215, 20 - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Add safety margin: - + $this - - 1 - - - True - NoControl - - 0, 121 + + NoControl - - 113, 17 + + IpTviewr.UiServices.Common.Controls.TimeSpanUpDown, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 13 - - Add safety margin: + + 146, 21 - - checkBoxEndMargin + + System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 43, 13 + + + RecordingDuration + + + 425, 145 + + + True System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - $this + + comboQuickSetting - - 2 + + numericEndMargin - - True - - - 6, 13 + + 198, 17 - - 425, 145 + + 9 - - RecordingDuration + + True System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 5 + + + 6 + + + 0 + + + 10 + + + 119, 120 + + + 279, 23 + + + True + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs new file mode 100644 index 00000000..1bf85b3c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs @@ -0,0 +1,58 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Record.Controls +{ + partial class RecordingMonthlyScheduleFragment + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // SchedulePatternMonthly + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Name = "SchedulePatternMonthly"; + this.Size = new System.Drawing.Size(300, 150); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs new file mode 100644 index 00000000..81bc991f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs @@ -0,0 +1,54 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; +using IpTviewr.Services.Record.Serialization; + +namespace IpTviewr.UiServices.Record.Controls +{ + internal partial class RecordingMonthlyScheduleFragment : UserControl, IRecordingScheduleFragment + { + private RecordMonthly _schedule; + + public RecordingMonthlyScheduleFragment() + { + InitializeComponent(); + } // constructor + + #region IRecordingScheduleFragment + + public UserControl UserControl => this; + + public RecordScheduleKind Kind => RecordScheduleKind.Monthly; + + public void UpdateStartDate(DateTime startDate) + { + _schedule.StartDate = startDate; + } // UpdateStartDate + + public void SetSchedule(RecordSchedule schedule) + { + _schedule = (RecordMonthly)schedule; + } // SetSchedule + + public RecordSchedule GetSchedule() + { + throw new NotImplementedException(); + // return Schedule + } // GetSchedule + + #endregion + + } // class SchedulePatternMonthly +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.resx new file mode 100644 index 00000000..7080a7d1 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs similarity index 79% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs index 2536cb55..02ca846e 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record.Controls { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs new file mode 100644 index 00000000..e5594c40 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs @@ -0,0 +1,52 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; +using IpTviewr.Services.Record.Serialization; + +namespace IpTviewr.UiServices.Record.Controls +{ + internal partial class RecordingOneTimeScheduleFragment : UserControl, IRecordingScheduleFragment + { + private RecordOneTime _schedule; + + public RecordingOneTimeScheduleFragment() + { + InitializeComponent(); + } // constructor + + #region IRecordingScheduleFragment + + public UserControl UserControl => this; + + public RecordScheduleKind Kind => RecordScheduleKind.OneTime; + + public void UpdateStartDate(DateTime startDate) + { + _schedule.StartDate = startDate; + } // UpdateStartDate + + public void SetSchedule(RecordSchedule schedule) + { + _schedule = (RecordOneTime)schedule; + } // SetSchedule + + public RecordSchedule GetSchedule() + { + return _schedule; + } // GetSchedule + + #endregion + } // class SchedulePatternOneTime +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs similarity index 79% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs index 2a861b8f..bac3192f 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record.Controls { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs new file mode 100644 index 00000000..354f470d --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs @@ -0,0 +1,52 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; +using IpTviewr.Services.Record.Serialization; + +namespace IpTviewr.UiServices.Record.Controls +{ + internal partial class RecordingRightNowScheduleFragment : UserControl, IRecordingScheduleFragment + { + private RecordRightNow _schedule; + + public RecordingRightNowScheduleFragment() + { + InitializeComponent(); + } // constructor + + #region IRecordingScheduleFragment + + public UserControl UserControl => this; + + public RecordScheduleKind Kind => RecordScheduleKind.RightNow; + + public void UpdateStartDate(DateTime startDate) + { + // ignore + } // UpdateStartDate + + public void SetSchedule(RecordSchedule schedule) + { + _schedule = (RecordRightNow)schedule; + } // SetSchedule + + public RecordSchedule GetSchedule() + { + return _schedule; + } // GetSchedule + + #endregion + } // class SchedulePatternRightNow +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingRightNowScheduleFragment.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.Designer.cs similarity index 94% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.Designer.cs index 177a504c..068805ae 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record.Controls { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.cs new file mode 100644 index 00000000..99a5d88c --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.cs @@ -0,0 +1,240 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Windows.Forms; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Record.Properties; +using IpTviewr.Common; + +namespace IpTviewr.UiServices.Record.Controls +{ + public partial class RecordingSchedule : UserControl + { + private int _manualUpdate; + + private IRecordingScheduleFragment _currentFragment; + private readonly IRecordingScheduleFragment[] _scheduleFragments; + private readonly RadioButton[] _radioButtons; + private DateTime _originalDateTime; + + public event EventHandler ScheduleKindChanged; + public event EventHandler DateTimeChanged; + + public class KindChangedEventArgs : EventArgs + { + public KindChangedEventArgs(RecordScheduleKind kind) + { + Kind = kind; + } // constructor + + public RecordScheduleKind Kind + { + get; + private set; + } // Kind + } // KindChangedEventArgs + + public class DateTimeChangedEventArgs : EventArgs + { + public DateTimeChangedEventArgs(DateTime dateTime) + { + DateTime = dateTime; + } // constructor + + public DateTime DateTime + { + get; + private set; + } // DateTime + } // class DateTimeChangedEventArgs + + public RecordingSchedule() + { + InitializeComponent(); + + _scheduleFragments = new IRecordingScheduleFragment[4]; // 5 + _scheduleFragments[0] = fragmentRightNow; + _scheduleFragments[1] = fragmentOneTime; + _scheduleFragments[2] = fragmentDaily; + _scheduleFragments[3] = fragmentWeekly; + //ScheduleFragments[4] = fragmentMonthly; + + _radioButtons = new RadioButton[4]; // 5 + _radioButtons[0] = radioRightNow; + _radioButtons[1] = radioOneTime; + _radioButtons[2] = radioDaily; + _radioButtons[3] = radioWeekly; + //RadioButtons[4] = radioMonthly; + } // constructor + + public void SetSchedule(RecordSchedule schedule, bool isNew) + { + if ((schedule.Kind == RecordScheduleKind.RightNow) && (!isNew)) + { + throw new InvalidOperationException("A 'RightNow' recording task can not be edited!"); + } // if + + _originalDateTime = schedule.StartDate; + + foreach (var fragment in _scheduleFragments) + { + if (schedule.Kind == fragment.Kind) fragment.SetSchedule(schedule); + else fragment.SetSchedule(RecordSchedule.CreateWithDefaultValues(fragment.Kind)); + } // foreach + + foreach (var radio in _radioButtons) + { + var kind = (RecordScheduleKind)radio.Tag; + radio.Checked = (schedule.Kind == kind); + // if we're editing an existing record task, we can't set its type as 'Right now' + radio.Enabled = isNew ? true : (kind != RecordScheduleKind.RightNow); + } // foreach + + SetPatternKind(schedule.Kind); + } // SetSchedule + + public RecordSchedule GetSchedule() + { + return _currentFragment.GetSchedule(); + } // GetSchedule + + private void SchedulePattern_Load(object sender, EventArgs e) + { + _manualUpdate++; + + panelPlaceholder.Visible = false; + for(var index=0; index<_scheduleFragments.Length; index++) + { + var control = _scheduleFragments[index]; + control.UserControl.Location = panelPlaceholder.Location; + control.UserControl.Size = panelPlaceholder.Size; + control.UserControl.Visible = false; + + _radioButtons[index].Tag = control.Kind; + _radioButtons[index].Enabled = false; + } // foreach + + // init DateTimePicker controls with a default date/time + // once the RecordSchedule object is set, we will use the date/time specified in the schedule + var oneTime = new RecordOneTime(); + oneTime.SetDefaultValues(); + dateTimeStartDate.Value = oneTime.StartDate; + dateTimeStartTime.Value = oneTime.StartDate; + + _manualUpdate--; + } // SchedulePattern_Load + + private void radioButton_CheckedChanged(object sender, EventArgs e) + { + RecordScheduleKind selectedKind; + bool canSelectDateTime; + + if (_manualUpdate> 0) return; + + selectedKind = (RecordScheduleKind)((RadioButton)sender).Tag; + canSelectDateTime = (selectedKind != RecordScheduleKind.RightNow); + + dateTimeStartDate.Enabled = canSelectDateTime; + dateTimeStartTime.Enabled = canSelectDateTime; + + _manualUpdate++; + + dateTimeStartDate.Value = _originalDateTime; + dateTimeStartTime.Value = _originalDateTime; + + _manualUpdate--; + + StartTimerUpdateRightNow(selectedKind == RecordScheduleKind.RightNow); + + SetPatternKind(selectedKind); + StartDateChanged(); + } // radioButton_CheckedChanged + + private void dateTimeStart_ValueChanged(object sender, EventArgs e) + { + if (_manualUpdate > 0) return; + + StartDateChanged(); + } // dateTimeStart_ValueChanged + + private void dateTimeStartDate_Validating(object sender, CancelEventArgs e) + { + var date = dateTimeStartDate.Value; + var time = dateTimeStartTime.Value; + var startDate = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); + + if (startDate < DateTime.Now) + { + e.Cancel = true; + MessageBox.Show(Parent, ControlTexts.RecordingInvalidStartDateTime, ControlTexts.RecordingScheduleValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + Parent.Focus(); + Focus(); + } // if + } // dateTimeStartDate_Validating + + private void timerUpdateRightNow_Tick(object sender, EventArgs e) + { + UpdateStartTimeRightNow(); + } // timerUpdateRightNow_Tick + + private void SetPatternKind(RecordScheduleKind kind) + { + foreach (var patternControl in _scheduleFragments) + { + if (patternControl.Kind == kind) + { + if (_currentFragment != null) _currentFragment.UserControl.Visible = false; + patternControl.UserControl.Visible = true; + _currentFragment = patternControl; + break; + } // if + } // foreach + + ScheduleKindChanged?.Invoke(this, new KindChangedEventArgs(kind)); + } // SetPatternKind + + private void StartDateChanged() + { + var date = dateTimeStartDate.Value; + var time = dateTimeStartTime.Value; + var startDate = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); + + foreach (var fragment in _scheduleFragments) + { + fragment.UpdateStartDate(startDate); + } // foreach + + DateTimeChanged?.Invoke(this, new DateTimeChangedEventArgs(startDate)); + } // StartDateChanged + + private void StartTimerUpdateRightNow(bool start) + { + timerUpdateRightNow.Enabled = start; + if (start) UpdateStartTimeRightNow(); + } // StartTimerUpdateRightNow + + private void UpdateStartTimeRightNow() + { + _manualUpdate++; + + var now = DateTime.Now.TruncateToSeconds(5); + dateTimeStartDate.Value = now; + + _manualUpdate--; + + dateTimeStartTime.Value = now; + } // UpdateStartTimeRightNow + } // class namespace +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingSchedule.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs similarity index 90% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs index cb338c9f..4e3b439a 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record.Controls { diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs new file mode 100644 index 00000000..435c2272 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs @@ -0,0 +1,129 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; +using System.Windows.Forms; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Record.Properties; + +namespace IpTviewr.UiServices.Record.Controls +{ + internal partial class RecordingWeeklyScheduleFragment : UserControl, IRecordingScheduleFragment + { + private RecordWeekly _schedule; + private RecordWeekDays[] _listIndexDay; + + public RecordingWeeklyScheduleFragment() + { + InitializeComponent(); + } // constructor + + #region IRecordingScheduleFragment + + public UserControl UserControl => this; + + public RecordScheduleKind Kind + // ScheduleKind + => + RecordScheduleKind.Weekly; + + public void UpdateStartDate(DateTime startDate) + { + _schedule.StartDate = startDate; + } // UpdateStartDate + + public void SetSchedule(RecordSchedule schedule) + { + _schedule = (RecordWeekly)schedule; + + numericRecurEvery.Value = _schedule.RecurEveryWeeks; + for (var index = 0; index < _listIndexDay.Length; index++) + { + checkedListDays.SetItemChecked(index, (_schedule.WeekDays & _listIndexDay[index]) != 0); + } // for index + } // SetSchedule + + public RecordSchedule GetSchedule() + { + _schedule.RecurEveryWeeks = (short)numericRecurEvery.Value; + + _schedule.WeekDays = default(RecordWeekDays); + for (var index = 0; index < checkedListDays.CheckedIndices.Count; index++) + { + _schedule.WeekDays |= _listIndexDay[checkedListDays.CheckedIndices[index]]; + } // for + + return _schedule; + } // GetSchedule + + #endregion + + private void SchedulePatternWeekly_Load(object sender, EventArgs e) + { + var culture = System.Threading.Thread.CurrentThread.CurrentCulture; + var info = culture.DateTimeFormat; + var dayNames = info.DayNames; + _listIndexDay = new RecordWeekDays[7]; + + for (int index = 0, day = (int)info.FirstDayOfWeek; index < dayNames.Length; index++) + { + var dayName = dayNames[day]; + dayName = char.ToUpper(dayName[0], culture) + dayName.Substring(1, dayName.Length - 1); + checkedListDays.Items.Add(dayName); + + _listIndexDay[index] = RecordWeekly.ToRecordWeekDays((DayOfWeek)day); + day = (day + 1) % 7; + } // for + } // SchedulePatternWeekly_Load + + private void checkAllDays_CheckedChanged(object sender, EventArgs e) + { + if (checkAllDays.CheckState == CheckState.Indeterminate) return; + + var checkState = checkAllDays.CheckState; + for (var index = 0; index < checkedListDays.Items.Count; index++) + { + checkedListDays.SetItemCheckState(index, checkState); + } // for + } // checkAllDays_CheckedChanged + + private void checkedListDays_ItemCheck(object sender, ItemCheckEventArgs e) + { + var checkCount = checkedListDays.CheckedItems.Count; + checkCount += (e.NewValue == CheckState.Checked) ? 1 : -1; + if (checkCount == checkedListDays.Items.Count) + { + checkAllDays.CheckState = CheckState.Checked; + } + else + { + checkAllDays.CheckState = (checkCount == 0)? CheckState.Unchecked : CheckState.Indeterminate; + } // if-else + } // checkedListDays_ItemCheck + + private void checkedListDays_Validating(object sender, CancelEventArgs e) + { + e.Cancel = false; + if (!Visible) return; + + if (checkedListDays.CheckedIndices.Count == 0) + { + e.Cancel = true; + MessageBox.Show(this, ControlTexts.WeeklyScheduleNoDays, ControlTexts.RecordingScheduleValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + Focus(); + checkedListDays.Focus(); + } // if + } // checkedListDays_Validating + } // class SchedulePatternWeekly +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Record/LICENSE.ES.MD new file mode 100644 index 00000000..da9b1d42 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/LICENSE.ES.MD @@ -0,0 +1,351 @@ +# Biblioteca 'UiServices.Record' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. Services.EpgDiscovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.Record +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. Services.Record.Serialization +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. Services.SqlServerCE +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. UiServices.DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. UiServices.Forms +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. UiServices.Record +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + +#### 4. TaskScheduler +_Paquete 'nuget' por David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/UiServices.Record/LICENSE.MD new file mode 100644 index 00000000..fa192a53 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/LICENSE.MD @@ -0,0 +1,323 @@ +# Library 'UiServices.Record' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. Services.EpgDiscovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.Record +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. Services.Record.Serialization +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. Services.SqlServerCE +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. UiServices.DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. UiServices.Forms +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. UiServices.Record +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + +#### 4. TaskScheduler +_'nuget' package by David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/License.txt b/1.5 'Kruger 60'/Assemblies/UiServices.Record/License.txt new file mode 100644 index 00000000..f04b5a37 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/License.txt @@ -0,0 +1,329 @@ +############################################################################## +## +## Library 'UiServices.Record' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.IpTvServices +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. Services.EpgDiscovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. Services.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. Services.Record.Serialization +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. Services.SqlServerCE +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. UiServices.DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. UiServices.Forms +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +15. UiServices.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + +4. TaskScheduler +------------------------------ +'nuget' package by David Hall +Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..60474131 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute parameters to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UI Services: Record")] +[assembly: AssemblyDescription("IpTviewr.UiServices.Record")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("cc6cd171-a739-43b5-b239-3864b3c78852")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/ControlTexts.Designer.cs similarity index 91% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/ControlTexts.Designer.cs index 5ff0dc75..3777165a 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/ControlTexts.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.Record.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class ControlTexts { diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/ControlTexts.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/ControlTexts.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/ControlTexts.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/ControlTexts.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/ControlTexts.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/RecordChannel.Designer.cs similarity index 93% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/RecordChannel.Designer.cs index ac61487a..480865c8 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/RecordChannel.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.Record.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class RecordChannel { diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/RecordChannel.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/RecordChannel.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/RecordChannel.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/RecordChannel.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/RecordChannel.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/Resources.Designer.cs new file mode 100644 index 00000000..19afe767 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/Resources.Designer.cs @@ -0,0 +1,196 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Record.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Record.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Delete_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_EditTask_16x16 { + get { + object obj = ResourceManager.GetObject("Action_EditTask_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Play_LG_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Play_LG_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Record_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Record_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_RecordButton_16x16 { + get { + object obj = ResourceManager.GetObject("Action_RecordButton_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Icon_Record_48x48 { + get { + object obj = ResourceManager.GetObject("Icon_Record_48x48", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon Icon_Recorder { + get { + object obj = ResourceManager.GetObject("Icon_Recorder", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized string similar to The selected TV channel has been marked as inactive and might not be available. + /// + ///Do you still want to schedule a recording of {0}?. + /// + internal static string RecordDeadTvChannel { + get { + return ResourceManager.GetString("RecordDeadTvChannel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The recording task has been sucessfully created.. + /// + internal static string SchedulerCreateTaskOk { + get { + return ResourceManager.GetString("SchedulerCreateTaskOk", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Info_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Info_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Warning_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Warning_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/Resources.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/Resources.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/Resources.es.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/Resources.resx new file mode 100644 index 00000000..bff778e5 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/Resources.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\..\common.ui\resources\action_cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_edittask_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\common.ui\resources\action_play_lg_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\action_record_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\icon_recorder.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\icon_record_48x48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + The selected TV channel has been marked as inactive and might not be available. + +Do you still want to schedule a recording of {0}? + + + The recording task has been sucessfully created. + + + ..\resources\status_info_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\status_warning_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\action_recordbutton_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/TasksTexts.Designer.cs similarity index 93% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/TasksTexts.Designer.cs index 4dd4566e..a52226bd 100644 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/TasksTexts.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.UiServices.Record.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class TasksTexts { diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/TasksTexts.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/TasksTexts.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/TasksTexts.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Properties/TasksTexts.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Properties/TasksTexts.resx diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Advanced.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Advanced.cs new file mode 100644 index 00000000..de89dd7a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Advanced.cs @@ -0,0 +1,183 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using System; +using System.ComponentModel; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Record +{ + partial class RecordChannelDialog + { + private bool _isTaskNameUserProvided; + + #region "Advanced" tab events / setup & get data + + private void InitAdvancedData() + { + // task name + if (string.IsNullOrEmpty(Task.Description.TaskSchedulerName)) + { + // When the SetSchedule method of the RecordingSchedule is called, it will fire a DateTime changed event. + // As we capture this event to adjust the task name, there's no need to call UpdateTaskName() again + // UpdateTaskName(schedulePattern.Pattern.StartDateTime); + } + else + { + _isTaskNameUserProvided = true; + textTaskName.Text = Task.Description.TaskSchedulerName; + } // if-else + textTaskName.Enabled = IsNewTask; + checkAddTaskPrefix.Enabled = IsNewTask; + checkAddTaskPrefix.Checked = Task.Description.AddPrefix; + + // task folder + comboSchedulerFolder.DisplayMember = "Name"; + comboSchedulerFolder.ValueMember = "Path"; + var folders = AppConfig.Current.User.Record.TaskSchedulerFolders; + if (folders != null) + { + comboSchedulerFolder.Items.AddRange(folders); + } // if + comboSchedulerFolder.Items.Add(new RecordTaskSchedulerFolder(Properties.RecordChannel.TaskSchedulerRootFolder, "")); + comboSchedulerFolder.SelectedIndex = 0; + comboSchedulerFolder.Enabled = IsNewTask; + + checkSchedulerASAP.Checked = Task.AdvancedSettings.AsSoonAsPossible; + + checkSchedulerRetry.Checked = Task.AdvancedSettings.FailureRetry.Enabled && (Task.AdvancedSettings.FailureRetry.MaxRetries > 0); + timeSpanSchedulerRetry.Value = Task.AdvancedSettings.FailureRetry.RestartInterval; + numericSchedulerMaxRetries.Value = Task.AdvancedSettings.FailureRetry.MaxRetries; + + checkSchedulerDeleteTask.Checked = Task.AdvancedSettings.DeleteAfter.Enabled; + timeSpanSchedulerDeleteTaskAfter.Value = Task.AdvancedSettings.DeleteAfter.Time; + + switch (Task.AdvancedSettings.MultipleInstances) + { + case RecordMultipleInstances.RecordBoth: comboSchedulerAlreadyRunning.SelectedIndex = 0; break; // Run in paralel (record both) + case RecordMultipleInstances.DoNotRecord: comboSchedulerAlreadyRunning.SelectedIndex = 1; break; // Do not record (continue previous recording) + case RecordMultipleInstances.Queue: comboSchedulerAlreadyRunning.SelectedIndex = 2; break; // Wait for previous recording to end and start recording + case RecordMultipleInstances.StopPrevious: comboSchedulerAlreadyRunning.SelectedIndex = 3; break; // Stop previous recording and proceed + default: + comboSchedulerAlreadyRunning.SelectedIndex = -1; break; + } // switch + } // InitAdvancedData + + private void GetAdvancedData() + { + Task.Description.Name = textTaskName.Text.Trim(); + Task.Description.AddPrefix = checkAddTaskPrefix.Checked; + + // Task scheduler folder + if (comboSchedulerFolder.SelectedIndex < 0) + { + Task.AdvancedSettings.TaskSchedulerFolder = null; + } + else + { + Task.AdvancedSettings.TaskSchedulerFolder = (comboSchedulerFolder.SelectedItem as RecordTaskSchedulerFolder).Path; + } // if-else + + // ASAP + Task.AdvancedSettings.AsSoonAsPossible = checkSchedulerASAP.Checked & checkSchedulerASAP.Enabled; + + // Retry + Task.AdvancedSettings.FailureRetry.Enabled = checkSchedulerRetry.Checked & checkSchedulerRetry.Enabled; + Task.AdvancedSettings.FailureRetry.RestartInterval = timeSpanSchedulerRetry.Value; + Task.AdvancedSettings.FailureRetry.MaxRetries = (int)numericSchedulerMaxRetries.Value; + + // Delete after + Task.AdvancedSettings.DeleteAfter.Enabled = checkSchedulerDeleteTask.Checked && checkSchedulerDeleteTask.Enabled; + Task.AdvancedSettings.DeleteAfter.Time = timeSpanSchedulerDeleteTaskAfter.Value; + + // Max execution time + // TODO: no UI yet! + // Remember: + //Task.AdvancedSettings.ExecutionTimeLimit.Enabled = checkSchedulerExecutionLimit.Checked; + //Task.AdvancedSettings.ExecutionTimeLimit.Time = timeSpanSchedulerExecutionLimit.Value; + Task.AdvancedSettings.ExecutionTimeLimit.Enabled = true; // (Task.Schedule.Kind != RecordScheduleKind.RightNow); // use default time limit + + // Wake up computer + // TODO: no UI yet! + Task.AdvancedSettings.WakeComputer = true; + + // Multiple instances + switch (comboSchedulerAlreadyRunning.SelectedIndex) + { + default: + case 0: Task.AdvancedSettings.MultipleInstances = RecordMultipleInstances.RecordBoth; break; // Run in paralel (record both) + case 1: Task.AdvancedSettings.MultipleInstances = RecordMultipleInstances.DoNotRecord; break; // Do not record (continue previous recording) + case 2: Task.AdvancedSettings.MultipleInstances = RecordMultipleInstances.Queue; break; // Wait for previous recording to end and start recording + case 3: Task.AdvancedSettings.MultipleInstances = RecordMultipleInstances.StopPrevious; break; // Stop previous recording and proceed + } // switch + } // GetAdvancedData + + private void textTaskName_TextChanged(object sender, EventArgs e) + { + _isTaskNameUserProvided = true; + } // textTaskName_TextChanged + + private void textTaskName_Validating(object sender, CancelEventArgs e) + { + var text = textTaskName.Text.Trim(); + + e.Cancel = (text.Length == 0); + if (e.Cancel) + { + ControlValidationFailed(Properties.RecordChannel.EmptyTaskName, sender as Control); + return; + } // if + + e.Cancel = (text.Length > RecordTaskSerialization.MaxTaskNameLength); + if (e.Cancel) + { + ControlValidationFailed(string.Format(Properties.RecordChannel.TooLongTaskName, RecordTaskSerialization.MaxTaskNameLength), sender as Control); + return; + } // if + } // textTaskName_Validating + + private void UpdateTaskName() + { + if (_isTaskNameUserProvided) return; + + var taskName = RecordDescription.CreateTaskName(Task.Channel, _currentStartDateTime); + textTaskName.SetText(taskName, false); + } // UpdateTaskName + + private void checkSchedulerRetry_CheckedChanged(object sender, EventArgs e) + { + var enabled = checkSchedulerRetry.Checked; + + checkSchedulerRetry.Enabled = enabled; + timeSpanSchedulerRetry.Enabled = enabled; + labelSchedulerMaxRetries.Enabled = enabled; + numericSchedulerMaxRetries.Enabled = enabled; + } // checkSchedulerRetry_CheckedChanged + + private void checkSchedulerDeleteTask_CheckedChanged(object sender, EventArgs e) + { + EnableSchedulerDeleteTask(true); + } // checkSchedulerDeleteTask_CheckedChanged + + private void EnableSchedulerDeleteTask(bool enable) + { + checkSchedulerDeleteTask.Enabled = enable; + timeSpanSchedulerDeleteTaskAfter.Enabled = checkSchedulerDeleteTask.Checked & enable; + } // EnableSchedulerDeleteTask + + #endregion + } // partial class RecordChannelDialog +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Description.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Description.cs new file mode 100644 index 00000000..0ed75f3a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Description.cs @@ -0,0 +1,42 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Services.Record.Serialization; +using System; + +namespace IpTviewr.UiServices.Record +{ + partial class RecordChannelDialog + { + #region "Description" tab events / setup & get data + + private void InitDescriptionData() + { + textTaskDescription.Text = Task.Description.Description; + checkAppendRecordingDetails.Checked = Task.Description.AddDetails; + } // InitDescriptionData + + private void GetDescriptionData() + { + if (Task.Schedule.Kind == RecordScheduleKind.RightNow) + { + _currentStartDateTime = DateTime.Now; + UpdateTaskName(); + } // if + Task.Description.Description = textTaskDescription.Text.Trim(); + Task.Description.AddDetails = checkAppendRecordingDetails.Checked; + } // GetDescriptionData + + #endregion + } // partial class RecordChannelDialog +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Designer.cs similarity index 96% rename from 1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Designer.cs index a9b325d6..22f95c66 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record { @@ -74,7 +84,7 @@ private void InitializeComponent() this.checkSchedulerASAP = new System.Windows.Forms.CheckBox(); this.comboSchedulerFolder = new System.Windows.Forms.ComboBox(); this.labelSchedulerFolder = new System.Windows.Forms.Label(); - this.selectFolder = new IpTviewr.UiServices.Common.Controls.SelectFolderDialog(); + this.selectFolder = new IpTviewr.Native.WinForms.SelectFolderDialog(); this.labelProgramSchedule = new System.Windows.Forms.Label(); this.labelProgramDescription = new System.Windows.Forms.Label(); this.labelChannelName = new System.Windows.Forms.Label(); @@ -130,20 +140,20 @@ private void InitializeComponent() // // tabPageSchedule // + resources.ApplyResources(this.tabPageSchedule, "tabPageSchedule"); this.tabPageSchedule.Controls.Add(this.dateTimeExpiryDate); this.tabPageSchedule.Controls.Add(this.checkBoxExpiryDate); this.tabPageSchedule.Controls.Add(this.labelStartMarginSufix); this.tabPageSchedule.Controls.Add(this.numericStartMargin); this.tabPageSchedule.Controls.Add(this.checkBoxStartMargin); this.tabPageSchedule.Controls.Add(this.recordingSchedule); - resources.ApplyResources(this.tabPageSchedule, "tabPageSchedule"); this.tabPageSchedule.Name = "tabPageSchedule"; this.tabPageSchedule.UseVisualStyleBackColor = true; // // dateTimeExpiryDate // - this.dateTimeExpiryDate.CausesValidation = false; resources.ApplyResources(this.dateTimeExpiryDate, "dateTimeExpiryDate"); + this.dateTimeExpiryDate.CausesValidation = false; this.dateTimeExpiryDate.Name = "dateTimeExpiryDate"; // // checkBoxExpiryDate @@ -184,27 +194,27 @@ private void InitializeComponent() // // tabPageLength // - this.tabPageLength.Controls.Add(this.recordingTime); resources.ApplyResources(this.tabPageLength, "tabPageLength"); + this.tabPageLength.Controls.Add(this.recordingTime); this.tabPageLength.Name = "tabPageLength"; this.tabPageLength.UseVisualStyleBackColor = true; // // recordingTime // + resources.ApplyResources(this.recordingTime, "recordingTime"); this.recordingTime.AutoValidate = System.Windows.Forms.AutoValidate.Disable; this.recordingTime.CausesValidation = false; - resources.ApplyResources(this.recordingTime, "recordingTime"); this.recordingTime.Name = "recordingTime"; // // tabPageSave // + resources.ApplyResources(this.tabPageSave, "tabPageSave"); this.tabPageSave.Controls.Add(this.listViewLocations); this.tabPageSave.Controls.Add(this.buttonSelectFolder); this.tabPageSave.Controls.Add(this.comboFileExtension); this.tabPageSave.Controls.Add(this.textFilename); this.tabPageSave.Controls.Add(this.labelFilename); this.tabPageSave.Controls.Add(this.labelSaveLocation); - resources.ApplyResources(this.tabPageSave, "tabPageSave"); this.tabPageSave.Name = "tabPageSave"; this.tabPageSave.UseVisualStyleBackColor = true; // @@ -268,10 +278,10 @@ private void InitializeComponent() // // tabPageDescription // + resources.ApplyResources(this.tabPageDescription, "tabPageDescription"); this.tabPageDescription.Controls.Add(this.checkAppendRecordingDetails); this.tabPageDescription.Controls.Add(this.textTaskDescription); this.tabPageDescription.Controls.Add(this.labelTaskDescription); - resources.ApplyResources(this.tabPageDescription, "tabPageDescription"); this.tabPageDescription.Name = "tabPageDescription"; this.tabPageDescription.UseVisualStyleBackColor = true; // @@ -295,6 +305,7 @@ private void InitializeComponent() // // tabPageAdvanced // + resources.ApplyResources(this.tabPageAdvanced, "tabPageAdvanced"); this.tabPageAdvanced.Controls.Add(this.checkAddTaskPrefix); this.tabPageAdvanced.Controls.Add(this.labelTaskName); this.tabPageAdvanced.Controls.Add(this.textTaskName); @@ -309,7 +320,6 @@ private void InitializeComponent() this.tabPageAdvanced.Controls.Add(this.checkSchedulerASAP); this.tabPageAdvanced.Controls.Add(this.comboSchedulerFolder); this.tabPageAdvanced.Controls.Add(this.labelSchedulerFolder); - resources.ApplyResources(this.tabPageAdvanced, "tabPageAdvanced"); this.tabPageAdvanced.Name = "tabPageAdvanced"; this.tabPageAdvanced.UseVisualStyleBackColor = true; // @@ -347,6 +357,7 @@ private void InitializeComponent() // // comboSchedulerAlreadyRunning // + resources.ApplyResources(this.comboSchedulerAlreadyRunning, "comboSchedulerAlreadyRunning"); this.comboSchedulerAlreadyRunning.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboSchedulerAlreadyRunning.FormattingEnabled = true; this.comboSchedulerAlreadyRunning.Items.AddRange(new object[] { @@ -354,7 +365,6 @@ private void InitializeComponent() resources.GetString("comboSchedulerAlreadyRunning.Items1"), resources.GetString("comboSchedulerAlreadyRunning.Items2"), resources.GetString("comboSchedulerAlreadyRunning.Items3")}); - resources.ApplyResources(this.comboSchedulerAlreadyRunning, "comboSchedulerAlreadyRunning"); this.comboSchedulerAlreadyRunning.Name = "comboSchedulerAlreadyRunning"; // // labelSchedulerConcurrent @@ -409,18 +419,6 @@ private void InitializeComponent() resources.ApplyResources(this.labelSchedulerFolder, "labelSchedulerFolder"); this.labelSchedulerFolder.Name = "labelSchedulerFolder"; // - // selectFolder - // - this.selectFolder.Description = ""; - this.selectFolder.DontIncludeNetworkFoldersBelowDomainLevel = true; - this.selectFolder.NewStyle = true; - this.selectFolder.RootFolder = System.Environment.SpecialFolder.Desktop; - this.selectFolder.SelectedPath = ""; - this.selectFolder.ShowBothFilesAndFolders = false; - this.selectFolder.ShowEditBox = true; - this.selectFolder.ShowFullPathInEditBox = true; - this.selectFolder.ShowNewFolderButton = true; - // // labelProgramSchedule // resources.ApplyResources(this.labelProgramSchedule, "labelProgramSchedule"); @@ -444,8 +442,8 @@ private void InitializeComponent() // // pictureChannelLogo // - this.pictureChannelLogo.BackColor = System.Drawing.SystemColors.Control; resources.ApplyResources(this.pictureChannelLogo, "pictureChannelLogo"); + this.pictureChannelLogo.BackColor = System.Drawing.SystemColors.Control; this.pictureChannelLogo.Name = "pictureChannelLogo"; this.pictureChannelLogo.TabStop = false; // @@ -524,7 +522,7 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox checkBoxExpiryDate; private IpTviewr.UiServices.Common.Controls.TimeSpanUpDown timeSpanSchedulerRetry; private IpTviewr.UiServices.Common.Controls.TimeSpanUpDown timeSpanSchedulerDeleteTaskAfter; - private IpTviewr.UiServices.Common.Controls.SelectFolderDialog selectFolder; + private IpTviewr.Native.WinForms.SelectFolderDialog selectFolder; private System.Windows.Forms.CheckBox checkAddTaskPrefix; private System.Windows.Forms.Label labelTaskName; private Common.Controls.FilenameTextBox textTaskName; @@ -533,4 +531,4 @@ private void InitializeComponent() private System.Windows.Forms.Label labelChannelName; private Common.Controls.PictureBoxEx pictureChannelLogo; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Duration.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Duration.cs new file mode 100644 index 00000000..3a82a278 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Duration.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Record +{ + partial class RecordChannelDialog + { + #region "Duration" tab events / setup & get data + + private void InitDurationData() + { + recordingTime.SetDuration(_currentStartDateTime, Task.Schedule.Kind, Task.Duration); + } // InitDurationData() + + private void GetDurationData() + { + Task.Duration = recordingTime.GetDuration(); + } // GetDurationData + + #endregion + } // partial class RecordChannelDialog +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.General.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.General.cs new file mode 100644 index 00000000..824636b4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.General.cs @@ -0,0 +1,56 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Logos; + +namespace IpTviewr.UiServices.Record +{ + partial class RecordChannelDialog + { + #region 'General' form setup & get data + + private void InitGeneralData() + { + // service logo + var serviceLogo = AppConfig.Current.ServiceLogoMappings.FromServiceKey(Task.Channel.ServiceKey); + pictureChannelLogo.Image = serviceLogo.GetImage(LogoSize.Size64); + + // service name + labelChannelName.Text = $"{Task.Channel.LogicalNumber} {Task.Channel.Name}"; + + // program name + if (Task.Program != null) + { + labelProgramDescription.Text = Task.Program.Title; + labelProgramSchedule.Text = $"{FormatString.DateTimeFromToMinutes(Task.Program.LocalStartTime, Task.Program.LocalEndTime, LocalReferenceTime)} ({FormatString.TimeSpanTotalMinutes(Task.Program.Duration, FormatString.Format.Extended)})"; + } + else + { + labelChannelName.Top = pictureChannelLogo.Top; + labelChannelName.Height = pictureChannelLogo.Height; + + labelProgramDescription.Visible = false; + labelProgramSchedule.Visible = false; + } // if-else + } // InitGeneralData + + private void GetGeneralData() + { + // nothing to get + } // GetGeneralData + + #endregion + } // partial class RecordChannelDialog +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Save.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Save.cs new file mode 100644 index 00000000..7c698636 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Save.cs @@ -0,0 +1,218 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Record +{ + partial class RecordChannelDialog + { + private const string ListLocationsSelectedImageKey = "selected"; + private const string ListLocationsDefaultImageKey = "folder"; + + #region "Save" tab events / setup & get data + + private void InitSaveData() + { + // Fill extensions combo + comboFileExtension.Items.AddRange(GetFilenameExtensions()); + + // Name (filename) + textFilename.SetText(string.IsNullOrEmpty(Task.Action.Filename) ? Task.Channel.Name : Task.Action.Filename, false); + + // Extension + comboFileExtension.Text = string.IsNullOrEmpty(Task.Action.FileExtension) ? comboFileExtension.Items[0] as string : Task.Action.FileExtension; + + // Save locations + var defaultItem = SetListLocations(AppConfig.Current.User.Record.SaveLocations); + SelectSaveLocation(Task.Action.SaveLocationName, Task.Action.SaveLocationPath, defaultItem); + } // InitSaveData + + private void GetSaveData() + { + var locationName = listViewLocations.SelectedItems[0].SubItems[0].Text; + if (locationName == Properties.RecordChannel.SaveDefaultLocation) locationName = null; + var locationPath = listViewLocations.SelectedItems[0].SubItems[1].Text; + + Task.Action.Filename = textFilename.Text.Trim(); + Task.Action.FileExtension = comboFileExtension.Text.Trim(); + Task.Action.SaveLocationName = locationName; + Task.Action.SaveLocationPath = locationPath; + Task.Action.Recorder = RecordHelper.GetDefaultRecorder(); + } // GetSaveData + + private void textFilename_Validating(object sender, CancelEventArgs e) + { + var text = textFilename.Text.Trim(); + e.Cancel = (text.Length == 0); + + if (e.Cancel) + { + ControlValidationFailed(Properties.RecordChannel.EmptyFileName, sender as Control); + } // if + } // textFilename_Validating + + private void comboFileExtension_Validating(object sender, CancelEventArgs e) + { + var text = comboFileExtension.Text.Trim(); + e.Cancel = (text.Length == 0); + + if (e.Cancel) + { + ControlValidationFailed(Properties.RecordChannel.EmptyFileExtension, sender as Control); + } // if + } // comboFileExtension_Validating + + private void listViewLocations_SelectedIndexChanged(object sender, EventArgs e) + { + _currentSelectedLocationIndex = (listViewLocations.SelectedIndices.Count > 0) ? listViewLocations.SelectedIndices[0] : -1; + + for (var index = 0; index < listViewLocations.Items.Count; index++) + { + var item = listViewLocations.Items[index]; + if (item.Index == _currentSelectedLocationIndex) + { + item.ImageKey = ListLocationsSelectedImageKey; + } + else if (item.ImageKey != ListLocationsDefaultImageKey) + { + item.ImageKey = ListLocationsDefaultImageKey; + } // if-else + } // for index + } // listViewLocations_SelectedIndexChanged + + private void listViewLocations_Validating(object sender, CancelEventArgs e) + { + e.Cancel = (listViewLocations.SelectedIndices.Count == 0); + if (e.Cancel) + { + ControlValidationFailed(Properties.RecordChannel.NoSaveLocation, sender as Control); + } // if + } // listViewLocations_Validating + + private void buttonSelectFolder_Click(object sender, EventArgs e) + { + if (listViewLocations.SelectedItems.Count == 0) + { + selectFolder.SelectedPath = null; + } + else + { + selectFolder.SelectedPath = listViewLocations.SelectedItems[0].SubItems[1].Text; + } // if-else + + if (selectFolder.ShowDialog(this) != DialogResult.OK) return; + + SelectAppendSaveLocation(selectFolder.SelectedPath); + } // buttonSelectFolder_Click + + private ListViewItem SetListLocations(IList locations) + { + ListViewItem defaultItem; + + if (locations == null) throw new ArgumentNullException(); + + defaultItem = null; + listViewLocations.BeginUpdate(); + listViewLocations.Items.Clear(); + + _currentSelectedLocationIndex = (locations.Count == 0) ? -1 : 0; + for (var index = 0; index < locations.Count; index++) + { + var name = locations[index].Name; + if (string.IsNullOrEmpty(name)) name = Properties.RecordChannel.SaveDefaultLocation; + + var item = listViewLocations.Items.Add(name); + item.ImageKey = ListLocationsDefaultImageKey; + item.SubItems.Add(locations[index].Path.Trim()); + + if (string.IsNullOrEmpty(locations[index].Name)) defaultItem = item; + } // for + + var sortColumn = (listViewLocations.CurrentSortColumn < 0) ? 0 : listViewLocations.CurrentSortColumn; + listViewLocations.Sort(sortColumn, !listViewLocations.CurrentSortIsDescending); + listViewLocations.EndUpdate(); + + return defaultItem; + } // SetListLocations + + private void SelectSaveLocation(string locationName, string path, ListViewItem defaultItem) + { + ListViewItem item; + + if ((locationName == null) && (!string.IsNullOrEmpty(path))) + { + locationName = Properties.RecordChannel.SaveDefaultLocation; + } // if + + var find = from ListViewItem listItem in listViewLocations.Items + where string.Compare(listItem.Text, locationName, StringComparison.InvariantCultureIgnoreCase) == 0 + select listItem; + item = find.FirstOrDefault(); + + if (item == null) + { + if (string.IsNullOrEmpty(path)) + { + if (listViewLocations.Items.Count > 0) + { + item = defaultItem; + } // if + } + else + { + locationName = (locationName != null) ? Properties.RecordChannel.SaveMissingLocation : Properties.RecordChannel.SaveCustomLocation; + item = listViewLocations.Items.Add(locationName); + item.ImageKey = ListLocationsDefaultImageKey; + item.SubItems.Add(Task.Action.SaveLocationPath); + } // if-else + } // if-else + + if (item == null) + { + _currentSelectedLocationIndex = -1; + } + else + { + item.Selected = true; + _currentSelectedLocationIndex = item.Index; + } // if-else + } // SelectSaveLocation + + private void SelectAppendSaveLocation(string path) + { + var find = from ListViewItem listItem in listViewLocations.Items + where string.Compare(listItem.SubItems[1].Text, path, StringComparison.InvariantCultureIgnoreCase) == 0 + select listItem; + var item = find.FirstOrDefault(); + + if (item == null) + { + item = listViewLocations.Items.Add(Properties.RecordChannel.SaveCustomLocation); + item.ImageKey = ListLocationsDefaultImageKey; + item.SubItems.Add(path); + } // if + + item.Selected = true; + _currentSelectedLocationIndex = item.Index; + } // SelectAppendSaveLocation + + #endregion + } // partial class RecordChannelDialog +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Schedule.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Schedule.cs new file mode 100644 index 00000000..3e9a86ac --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.Schedule.cs @@ -0,0 +1,130 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Common; +using IpTviewr.UiServices.Record.Controls; +using System; + +namespace IpTviewr.UiServices.Record +{ + partial class RecordChannelDialog + { + public static readonly TimeSpan DefaultExpiryDateTimeSpan = new TimeSpan(23, 0, 0); + + #region "Schedule" tab events / setup & get data + + private void InitScheduleData() + { + // Schedule kind + // Note: this will fire DateTimeChanged and ScheduleKindChanged events, + // thus allowing us to get the right StartDate and Kind and not having to call more 'setup' methods + recordingSchedule.SetSchedule(Task.Schedule, IsNewTask); + + // Expiry date + var schedule = Task.Schedule; + checkBoxExpiryDate.Checked = schedule.ExpiryDate.HasValue; + dateTimeExpiryDate.Value = (schedule.ExpiryDate.HasValue) ? schedule.ExpiryDate.Value : _currentStartDateTime + DefaultExpiryDateTimeSpan; + + // Safety margin + checkBoxStartMargin.Checked = schedule.SafetyMargin.HasValue; + numericStartMargin.Value = schedule.SafetyMargin ?? RecordSchedule.DefaultSafetyMargin; + } // InitScheduleData + + private void GetScheduleData() + { + var schedule = recordingSchedule.GetSchedule(); + Task.Schedule = schedule; + + schedule.ExpiryDate = null; + schedule.SafetyMargin = null; + + if (schedule.Kind == RecordScheduleKind.OneTime) return; + + if ((checkBoxExpiryDate.Checked) && (checkBoxExpiryDate.Enabled)) + { + var date = dateTimeExpiryDate.Value; + var expiryDate = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0); + schedule.ExpiryDate = expiryDate; + } // if + + if ((checkBoxStartMargin.Checked) && (checkBoxStartMargin.Enabled) && (numericStartMargin.Value > 0)) + { + schedule.SafetyMargin = (int)numericStartMargin.Value; + } // if + } // GetScheduleData + + private void recordingSchedule_ScheduleKindChanged(object sender, RecordingSchedule.KindChangedEventArgs e) + { + _currentScheduleKind = e.Kind; + + var enabled = (e.Kind != RecordScheduleKind.RightNow); + UpdateStartMarginStatus(enabled); + EnableExpiryDate(); + recordingTime.SetScheduleKind(e.Kind); + + ChangeOkButtonText(enabled); + } // recordingSchedule_ScheduleKindChanged + + private void recordingSchedule_DateTimeChanged(object sender, RecordingSchedule.DateTimeChangedEventArgs e) + { + _currentStartDateTime = e.DateTime; + recordingTime.SetStartTime(_currentStartDateTime); + UpdateTaskName(); + } // schedulePattern_DateTimeChanged + + private void checkBoxExpiryDate_CheckedChanged(object sender, EventArgs e) + { + EnableExpiryDate(); + } // checkBoxExpiryDate_CheckedChanged + + private void EnableExpiryDate() + { + var expiryDisallowed = (_currentScheduleKind == RecordScheduleKind.RightNow) || + (_currentScheduleKind == RecordScheduleKind.OneTime); + + checkBoxExpiryDate.Visible = !expiryDisallowed; + checkBoxExpiryDate.Enabled = !expiryDisallowed; + + dateTimeExpiryDate.Visible = !expiryDisallowed; + dateTimeExpiryDate.Enabled = checkBoxExpiryDate.Checked; + + EnableSchedulerDeleteTask(expiryDisallowed | (checkBoxExpiryDate.Enabled & checkBoxExpiryDate.Checked)); + } // EnableExpiryDate + + private void checkBoxStartMargin_CheckedChanged(object sender, EventArgs e) + { + UpdateStartMarginStatus(true); + } // checkBoxStartMargin_CheckedChanged + + private void UpdateStartMarginStatus(bool enabled) + { + checkBoxStartMargin.Visible = enabled; + checkBoxStartMargin.Enabled = enabled; + + numericStartMargin.Visible = enabled; + numericStartMargin.Enabled = checkBoxStartMargin.Checked; + + labelStartMarginSufix.Visible = enabled; + labelStartMarginSufix.Enabled = checkBoxStartMargin.Checked; + } // UpdateStartMarginStatus + + private void ChangeOkButtonText(bool schedule) + { + buttonOk.ChangeImage(schedule ? Properties.Resources.Action_Ok_16x16 : Properties.Resources.Action_RecordButton_16x16); + buttonOk.Text = schedule ? Properties.RecordChannel.RecordButtonSchedule : Properties.RecordChannel.RecordButtonRecord; + } // ChangeOkButtonText + + #endregion + } // partial class RecordChannelDialog +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.cs new file mode 100644 index 00000000..72d242d9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.cs @@ -0,0 +1,164 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common.Telemetry; +using IpTviewr.Services.Record.Serialization; +using IpTviewr.UiServices.Common.Forms; +using System; +using System.Diagnostics; +using System.Windows.Forms; + +namespace IpTviewr.UiServices.Record +{ + public partial class RecordChannelDialog : CommonBaseForm + { + private DateTime _currentStartDateTime; + private RecordScheduleKind _currentScheduleKind; + private int _currentSelectedLocationIndex; + + public RecordTask Task + { + get; + set; + } // Task + + public bool IsNewTask + { + get; + set; + } // IsNewTask + + public DateTime LocalReferenceTime + { + get; + set; + } // LocalReferenceTime + + public static string[] GetFilenameExtensions() + { + var separators = new[] { "\r\n" }; + var extensions = Properties.RecordChannel.FileExtensions.Split(separators, StringSplitOptions.RemoveEmptyEntries); + + return extensions; + } // GetFilenameExtensions + + public RecordChannelDialog() + { + InitializeComponent(); + Icon = Properties.Resources.Icon_Recorder; + LocalReferenceTime = DateTime.Now; + } // constructor + + #region Events + + private void DialogRecordChannel_Load(object sender, EventArgs e) + { + SafeCall(DialogRecordChannel_Load_Implementation, sender, e); + } // DialogRecordChannel_Load + + private void DialogRecordChannel_Shown(object sender, EventArgs e) + { + SafeCall(DialogRecordChannel_Shown_Implementation, sender, e); + } // DialogRecordChannel_Shown + + private void buttonOk_Click(object sender, EventArgs e) + { + SafeCall(buttonOk_Click_Implementation, sender, e); + } // buttonOk_Click + + #endregion + + #region Events implementation + + private void DialogRecordChannel_Load_Implementation(object sender, EventArgs e) + { + // Initialize + if (Task == null) + { + if (DesignMode) + { + Task = RecordTask.CreateWithDefaultValues(null); + IsNewTask = true; + } + else + { + throw new ArgumentNullException(); + } // if-else + } // if + + // General + InitGeneralData(); + // Schedule tab + InitScheduleData(); + // Duration tab + InitDurationData(); + // Description tab + InitDescriptionData(); + // Save tab + InitSaveData(); + // Advanced tab + InitAdvancedData(); + } // DialogRecordChannel_Load_Implementation + + private void DialogRecordChannel_Shown_Implementation(object sender, EventArgs e) + { + if (_currentSelectedLocationIndex >= 0) + { + // force creation of the control + // .NET WinForms BUG: selecting an item when the control is NOT created does not update the SelectedItems/SelectedIndexes collection + _ = listViewLocations.Handle; + Debug.Assert(listViewLocations.IsHandleCreated); + listViewLocations.Items[_currentSelectedLocationIndex].Selected = true; + } // if + } // DialogRecordChannel_Shown_Implementation + + private void buttonOk_Click_Implementation(object sender, EventArgs e) + { + var isValid = ValidateChildren(ValidationConstraints.Enabled); + if (!isValid) return; + + // General + GetGeneralData(); + // Schedule tab + GetScheduleData(); + // Duration tab + GetDurationData(); + // Description tab + GetDescriptionData(); + // Save tab + GetSaveData(); + // Advanced tab + GetAdvancedData(); + + DialogResult = DialogResult.OK; + } // buttonOk_Click_Implementation + + #endregion + + #region Private methods + + private void ControlValidationFailed(string text, Control control) + { + MessageBox.Show(this, text, Name, MessageBoxButtons.OK, MessageBoxIcon.Warning); + + var tabPage = control.Parent as TabPage; + if (tabPage != null) + { + tabProperties.SelectedTab = tabPage; + } // if + control.Focus(); + } // ControlValidationFailed + + #endregion + } // class DialogRecordChannel +} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.es.resx similarity index 80% rename from 1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.es.resx index ceb476bd..c4a8509e 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.es.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.es.resx @@ -112,10 +112,10 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Nombre de ubicación @@ -129,7 +129,7 @@ Cancelar - + 281, 17 @@ -154,100 +154,58 @@ Programación - - 231, 188 - - - minutos - - - 185, 186 - - - 176, 17 - - - Añadir un margen de seguridad: - Duración - - 268, 17 - - - Añadir detalles de la grabación (canal, horario, etc.) - - - 249, 13 - - - Descripción de la tarea y de la grabación (opcional) - - - 239, 17 - - - Añadir un prefijo común al nombre de la tarea - - - 311, 13 - - - Nombre de la tarea para el Programador de Tareas de Windows: - - - Descripción - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA2 - CwAAAk1TRnQBSQFMAgEBAgEAAbgBAAG4AQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4AWgBGQH/AbgBaAEZAf8DOAFcFAABuAGjAZQB/wFN - ATMBHwH/AU0BMwEfAf8BTQEzAR8B/wFNATMBHwH/AU0BMwEfAf8BTQEzAR8B/wFNATMBHwH/AU0BMwEf - Af8BTQEzAR8B/wFNATMBHwH/AU0BMwEfAf8BTQEzAR8B/wFNATMBHwH/AU0BMwEfAf8BTQEzAR8B/6AA - AbgBaAEZAf8B8QHMAY4B/wG4AWgBGQH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL + CwAAAk1TRnQBSQFMAgEBAgEAAcABAAHAAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4AWcBGAH/AbgBZwEYAf8DOAFcFAABuAGjAZQB/wFM + ATIBHgH/AUwBMgEeAf8BTAEyAR4B/wFMATIBHgH/AUwBMgEeAf8BTAEyAR4B/wFMATIBHgH/AUwBMgEe + Af8BTAEyAR4B/wFMATIBHgH/AUwBMgEeAf8BTAEyAR4B/wFMATIBHgH/AUwBMgEeAf8BTAEyAR4B/6AA + AbgBZwEYAf8B8QHMAY4B/wG4AWcBGAH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL Af8B7QHSAcMB/wHpAc0BuwH/AegByAGzAf8B5gHEAa8B/wHkAcABqQH/AeMBvQGkAf8B4wG8AaUB/wHi - AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/AU0BMwEfAf+gAAG4AWgBGQH/AfABwAFWAf8B7wHK - AYwB/wG4AWgBGQH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy + AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/AUwBMgEeAf+gAAG4AWcBGAH/AfABwAFVAf8B7wHK + AYwB/wG4AWcBGAH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy AeAB1QH/AfAB3AHQAf8B7wHZAcsB/wHtAdUBxgH/AewB0gHCAf8B6QHNAbkB/wHnAcgBswH/AeYBwwGt - Af8B5AG9AaYB/wHhAbcBngH/AU0BMwEfAf+AAANDAXcBuAFoARkB/wG4AWgBGQH/AbgBaAEZAf8BuAFo - ARkB/wG4AWgBGQH/AbgBaAEZAf8BuAFoARkB/wG4AWgBGQH/AfMBxQFYAf8B5QGZAQAB/wHvAcsBjAH/ - AbgBaAEZAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY + Af8B5AG9AaYB/wHhAbcBngH/AUwBMgEeAf+AAANDAXcBuAFnARgB/wG4AWcBGAH/AbgBZwEYAf8BuAFn + ARgB/wG4AWcBGAH/AbgBZwEYAf8BuAFnARgB/wG4AWcBGAH/AfMBxQFXAf8B5QGZAQAB/wHvAcsBjAH/ + AbgBZwEYAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY Af8B8gHfAdQB/wHwAdwBzwH/Ae8B2AHKAf8B7QHVAcUB/wHsAdEBwQH/AeoBzgG9Af8B6QHKAbcB/wHn - AcQBsAH/AeMBvQGlAf8BTQEzAR8B/4AAAaUBUAEAAf8B6QG6AVEB/wHuAcEBVgH/AfQBxwFZAf8B9wHM - AVsB/wH6Ac8BXQH/AfsBzwFdAf8B+wHPAV0B/wH5AcwBXAH/AfIBsQEaAf8B6wGhAQAB/wHlAZkBAAH/ - Ae8BygGMAf8BsgFgARAB/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh + AcQBsAH/AeMBvQGlAf8BTAEyAR4B/4AAAaUBTwEAAf8B6QG6AVAB/wHuAcEBVQH/AfQBxwFYAf8B9wHM + AVoB/wH6Ac8BXAH/AfsBzwFcAf8B+wHPAVwB/wH5AcwBWwH/AfIBsQEZAf8B6wGhAQAB/wHlAZkBAAH/ + Ae8BygGMAf8BsgFfAQ8B/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh Af8B9AHlAdwB/wHzAeIB1wH/AfEB3gHTAf8B8AHbAc4B/wHuAdcByQH/Ae0B1AHEAf8B6wHRAcAB/wHq - AcwBuwH/AecBxgGzAf8B5AG+AacB/wFNATMBHwH/gAABpQFQAQAB/wGjAXcBMAH8Ad0BlAEAAf8B5AGb - AQAB/wHtAaUBAAH/AfMBrAEEAf8B+AGxAQcB/wH5AbIBBwH/AfkBsQEHAf8B9QGtAQUB/wHyAacBAgH/ - AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBYAEQAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ + AcwBuwH/AecBxgGzAf8B5AG+AacB/wFMATIBHgH/gAABpQFPAQAB/wGgAXYBLwH8Ad0BlAEAAf8B5AGb + AQAB/wHtAaUBAAH/AfMBrAEDAf8B+AGxAQYB/wH5AbIBBgH/AfkBsQEGAf8B9QGtAQQB/wHyAacBAQH/ + AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBXwEPAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ AfgB7wHpAf8B9wHrAeQB/wH1AegB4AH/AfQB5QHbAf8B8gHhAdYB/wHxAd4B0gH/Ae8B2gHNAf8B7gHX - AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/AU0BMwEfAf+AAAGlAVABAAH/AaMBegE6 - AfwB3AGcARUB/wHgAZ0BCwH/AecBoQEEAf8B7QGmAQAB/wHzAasBAgH/AfgBsQEFAf8B+QGyAQYB/wH4 - AbEBBgH/AfUBrQEFAf8B8QGmAQEB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzAWIBEwH/AcABqwGc + AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/AUwBMgEeAf+AAAGlAU8BAAH/AaABeQE5 + AfwB3AGcARQB/wHgAZ0BCgH/AecBoQEDAf8B7QGmAQAB/wHzAasBAQH/AfgBsQEEAf8B+QGyAQUB/wH4 + AbEBBQH/AfUBrQEEAf8B8QGmAQAB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzAWEBEgH/AcABqwGc Af8B/AH3AfQB/wH6AfQB8AH/AfkB8QHsAf8B+AHuAegB/wH2AesB5AH/AfUB5wHfAf8B9AHkAdoB/wHy - AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/AU0BMwEf - Af+AAAGlAVABAAH/AdwBqQE/Af8B1wGZARcB/wHeAaABHAH/AeQBpgEeAf8B6gGrARgB/wHwAa4BEwH/ - AfQBrwELAf8B9wGxAQcB/wH5AbEBBQH/AfgBrwEEAf8B9AGrAQMB/wHwAaUBAAH/AfABugFBAf8BswFi - ARMB/wM4AVwBwgGsAZ0B/wH8AfkB9wH/AfsB9gHzAf8B+gH0Ae8B/wH5AfEB6wH/AfgB7QHnAf8B9wHr + AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/AUwBMgEe + Af+AAAGlAU8BAAH/AdwBqQE+Af8B1wGZARYB/wHeAaABGwH/AeQBpgEdAf8B6gGrARcB/wHwAa4BEgH/ + AfQBrwEKAf8B9wGxAQYB/wH5AbEBBAH/AfgBrwEDAf8B9AGrAQIB/wHwAaUBAAH/AfABugFAAf8BswFh + ARIB/wM4AVwBwgGsAZ0B/wH8AfkB9wH/AfsB9gHzAf8B+gH0Ae8B/wH5AfEB6wH/AfgB7QHnAf8B9wHr AeUB/wH2AekB4QH/AfQB5QHcAf8B8wHjAdgB/wHxAd8B1AH/AfAB3AHQAf8B7wHZAcsB/wHuAdYByAH/ - AecBxwGyAf8BTQEzAR8B/4AAAaUBUAEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl - Al8BWAHjAW8BZwFTAfEB+gG5AR0B/wH6AbgBFQH/AfgBsgEMAf8B9wHEAUgB/wGzAWIBEwH/AzgBXAQA + AecBxwGyAf8BTAEyAR4B/4AAAaUBTwEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl + Al8BWAHjAW4BZQFTAfEB+gG5ARwB/wH6AbgBFAH/AfgBsgELAf8B9wHEAUcB/wGzAWEBEgH/AzgBXAQA AcMBrgGfAf8B/QH7AfgB/wH8AfgB9gH/AfsB9gHyAf8B+gHzAe8B/wH5AfAB6gH/AfgB8QHsAf8B+AHv AekB/wH2Ae0B5gH/AfYB6gHiAf8B9QHpAeAB/wH1AeUB3gH/AfQB5AHaAf8B8wHhAdcB/wHvAdgBygH/ - AU0BMwEfAf+AAANDAXcBpQFQAQAB/wGlAVABAAH/AaUBUAEAAf8BpQFQAQAB/wGlAVABAAH/AaUBUAEA - Af8BpQFQAQAB/wGlAVABAAH/AfgBvAErAf8B+wHBAS0B/wH8AdIBYgH/AbMBYgETAf8DOAFcCAABxQGv + AUwBMgEeAf+AAANDAXcBpQFPAQAB/wGlAU8BAAH/AaUBTwEAAf8BpQFPAQAB/wGlAU8BAAH/AaUBTwEA + Af8BpQFPAQAB/wGlAU8BAAH/AfgBvAEqAf8B+wHBASwB/wH8AdIBYQH/AbMBYQESAf8DOAFcCAABxQGv AaAB/wH+AfsB+AH/Af0B+gH5Af8B/AH4AfUB/wH7AfUB8gH/AfoB8gHuAf8B+QHxAewB/wG9AakBmwH/ - Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/AU0BMwEfAf8BTQEz - AR8B/6AAAaUBUAEAAf8B8wG2ASYB/wH7AdABYQH/AbMBYgETAf8DOAFcDAABxgGwAaEB/wH+AfsB+gH/ - Af4B/AH7Af8B/QH6AfgB/wH8AfcB9AH/AfsB9QHxAf8B+gHzAe4B/wFaAUEBLgH/AdYB0QHOAf8ByQHE - AcAB/wHBAbsBtwH/AbkBsgGsAf8BtQGtAacB/wGyAakBogH/AWYBTQE7Af+kAAGlAVABAAH/AfMByAFc - Af8BswFiARMB/wM4AVwQAAHHAbEBogL/AfsB+gH/Af4C/AH/Af4B+wH5Af8B/QH5AfcB/wH7AfcB9AH/ - AfoB9gHyAf8BnQGIAWAB/wHgAdwB2gH/AdwB2gHXAf8B0gHRAc8B/wHVAdQB0gH/AcsByAHGAf8BuQGz - Aa0B/wGeAYoBZAH/pAABpQFQAQAB/wGzAWIBEwH/AzgBXBQAAcgBsgGjAf8BxgGwAaEB/wHEAa4BnwH/ + Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/AUwBMgEeAf8BTAEy + AR4B/6AAAaUBTwEAAf8B8wG2ASUB/wH7AdABYAH/AbMBYQESAf8DOAFcDAABxgGwAaEB/wH+AfsB+gH/ + Af4B/AH7Af8B/QH6AfgB/wH8AfcB9AH/AfsB9QHxAf8B+gHzAe4B/wFZAUABLQH/AdYB0QHOAf8ByQHE + AcAB/wHBAbsBtwH/AbkBsgGsAf8BtQGtAacB/wGyAakBogH/AWUBTAE6Af+kAAGlAU8BAAH/AfMByAFb + Af8BswFhARIB/wM4AVwQAAHHAbEBogL/AfsB+gH/Af4C/AH/Af4B+wH5Af8B/QH5AfcB/wH7AfcB9AH/ + AfoB9gHyAf8BnQGIAV8B/wHgAdwB2gH/AdwB2gHXAf8B0gHRAc8B/wHVAdQB0gH/AcsByAHGAf8BuQGz + Aa0B/wGeAYoBYwH/pAABpQFPAQAB/wGzAWEBEgH/AzgBXBQAAcgBsgGjAf8BxgGwAaEB/wHEAa4BnwH/ AcEBqwGcAf8BvgGpAZoB/wG7AaYBlwH/AbkBpAGVAf8BtwGiAZMB/wHYAccBvAH/Ac4BvAGuAf8ByAG0 AacB/wHDAa4BoAH/AbwBpwGYAf8BuQGkAZUB/wGtAZkBjAH/pAADUwGqAzgBXP8A2QABQgFNAT4HAAE+ AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAf8BPwL/BAAB/wEfBgAB/wEPBgAB/wEHBwABAwcA @@ -272,6 +230,33 @@ Ubicación de archivo + + 268, 17 + + + Añadir detalles de la grabación (canal, horario, etc.) + + + 249, 13 + + + Descripción de la tarea y de la grabación (opcional) + + + Descripción + + + 239, 17 + + + Añadir un prefijo común al nombre de la tarea + + + 311, 13 + + + Nombre de la tarea para el Programador de Tareas de Windows: + Grabar en paralelo (se graban los dos) diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.resx similarity index 96% rename from 1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.resx index 7464aa9a..cd2938a4 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.resx +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordChannelDialog.resx @@ -117,1304 +117,1304 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - False - - - Name - - - - 150 + + tabPageSave - - False - - - Location + + tabPageSchedule - - 250 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Bottom, Right + + tabPageDescription - - NoControl + + labelProgramSchedule - - 246, 375 + + 82, 58 - - 100, 25 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 4 - - Set schedule + + 12, 82 - - MiddleRight + + + Top, Right - - ImageBeforeText + + tabPageSave - - buttonOk + + NoControl - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabProperties - - $this + + MiddleLeft - - 6 + + + 5 - - Bottom, Right + + checkBoxStartMargin - + NoControl - - 352, 375 - - - 100, 25 + + Start recording as soon as possible if the schedule is missed - + 5 - - Cancel - - - MiddleRight + + 10 - - ImageBeforeText + + 6, 23 - - buttonCancel + + labelStartMarginSufix - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabPageAdvanced - - $this + + labelSaveLocation - - 5 + + 6, 99 - - Top, Bottom, Left, Right + + 3, 6 - - 152, 210 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 215, 20 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 2 + + 122, 237 - - dateTimeExpiryDate + + 130, 187 - - System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4 - - tabPageSchedule + + IpTviewr.Native.WinForms.SelectFolderDialog, IpTViewr.Native, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - 0 + + IpTviewr.UiServices.Common.Controls.TimeSpanUpDown, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - True + + 3 - - NoControl + + labelTaskDescription - - 130, 187 + + 2 - - 198, 17 + + 356, 20 - - 1 + + Save location - - Stop schedule on the following date: + + 4 - - checkBoxExpiryDate + + 7 - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + tabPageSchedule - - 1 + + Name - - True + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl + + 12, 12 - - 168, 239 + + 192, 20 - - 43, 13 + + labelFilename - - 6 + + 0 - - minutes + + tabPageSave - - labelStartMarginSufix + + 6, 171 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4 - - tabPageSchedule + + 1 - - 2 + + 35, 20 - - 122, 237 + + 370, 22 - - 40, 20 + + (Program description) - + 5 - - Center - - - numericStartMargin - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + tabPageSchedule - - 3 + + Segoe UI, 9.75pt, style=Italic - - True + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + Record TV Channel + + NoControl - - 3, 238 + + 100, 25 - - 113, 17 + + 10 - - 4 + + 0 - - Add safety margin: + + 4 - - checkBoxStartMargin + + Center - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Top, Left, Right - - tabPageSchedule + + ColumnLocation - - 4 + + 5 - - 3, 6 + + tabPageAdvanced - - 425, 175 + + NoControl - - 0 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - recordingSchedule + + NoControl - - IpTviewr.UiServices.Record.Controls.RecordingSchedule, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + labelSchedulerFolder - - tabPageSchedule + + 211, 17 - - 5 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4, 22 + + NoControl - - 3, 3, 3, 3 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 432, 261 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Schedule + + 246, 375 - - tabPageSchedule + + 8 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 9 - + tabProperties - - 0 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3, 6 + + 4 - - 425, 145 + + NoControl - - 0 + + True - - recordingTime + + 100, 25 - - IpTviewr.UiServices.Record.Controls.RecordingDuration, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + tabPageDescription - - tabPageLength + + labelTaskName - - 0 + + MiddleRight - - 4, 22 + + numericSchedulerMaxRetries - - 3, 3, 3, 3 + + 6, 13 - - 432, 261 + + 370, 18 - + + IpTviewr.UiServices.Common.Controls.TimeSpanUpDown, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + 2 - - Duration + + 432, 261 - - tabPageLength + + True - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - tabProperties + + 6, 122 - - 1 + + CenterImage - - Top, Bottom, Left, Right + + 355, 145 - - 6, 71 + + NoControl - - 422, 155 + + 5 - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA0 - CwAAAk1TRnQBSQFMAgEBAgEAATQBAgE0AQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4ATwBAAH/AbgBPAEAAf8DOAFcFAABuAGjAZQB/wEh - AQcBAAH/ASEBBwEAAf8BIQEHAQAB/wEhAQcBAAH/ASEBBwEAAf8BIQEHAQAB/wEhAQcBAAH/ASEBBwEA - Af8BIQEHAQAB/wEhAQcBAAH/ASEBBwEAAf8BIQEHAQAB/wEhAQcBAAH/ASEBBwEAAf8BIQEHAQAB/6AA - AbgBPAEAAf8B8QHMAY4B/wG4ATwBAAH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL - Af8B7QHSAcMB/wHpAc0BuwH/AegByAGzAf8B5gHEAa8B/wHkAcABqQH/AeMBvQGkAf8B4wG8AaUB/wHi - AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/ASEBBwEAAf+gAAG4ATwBAAH/AfABwAEqAf8B7wHK - AYwB/wG4ATwBAAH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy - AeAB1QH/AfAB3AHQAf8B7wHZAcsB/wHtAdUBxgH/AewB0gHCAf8B6QHNAbkB/wHnAcgBswH/AeYBwwGt - Af8B5AG9AaYB/wHhAbcBngH/ASEBBwEAAf+AAANDAXcBuAE8AQAB/wG4ATwBAAH/AbgBPAEAAf8BuAE8 - AQAB/wG4ATwBAAH/AbgBPAEAAf8BuAE8AQAB/wG4ATwBAAH/AfMBxQEsAf8B5QGZAQAB/wHvAcsBjAH/ - AbgBPAEAAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY - Af8B8gHfAdQB/wHwAdwBzwH/Ae8B2AHKAf8B7QHVAcUB/wHsAdEBwQH/AeoBzgG9Af8B6QHKAbcB/wHn - AcQBsAH/AeMBvQGlAf8BIQEHAQAB/4AAAaUBJAEAAf8B6QG6ASUB/wHuAcEBKgH/AfQBxwEtAf8B9wHM - AS8B/wH6Ac8BMQH/AfsBzwExAf8B+wHPATEB/wH5AcwBMAH/AfIBsQEAAf8B6wGhAQAB/wHlAZkBAAH/ - Ae8BygGMAf8BsgE0AQAB/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh - Af8B9AHlAdwB/wHzAeIB1wH/AfEB3gHTAf8B8AHbAc4B/wHuAdcByQH/Ae0B1AHEAf8B6wHRAcAB/wHq - AcwBuwH/AecBxgGzAf8B5AG+AacB/wEhAQcBAAH/gAABpQEkAQAB/wFfAUEBKwH8Ad0BlAEAAf8B5AGb - AQAB/wHtAaUBAAH/AfMBrAEAAf8B+AGxAQAB/wH5AbIBAAH/AfkBsQEAAf8B9QGtAQAB/wHyAacBAAH/ - AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBNAEAAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ - AfgB7wHpAf8B9wHrAeQB/wH1AegB4AH/AfQB5QHbAf8B8gHhAdYB/wHxAd4B0gH/Ae8B2gHNAf8B7gHX - AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/ASEBBwEAAf+AAAGlASQBAAH/AV8BRwEr - AfwB3AGcAQAB/wHgAZ0BAAH/AecBoQEAAf8B7QGmAQAB/wHzAasBAAH/AfgBsQEAAf8B+QGyAQAB/wH4 - AbEBAAH/AfUBrQEAAf8B8QGmAQAB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzATYBAAH/AcABqwGc - Af8B/AH3AfQB/wH6AfQB8AH/AfkB8QHsAf8B+AHuAegB/wH2AesB5AH/AfUB5wHfAf8B9AHkAdoB/wHy - AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/ASEBBwEA - Af+AAAGlASQBAAH/AdwBqQETAf8B1wGZAQAB/wHeAaABAAH/AeQBpgEAAf8B6gGrAQAB/wHwAa4BAAH/ - AfQBrwEAAf8B9wGxAQAB/wH5AbEBAAH/AfgBrwEAAf8B9AGrAQAB/wHwAaUBAAH/AfABugEVAf8BswE2 - AQAB/wM4AVwBwgGsAZ0B/wH8AfkB9wH/AfsB9gHzAf8B+gH0Ae8B/wH5AfEB6wH/AfgB7QHnAf8B9wHr - AeUB/wH2AekB4QH/AfQB5QHcAf8B8wHjAdgB/wHxAd8B1AH/AfAB3AHQAf8B7wHZAcsB/wHuAdYByAH/ - AecBxwGyAf8BIQEHAQAB/4AAAaUBJAEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl - Al8BWAHjAmQBUwHxAfoBuQEAAf8B+gG4AQAB/wH4AbIBAAH/AfcBxAEcAf8BswE2AQAB/wM4AVwEAAHD - Aa4BnwH/Af0B+wH4Af8B/AH4AfYB/wH7AfYB8gH/AfoB8wHvAf8B+QHwAeoB/wH4AfEB7AH/AfgB7wHp - Af8B9gHtAeYB/wH2AeoB4gH/AfUB6QHgAf8B9QHlAd4B/wH0AeQB2gH/AfMB4QHXAf8B7wHYAcoB/wEh - AQcBAAH/gAADQwF3AaUBJAEAAf8BpQEkAQAB/wGlASQBAAH/AaUBJAEAAf8BpQEkAQAB/wGlASQBAAH/ - AaUBJAEAAf8BpQEkAQAB/wH4AbwBAAH/AfsBwQEBAf8B/AHSATYB/wGzATYBAAH/AzgBXAgAAcUBrwGg - Af8B/gH7AfgB/wH9AfoB+QH/AfwB+AH1Af8B+wH1AfIB/wH6AfIB7gH/AfkB8QHsAf8BvQGpAZsB/wG9 - AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wEhAQcBAAH/ASEBBwEA - Af+gAAGlASQBAAH/AfMBtgEAAf8B+wHQATUB/wGzATYBAAH/AzgBXAwAAcYBsAGhAf8B/gH7AfoB/wH+ - AfwB+wH/Af0B+gH4Af8B/AH3AfQB/wH7AfUB8QH/AfoB8wHuAf8BLgEVAQIB/wHWAdEBzgH/AckBxAHA - Af8BwQG7AbcB/wG5AbIBrAH/AbUBrQGnAf8BsgGpAaIB/wE6ASEBDwH/pAABpQEkAQAB/wHzAcgBMAH/ - AbMBNgEAAf8DOAFcEAABxwGxAaIC/wH7AfoB/wH+AvwB/wH+AfsB+QH/Af0B+QH3Af8B+wH3AfQB/wH6 - AfYB8gH/AZ0BiAE0Af8B4AHcAdoB/wHcAdoB1wH/AdIB0QHPAf8B1QHUAdIB/wHLAcgBxgH/AbkBswGt - Af8BngGKATgB/6QAAaUBJAEAAf8BswE2AQAB/wM4AVwUAAHIAbIBowH/AcYBsAGhAf8BxAGuAZ8B/wHB - AasBnAH/Ab4BqQGaAf8BuwGmAZcB/wG5AaQBlQH/AbcBogGTAf8B2AHHAbwB/wHOAbwBrgH/AcgBtAGn - Af8BwwGuAaAB/wG8AacBmAH/AbkBpAGVAf8BrQGZAYwB/6QAA1MBqgM4AVz/ANkAAUIBTQE+BwABPgMA - ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH/AT8C/wQAAf8BHwYAAf8BDwYAAf8BBwcAAQMHAAEB - HwABAQcAAQMGAAH/AQcBAAEBBAAB/wEPAQABAQQAAf8BHwEAAQEEAAH/AT8C/wQABP8EAAs= - + + Specify the name of the file (date and time will be added automatically): - - 4 + + 6, 233 - - listViewLocations + + checkSchedulerRetry - - IpTviewr.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + IpTviewr.UiServices.Common.Controls.FilenameTextBox, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - tabPageSave + + NoControl - - 0 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Bottom, Left + + 223, 147 - - NoControl + + 270, 7 - - 6, 233 + + True - - 125, 25 + + IpTviewr.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - 5 + + Windows Task Scheduler task name: - - Select folder... + + Run in paralel (record both) - - buttonSelectFolder + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 40, 20 - - tabPageSave + + tabPageAdvanced - - 1 + + tabPageSave - - Top, Right + + 82, 12 - - 368, 23 + + labelSchedulerConcurrent - - 60, 21 + + 370, 18 - + 2 - - comboFileExtension + + 341, 13 - + + 3 + + + tabPageLength + + + 432, 261 + + + True + + + 3, 3, 3, 3 + + + Select where to save the recording: + + + Advanced settings + + + 3, 23 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPageSave + + tabPageAdvanced - - 2 + + tabPageSchedule - + + labelSchedulerMaxRetries + + + Description + + Top, Left, Right - - 6, 23 + + 4 - - 356, 20 + + 253, 20 - - 1 + + If the recording is not scheduled again, delete the task after: - - textFilename + + checkBoxExpiryDate - - IpTviewr.UiServices.Common.Controls.FilenameTextBox, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + True - - tabPageSave + + tabPageDescription - - 3 + + If a previous programming of this recording is not over yet: - - True + + buttonSelectFolder - - NoControl + + checkAddTaskPrefix - - 3, 7 + + 4 - - 340, 13 + + tabProperties - - 0 + + 5 - - Specify the name of the file (date and time will be added automatically): + + imageListLocations - - labelFilename + + 480, 450 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 126, 13 + + + 2 + + + NoControl + + + 13 + + + 2 + + + 5 - - tabPageSave + + 3, 6 - + 4 - - True + + 352, 375 - - NoControl + + 6 - - 3, 55 + + NoControl - - 175, 13 + + 9 - - 3 + + checkSchedulerDeleteTask - - Select where to save the recording: + + Append recording details (channel name, schedule, etc) - - labelSaveLocation + + timeSpanSchedulerDeleteTaskAfter - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - + tabPageSave - - 5 + + 43, 13 - - 4, 22 + + $this - - 432, 261 + + 3 - - 5 + + NoControl - - Save location + + Schedule - - tabPageSave + + tabPageSchedule - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 250 - - tabProperties + + NoControl - - 2 + + Stop schedule on the following date: - - Bottom, Left + + 0 - - True + + NoControl - + + 64, 64 + + NoControl - - 3, 241 + + 12 - - 289, 17 + + Bottom, Left - - 5 + + 2 - - Append recording details (channel name, schedule, etc) + + CenterParent - - checkAppendRecordingDetails + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Top, Bottom, Left, Right - - tabPageDescription + + checkSchedulerASAP - - 0 + + tabPageAdvanced + + + 4 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA0 + CwAAAk1TRnQBSQFMAgEBAgEAATwBAgFAAQIBEAEAARABAAT/ASEBEAj/AUIBTQE2BwABNgMAASgDAAFA + AwABEAMAAQEBAAEgBgABEDIAA1MBqgM4AVz4AAG4ATsBAAH/AbgBOwEAAf8DOAFcFAABuAGjAZQB/wEg + AQYBAAH/ASABBgEAAf8BIAEGAQAB/wEgAQYBAAH/ASABBgEAAf8BIAEGAQAB/wEgAQYBAAH/ASABBgEA + Af8BIAEGAQAB/wEgAQYBAAH/ASABBgEAAf8BIAEGAQAB/wEgAQYBAAH/ASABBgEAAf8BIAEGAQAB/6AA + AbgBOwEAAf8B8QHMAY4B/wG4ATsBAAH/AzgBXBAAAbkBpAGVAf8B9QHoAd8B/wHwAdwBzgH/Ae8B2QHL + Af8B7QHSAcMB/wHpAc0BuwH/AegByAGzAf8B5gHEAa8B/wHkAcABqQH/AeMBvQGkAf8B4wG8AaUB/wHi + AbwBowH/AeIBuwGjAf8B4gG4AZ4B/wHfAbYBnQH/ASABBgEAAf+gAAG4ATsBAAH/AfABwAEpAf8B7wHK + AYwB/wG4ATsBAAH/AzgBXAwAAboBpQGWAf8B+QHxAewB/wH2AeoB4wH/AfUB5wHeAf8B8wHjAdkB/wHy + AeAB1QH/AfAB3AHQAf8B7wHZAcsB/wHtAdUBxgH/AewB0gHCAf8B6QHNAbkB/wHnAcgBswH/AeYBwwGt + Af8B5AG9AaYB/wHhAbcBngH/ASABBgEAAf+AAANDAXcBuAE7AQAB/wG4ATsBAAH/AbgBOwEAAf8BuAE7 + AQAB/wG4ATsBAAH/AbgBOwEAAf8BuAE7AQAB/wG4ATsBAAH/AfMBxQErAf8B5QGZAQAB/wHvAcsBjAH/ + AbgBOwEAAf8DSgGKCAABvAGmAZcB/wH5AfMB7gH/AfcB7QHmAf8B9gHqAeIB/wH1AeYB3QH/AfMB4wHY + Af8B8gHfAdQB/wHwAdwBzwH/Ae8B2AHKAf8B7QHVAcUB/wHsAdEBwQH/AeoBzgG9Af8B6QHKAbcB/wHn + AcQBsAH/AeMBvQGlAf8BIAEGAQAB/4AAAaUBIwEAAf8B6QG6ASQB/wHuAcEBKQH/AfQBxwEsAf8B9wHM + AS4B/wH6Ac8BMAH/AfsBzwEwAf8B+wHPATAB/wH5AcwBLwH/AfIBsQEAAf8B6wGhAQAB/wHlAZkBAAH/ + Ae8BygGMAf8BsgEzAQAB/wM4AVwEAAG9AagBmQH/AfoB9QHxAf8B+AHvAeoB/wH3AewB5QH/AfYB6QHh + Af8B9AHlAdwB/wHzAeIB1wH/AfEB3gHTAf8B8AHbAc4B/wHuAdcByQH/Ae0B1AHEAf8B6wHRAcAB/wHq + AcwBuwH/AecBxgGzAf8B5AG+AacB/wEgAQYBAAH/gAABpQEjAQAB/wFeAT8BKwH8Ad0BlAEAAf8B5AGb + AQAB/wHtAaUBAAH/AfMBrAEAAf8B+AGxAQAB/wH5AbIBAAH/AfkBsQEAAf8B9QGtAQAB/wHyAacBAAH/ + AewBoAEAAf8B5AGWAQAB/wHvAckBiwH/AbIBMwEAAf8DOAFcAb8BqQGaAf8B+wH2AfIB/wH5AfIB7QH/ + AfgB7wHpAf8B9wHrAeQB/wH1AegB4AH/AfQB5QHbAf8B8gHhAdYB/wHxAd4B0gH/Ae8B2gHNAf8B7gHX + AcgB/wHtAdMBwwH/AesB0AG/Af8B6gHMAbkB/wHjAb4BpwH/ASABBgEAAf+AAAGlASMBAAH/AV4BRQEr + AfwB3AGcAQAB/wHgAZ0BAAH/AecBoQEAAf8B7QGmAQAB/wHzAasBAAH/AfgBsQEAAf8B+QGyAQAB/wH4 + AbEBAAH/AfUBrQEAAf8B8QGmAQAB/wHqAZ4BAAH/AeIBlQEAAf8B7wHMAZIB/wGzATUBAAH/AcABqwGc + Af8B/AH3AfQB/wH6AfQB8AH/AfkB8QHsAf8B+AHuAegB/wH2AesB5AH/AfUB5wHfAf8B9AHkAdoB/wHy + AeAB1QH/AfEB3QHRAf8B7wHZAcwB/wHuAdYBxwH/AewB0wHDAf8B6wHPAb4B/wHkAcABqgH/ASABBgEA + Af+AAAGlASMBAAH/AdwBqQESAf8B1wGZAQAB/wHeAaABAAH/AeQBpgEAAf8B6gGrAQAB/wHwAa4BAAH/ + AfQBrwEAAf8B9wGxAQAB/wH5AbEBAAH/AfgBrwEAAf8B9AGrAQAB/wHwAaUBAAH/AfABugEUAf8BswE1 + AQAB/wM4AVwBwgGsAZ0B/wH8AfkB9wH/AfsB9gHzAf8B+gH0Ae8B/wH5AfEB6wH/AfgB7QHnAf8B9wHr + AeUB/wH2AekB4QH/AfQB5QHcAf8B8wHjAdgB/wHxAd8B1AH/AfAB3AHQAf8B7wHZAcsB/wHuAdYByAH/ + AecBxwGyAf8BIAEGAQAB/4AAAaUBIwEAAf8DXAHfAmQBXAHnAmUBXgHlAmUBXgHlAmUBXgHlAmUBXgHl + Al8BWAHjAmQBUwHxAfoBuQEAAf8B+gG4AQAB/wH4AbIBAAH/AfcBxAEbAf8BswE1AQAB/wM4AVwEAAHD + Aa4BnwH/Af0B+wH4Af8B/AH4AfYB/wH7AfYB8gH/AfoB8wHvAf8B+QHwAeoB/wH4AfEB7AH/AfgB7wHp + Af8B9gHtAeYB/wH2AeoB4gH/AfUB6QHgAf8B9QHlAd4B/wH0AeQB2gH/AfMB4QHXAf8B7wHYAcoB/wEg + AQYBAAH/gAADQwF3AaUBIwEAAf8BpQEjAQAB/wGlASMBAAH/AaUBIwEAAf8BpQEjAQAB/wGlASMBAAH/ + AaUBIwEAAf8BpQEjAQAB/wH4AbwBAAH/AfsBwQEAAf8B/AHSATUB/wGzATUBAAH/AzgBXAgAAcUBrwGg + Af8B/gH7AfgB/wH9AfoB+QH/AfwB+AH1Af8B+wH1AfIB/wH6AfIB7gH/AfkB8QHsAf8BvQGpAZsB/wG9 + AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wG9AakBmwH/Ab0BqQGbAf8BvQGpAZsB/wEgAQYBAAH/ASABBgEA + Af+gAAGlASMBAAH/AfMBtgEAAf8B+wHQATQB/wGzATUBAAH/AzgBXAwAAcYBsAGhAf8B/gH7AfoB/wH+ + AfwB+wH/Af0B+gH4Af8B/AH3AfQB/wH7AfUB8QH/AfoB8wHuAf8BLQEUAQEB/wHWAdEBzgH/AckBxAHA + Af8BwQG7AbcB/wG5AbIBrAH/AbUBrQGnAf8BsgGpAaIB/wE5ASABDgH/pAABpQEjAQAB/wHzAcgBLwH/ + AbMBNQEAAf8DOAFcEAABxwGxAaIC/wH7AfoB/wH+AvwB/wH+AfsB+QH/Af0B+QH3Af8B+wH3AfQB/wH6 + AfYB8gH/AZ0BiAEzAf8B4AHcAdoB/wHcAdoB1wH/AdIB0QHPAf8B1QHUAdIB/wHLAcgBxgH/AbkBswGt + Af8BngGKATcB/6QAAaUBIwEAAf8BswE1AQAB/wM4AVwUAAHIAbIBowH/AcYBsAGhAf8BxAGuAZ8B/wHB + AasBnAH/Ab4BqQGaAf8BuwGmAZcB/wG5AaQBlQH/AbcBogGTAf8B2AHHAbwB/wHOAbwBrgH/AcgBtAGn + Af8BwwGuAaAB/wG8AacBmAH/AbkBpAGVAf8BrQGZAYwB/6QAA1MBqgM4AVz/ANkAAUIBTQE+BwABPgMA + ASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH/AT8C/wQAAf8BHwYAAf8BDwYAAf8BBwcAAQMHAAEB + HwABAQcAAQMGAAH/AQcBAAEBBAAB/wEPAQABAQQAAf8BHwEAAQEEAAH/AT8C/wQABP8aAAs= + Top, Bottom, Left, Right - - 3, 23 + + 0 - - True + + 12 - - 425, 212 + + Select where to create the recording task in Windows Task Scheduler: - - 4 + + timeSpanSchedulerRetry - - textTaskDescription + + IpTviewr.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - - tabPageDescription + + 11 - - 1 + + (Program schedule) - - True + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3, 7 + + 13 - - 202, 13 + + 0 - - 3 + + 440, 287 - - Task and recording description (optional): + + IpTviewr.UiServices.Record.Controls.RecordingSchedule, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - labelTaskDescription + + 425, 212 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 - - tabPageDescription + + Do not record (continue previous recording) - - 2 + + 1 - - 4, 22 + + Top, Left, Right - - 432, 261 + + 1 - - 3 + + 422, 20 - - Description + + Segoe UI, 9.75pt, style=Bold - - tabPageDescription + + 82, 37 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + selectFolder + + + True tabProperties - - 3 + + 3, 7 - - True + + 3 - - NoControl + + 0 - - 270, 7 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 158, 17 + + NoControl - - 13 + + Select folder... - - Add standard prefix to name + + 3 - - checkAddTaskPrefix + + 6, 63 - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + pictureChannelLogo - - tabPageAdvanced + + 309, 17 - - 0 + + 8 - - True + + buttonOk - - NoControl + + $this - - 3, 8 + + 1 - - 184, 13 + + textTaskDescription - - 11 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Windows Task Scheduler task name: + + labelChannelName - - labelTaskName + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 425, 175 - - tabPageAdvanced + + Task and recording description (optional): 1 - - Top, Left, Right - - - 6, 24 - - - 422, 20 + + tabPageAdvanced - - 12 + + tabPageLength - - textTaskName + + 6 - - IpTviewr.UiServices.Common.Controls.FilenameTextBox, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + 113, 17 tabPageAdvanced - - 2 - - - 25, 194 + + 5 - - 253, 20 + + 3 - - 8 + + 7 - - timeSpanSchedulerDeleteTaskAfter + + True - - IpTviewr.UiServices.Common.Controls.TimeSpanUpDown, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + NoControl - - tabPageAdvanced + + recordingSchedule - - 3 + + True - - 25, 145 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 192, 20 + + 0 - - 4 + + 422, 21 - - timeSpanSchedulerRetry + + ColumnName - - IpTviewr.UiServices.Common.Controls.TimeSpanUpDown, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + 432, 261 tabPageAdvanced - - 4 - - - Run in paralel (record both) + + Duration - - Do not record (continue previous recording) + + Top, Bottom, Left, Right - - Wait for previous recording to end and start recording + + 5 - - Stop previous recording and proceed + + 0 - - 25, 233 + + 158, 17 - - 307, 21 + + 0 - - 10 + + NoControl - - comboSchedulerAlreadyRunning + + 4, 22 - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + (Channel name) - - tabPageAdvanced + + listViewLocations - - 5 + + 340, 13 - - True + + dateTimeExpiryDate - - NoControl + + comboFileExtension - - 3, 217 + + 3, 8 - - 278, 13 + + True - - 9 + + 4, 22 - - If a previous programming of this recording is not over yet: + + tabPageSave - - labelSchedulerConcurrent + + IpTviewr.UiServices.Record.Controls.RecordingDuration, UiServices.Record, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 3 - - tabPageAdvanced + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6 + + 60, 21 - - True + + 4 - - NoControl + + $this - - 6, 171 + + 215, 20 - - 309, 17 + + Top, Left, Right - - 7 + + Bottom, Left - - If the recording is not scheduled again, delete the task after: + + 4, 22 - - checkSchedulerDeleteTask + + NoControl - + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPageAdvanced - - 7 + + Segoe UI, 12pt, style=Bold - - 355, 145 + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 35, 20 + + textTaskName - - 6 + + 2 - - numericSchedulerMaxRetries + + tabPageAdvanced System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPageAdvanced - - - 8 - - + True - - NoControl - - - 223, 147 - - - 126, 13 - - - 5 + + 3, 55 - - Maximum number of tries: + + 4, 22 - - labelSchedulerMaxRetries + + 307, 17 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + minutes - - tabPageAdvanced + + Top, Left, Right - - 9 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + True - + NoControl - - 6, 122 + + Add standard prefix to name - - 211, 17 + + 150 + + + 278, 13 3 - - If the recording task fails, try again after - - - checkSchedulerRetry - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageAdvanced + + Wait for previous recording to end and start recording - - 10 + + 3, 47 - - True + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl + + RecordChannelDialog - - 6, 99 + + ImageBeforeText - - 307, 17 + + 3, 241 - + 2 - - Start recording as soon as possible if the schedule is missed + + tabPageAdvanced - - checkSchedulerASAP + + 1 - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Set schedule - - tabPageAdvanced + + 3, 238 - - 11 + + 3 - - Top, Left, Right + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6, 63 + + 25, 233 - - 422, 21 + + True - - 1 + + True + + + 10 comboSchedulerFolder - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPageAdvanced + + If the recording task fails, try again after - - 12 + + 432, 261 - + True - - NoControl - - - 3, 47 - - - 341, 13 - - - 0 - - - Select where to create the recording task in Windows Task Scheduler: - - - labelSchedulerFolder + + 6 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 368, 23 - - tabPageAdvanced + + IpTviewr.UiServices.Common.Controls.FilenameTextBox, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - 13 + + tabProperties 4, 22 - - 432, 261 - - - 4 - - - Advanced settings + + MiddleLeft - + tabPageAdvanced - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabProperties + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4 + + 25, 145 - - 12, 82 + + tabPageAdvanced - - 440, 287 + + 168, 239 - - 3 + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabProperties + + 152, 210 - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1 - - $this + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4 + + 432, 261 - - 172, 17 - - - Top, Left, Right + + Bottom, Right - - Segoe UI, 9.75pt, style=Italic + + tabPageAdvanced - - NoControl + + tabPageSave - - 82, 58 + + Add safety margin: - - 370, 18 + + 422, 155 + + + 425, 145 11 - - (Program schedule) + + tabPageSchedule - - MiddleLeft + + 184, 13 - - labelProgramSchedule + + 1 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 464, 412 - - $this + + IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null - - 0 + + 175, 13 - - Top, Left, Right + + textFilename - - Segoe UI, 9.75pt, style=Bold + + Stop previous recording and proceed - - NoControl + + Location - - 82, 37 + + MiddleLeft - - 370, 18 + + tabPageAdvanced - - 10 + + True - - (Program description) + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - MiddleLeft + + 8 - - labelProgramDescription + + buttonCancel - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 3, 217 - - $this + + 25, 194 - - 1 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Top, Left, Right + + 6 - - Segoe UI, 12pt, style=Bold + + $this - + + $this + + NoControl - - 82, 12 + + 307, 21 - - 370, 22 + + 2 - - 9 + + 2 - - (Channel name) + + $this - - MiddleLeft + + 3, 3, 3, 3 - - labelChannelName + + $this - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 202, 13 - - $this + + numericStartMargin - - 2 + + recordingTime - - NoControl + + 289, 17 - - 12, 12 + + 125, 25 - - 64, 64 + + tabPageDescription - - CenterImage + + 3 - - 8 + + 198, 17 - - pictureChannelLogo + + 5 - - IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + tabPageSchedule - - $this + + 9 - - 3 + + 3, 7 - - True - - - 6, 13 + + labelProgramDescription - - 464, 412 + + ImageBeforeText - - 480, 450 + + Top, Left, Right - - CenterParent + + 1 - - Record TV Channel + + 6, 71 - - ColumnName + + Bottom, Right - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + comboSchedulerAlreadyRunning - - ColumnLocation + + checkAppendRecordingDetails - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Cancel - - imageListLocations + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 11 - - selectFolder + + MiddleRight - - IpTviewr.UiServices.Common.Controls.SelectFolderDialog, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + Maximum number of tries: - - RecordChannelDialog + + 6, 24 - - IpTviewr.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + + tabProperties + + + NoControl + + False + + + False + + + True + + + 17, 17 + + + 172, 17 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordHelper.cs similarity index 90% rename from 1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordHelper.cs index 63104166..8a443457 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordHelper.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordHelper.cs @@ -1,4 +1,17 @@ -using IpTviewr.Services.EpgDiscovery; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Services.EpgDiscovery; using IpTviewr.Services.Record; using IpTviewr.Services.Record.Serialization; using IpTviewr.UiServices.Common.Forms; @@ -7,10 +20,7 @@ using IpTviewr.UiServices.Discovery; using Microsoft.SqlServer.MessageBox; using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace IpTviewr.UiServices.Record @@ -201,9 +211,9 @@ public static RecordAction GetRecordAction(UiBroadcastService service, EpgProgra if (epgProgram == null) throw new ArgumentNullException(nameof(epgProgram)); var action = RecordAction.CreateWithDefaultValues(); - var defaultLocation = RecordSaveLocation.GetDefaultSaveLocation(AppUiConfiguration.Current.User.Record.SaveLocations); + var defaultLocation = RecordSaveLocation.GetDefaultSaveLocation(AppConfig.Current.User.Record.SaveLocations); - action.Filename = string.Format("{0} - {1}", service.DisplayName, epgProgram.Title); + action.Filename = $"{service.DisplayName} - {epgProgram.Title}"; action.FileExtension = RecordChannelDialog.GetFilenameExtensions()[0]; action.SaveLocationName = defaultLocation.Name; action.SaveLocationPath = defaultLocation.Path; @@ -216,7 +226,7 @@ public static RecordAdvancedSettings GetRecordAdvancedSettings() { var advanced = RecordAdvancedSettings.CreateWithDefaultValues(); - var folders = AppUiConfiguration.Current.User.Record.TaskSchedulerFolders; + var folders = AppConfig.Current.User.Record.TaskSchedulerFolders; if (folders != null) { advanced.TaskSchedulerFolder = folders[0].Path; @@ -229,7 +239,7 @@ public static bool ScheduleTask(CommonBaseForm ownerForm, RecordTask task) { // schedule task var scheduler = new Scheduler(ownerForm.GetExceptionHandler(), - AppUiConfiguration.Current.Folders.RecordTasks, AppUiConfiguration.Current.User.Record.RecorderLauncherPath); + AppConfig.Current.Folders.RecordTasks, AppConfig.Current.User.Record.RecorderLauncherPath); if (scheduler.CreateTask(task)) { @@ -245,9 +255,9 @@ public static RecordRecorder GetDefaultRecorder() // TODO: Should be user selectable var recorder = new RecordRecorder() { - Name = AppUiConfiguration.Current.User.Record.Recorders[0].Name, - Path = AppUiConfiguration.Current.User.Record.Recorders[0].Path, - Arguments = AppUiConfiguration.Current.User.Record.Recorders[0].Arguments + Name = AppConfig.Current.User.Record.Recorders[0].Name, + Path = AppConfig.Current.User.Record.Recorders[0].Path, + Arguments = AppConfig.Current.User.Record.Recorders[0].Arguments }; return recorder; diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.Designer.cs similarity index 94% rename from 1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.Designer.cs index e3be4a0d..399e8fdb 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.Designer.cs @@ -1,4 +1,17 @@ -namespace IpTviewr.UiServices.Record +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.UiServices.Record { partial class RecordProgramOptions { @@ -176,4 +189,4 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonOk; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.cs similarity index 85% rename from 1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.cs index a4783793..ae2d6490 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.cs @@ -1,15 +1,21 @@ -using IpTviewr.Common; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; using IpTviewr.Services.EpgDiscovery; using IpTviewr.UiServices.Common; using IpTviewr.UiServices.Discovery; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace IpTviewr.UiServices.Record @@ -145,13 +151,12 @@ private void ChangeOkButtonText(bool withOptions) private void SetChannelDetails() { pictureChannelLogo.Image = SelectedService.Logo.GetImage(Configuration.Logos.LogoSize.Size64); - labelChannelName.Text = string.Format("{0} {1}", SelectedService.DisplayLogicalNumber, SelectedService.DisplayName); + labelChannelName.Text = $"{SelectedService.DisplayLogicalNumber} {SelectedService.DisplayName}"; if (SelectedProgram != null) { labelProgramDescription.Text = SelectedProgram.Title; - labelProgramSchedule.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(SelectedProgram.LocalStartTime, SelectedProgram.LocalEndTime, LocalReferenceTime), - FormatString.TimeSpanTotalMinutes(SelectedProgram.Duration, FormatString.Format.Extended)); + labelProgramSchedule.Text = $"{FormatString.DateTimeFromToMinutes(SelectedProgram.LocalStartTime, SelectedProgram.LocalEndTime, LocalReferenceTime)} ({FormatString.TimeSpanTotalMinutes(SelectedProgram.Duration, FormatString.Format.Extended)})"; } else { diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/RecordProgramOptions.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordProgramOptions.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.Designer.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.Designer.cs similarity index 95% rename from 1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.Designer.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.Designer.cs index f9e51230..1d4bcf61 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.Designer.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.UiServices.Record { @@ -181,4 +191,4 @@ private void InitializeComponent() private System.Windows.Forms.ColumnHeader columnTaskRecordings; private System.Windows.Forms.Button buttonViewRecordings; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.cs b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.cs similarity index 88% rename from 1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.cs rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.cs index 1fc8b4b8..ff3e426e 100644 --- a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.cs +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.cs @@ -1,14 +1,19 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; using System.Linq; -using System.Text; using System.Windows.Forms; using IpTviewr.Services.Record; using IpTviewr.Services.Record.Serialization; @@ -23,8 +28,8 @@ public partial class RecordTasksDialog : CommonBaseForm { private class AsyncResult { - public TaskList taskList; - public ListViewItem[] items; + public TaskList TaskList; + public ListViewItem[] Items; } // class AsyncResult public RecordTasksDialog() @@ -65,8 +70,6 @@ public static string ToString(RecordScheduleKind scheduleKind) private void RecordTasksDialog_Shown(object sender, EventArgs e) { - BasicGoogleTelemetry.SendScreenHit(this); - AsyncResult result; using (var worker = new BackgroundWorkerDialog()) @@ -89,7 +92,7 @@ private void RecordTasksDialog_Shown(object sender, EventArgs e) } // using worker listViewTasks.BeginUpdate(); - listViewTasks.Items.AddRange(result.items); + listViewTasks.Items.AddRange(result.Items); listViewTasks.EndUpdate(); if (listViewTasks.Items.Count == 0) @@ -110,7 +113,7 @@ private void AsyncBuildList(BackgroundWorkerOptions options, IBackgroundWorkerDi if (dialog.QueryCancel()) return; dialog.SetProgressText(TasksTexts.ObtainingTasks); - result.taskList = TaskList.Build(new TaskListBuildOptions() + result.TaskList = TaskList.Build(new TaskListBuildOptions() { RecordTaskFolder = RecordTaskFolder, SchedulerFolders = SchedulerFolders, @@ -121,11 +124,11 @@ private void AsyncBuildList(BackgroundWorkerOptions options, IBackgroundWorkerDi if (dialog.QueryCancel()) return; dialog.SetProgressText(TasksTexts.CreatingTasksList); - var q = from task in result.taskList + var q = from task in result.TaskList where task.Status == TaskStatus.Ok select task; - var items = new List(result.taskList.Count); + var items = new List(result.TaskList.Count); foreach (var task in q) { var channelName = (task.Task != null) ? task.Task.Channel.Name : null; @@ -145,7 +148,7 @@ private void AsyncBuildList(BackgroundWorkerOptions options, IBackgroundWorkerDi items.Add(item); } // foreach - result.items = items.ToArray(); + result.Items = items.ToArray(); } // AsyncBuildList private void listViewTasks_SelectedIndexChanged(object sender, EventArgs e) @@ -211,17 +214,17 @@ private void HandleListViewTasksSelectedIndexChanged() private void buttonEditTask_Click_Implementation(object sender, EventArgs e) { - IpTviewr.UiServices.Common.Forms.NotImplementedBox.ShowBox(this, "buttonEditTask"); + NotImplementedBox.ShowBox(this, "buttonEditTask"); } // buttonEditTask_Click_Implementation private void buttonDeleteTasks_Click_Implementation(object sender, EventArgs e) { - IpTviewr.UiServices.Common.Forms.NotImplementedBox.ShowBox(this, "buttonDeleteTasks"); + NotImplementedBox.ShowBox(this, "buttonDeleteTasks"); } // buttonDeleteTasks_Click_Implementation private void buttonViewRecordings_Click_Implementation(object sender, EventArgs e) { - IpTviewr.UiServices.Common.Forms.NotImplementedBox.ShowBox(this, "buttonViewRecordings"); + NotImplementedBox.ShowBox(this, "buttonViewRecordings"); } // buttonViewRecordings_Click_Implementation #endregion diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.es.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.es.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.es.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.es.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.resx b/1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.resx similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/RecordTasksDialog.resx rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/RecordTasksDialog.resx diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Action_RecordButton_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Action_RecordButton_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Resources/Action_RecordButton_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Action_RecordButton_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Action_Record_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Action_Record_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Resources/Action_Record_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Action_Record_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Icon_Record_48x48.png b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Icon_Record_48x48.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Resources/Icon_Record_48x48.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Icon_Record_48x48.png diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Icon_Recorder.ico b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Icon_Recorder.ico similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Resources/Icon_Recorder.ico rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Icon_Recorder.ico diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Status_Info_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Status_Info_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Resources/Status_Info_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Status_Info_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Record/Resources/Status_Warning_16x16.png b/1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Status_Warning_16x16.png similarity index 100% rename from 1.5 'Kruger 60'/UiServices.Record/Resources/Status_Warning_16x16.png rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/Resources/Status_Warning_16x16.png diff --git a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj b/1.5 'Kruger 60'/Assemblies/UiServices.Record/UiServices.Record.csproj similarity index 91% rename from 1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj rename to 1.5 'Kruger 60'/Assemblies/UiServices.Record/UiServices.Record.csproj index 42b699d3..dfcc9613 100644 --- a/1.5 'Kruger 60'/UiServices.Record/UiServices.Record.csproj +++ b/1.5 'Kruger 60'/Assemblies/UiServices.Record/UiServices.Record.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.UiServices.Record UiServices.Record - v4.5.2 + v4.6.2 512 SAK SAK @@ -42,16 +42,12 @@ ..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - + Properties\AssemblySolutionInfo.cs @@ -109,16 +105,34 @@ True - Resources.resx - True True + True + Resources.resx + + + Form Form + + Form + RecordChannelDialog.cs + + Form + + + Form + + + Form + + + Form + Form @@ -192,6 +206,7 @@ ResXFileCodeGenerator + Designer Resources.Designer.cs @@ -219,9 +234,13 @@ - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common + + + {8986CD52-0C65-42D6-9C47-20FF47CF87BB} + IpTviewr.Native {5a171dbb-855c-452b-93c6-229c7aa6c7a6} @@ -269,6 +288,7 @@ Resources\Action_Play_LG_16x16.png + @@ -276,6 +296,10 @@ + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record.Serialization + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Forms + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.SqlServerCE + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MIT + David Hall + Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/BoxExContents.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/BoxExContents.cs new file mode 100644 index 00000000..b3ebb981 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/BoxExContents.cs @@ -0,0 +1,338 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; +using System.Reflection; +using System.Windows.Forms; + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + internal partial class MsgBoxExForm + { + private BoxExContents Contents; + + private sealed class BoxExContents + { + private MsgBoxExForm Form; + private MsgBoxExContents Contents; + private string Caption; + private MsgBoxSeverity Severity; + private string Text; + private string Additional; + private Exception Exception; + + public BoxExContents(MsgBoxExForm form, MsgBoxExContents contents) + { + Form = form; + Contents = contents; + } // constructor + + public void FillMissing() + { + if (Contents.Caption != null) + { + Caption = Contents.Caption; + } + else + { + var owner = Form.Owner as Form; + if (owner != null) + { + Caption = owner.Text; + } + else + { + var entry = Assembly.GetEntryAssembly(); + var assemblyTitle = entry.GetCustomAttributes(typeof(AssemblyTitleAttribute), true); + var firstTitle = assemblyTitle?[0] as AssemblyTitleAttribute; + Caption = (firstTitle != null) ? firstTitle.Title : entry.GetName().Name; + } // if-else + } // if !Caption + + Text = Contents.Text; + Additional = Contents.AdditionalInformation; + Exception = Contents.Exception; + + if (Text == null) + { + if (Contents.AdditionalInformation != null) + { + Text = Contents.AdditionalInformation; + Additional = null; + } + else if (Contents.Exception != null) + { + Text = Contents.Exception.Message; + Exception = Contents.Exception?.InnerException; + } // if-else + } // if !Box.Text + + if (Additional == null) + { + if (Exception != null) + { + Additional = Exception.Message; + Exception = Exception?.InnerException; + } // if + } // if !Box.Additional + + if (Contents.Severity == MsgBoxSeverity.Auto) + { + if (Contents.Exception != null) + { + Severity = MsgBoxSeverity.Exception; + } // if + else + { + Severity = MsgBoxSeverity.Informational; + } // if-else + } + else + { + Severity = Contents.Severity; + } // if-else + } // FillMissing + + #region Apply() + public void Apply() + { + SetSeverity(); + + Form.Text = Caption; + Form.labelText.Text = Text; + + SetExceptionDetails(); + + SetButtons(); + } // Apply + + private void SetSeverity() + { + switch (Severity) + { + case MsgBoxSeverity.None: + RemoveControl(Form.iconDialog); + break; + + case MsgBoxSeverity.Verbose: + Form.iconDialog.Image = (Form.iconDialog.Width <= 96) ? Properties.Resources.IconVerbose96 : Properties.Resources.IconVerbose512; + break; + case MsgBoxSeverity.Informational: + Form.iconDialog.Image = (Form.iconDialog.Width <= 96) ? Properties.Resources.IconInfo96 : Properties.Resources.IconInfo512; + break; + case MsgBoxSeverity.Warning: + Form.iconDialog.Image = (Form.iconDialog.Width <= 96) ? Properties.Resources.IconWarning96 : Properties.Resources.IconWarning512; + break; + case MsgBoxSeverity.Error: + Form.iconDialog.Image = (Form.iconDialog.Width <= 96) ? Properties.Resources.IconError96 : Properties.Resources.IconError512; + break; + case MsgBoxSeverity.Exception: + Form.iconDialog.Image = (Form.iconDialog.Width <= 96) ? Properties.Resources.IconException96 : Properties.Resources.IconException512; + break; + } // switch + } // SetSeverity + + private void SetExceptionDetails() + { + Exception exception; + var texts = new string[5]; + var panels = new Control[] { Form.panelAdditional, Form.panelDetails2, Form.panelDetails3, Form.panelDetails4, Form.panelDetails5 }; + var labels = new Control[] { Form.labelException1, Form.labelException2, Form.labelException3, Form.labelException4, Form.labelException5 }; + var index = 0; + + if (Additional != null) + { + texts[index++] = Additional; + } // if + + exception = Exception; + while ((exception != null) && (index < 5)) + { + texts[index++] = exception.Message; + exception = exception.InnerException; + } // while + + for (index = 0; index < 5; index++) + { + var text = texts[index]; + if (text == null) + { + RemoveControl(panels[index]); + break; + } // if + + labels[index].Text = text; + } // for index + + } // SetExceptionDetails + + private void SetButtons() + { + Form.buttonCopy.Text = Properties.Resources.ButtonCopy; + Form.buttonDetails.Text = Properties.Resources.ButtonDetails; + + switch (Contents.Buttons) + { + case MsgBoxExButtons.OK: + SetButtonsText(Properties.Resources.ButtonOK); + Form.AcceptButton = Form.buttonDlg1; + Form.buttonDlg1.DialogResult = DialogResult.OK; + break; + + case MsgBoxExButtons.OKCancel: + SetButtonsText(Properties.Resources.ButtonOK, Properties.Resources.ButtonCancel); + Form.AcceptButton = Form.buttonDlg1; + Form.CancelButton = Form.buttonDlg2; + Form.buttonDlg1.DialogResult = DialogResult.OK; + Form.buttonDlg2.DialogResult = DialogResult.Cancel; + break; + + case MsgBoxExButtons.YesNo: + SetButtonsText(Properties.Resources.ButtonYes, Properties.Resources.ButtonNo); + Form.AcceptButton = Form.buttonDlg1; + Form.CancelButton = Form.buttonDlg2; + Form.buttonDlg1.DialogResult = DialogResult.Yes; + Form.buttonDlg2.DialogResult = DialogResult.No; + break; + + case MsgBoxExButtons.RetryCancel: + SetButtonsText(Properties.Resources.ButtonRetry, Properties.Resources.ButtonCancel); + Form.AcceptButton = Form.buttonDlg1; + Form.CancelButton = Form.buttonDlg2; + Form.buttonDlg1.DialogResult = DialogResult.Retry; + Form.buttonDlg2.DialogResult = DialogResult.Cancel; + break; + + case MsgBoxExButtons.YesNoCancel: + SetButtonsText(Properties.Resources.ButtonYes, Properties.Resources.ButtonNo, Properties.Resources.ButtonCancel); + Form.AcceptButton = Form.buttonDlg1; + Form.CancelButton = Form.buttonDlg2; + Form.buttonDlg1.DialogResult = DialogResult.Yes; + Form.buttonDlg2.DialogResult = DialogResult.No; + Form.buttonDlg3.DialogResult = DialogResult.Cancel; + break; + + case MsgBoxExButtons.AbortRetryIgnore: + SetButtonsText(Properties.Resources.ButtonAbort, Properties.Resources.ButtonRetry, Properties.Resources.ButtonIgnore); + Form.AcceptButton = Form.buttonDlg1; + Form.CancelButton = Form.buttonDlg3; + Form.buttonDlg1.DialogResult = DialogResult.Abort; + Form.buttonDlg2.DialogResult = DialogResult.Retry; + Form.buttonDlg3.DialogResult = DialogResult.Ignore; + break; + + case MsgBoxExButtons.Custom: + SetCustomButtons(); + break; + } // switch Buttons + } // SetButtons + + private void SetCustomButtons() + { + if ((Contents.CustomButtons == null) || (Contents.CustomButtons.Length == 0)) + { + SetButtonsText(Properties.Resources.ButtonOK); + Form.AcceptButton = Form.buttonDlg1; + Form.buttonDlg1.DialogResult = DialogResult.OK; + } + else + { + SetButtonsText(Contents.CustomButtons); + Form.AcceptButton = GetButton(Contents.CustomAcceptButton); + Form.CancelButton = GetButton(Contents.CustomCancelButton); + + Form.buttonDlg1.DialogResult = Contents.CustomResults?[0] ?? DialogResult.None; + Form.buttonDlg2.DialogResult = Contents.CustomResults?[1] ?? DialogResult.None; + Form.buttonDlg3.DialogResult = Contents.CustomResults?[2] ?? DialogResult.None; + Form.buttonDlg4.DialogResult = Contents.CustomResults?[3] ?? DialogResult.None; + Form.buttonDlg5.DialogResult = Contents.CustomResults?[4] ?? DialogResult.None; + } // if-else + } // SetCustomButtons + + public void SetDefaultButton() + { + Button control = null; + + switch (Contents.DefaultButton) + { + case MsgBoxExButton.Button1: + control = Form.buttonDlg1; + break; + case MsgBoxExButton.Button2: + control = Form.buttonDlg2; + break; + case MsgBoxExButton.Button3: + control = Form.buttonDlg3; + break; + case MsgBoxExButton.Button4: + control = Form.buttonDlg4; + break; + case MsgBoxExButton.Button5: + control = Form.buttonDlg5; + break; + } // switch + + if (control != null) + { + control.Focus(); + Form.AcceptButton = control; + } // if + } // SetDefaultButton + #endregion + + private Button GetButton(MsgBoxExButton button) + { + switch (button) + { + case MsgBoxExButton.Button1: return Form.buttonDlg1; + case MsgBoxExButton.Button2: return Form.buttonDlg2; + case MsgBoxExButton.Button3: return Form.buttonDlg3; + case MsgBoxExButton.Button4: return Form.buttonDlg4; + case MsgBoxExButton.Button5: return Form.buttonDlg5; + default: + return null; + } // switch + } // GetButton + + private void SetButtonsText(params string[] buttons) + { + SetButtonText(Form.buttonDlg1, buttons.Length > 0 ? buttons[0] : null); + SetButtonText(Form.buttonDlg2, buttons.Length > 1 ? buttons[1] : null); + SetButtonText(Form.buttonDlg3, buttons.Length > 2 ? buttons[2] : null); + SetButtonText(Form.buttonDlg4, buttons.Length > 3 ? buttons[3] : null); + SetButtonText(Form.buttonDlg5, buttons.Length > 4 ? buttons[4] : null); + } // SetButtonsText + + private void SetButtonText(Button button, string text) + { + if (text == null) + { + RemoveControl(button); + } + else + { + button.MinimumSize = Form.buttonDlg1.MinimumSize; + button.Size = Size.Empty; + button.Text = text; + } // if-else + } // SetButtonText + + private void RemoveControl(Control control) + { + control.Parent.Controls.Remove(control); + control.Dispose(); + } // RemoveControl + } // internal sealed class MsgBoxExData + } // partial class MsgBoxExForm +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/BoxExLayout.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/BoxExLayout.cs new file mode 100644 index 00000000..d63004c7 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/BoxExLayout.cs @@ -0,0 +1,326 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + internal partial class MsgBoxExForm + { + private BoxExLayout BoxLayout; + + private sealed class BoxExLayout + { + private MsgBoxExForm Form; + private MsgBoxExContents BoxExContents; + private Button[] DlgButtons; + private Size NonClientSize; + private int LineHeight; + private bool IsMono; + + private const int MaxDialogWidth = 600; + + private const int MinTextLines = 3; + + private const int DefaultTextLines = 15; + private const int DefaultExceptionLines = 3; + private const int DefaultInnerExceptionLines = 2; + + private const int MaxTextLines = 30; + private const int MaxExceptionLines = 7; + private const int MaxInnerExceptionLines = 5; + + public BoxExLayout(MsgBoxExForm form, MsgBoxExContents contents) + { + Form = form; + BoxExContents = contents; + DlgButtons = new Button[] { Form.buttonDlg1, Form.buttonDlg2, Form.buttonDlg3, Form.buttonDlg4, Form.buttonDlg5 }; + } // constructor + + public void PerformLayout() + { + IsMono = Type.GetType("Mono.Runtime") != null; + NonClientSize = Form.Size - Form.ClientSize; + CalcLineHeight(); + SizeBottomPanel(); + SizeTopPanel(); + } // PerformLayout + + private void SizeTopPanel() + { + PositionContentsPanel(); + SetLabelsMaxSizes(); + AdjustLabelTextSize(); + PositionContentsPanel(); + } // SizeTopPanel + + private void PositionContentsPanel() + { + ArrangeLinearHorizontal(Form.iconDialog, Form.panelContents); + + if (Form.panelAdditional.IsDisposed) + { + ArrangeLinearVertical(Form.labelText); + return; + } // if + + ArrangeLinearVertical(Form.labelText, Form.panelAdditional); + + ArrangeLinearVertical(Form.labelAdditionalInfo, Form.panelDetails1); + + ArrangeLinearHorizontal(Form.iconArrow1, Form.panelException1); + ArrangeLinearVertical(Form.labelException1, Form.panelDetails2); + + if (Form.panelDetails2.IsDisposed) return; + + ArrangeLinearHorizontal(Form.iconArrow2, Form.panelException2); + ArrangeLinearVertical(Form.labelException2, Form.panelDetails3); + + if (Form.panelDetails3.IsDisposed) return; + + ArrangeLinearHorizontal(Form.iconArrow3, Form.panelException3); + ArrangeLinearVertical(Form.labelException3, Form.panelDetails4); + + if (Form.panelDetails4.IsDisposed) return; + + ArrangeLinearHorizontal(Form.iconArrow4, Form.panelException4); + ArrangeLinearVertical(Form.labelException4, Form.panelDetails5); + + if (Form.panelDetails5.IsDisposed) return; + + ArrangeLinearHorizontal(Form.iconArrow5, Form.labelException5); + } // PositionContentsPanel + + private void SetLabelsMaxSizes() + { + Point[] panelLocation; + Control[] label; + int[] maxLines; + Point p; + int maxTextLines, maxExceptionLines, maxInnerExceptionLines; + + maxTextLines = MinMaxDefault(BoxExContents.MaxTextLines, DefaultTextLines, MaxInnerExceptionLines); + maxExceptionLines = MinMaxDefault(BoxExContents.MaxExceptionLines, DefaultExceptionLines, MaxExceptionLines); + maxInnerExceptionLines = MinMaxDefault(BoxExContents.MaxInnerExceptionLines, DefaultInnerExceptionLines, MaxInnerExceptionLines); + + panelLocation = new Point[6]; + label = new Control[] { Form.labelText, Form.labelException1, Form.labelException2, Form.labelException3, Form.labelException4, Form.labelException5 }; + maxLines = new int[] { maxTextLines, maxExceptionLines, maxInnerExceptionLines, maxInnerExceptionLines, maxInnerExceptionLines, maxInnerExceptionLines }; + + p = Form.panelTop.Location; + p.Offset(Form.panelContents.Location); + panelLocation[0] = p; + + p.Offset(Form.panelAdditional.Location); + p.Offset(Form.panelDetails1.Location); + p.Offset(Form.panelException1.Location); + panelLocation[1] = p; + + p.Offset(Form.panelDetails2.Location); + p.Offset(Form.panelException2.Location); + panelLocation[2] = p; + + p.Offset(Form.panelDetails3.Location); + p.Offset(Form.panelException3.Location); + panelLocation[3] = p; + + p.Offset(Form.panelDetails4.Location); + p.Offset(Form.panelException4.Location); + panelLocation[4] = p; + + p.Offset(Form.panelDetails5.Location); + panelLocation[5] = p; + + var maxWidth = Math.Max(MaxDialogWidth, Form.panelBottom.Width); + maxWidth -= Form.panelTop.Margin.Right + Form.panelContents.Margin.Right; + maxWidth -= NonClientSize.Width; + + for (var index = 0; index < panelLocation.Length; index++) + { + p = panelLocation[index]; + p.Offset(label[index].Location); + + label[index].MaximumSize = new Size(maxWidth - p.X, LineHeight * maxLines[index]); + label[index].Size = GetPreferredSize(label[index]); + } // for index + } // SetLabelsMaxSizes + + private void AdjustLabelTextSize() + { + if ((Form.panelAdditional.IsDisposed) && Form.labelText.Height < Form.iconDialog.Height) + { + Form.labelText.TextAlign = ContentAlignment.MiddleLeft; + Form.labelText.MinimumSize = new Size(0, Form.iconDialog.Height); + Form.labelText.Size = new Size(Form.labelText.Size.Width, Math.Min(Form.labelText.Size.Height, Form.iconDialog.Height)); + Form.Text = Form.labelText.Size.ToString(); + return; + } // if + + // TODO: reduce lines if there's additional info + // to avoid having a huge dialog. A minumum ammount of + // lines is guaranteed (MinTextLines) + } // AdjustLabelTextSize + + private void SizeBottomPanel() + { + SizeControlButtonsPanel(); + SizeDialogButtonsPanel(); + + var size = new Size(); + size.Width = Form.panelBottom.Padding.Left + + Form.panelControlButtons.Width + Form.panelDialogButtons.Width + + Form.panelBottom.Padding.Right; + size.Height = Math.Max(Form.panelControlButtons.Height, Form.panelDialogButtons.Height); + + Form.panelBottom.Size = MaxSize(size, Form.panelBottom.Size); + Form.panelBottom.MinimumSize = size; + + Form.MinimumSize = new Size(size.Width + NonClientSize.Width, Form.MinimumSize.Height); + Form.Size = MaxSize(Form.Size, Form.MinimumSize); + } // SizeBottomPanel + + private void SizeControlButtonsPanel() + { + var buttons = new Button[] { Form.buttonCopy, Form.buttonDetails }; + + AutoSizeButtons(Form.buttonCopy.MinimumSize, buttons); + + var size = ArrangeLinearHorizontal(buttons); + Form.panelControlButtons.Size = MaxSize(size, Form.panelControlButtons.Size); + Form.panelControlButtons.MinimumSize = size; + } // SizeControlButtonsPanel + + private void SizeDialogButtonsPanel() + { + AutoSizeButtons(Form.buttonDlg1.MinimumSize, DlgButtons); + + var size = ArrangeLinearHorizontal(DlgButtons); + Form.panelDialogButtons.Size = MaxSize(size, Form.panelDialogButtons.Size); + Form.panelDialogButtons.MinimumSize = size; + } // CalcDialogButtonsPanel + + private void AutoSizeButtons(Size minSize, params Button[] controls) + { + var trick = new Size(1, 0); + + foreach (var button in controls) + { + if (button.IsDisposed) continue; + + button.MinimumSize = minSize; + + if (button.AutoEllipsis) + { + button.Size = GetPreferredSize(button) + trick; + button.Size = button.Size - trick; + } + else + { + button.Size = GetPreferredSize(button); + } // if-else AutoEllipsis + } // foreach button + } // AutosizeButtons + + private Size ArrangeLinearHorizontal(params Control[] controls) + { + var width = 0; + var height = 0; + + foreach (var control in controls) + { + if (control.IsDisposed) continue; + + control.Left = control.Margin.Left + width; + control.Top = control.Margin.Top; + + width += control.Margin.Left + control.Width + control.Margin.Right; + height = Math.Max(height, control.Margin.Top + control.Height + control.Margin.Bottom); + } // foreach + + return new Size(width, height); + } // ArrangeLinearHorizontal + + private Size ArrangeLinearVertical(params Control[] controls) + { + var width = 0; + var height = 0; + + foreach (var control in controls) + { + if (control.IsDisposed) continue; + + control.Left = control.Margin.Left; + control.Top = height + control.Margin.Top; + + width = Math.Max(width, control.Margin.Left + control.Width + control.Margin.Right); + height += control.Margin.Top + control.Height + control.Margin.Bottom; + } // foreach + + return new Size(width, height); + } // ArrangeLinearVertical + + private void CalcLineHeight() + { + var current = Form.labelText.Text; + var x = Form.Handle; + Form.labelText.Text = "1⁰ ‡§ Lorem Ipsum Dolor" + Environment.NewLine + + "2 åÅĀā" + Environment.NewLine + + "3⁰ ‡§" + Environment.NewLine + + "4 åÅĀā"; + LineHeight = GetPreferredSize(Form.labelText).Height / 4; + Form.labelText.Text = current; + } // CalcLineHeight + + private int MinMaxDefault(int value, int defaultValue, int maxValue) + { + if (value <= 0) return defaultValue; + return Math.Min(value, maxValue); + } // MinMaxDefault + + private Size GetPreferredSize(Control control) + { + if (!IsMono) + { + return control.PreferredSize; + } + else + { + var maxSize = MaxSize(new Size(int.MaxValue, int.MaxValue), control.MaximumSize); + var size = TextRenderer.MeasureText(control.Text, control.Font, maxSize, TextFormatFlags.NoPrefix | TextFormatFlags.WordBreak); + if (control is Button) + { + size += new Size(6, 6); + } // if + size = MinSize(size, control.MinimumSize); + size = MaxSize(size, control.MaximumSize); + + return size; + } // if-else + } // GetPreferredSize + + private Size MinSize(Size size, Size minSize) + { + return new Size(Math.Max(size.Width, minSize.Width), Math.Max(size.Height, minSize.Height)); + } // MinSize + + private Size MaxSize(Size size, Size maxSize) + { + var width = maxSize.Width <= 0 ? size.Width : Math.Min(size.Width, maxSize.Width); + var height = maxSize.Height <= 0 ? size.Height : Math.Min(size.Height, maxSize.Height); + return new Size(width, height); + } // MaxSize + } // sealed class BoxExLayout + } // partial class MsgBoxExForm +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/LICENSE.ES.MD b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/LICENSE.ES.MD new file mode 100644 index 00000000..ffa4d66a --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/LICENSE.ES.MD @@ -0,0 +1,87 @@ +# Biblioteca 'ExceptionMsgBox' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. ExceptionMsgBox +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/LICENSE.MD b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/LICENSE.MD new file mode 100644 index 00000000..3d9ab83b --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/LICENSE.MD @@ -0,0 +1,59 @@ +# Library 'ExceptionMsgBox' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. ExceptionMsgBox +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MessageBoxEx.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MessageBoxEx.cs new file mode 100644 index 00000000..5a6078f0 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MessageBoxEx.cs @@ -0,0 +1,159 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + public static class MessageBoxEx + { + #region System.Windows.Forms.MessageBox compatibility (no owner) + + public static DialogResult Show(string text) + { + var contents = new MsgBoxExContents(text); + return Show(contents); + } // Show: string + + public static DialogResult Show(string text, string caption) + { + var contents = new MsgBoxExContents(text, caption); + return Show(contents); + } // Show: string, string + + public static DialogResult Show(string text, string caption, MessageBoxButtons buttons) + { + var contents = new MsgBoxExContents(text, caption, ToExEnum(buttons)); + return Show(contents); + } // Show: string, string, MessageBoxButtons + + public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) + { + var contents = new MsgBoxExContents(text, caption, ToExEnum(buttons), ToExSeverity(icon)); + return Show(contents); + } // Show: string, string, MessageBoxButtons, MessageBoxIcon + + public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) + { + var contents = new MsgBoxExContents(text, caption, ToExEnum(buttons), ToExSeverity(icon), ToExEnum(defaultButton)); + return Show(contents); + } // Show: string, string, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton + + #endregion + + #region System.Windows.Forms.MessageBox compatibility (with owner) + + public static DialogResult Show(IWin32Window owner, string text) + { + var contents = new MsgBoxExContents(text); + return Show(owner, contents); + } // Show: IWin32Window, string + + public static DialogResult Show(IWin32Window owner, string text, string caption) + { + var contents = new MsgBoxExContents(text, caption); + return Show(owner, contents); + } // Show: IWin32Window, string, string + + public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons) + { + var contents = new MsgBoxExContents(text, caption, ToExEnum(buttons)); + return Show(owner, contents); + } // Show: IWin32Window, string, string, MessageBoxButtons + + public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) + { + var contents = new MsgBoxExContents(text, caption, ToExEnum(buttons), ToExSeverity(icon)); + return Show(owner, contents); + } // Show: IWin32Window, string, string, MessageBoxButtons, MessageBoxIcon + + public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton) + { + var contents = new MsgBoxExContents(text, caption, ToExEnum(buttons), ToExSeverity(icon), ToExEnum(defaultButton)); + return Show(owner, contents); + } // Show: IWin32Window, string, string, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton + + #endregion + + public static DialogResult Show(Exception ex) + { + return Show((IWin32Window)null, ex); + } // Show: Exception + + public static DialogResult Show(string text, Exception ex) + { + return Show(null, text, ex); + } // Show: Exception + + public static DialogResult Show(IWin32Window owner, Exception ex) + { + var contents = new MsgBoxExContents(ex); + return Show(owner, contents); + } // Show: IWin32Owner, Exception + + public static DialogResult Show(IWin32Window owner, string text, Exception ex) + { + var contents = new MsgBoxExContents(ex) + { + Text = text, + }; + return Show(owner, contents); + } // Show: IWin32Owner, string, Exception + + public static DialogResult Show(MsgBoxExContents contents) + { + return Show(null, contents); + } // Show: MessageBoxContents + + public static DialogResult Show(IWin32Window owner, MsgBoxExContents contents) + { + if (contents == null) throw new ArgumentNullException(nameof(contents)); + + using (var box = new MsgBoxExForm(contents)) + { + contents.Owner = owner; + return box.ShowDialog(owner); + } // using + } // Show: IWin32Window, MessageBoxContents + + #region Convert MessageBox constants to MsgBoxEx constants + private static MsgBoxExButtons ToExEnum(MessageBoxButtons buttons) + { + return (MsgBoxExButtons)buttons; + } // ToExEnum + + private static MsgBoxExButton ToExEnum(MessageBoxDefaultButton button) + { + return (MsgBoxExButton)button; + } // ToMessageBoxExEnum + + private static MsgBoxSeverity ToExSeverity(MessageBoxIcon icon) + { + switch (icon) + { + case MessageBoxIcon.Information: // MessageBoxIcon.Asterisk + return MsgBoxSeverity.Informational; + case MessageBoxIcon.Warning: //MessageBoxIcon.Exclamation + return MsgBoxSeverity.Warning; + case MessageBoxIcon.Error: //MessageBoxIcon.Hand, MessageBoxIcon.Stop + return MsgBoxSeverity.Error; + case MessageBoxIcon.Question: + return MsgBoxSeverity.Question; + default: + return MsgBoxSeverity.None; + } // switch + } // toExSeverity + #endregion + } // static class MessageBoxEx +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExButton.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExButton.cs new file mode 100644 index 00000000..d161bacb --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExButton.cs @@ -0,0 +1,57 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + /// + /// Specifies constants defining the default button on a AlphaCentaury.Winforms.MsgBoxEx. + /// + /// Compatible with MessageBoxDefaultButton constants + + public enum MsgBoxExButton + { + #region "Inherit" from MessageBoxDefaultButton + /// + // The first button on the extended message box. + /// + Button1 = 0, + + /// + // The second button on the extended message box. + /// + Button2 = 0x100, + + /// + // The third button on the extended message box. + /// + Button3 = 0x200, + #endregion + + #region New constants + /// + // The fourth button on the extended message box. + /// + Button4 = 0x1000, + + /// + // The fifth button on the extended message box. + /// + Button5 = 0x2000, + + /// + // No button. + /// + None = 0x8000, + #endregion + } // enum MsgBoxExButton +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExButtons.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExButtons.cs new file mode 100644 index 00000000..dff672a9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExButtons.cs @@ -0,0 +1,63 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + /// + /// Specifies constants defining which buttons to display on a AlphaCentaury.Winforms.MsgBoxEx. + /// + /// Compatible with MessageBoxButtons constants + public enum MsgBoxExButtons + { + #region "Inherit" from MessageBoxButtons + /// + /// The extended message box contains an OK button. + /// + OK = MessageBoxButtons.OK, + + /// + /// The extended message box contains OK and Cancel buttons. + /// + OKCancel = MessageBoxButtons.OKCancel, + + /// + /// The extended message box contains Abort, Retry, and Ignore buttons. + /// + AbortRetryIgnore = MessageBoxButtons.AbortRetryIgnore, + + /// + /// The extended message box contains Yes, No, and Cancel buttons. + /// + YesNoCancel = MessageBoxButtons.YesNoCancel, + + /// + /// The extended message box contains Yes and No buttons. + /// + YesNo = MessageBoxButtons.YesNo, + + /// + /// The extended message box contains Retry and Cancel buttons. + /// + RetryCancel = MessageBoxButtons.RetryCancel, + #endregion + + #region New constants + /// + /// The extended message box contains user defined buttons. + /// + Custom = -100, + #endregion + } // enum MsgBoxExButtons +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExContents.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExContents.cs new file mode 100644 index 00000000..4f3229e7 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExContents.cs @@ -0,0 +1,162 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + public class MsgBoxExContents + { + public MsgBoxExContents() + { + CustomCancelButton = MsgBoxExButton.None; + } // constructor + + public MsgBoxExContents(Exception ex) : this() + { + Exception = ex; + Buttons = MsgBoxExButtons.OK; + } // constructor + + public MsgBoxExContents(string text) : this() + { + Text = text; + Severity = MsgBoxSeverity.None; + } // constructor + + public MsgBoxExContents(string text, string caption) : this(text) + { + Caption = caption; + } // constructor + + public MsgBoxExContents(string text, string caption, MsgBoxExButtons buttons) : this(text, caption) + { + Buttons = buttons; + } // constructor + + public MsgBoxExContents(string text, string caption, MsgBoxExButtons buttons, MsgBoxSeverity severity) : this(text, caption, buttons) + { + Severity = severity; + } // constructor + + public MsgBoxExContents(string text, string caption, MsgBoxExButtons buttons, MsgBoxSeverity severity, MsgBoxExButton defaultButton) : this(text, caption, buttons, severity) + { + DefaultButton = defaultButton; + } // constructor + + public MsgBoxExContents(string text, string caption, MsgBoxExButtons buttons, MsgBoxSeverity severity, MsgBoxExButton defaultButton, string[] customButtons, DialogResult[] customResults, MsgBoxExButton acceptButton = MsgBoxExButton.None, MsgBoxExButton cancelButton = MsgBoxExButton.None) : this(text, caption, MsgBoxExButtons.Custom, severity, defaultButton) + { + CustomButtons = customButtons; + CustomResults = customResults; + CustomAcceptButton = acceptButton; + CustomCancelButton = cancelButton; + } // constructor + + public IWin32Window Owner + { + get; + internal set; + } // Owner + + public string Caption + { + get; + set; + } // Caption + + public string Text + { + get; + set; + } // Text + + public string AdditionalInformation + { + get; + set; + } // AdditionalInformation + + public Exception Exception + { + get; + set; + } // Exception + + public MsgBoxSeverity Severity + { + get; + set; + } // Severity + + public MsgBoxExButtons Buttons + { + get; + set; + } // Buttons + + public MsgBoxExButton DefaultButton + { + get; + set; + } // DefaultButton + + public string[] CustomButtons + { + get; + set; + } // CustomButtons + + public DialogResult[] CustomResults + { + get; + set; + } // CustomResults + + public MsgBoxExButton CustomAcceptButton + { + get; + set; + } // CustomAcceptButton + + public MsgBoxExButton CustomCancelButton + { + get; + set; + } // CustomCancelButton + + public int MaxTextLines + { + get; + set; + } // MaxTextLines + + public int MinTextLinesWithException + { + get; + set; + } // MinTextLinesWithException + + public int MaxExceptionLines + { + get; + set; + } // MaxExceptionLines + + public int MaxInnerExceptionLines + { + get; + set; + } // MaxInnerExceptionLines + } // class MsgBoxExContents +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExForm.Designer.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExForm.Designer.cs new file mode 100644 index 00000000..80574cf9 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExForm.Designer.cs @@ -0,0 +1,619 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + partial class MsgBoxExForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.iconDialog = new System.Windows.Forms.PictureBox(); + this.panelBottom = new System.Windows.Forms.Panel(); + this.panelContents = new System.Windows.Forms.Panel(); + this.panelAdditional = new System.Windows.Forms.Panel(); + this.panelDetails1 = new System.Windows.Forms.Panel(); + this.panelException1 = new System.Windows.Forms.Panel(); + this.panelDetails2 = new System.Windows.Forms.Panel(); + this.panelException2 = new System.Windows.Forms.Panel(); + this.panelDetails3 = new System.Windows.Forms.Panel(); + this.panelException3 = new System.Windows.Forms.Panel(); + this.panelDetails4 = new System.Windows.Forms.Panel(); + this.panelException4 = new System.Windows.Forms.Panel(); + this.panelDetails5 = new System.Windows.Forms.Panel(); + this.labelException5 = new System.Windows.Forms.Label(); + this.iconArrow5 = new System.Windows.Forms.PictureBox(); + this.labelException4 = new System.Windows.Forms.Label(); + this.iconArrow4 = new System.Windows.Forms.PictureBox(); + this.labelException3 = new System.Windows.Forms.Label(); + this.iconArrow3 = new System.Windows.Forms.PictureBox(); + this.labelException2 = new System.Windows.Forms.Label(); + this.iconArrow2 = new System.Windows.Forms.PictureBox(); + this.labelException1 = new System.Windows.Forms.Label(); + this.iconArrow1 = new System.Windows.Forms.PictureBox(); + this.labelAdditionalInfo = new System.Windows.Forms.Label(); + this.panelTop = new System.Windows.Forms.Panel(); + this.panelControlButtons = new System.Windows.Forms.Panel(); + this.buttonDetails = new System.Windows.Forms.Button(); + this.buttonCopy = new System.Windows.Forms.Button(); + this.panelDialogButtons = new System.Windows.Forms.Panel(); + this.buttonDlg5 = new System.Windows.Forms.Button(); + this.buttonDlg4 = new System.Windows.Forms.Button(); + this.buttonDlg3 = new System.Windows.Forms.Button(); + this.buttonDlg2 = new System.Windows.Forms.Button(); + this.buttonDlg1 = new System.Windows.Forms.Button(); + this.labelText = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.iconDialog)).BeginInit(); + this.panelBottom.SuspendLayout(); + this.panelContents.SuspendLayout(); + this.panelAdditional.SuspendLayout(); + this.panelDetails1.SuspendLayout(); + this.panelException1.SuspendLayout(); + this.panelDetails2.SuspendLayout(); + this.panelException2.SuspendLayout(); + this.panelDetails3.SuspendLayout(); + this.panelException3.SuspendLayout(); + this.panelDetails4.SuspendLayout(); + this.panelException4.SuspendLayout(); + this.panelDetails5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow1)).BeginInit(); + this.panelTop.SuspendLayout(); + this.panelControlButtons.SuspendLayout(); + this.panelDialogButtons.SuspendLayout(); + this.SuspendLayout(); + // + // iconDialog + // + this.iconDialog.Location = new System.Drawing.Point(15, 9); + this.iconDialog.Margin = new System.Windows.Forms.Padding(9, 9, 0, 9); + this.iconDialog.MinimumSize = new System.Drawing.Size(48, 48); + this.iconDialog.Name = "iconDialog"; + this.iconDialog.Size = new System.Drawing.Size(48, 48); + this.iconDialog.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconDialog.TabIndex = 3; + this.iconDialog.TabStop = false; + // + // panelBottom + // + this.panelBottom.AutoSize = true; + this.panelBottom.BackColor = System.Drawing.SystemColors.Control; + this.panelBottom.Controls.Add(this.panelDialogButtons); + this.panelBottom.Controls.Add(this.panelControlButtons); + this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panelBottom.Location = new System.Drawing.Point(0, 63); + this.panelBottom.Margin = new System.Windows.Forms.Padding(0); + this.panelBottom.MinimumSize = new System.Drawing.Size(0, 44); + this.panelBottom.Name = "panelBottom"; + this.panelBottom.Padding = new System.Windows.Forms.Padding(15, 0, 15, 0); + this.panelBottom.Size = new System.Drawing.Size(398, 44); + this.panelBottom.TabIndex = 0; + // + // panelContents + // + this.panelContents.AutoSize = true; + this.panelContents.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelContents.Controls.Add(this.labelText); + this.panelContents.Controls.Add(this.panelAdditional); + this.panelContents.Location = new System.Drawing.Point(67, 9); + this.panelContents.Margin = new System.Windows.Forms.Padding(9); + this.panelContents.Name = "panelContents"; + this.panelContents.Size = new System.Drawing.Size(266, 148); + this.panelContents.TabIndex = 4; + // + // panelAdditional + // + this.panelAdditional.AutoSize = true; + this.panelAdditional.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelAdditional.Controls.Add(this.panelDetails1); + this.panelAdditional.Controls.Add(this.labelAdditionalInfo); + this.panelAdditional.Location = new System.Drawing.Point(9, 29); + this.panelAdditional.Margin = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.panelAdditional.Name = "panelAdditional"; + this.panelAdditional.Size = new System.Drawing.Size(257, 119); + this.panelAdditional.TabIndex = 10; + // + // panelDetails1 + // + this.panelDetails1.AutoSize = true; + this.panelDetails1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDetails1.Controls.Add(this.panelException1); + this.panelDetails1.Controls.Add(this.iconArrow1); + this.panelDetails1.Location = new System.Drawing.Point(12, 21); + this.panelDetails1.Margin = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.panelDetails1.Name = "panelDetails1"; + this.panelDetails1.Size = new System.Drawing.Size(245, 98); + this.panelDetails1.TabIndex = 9; + // + // panelException1 + // + this.panelException1.AutoSize = true; + this.panelException1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelException1.Controls.Add(this.panelDetails2); + this.panelException1.Controls.Add(this.labelException1); + this.panelException1.Location = new System.Drawing.Point(26, 0); + this.panelException1.Margin = new System.Windows.Forms.Padding(0); + this.panelException1.Name = "panelException1"; + this.panelException1.Size = new System.Drawing.Size(219, 98); + this.panelException1.TabIndex = 5; + // + // panelDetails2 + // + this.panelDetails2.AutoSize = true; + this.panelDetails2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDetails2.Controls.Add(this.panelException2); + this.panelDetails2.Controls.Add(this.iconArrow2); + this.panelDetails2.Location = new System.Drawing.Point(0, 18); + this.panelDetails2.Margin = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.panelDetails2.Name = "panelDetails2"; + this.panelDetails2.Size = new System.Drawing.Size(219, 80); + this.panelDetails2.TabIndex = 8; + // + // panelException2 + // + this.panelException2.AutoSize = true; + this.panelException2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelException2.Controls.Add(this.panelDetails3); + this.panelException2.Controls.Add(this.labelException2); + this.panelException2.Location = new System.Drawing.Point(26, 2); + this.panelException2.Margin = new System.Windows.Forms.Padding(0); + this.panelException2.Name = "panelException2"; + this.panelException2.Size = new System.Drawing.Size(193, 78); + this.panelException2.TabIndex = 5; + // + // panelDetails3 + // + this.panelDetails3.AutoSize = true; + this.panelDetails3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDetails3.Controls.Add(this.panelException3); + this.panelDetails3.Controls.Add(this.iconArrow3); + this.panelDetails3.Location = new System.Drawing.Point(1, 18); + this.panelDetails3.Margin = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.panelDetails3.Name = "panelDetails3"; + this.panelDetails3.Size = new System.Drawing.Size(192, 60); + this.panelDetails3.TabIndex = 9; + // + // panelException3 + // + this.panelException3.AutoSize = true; + this.panelException3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelException3.Controls.Add(this.panelDetails4); + this.panelException3.Controls.Add(this.labelException3); + this.panelException3.Location = new System.Drawing.Point(26, 0); + this.panelException3.Margin = new System.Windows.Forms.Padding(0); + this.panelException3.Name = "panelException3"; + this.panelException3.Size = new System.Drawing.Size(166, 60); + this.panelException3.TabIndex = 5; + // + // panelDetails4 + // + this.panelDetails4.AutoSize = true; + this.panelDetails4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDetails4.Controls.Add(this.panelException4); + this.panelDetails4.Controls.Add(this.iconArrow4); + this.panelDetails4.Location = new System.Drawing.Point(0, 18); + this.panelDetails4.Margin = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.panelDetails4.Name = "panelDetails4"; + this.panelDetails4.Size = new System.Drawing.Size(166, 42); + this.panelDetails4.TabIndex = 9; + // + // panelException4 + // + this.panelException4.AutoSize = true; + this.panelException4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelException4.Controls.Add(this.panelDetails5); + this.panelException4.Controls.Add(this.labelException4); + this.panelException4.Location = new System.Drawing.Point(26, 2); + this.panelException4.Margin = new System.Windows.Forms.Padding(0); + this.panelException4.Name = "panelException4"; + this.panelException4.Size = new System.Drawing.Size(140, 40); + this.panelException4.TabIndex = 5; + // + // panelDetails5 + // + this.panelDetails5.AutoSize = true; + this.panelDetails5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDetails5.Controls.Add(this.labelException5); + this.panelDetails5.Controls.Add(this.iconArrow5); + this.panelDetails5.Location = new System.Drawing.Point(0, 18); + this.panelDetails5.Margin = new System.Windows.Forms.Padding(0, 3, 0, 0); + this.panelDetails5.Name = "panelDetails5"; + this.panelDetails5.Size = new System.Drawing.Size(140, 22); + this.panelDetails5.TabIndex = 7; + // + // labelException5 + // + this.labelException5.AutoEllipsis = true; + this.labelException5.Location = new System.Drawing.Point(26, 0); + this.labelException5.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.labelException5.Name = "labelException5"; + this.labelException5.Size = new System.Drawing.Size(114, 13); + this.labelException5.TabIndex = 3; + this.labelException5.Text = "(Exception message 5)"; + this.labelException5.UseMnemonic = false; + // + // iconArrow5 + // + this.iconArrow5.Image = global::AlphaCentaury.WindowsForms.MsgBoxEx.Properties.Resources.ArrowDetails; + this.iconArrow5.Location = new System.Drawing.Point(4, 2); + this.iconArrow5.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0); + this.iconArrow5.MinimumSize = new System.Drawing.Size(20, 20); + this.iconArrow5.Name = "iconArrow5"; + this.iconArrow5.Size = new System.Drawing.Size(20, 20); + this.iconArrow5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconArrow5.TabIndex = 2; + this.iconArrow5.TabStop = false; + // + // labelException4 + // + this.labelException4.AutoEllipsis = true; + this.labelException4.Location = new System.Drawing.Point(0, 0); + this.labelException4.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.labelException4.Name = "labelException4"; + this.labelException4.Size = new System.Drawing.Size(114, 13); + this.labelException4.TabIndex = 1; + this.labelException4.Text = "(Exception message 4)"; + this.labelException4.UseMnemonic = false; + // + // iconArrow4 + // + this.iconArrow4.Image = global::AlphaCentaury.WindowsForms.MsgBoxEx.Properties.Resources.ArrowDetails; + this.iconArrow4.Location = new System.Drawing.Point(4, 2); + this.iconArrow4.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0); + this.iconArrow4.MinimumSize = new System.Drawing.Size(20, 20); + this.iconArrow4.Name = "iconArrow4"; + this.iconArrow4.Size = new System.Drawing.Size(20, 20); + this.iconArrow4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconArrow4.TabIndex = 2; + this.iconArrow4.TabStop = false; + // + // labelException3 + // + this.labelException3.AutoEllipsis = true; + this.labelException3.Location = new System.Drawing.Point(-3, 0); + this.labelException3.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.labelException3.Name = "labelException3"; + this.labelException3.Size = new System.Drawing.Size(114, 13); + this.labelException3.TabIndex = 1; + this.labelException3.Text = "(Exception message 3)"; + this.labelException3.UseMnemonic = false; + // + // iconArrow3 + // + this.iconArrow3.Image = global::AlphaCentaury.WindowsForms.MsgBoxEx.Properties.Resources.ArrowDetails; + this.iconArrow3.Location = new System.Drawing.Point(4, 2); + this.iconArrow3.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0); + this.iconArrow3.MinimumSize = new System.Drawing.Size(20, 20); + this.iconArrow3.Name = "iconArrow3"; + this.iconArrow3.Size = new System.Drawing.Size(20, 20); + this.iconArrow3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconArrow3.TabIndex = 2; + this.iconArrow3.TabStop = false; + // + // labelException2 + // + this.labelException2.AutoEllipsis = true; + this.labelException2.Location = new System.Drawing.Point(0, 0); + this.labelException2.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.labelException2.Name = "labelException2"; + this.labelException2.Size = new System.Drawing.Size(114, 13); + this.labelException2.TabIndex = 1; + this.labelException2.Text = "(Exception message 2)"; + this.labelException2.UseMnemonic = false; + // + // iconArrow2 + // + this.iconArrow2.Image = global::AlphaCentaury.WindowsForms.MsgBoxEx.Properties.Resources.ArrowDetails; + this.iconArrow2.Location = new System.Drawing.Point(4, 2); + this.iconArrow2.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0); + this.iconArrow2.MinimumSize = new System.Drawing.Size(20, 20); + this.iconArrow2.Name = "iconArrow2"; + this.iconArrow2.Size = new System.Drawing.Size(20, 20); + this.iconArrow2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconArrow2.TabIndex = 2; + this.iconArrow2.TabStop = false; + // + // labelException1 + // + this.labelException1.AutoEllipsis = true; + this.labelException1.Location = new System.Drawing.Point(-3, 0); + this.labelException1.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0); + this.labelException1.Name = "labelException1"; + this.labelException1.Size = new System.Drawing.Size(114, 13); + this.labelException1.TabIndex = 1; + this.labelException1.Text = "(Exception message 1)"; + this.labelException1.UseMnemonic = false; + // + // iconArrow1 + // + this.iconArrow1.Image = global::AlphaCentaury.WindowsForms.MsgBoxEx.Properties.Resources.ArrowDetails; + this.iconArrow1.Location = new System.Drawing.Point(4, 2); + this.iconArrow1.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0); + this.iconArrow1.MinimumSize = new System.Drawing.Size(20, 20); + this.iconArrow1.Name = "iconArrow1"; + this.iconArrow1.Size = new System.Drawing.Size(20, 20); + this.iconArrow1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconArrow1.TabIndex = 2; + this.iconArrow1.TabStop = false; + // + // labelAdditionalInfo + // + this.labelAdditionalInfo.AutoSize = true; + this.labelAdditionalInfo.Location = new System.Drawing.Point(9, 5); + this.labelAdditionalInfo.Margin = new System.Windows.Forms.Padding(0); + this.labelAdditionalInfo.Name = "labelAdditionalInfo"; + this.labelAdditionalInfo.Size = new System.Drawing.Size(110, 13); + this.labelAdditionalInfo.TabIndex = 8; + this.labelAdditionalInfo.Text = "Additional information:"; + // + // panelTop + // + this.panelTop.AutoSize = true; + this.panelTop.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelTop.Controls.Add(this.iconDialog); + this.panelTop.Controls.Add(this.panelContents); + this.panelTop.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelTop.Location = new System.Drawing.Point(0, 0); + this.panelTop.Name = "panelTop"; + this.panelTop.Size = new System.Drawing.Size(398, 63); + this.panelTop.TabIndex = 5; + // + // panelControlButtons + // + this.panelControlButtons.AutoSize = true; + this.panelControlButtons.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelControlButtons.Controls.Add(this.buttonDetails); + this.panelControlButtons.Controls.Add(this.buttonCopy); + this.panelControlButtons.Dock = System.Windows.Forms.DockStyle.Left; + this.panelControlButtons.Location = new System.Drawing.Point(15, 0); + this.panelControlButtons.Margin = new System.Windows.Forms.Padding(0); + this.panelControlButtons.Name = "panelControlButtons"; + this.panelControlButtons.Size = new System.Drawing.Size(165, 44); + this.panelControlButtons.TabIndex = 6; + // + // buttonDetails + // + this.buttonDetails.AutoSize = true; + this.buttonDetails.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonDetails.Location = new System.Drawing.Point(81, 10); + this.buttonDetails.Margin = new System.Windows.Forms.Padding(3, 10, 9, 10); + this.buttonDetails.MaximumSize = new System.Drawing.Size(125, 24); + this.buttonDetails.MinimumSize = new System.Drawing.Size(75, 24); + this.buttonDetails.Name = "buttonDetails"; + this.buttonDetails.Size = new System.Drawing.Size(75, 24); + this.buttonDetails.TabIndex = 3; + // + // buttonCopy + // + this.buttonCopy.AutoSize = true; + this.buttonCopy.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonCopy.Location = new System.Drawing.Point(0, 10); + this.buttonCopy.Margin = new System.Windows.Forms.Padding(0, 10, 3, 10); + this.buttonCopy.MaximumSize = new System.Drawing.Size(125, 24); + this.buttonCopy.MinimumSize = new System.Drawing.Size(75, 24); + this.buttonCopy.Name = "buttonCopy"; + this.buttonCopy.Size = new System.Drawing.Size(75, 24); + this.buttonCopy.TabIndex = 2; + // + // panelDialogButtons + // + this.panelDialogButtons.AutoSize = true; + this.panelDialogButtons.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDialogButtons.Controls.Add(this.buttonDlg5); + this.panelDialogButtons.Controls.Add(this.buttonDlg4); + this.panelDialogButtons.Controls.Add(this.buttonDlg3); + this.panelDialogButtons.Controls.Add(this.buttonDlg2); + this.panelDialogButtons.Controls.Add(this.buttonDlg1); + this.panelDialogButtons.Dock = System.Windows.Forms.DockStyle.Right; + this.panelDialogButtons.Location = new System.Drawing.Point(179, 0); + this.panelDialogButtons.Margin = new System.Windows.Forms.Padding(0); + this.panelDialogButtons.Name = "panelDialogButtons"; + this.panelDialogButtons.Size = new System.Drawing.Size(204, 44); + this.panelDialogButtons.TabIndex = 7; + // + // buttonDlg5 + // + this.buttonDlg5.AutoEllipsis = true; + this.buttonDlg5.Location = new System.Drawing.Point(180, 10); + this.buttonDlg5.Margin = new System.Windows.Forms.Padding(6, 10, 0, 10); + this.buttonDlg5.MaximumSize = new System.Drawing.Size(125, 24); + this.buttonDlg5.MinimumSize = new System.Drawing.Size(24, 24); + this.buttonDlg5.Name = "buttonDlg5"; + this.buttonDlg5.Size = new System.Drawing.Size(24, 24); + this.buttonDlg5.TabIndex = 4; + this.buttonDlg5.UseVisualStyleBackColor = true; + // + // buttonDlg4 + // + this.buttonDlg4.AutoEllipsis = true; + this.buttonDlg4.Location = new System.Drawing.Point(120, 10); + this.buttonDlg4.Margin = new System.Windows.Forms.Padding(6, 10, 0, 10); + this.buttonDlg4.MaximumSize = new System.Drawing.Size(125, 24); + this.buttonDlg4.MinimumSize = new System.Drawing.Size(24, 24); + this.buttonDlg4.Name = "buttonDlg4"; + this.buttonDlg4.Size = new System.Drawing.Size(24, 24); + this.buttonDlg4.TabIndex = 3; + this.buttonDlg4.UseVisualStyleBackColor = true; + // + // buttonDlg3 + // + this.buttonDlg3.AutoEllipsis = true; + this.buttonDlg3.Location = new System.Drawing.Point(150, 10); + this.buttonDlg3.Margin = new System.Windows.Forms.Padding(6, 10, 0, 10); + this.buttonDlg3.MaximumSize = new System.Drawing.Size(125, 24); + this.buttonDlg3.MinimumSize = new System.Drawing.Size(24, 24); + this.buttonDlg3.Name = "buttonDlg3"; + this.buttonDlg3.Size = new System.Drawing.Size(24, 24); + this.buttonDlg3.TabIndex = 2; + this.buttonDlg3.UseVisualStyleBackColor = true; + // + // buttonDlg2 + // + this.buttonDlg2.AutoEllipsis = true; + this.buttonDlg2.Location = new System.Drawing.Point(90, 10); + this.buttonDlg2.Margin = new System.Windows.Forms.Padding(6, 10, 0, 10); + this.buttonDlg2.MaximumSize = new System.Drawing.Size(125, 24); + this.buttonDlg2.MinimumSize = new System.Drawing.Size(24, 24); + this.buttonDlg2.Name = "buttonDlg2"; + this.buttonDlg2.Size = new System.Drawing.Size(24, 24); + this.buttonDlg2.TabIndex = 1; + this.buttonDlg2.UseVisualStyleBackColor = true; + // + // buttonDlg1 + // + this.buttonDlg1.AutoEllipsis = true; + this.buttonDlg1.Location = new System.Drawing.Point(9, 10); + this.buttonDlg1.Margin = new System.Windows.Forms.Padding(9, 10, 0, 10); + this.buttonDlg1.MaximumSize = new System.Drawing.Size(125, 24); + this.buttonDlg1.MinimumSize = new System.Drawing.Size(75, 24); + this.buttonDlg1.Name = "buttonDlg1"; + this.buttonDlg1.Size = new System.Drawing.Size(75, 24); + this.buttonDlg1.TabIndex = 0; + this.buttonDlg1.UseVisualStyleBackColor = true; + // + // labelText + // + this.labelText.AutoEllipsis = true; + this.labelText.Location = new System.Drawing.Point(11, 6); + this.labelText.Margin = new System.Windows.Forms.Padding(0); + this.labelText.Name = "labelText"; + this.labelText.Size = new System.Drawing.Size(34, 13); + this.labelText.TabIndex = 13; + this.labelText.Text = "(Text)"; + this.labelText.UseMnemonic = false; + // + // MsgBoxExForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.BackColor = System.Drawing.SystemColors.Window; + this.ClientSize = new System.Drawing.Size(398, 107); + this.Controls.Add(this.panelTop); + this.Controls.Add(this.panelBottom); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "MsgBoxExForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Enhanced Message Box"; + this.Load += new System.EventHandler(this.MsgBoxExForm_Load); + this.Shown += new System.EventHandler(this.MsgBoxExForm_Shown); + ((System.ComponentModel.ISupportInitialize)(this.iconDialog)).EndInit(); + this.panelBottom.ResumeLayout(false); + this.panelBottom.PerformLayout(); + this.panelContents.ResumeLayout(false); + this.panelContents.PerformLayout(); + this.panelAdditional.ResumeLayout(false); + this.panelAdditional.PerformLayout(); + this.panelDetails1.ResumeLayout(false); + this.panelDetails1.PerformLayout(); + this.panelException1.ResumeLayout(false); + this.panelException1.PerformLayout(); + this.panelDetails2.ResumeLayout(false); + this.panelDetails2.PerformLayout(); + this.panelException2.ResumeLayout(false); + this.panelException2.PerformLayout(); + this.panelDetails3.ResumeLayout(false); + this.panelDetails3.PerformLayout(); + this.panelException3.ResumeLayout(false); + this.panelException3.PerformLayout(); + this.panelDetails4.ResumeLayout(false); + this.panelDetails4.PerformLayout(); + this.panelException4.ResumeLayout(false); + this.panelException4.PerformLayout(); + this.panelDetails5.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconArrow1)).EndInit(); + this.panelTop.ResumeLayout(false); + this.panelTop.PerformLayout(); + this.panelControlButtons.ResumeLayout(false); + this.panelControlButtons.PerformLayout(); + this.panelDialogButtons.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox iconDialog; + private System.Windows.Forms.Panel panelBottom; + private System.Windows.Forms.Panel panelContents; + private System.Windows.Forms.Panel panelAdditional; + private System.Windows.Forms.Panel panelDetails1; + private System.Windows.Forms.Panel panelException1; + private System.Windows.Forms.Panel panelDetails2; + private System.Windows.Forms.Panel panelException2; + private System.Windows.Forms.Panel panelDetails3; + private System.Windows.Forms.Panel panelException3; + private System.Windows.Forms.Panel panelDetails4; + private System.Windows.Forms.Panel panelException4; + private System.Windows.Forms.Panel panelDetails5; + private System.Windows.Forms.Label labelException5; + private System.Windows.Forms.PictureBox iconArrow5; + private System.Windows.Forms.Label labelException4; + private System.Windows.Forms.PictureBox iconArrow4; + private System.Windows.Forms.Label labelException3; + private System.Windows.Forms.PictureBox iconArrow3; + private System.Windows.Forms.Label labelException2; + private System.Windows.Forms.PictureBox iconArrow2; + private System.Windows.Forms.Label labelException1; + private System.Windows.Forms.PictureBox iconArrow1; + private System.Windows.Forms.Label labelAdditionalInfo; + private System.Windows.Forms.Panel panelTop; + private System.Windows.Forms.Panel panelDialogButtons; + private System.Windows.Forms.Button buttonDlg5; + private System.Windows.Forms.Button buttonDlg4; + private System.Windows.Forms.Button buttonDlg3; + private System.Windows.Forms.Button buttonDlg2; + private System.Windows.Forms.Button buttonDlg1; + private System.Windows.Forms.Panel panelControlButtons; + private System.Windows.Forms.Button buttonDetails; + private System.Windows.Forms.Button buttonCopy; + private System.Windows.Forms.Label labelText; + } +} diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExForm.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExForm.cs new file mode 100644 index 00000000..60474924 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExForm.cs @@ -0,0 +1,96 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + internal sealed partial class MsgBoxExForm : Form + { + public MsgBoxExForm() + { + InitializeComponent(); + } // public + + public MsgBoxExForm(MsgBoxExContents msgBoxContents) + { + InitializeComponent(); + + BoxLayout = new BoxExLayout(this, msgBoxContents); + Contents = new BoxExContents(this, msgBoxContents); + + SuspendLayout(); + + Contents.FillMissing(); + Contents.Apply(); + + BoxLayout.PerformLayout(); + + ResumeLayout(false); + PerformLayout(); + + if (msgBoxContents.Owner == null) + { + StartPosition = FormStartPosition.CenterScreen; + ShowInTaskbar = true; + } // if + + BoxLayout = null; + } // constructor + + #region Form events + + private void MsgBoxExForm_Load(object sender, EventArgs e) + { + // cosmetic adjustments + labelAdditionalInfo.Font = new Font(labelAdditionalInfo.Font, FontStyle.Bold); + if (iconDialog.Image != null) + { + iconDialog.Paint += IconDialog_Paint; + } // if + } // MsgBoxExForm_Load + + private void MsgBoxExForm_Shown(object sender, EventArgs e) + { + Contents.SetDefaultButton(); + Contents = null; + } // MsgBoxExForm_Shown + + #endregion + + #region Events + + private void buttonCopy_Click(object sender, EventArgs e) + { + + } // buttonCopy_Click + + private void buttonDetails_Click(object sender, EventArgs e) + { + } // buttonDetails_Click + + private void IconDialog_Paint(object sender, PaintEventArgs e) + { + if (iconDialog.Image == null) return; + + e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; + e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; + e.Graphics.FillRectangle(SystemBrushes.Window, iconDialog.DisplayRectangle); + e.Graphics.DrawImage(iconDialog.Image, iconDialog.DisplayRectangle, new Rectangle(0, 0, 96, 96), GraphicsUnit.Pixel); + } // IconDialog_Paint + + #endregion + } +} diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExForm.resx b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExForm.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxExForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxSeverity.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxSeverity.cs new file mode 100644 index 00000000..86778bd4 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/MsgBoxSeverity.cs @@ -0,0 +1,27 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + public enum MsgBoxSeverity + { + Auto = 0, + None = 1, + Question = 10, + Verbose = 20, + Informational = 25, + Warning = 30, + Error = 35, + Exception = 40 + } // enum MsgBoxSeverity +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/OldMsgBoxExForm.Designer.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/OldMsgBoxExForm.Designer.cs new file mode 100644 index 00000000..5dcdc2ce --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/OldMsgBoxExForm.Designer.cs @@ -0,0 +1,604 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + partial class OldMsgBoxExForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } // Dispose + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panelForm = new System.Windows.Forms.TableLayoutPanel(); + this.panelContents = new System.Windows.Forms.TableLayoutPanel(); + this.labelText = new System.Windows.Forms.Label(); + this.labelAdditionalInfo = new System.Windows.Forms.Label(); + this.panelDetails1 = new System.Windows.Forms.TableLayoutPanel(); + this.panelException1 = new System.Windows.Forms.TableLayoutPanel(); + this.labelException1 = new System.Windows.Forms.Label(); + this.panelDetails2 = new System.Windows.Forms.TableLayoutPanel(); + this.panelException2 = new System.Windows.Forms.TableLayoutPanel(); + this.labelException2 = new System.Windows.Forms.Label(); + this.panelDetails3 = new System.Windows.Forms.TableLayoutPanel(); + this.panelException3 = new System.Windows.Forms.TableLayoutPanel(); + this.labelException3 = new System.Windows.Forms.Label(); + this.panelDetails4 = new System.Windows.Forms.TableLayoutPanel(); + this.panelException4 = new System.Windows.Forms.TableLayoutPanel(); + this.labelException4 = new System.Windows.Forms.Label(); + this.panelButtons = new System.Windows.Forms.TableLayoutPanel(); + this.button5 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.buttonDetails = new System.Windows.Forms.Button(); + this.buttonCopy = new System.Windows.Forms.Button(); + this.iconDialog = new System.Windows.Forms.PictureBox(); + this.iconAdditional1 = new System.Windows.Forms.PictureBox(); + this.iconAdditional2 = new System.Windows.Forms.PictureBox(); + this.iconAdditional3 = new System.Windows.Forms.PictureBox(); + this.iconAdditional4 = new System.Windows.Forms.PictureBox(); + this.panelForm.SuspendLayout(); + this.panelContents.SuspendLayout(); + this.panelDetails1.SuspendLayout(); + this.panelException1.SuspendLayout(); + this.panelDetails2.SuspendLayout(); + this.panelException2.SuspendLayout(); + this.panelDetails3.SuspendLayout(); + this.panelException3.SuspendLayout(); + this.panelDetails4.SuspendLayout(); + this.panelException4.SuspendLayout(); + this.panelButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.iconDialog)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconAdditional1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconAdditional2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconAdditional3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconAdditional4)).BeginInit(); + this.SuspendLayout(); + // + // panelForm + // + this.panelForm.AutoSize = true; + this.panelForm.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelForm.ColumnCount = 1; + this.panelForm.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelForm.Controls.Add(this.panelContents, 0, 0); + this.panelForm.Controls.Add(this.panelButtons, 0, 1); + this.panelForm.Location = new System.Drawing.Point(0, 0); + this.panelForm.Margin = new System.Windows.Forms.Padding(0); + this.panelForm.MaximumSize = new System.Drawing.Size(700, 0); + this.panelForm.Name = "panelForm"; + this.panelForm.RowCount = 2; + this.panelForm.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelForm.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelForm.Size = new System.Drawing.Size(410, 188); + this.panelForm.TabIndex = 0; + // + // panelContents + // + this.panelContents.AutoSize = true; + this.panelContents.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelContents.ColumnCount = 2; + this.panelContents.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelContents.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelContents.Controls.Add(this.labelText, 1, 0); + this.panelContents.Controls.Add(this.labelAdditionalInfo, 1, 1); + this.panelContents.Controls.Add(this.iconDialog, 0, 0); + this.panelContents.Controls.Add(this.panelDetails1, 1, 2); + this.panelContents.Location = new System.Drawing.Point(2, 5); + this.panelContents.Margin = new System.Windows.Forms.Padding(2, 5, 2, 5); + this.panelContents.Name = "panelContents"; + this.panelContents.Padding = new System.Windows.Forms.Padding(8, 8, 8, 0); + this.panelContents.RowCount = 3; + this.panelContents.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelContents.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelContents.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelContents.Size = new System.Drawing.Size(328, 136); + this.panelContents.TabIndex = 4; + // + // labelText + // + this.labelText.AutoEllipsis = true; + this.labelText.AutoSize = true; + this.labelText.Location = new System.Drawing.Point(62, 8); + this.labelText.Margin = new System.Windows.Forms.Padding(0, 0, 2, 2); + this.labelText.Name = "labelText"; + this.labelText.Size = new System.Drawing.Size(34, 13); + this.labelText.TabIndex = 0; + this.labelText.Text = "(Text)"; + // + // labelAdditionalInfo + // + this.labelAdditionalInfo.AutoSize = true; + this.labelAdditionalInfo.Location = new System.Drawing.Point(62, 28); + this.labelAdditionalInfo.Margin = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.labelAdditionalInfo.Name = "labelAdditionalInfo"; + this.labelAdditionalInfo.Size = new System.Drawing.Size(110, 13); + this.labelAdditionalInfo.TabIndex = 0; + this.labelAdditionalInfo.Text = "Additional information:"; + // + // panelDetails1 + // + this.panelDetails1.AutoSize = true; + this.panelDetails1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDetails1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Outset; + this.panelDetails1.ColumnCount = 2; + this.panelDetails1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelDetails1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelDetails1.Controls.Add(this.iconAdditional1, 0, 0); + this.panelDetails1.Controls.Add(this.panelException1, 1, 0); + this.panelDetails1.Location = new System.Drawing.Point(62, 41); + this.panelDetails1.Margin = new System.Windows.Forms.Padding(0); + this.panelDetails1.Name = "panelDetails1"; + this.panelDetails1.RowCount = 1; + this.panelDetails1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelDetails1.Size = new System.Drawing.Size(258, 95); + this.panelDetails1.TabIndex = 1; + // + // panelException1 + // + this.panelException1.AutoSize = true; + this.panelException1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelException1.ColumnCount = 1; + this.panelException1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelException1.Controls.Add(this.labelException1, 0, 0); + this.panelException1.Controls.Add(this.panelDetails2, 0, 1); + this.panelException1.Location = new System.Drawing.Point(32, 4); + this.panelException1.Margin = new System.Windows.Forms.Padding(2); + this.panelException1.Name = "panelException1"; + this.panelException1.RowCount = 2; + this.panelException1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelException1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelException1.Size = new System.Drawing.Size(222, 87); + this.panelException1.TabIndex = 0; + // + // labelException1 + // + this.labelException1.AutoEllipsis = true; + this.labelException1.AutoSize = true; + this.labelException1.Location = new System.Drawing.Point(0, 0); + this.labelException1.Margin = new System.Windows.Forms.Padding(0, 0, 0, 2); + this.labelException1.Name = "labelException1"; + this.labelException1.Size = new System.Drawing.Size(114, 13); + this.labelException1.TabIndex = 0; + this.labelException1.Text = "(Exception message 1)"; + // + // panelDetails2 + // + this.panelDetails2.AutoSize = true; + this.panelDetails2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDetails2.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Outset; + this.panelDetails2.ColumnCount = 2; + this.panelDetails2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelDetails2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelDetails2.Controls.Add(this.iconAdditional2, 0, 0); + this.panelDetails2.Controls.Add(this.panelException2, 1, 0); + this.panelDetails2.Location = new System.Drawing.Point(0, 15); + this.panelDetails2.Margin = new System.Windows.Forms.Padding(0); + this.panelDetails2.Name = "panelDetails2"; + this.panelDetails2.RowCount = 1; + this.panelDetails2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelDetails2.Size = new System.Drawing.Size(222, 72); + this.panelDetails2.TabIndex = 1; + // + // panelException2 + // + this.panelException2.AutoSize = true; + this.panelException2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelException2.ColumnCount = 1; + this.panelException2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelException2.Controls.Add(this.labelException2, 0, 0); + this.panelException2.Controls.Add(this.panelDetails3, 0, 1); + this.panelException2.Location = new System.Drawing.Point(32, 4); + this.panelException2.Margin = new System.Windows.Forms.Padding(2); + this.panelException2.Name = "panelException2"; + this.panelException2.RowCount = 2; + this.panelException2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelException2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelException2.Size = new System.Drawing.Size(186, 64); + this.panelException2.TabIndex = 2; + // + // labelException2 + // + this.labelException2.AutoEllipsis = true; + this.labelException2.AutoSize = true; + this.labelException2.Location = new System.Drawing.Point(0, 0); + this.labelException2.Margin = new System.Windows.Forms.Padding(0, 0, 0, 2); + this.labelException2.Name = "labelException2"; + this.labelException2.Size = new System.Drawing.Size(114, 13); + this.labelException2.TabIndex = 0; + this.labelException2.Text = "(Exception message 2)"; + // + // panelDetails3 + // + this.panelDetails3.AutoSize = true; + this.panelDetails3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDetails3.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Outset; + this.panelDetails3.ColumnCount = 2; + this.panelDetails3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelDetails3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelDetails3.Controls.Add(this.iconAdditional3, 0, 0); + this.panelDetails3.Controls.Add(this.panelException3, 1, 0); + this.panelDetails3.Location = new System.Drawing.Point(0, 15); + this.panelDetails3.Margin = new System.Windows.Forms.Padding(0); + this.panelDetails3.Name = "panelDetails3"; + this.panelDetails3.RowCount = 1; + this.panelDetails3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelDetails3.Size = new System.Drawing.Size(186, 49); + this.panelDetails3.TabIndex = 1; + // + // panelException3 + // + this.panelException3.AutoSize = true; + this.panelException3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelException3.ColumnCount = 1; + this.panelException3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelException3.Controls.Add(this.labelException3, 0, 0); + this.panelException3.Controls.Add(this.panelDetails4, 0, 1); + this.panelException3.Location = new System.Drawing.Point(32, 4); + this.panelException3.Margin = new System.Windows.Forms.Padding(2); + this.panelException3.Name = "panelException3"; + this.panelException3.RowCount = 2; + this.panelException3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelException3.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelException3.Size = new System.Drawing.Size(150, 41); + this.panelException3.TabIndex = 0; + // + // labelException3 + // + this.labelException3.AutoEllipsis = true; + this.labelException3.AutoSize = true; + this.labelException3.Location = new System.Drawing.Point(0, 0); + this.labelException3.Margin = new System.Windows.Forms.Padding(0, 0, 0, 2); + this.labelException3.Name = "labelException3"; + this.labelException3.Size = new System.Drawing.Size(114, 13); + this.labelException3.TabIndex = 0; + this.labelException3.Text = "(Exception message 3)"; + // + // panelDetails4 + // + this.panelDetails4.AutoSize = true; + this.panelDetails4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelDetails4.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Outset; + this.panelDetails4.ColumnCount = 2; + this.panelDetails4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelDetails4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelDetails4.Controls.Add(this.iconAdditional4, 0, 0); + this.panelDetails4.Controls.Add(this.panelException4, 1, 0); + this.panelDetails4.Location = new System.Drawing.Point(0, 15); + this.panelDetails4.Margin = new System.Windows.Forms.Padding(0); + this.panelDetails4.Name = "panelDetails4"; + this.panelDetails4.RowCount = 1; + this.panelDetails4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelDetails4.Size = new System.Drawing.Size(150, 26); + this.panelDetails4.TabIndex = 1; + // + // panelException4 + // + this.panelException4.AutoSize = true; + this.panelException4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelException4.ColumnCount = 1; + this.panelException4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelException4.Controls.Add(this.labelException4, 0, 0); + this.panelException4.Location = new System.Drawing.Point(32, 4); + this.panelException4.Margin = new System.Windows.Forms.Padding(2); + this.panelException4.Name = "panelException4"; + this.panelException4.RowCount = 1; + this.panelException4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.panelException4.Size = new System.Drawing.Size(114, 15); + this.panelException4.TabIndex = 0; + // + // labelException4 + // + this.labelException4.AutoEllipsis = true; + this.labelException4.AutoSize = true; + this.labelException4.Location = new System.Drawing.Point(0, 0); + this.labelException4.Margin = new System.Windows.Forms.Padding(0, 0, 0, 2); + this.labelException4.Name = "labelException4"; + this.labelException4.Size = new System.Drawing.Size(114, 13); + this.labelException4.TabIndex = 0; + this.labelException4.Text = "(Exception message 4)"; + // + // panelButtons + // + this.panelButtons.AutoSize = true; + this.panelButtons.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.panelButtons.BackColor = System.Drawing.SystemColors.Control; + this.panelButtons.ColumnCount = 8; + this.panelButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.panelButtons.Controls.Add(this.button5, 7, 0); + this.panelButtons.Controls.Add(this.button1, 3, 0); + this.panelButtons.Controls.Add(this.button2, 4, 0); + this.panelButtons.Controls.Add(this.button3, 5, 0); + this.panelButtons.Controls.Add(this.button4, 6, 0); + this.panelButtons.Controls.Add(this.buttonDetails, 1, 0); + this.panelButtons.Controls.Add(this.buttonCopy, 0, 0); + this.panelButtons.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelButtons.Location = new System.Drawing.Point(0, 146); + this.panelButtons.Margin = new System.Windows.Forms.Padding(0); + this.panelButtons.Name = "panelButtons"; + this.panelButtons.Padding = new System.Windows.Forms.Padding(8); + this.panelButtons.RowCount = 1; + this.panelButtons.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.panelButtons.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F)); + this.panelButtons.Size = new System.Drawing.Size(410, 42); + this.panelButtons.TabIndex = 5; + // + // button5 + // + this.button5.Anchor = System.Windows.Forms.AnchorStyles.None; + this.button5.AutoSize = true; + this.button5.Location = new System.Drawing.Point(379, 8); + this.button5.Margin = new System.Windows.Forms.Padding(6, 0, 0, 0); + this.button5.MinimumSize = new System.Drawing.Size(16, 26); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(23, 26); + this.button5.TabIndex = 12; + this.button5.Text = "5"; + this.button5.UseVisualStyleBackColor = true; + // + // button1 + // + this.button1.Anchor = System.Windows.Forms.AnchorStyles.None; + this.button1.AutoSize = true; + this.button1.Location = new System.Drawing.Point(186, 8); + this.button1.Margin = new System.Windows.Forms.Padding(0); + this.button1.MinimumSize = new System.Drawing.Size(100, 26); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(100, 26); + this.button1.TabIndex = 11; + this.button1.Text = "1"; + this.button1.UseVisualStyleBackColor = true; + // + // button2 + // + this.button2.Anchor = System.Windows.Forms.AnchorStyles.None; + this.button2.AutoSize = true; + this.button2.Location = new System.Drawing.Point(292, 8); + this.button2.Margin = new System.Windows.Forms.Padding(6, 0, 0, 0); + this.button2.MinimumSize = new System.Drawing.Size(16, 26); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(23, 26); + this.button2.TabIndex = 10; + this.button2.Text = "2"; + this.button2.UseVisualStyleBackColor = true; + // + // button3 + // + this.button3.Anchor = System.Windows.Forms.AnchorStyles.None; + this.button3.AutoSize = true; + this.button3.Location = new System.Drawing.Point(321, 8); + this.button3.Margin = new System.Windows.Forms.Padding(6, 0, 0, 0); + this.button3.MinimumSize = new System.Drawing.Size(16, 26); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(23, 26); + this.button3.TabIndex = 9; + this.button3.Text = "3"; + this.button3.UseVisualStyleBackColor = true; + // + // button4 + // + this.button4.Anchor = System.Windows.Forms.AnchorStyles.None; + this.button4.AutoSize = true; + this.button4.Location = new System.Drawing.Point(350, 8); + this.button4.Margin = new System.Windows.Forms.Padding(6, 0, 0, 0); + this.button4.MinimumSize = new System.Drawing.Size(16, 26); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(23, 26); + this.button4.TabIndex = 8; + this.button4.Text = "4"; + this.button4.UseVisualStyleBackColor = true; + // + // buttonDetails + // + this.buttonDetails.Anchor = System.Windows.Forms.AnchorStyles.None; + this.buttonDetails.AutoSize = true; + this.buttonDetails.Location = new System.Drawing.Point(89, 8); + this.buttonDetails.Margin = new System.Windows.Forms.Padding(3, 0, 12, 0); + this.buttonDetails.MinimumSize = new System.Drawing.Size(85, 26); + this.buttonDetails.Name = "buttonDetails"; + this.buttonDetails.Size = new System.Drawing.Size(85, 26); + this.buttonDetails.TabIndex = 7; + this.buttonDetails.Text = "Details..."; + this.buttonDetails.UseVisualStyleBackColor = true; + this.buttonDetails.Click += new System.EventHandler(this.buttonDetails_Click); + // + // buttonCopy + // + this.buttonCopy.AutoEllipsis = true; + this.buttonCopy.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonCopy.ImageKey = "(none)"; + this.buttonCopy.Location = new System.Drawing.Point(8, 8); + this.buttonCopy.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0); + this.buttonCopy.MinimumSize = new System.Drawing.Size(75, 24); + this.buttonCopy.Name = "buttonCopy"; + this.buttonCopy.Size = new System.Drawing.Size(75, 24); + this.buttonCopy.TabIndex = 6; + this.buttonCopy.Text = "Copy"; + this.buttonCopy.UseVisualStyleBackColor = true; + this.buttonCopy.Click += new System.EventHandler(this.buttonCopy_Click); + // + // iconDialog + // + this.iconDialog.Location = new System.Drawing.Point(8, 8); + this.iconDialog.Margin = new System.Windows.Forms.Padding(0, 0, 6, 0); + this.iconDialog.MinimumSize = new System.Drawing.Size(48, 48); + this.iconDialog.Name = "iconDialog"; + this.panelContents.SetRowSpan(this.iconDialog, 3); + this.iconDialog.Size = new System.Drawing.Size(48, 48); + this.iconDialog.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconDialog.TabIndex = 2; + this.iconDialog.TabStop = false; + // + // iconAdditional1 + // + this.iconAdditional1.Image = global::AlphaCentaury.WindowsForms.MsgBoxEx.Properties.Resources.ArrowDetails; + this.iconAdditional1.Location = new System.Drawing.Point(6, 4); + this.iconAdditional1.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0); + this.iconAdditional1.MinimumSize = new System.Drawing.Size(20, 20); + this.iconAdditional1.Name = "iconAdditional1"; + this.iconAdditional1.Size = new System.Drawing.Size(20, 20); + this.iconAdditional1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconAdditional1.TabIndex = 1; + this.iconAdditional1.TabStop = false; + // + // iconAdditional2 + // + this.iconAdditional2.Image = global::AlphaCentaury.WindowsForms.MsgBoxEx.Properties.Resources.ArrowDetails; + this.iconAdditional2.Location = new System.Drawing.Point(6, 4); + this.iconAdditional2.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0); + this.iconAdditional2.MinimumSize = new System.Drawing.Size(20, 20); + this.iconAdditional2.Name = "iconAdditional2"; + this.iconAdditional2.Size = new System.Drawing.Size(20, 20); + this.iconAdditional2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconAdditional2.TabIndex = 1; + this.iconAdditional2.TabStop = false; + // + // iconAdditional3 + // + this.iconAdditional3.Image = global::AlphaCentaury.WindowsForms.MsgBoxEx.Properties.Resources.ArrowDetails; + this.iconAdditional3.Location = new System.Drawing.Point(6, 4); + this.iconAdditional3.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0); + this.iconAdditional3.MinimumSize = new System.Drawing.Size(20, 20); + this.iconAdditional3.Name = "iconAdditional3"; + this.iconAdditional3.Size = new System.Drawing.Size(20, 20); + this.iconAdditional3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconAdditional3.TabIndex = 1; + this.iconAdditional3.TabStop = false; + // + // iconAdditional4 + // + this.iconAdditional4.Image = global::AlphaCentaury.WindowsForms.MsgBoxEx.Properties.Resources.ArrowDetails; + this.iconAdditional4.Location = new System.Drawing.Point(6, 4); + this.iconAdditional4.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0); + this.iconAdditional4.MinimumSize = new System.Drawing.Size(20, 20); + this.iconAdditional4.Name = "iconAdditional4"; + this.iconAdditional4.Size = new System.Drawing.Size(20, 20); + this.iconAdditional4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.iconAdditional4.TabIndex = 0; + this.iconAdditional4.TabStop = false; + // + // MsgBoxExForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.BackColor = System.Drawing.SystemColors.Window; + this.ClientSize = new System.Drawing.Size(419, 184); + this.Controls.Add(this.panelForm); + this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(2); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "MsgBoxExForm"; + this.ShowIcon = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Enhanced Message Box"; + this.Load += new System.EventHandler(this.Form_Load); + this.Shown += new System.EventHandler(this.Form_Shown); + this.panelForm.ResumeLayout(false); + this.panelForm.PerformLayout(); + this.panelContents.ResumeLayout(false); + this.panelContents.PerformLayout(); + this.panelDetails1.ResumeLayout(false); + this.panelDetails1.PerformLayout(); + this.panelException1.ResumeLayout(false); + this.panelException1.PerformLayout(); + this.panelDetails2.ResumeLayout(false); + this.panelDetails2.PerformLayout(); + this.panelException2.ResumeLayout(false); + this.panelException2.PerformLayout(); + this.panelDetails3.ResumeLayout(false); + this.panelDetails3.PerformLayout(); + this.panelException3.ResumeLayout(false); + this.panelException3.PerformLayout(); + this.panelDetails4.ResumeLayout(false); + this.panelDetails4.PerformLayout(); + this.panelException4.ResumeLayout(false); + this.panelException4.PerformLayout(); + this.panelButtons.ResumeLayout(false); + this.panelButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.iconDialog)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconAdditional1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconAdditional2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconAdditional3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.iconAdditional4)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } // InitializeComponent + + #endregion + + private System.Windows.Forms.TableLayoutPanel panelForm; + private System.Windows.Forms.TableLayoutPanel panelContents; + private System.Windows.Forms.PictureBox iconDialog; + private System.Windows.Forms.Label labelText; + private System.Windows.Forms.Label labelAdditionalInfo; + private System.Windows.Forms.TableLayoutPanel panelDetails1; + private System.Windows.Forms.PictureBox iconAdditional1; + private System.Windows.Forms.TableLayoutPanel panelException1; + private System.Windows.Forms.Label labelException1; + private System.Windows.Forms.TableLayoutPanel panelDetails2; + private System.Windows.Forms.PictureBox iconAdditional2; + private System.Windows.Forms.TableLayoutPanel panelException2; + private System.Windows.Forms.Label labelException2; + private System.Windows.Forms.TableLayoutPanel panelDetails3; + private System.Windows.Forms.PictureBox iconAdditional3; + private System.Windows.Forms.TableLayoutPanel panelException3; + private System.Windows.Forms.Label labelException3; + private System.Windows.Forms.TableLayoutPanel panelDetails4; + private System.Windows.Forms.PictureBox iconAdditional4; + private System.Windows.Forms.TableLayoutPanel panelException4; + private System.Windows.Forms.Label labelException4; + private System.Windows.Forms.TableLayoutPanel panelButtons; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button buttonDetails; + private System.Windows.Forms.Button buttonCopy; + } // partial class ExceptionBoxForm +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/OldMsgBoxExForm.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/OldMsgBoxExForm.cs new file mode 100644 index 00000000..6cb49814 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/OldMsgBoxExForm.cs @@ -0,0 +1,102 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace AlphaCentaury.WindowsForms.MsgBoxEx +{ + internal sealed partial class OldMsgBoxExForm : Form + { + private const int MaxLinesText = 4; + private const int MaxLinesException = 3; + private const int MaxLinesInnerException = 3; + private const int MaxInnerExceptions = 4; + + public OldMsgBoxExForm() + { + InitializeComponent(); + } // constructor + + public MsgBoxExContents Contents + { + get; + set; + } // Contents + + #region FormEvents + + private void Form_Load(object sender, EventArgs e) + { + SuspendLayout(); + + CalcLineSize(); + + // cosmetic adjustments + labelAdditionalInfo.Font = new Font(labelAdditionalInfo.Font, FontStyle.Bold); + if (iconDialog.Image != null) + { + iconDialog.Paint += IconDialog_Paint; + } // if + + ResumeLayout(false); + PerformLayout(); + + CenterToParent(); + } // Form_Load + + private void Form_Shown(object sender, EventArgs e) + { + StartPosition = FormStartPosition.CenterScreen; + } // Form_Shown + #endregion + + #region Events + + private void buttonCopy_Click(object sender, EventArgs e) + { + + } // buttonCopy_Click + + private void buttonDetails_Click(object sender, EventArgs e) + { + + } // buttonDetails_Click + + private void IconDialog_Paint(object sender, PaintEventArgs e) + { + if (iconDialog.Image == null) return; + + e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; + e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; + e.Graphics.FillRectangle(SystemBrushes.Control, iconDialog.DisplayRectangle); + e.Graphics.DrawImage(iconDialog.Image, iconDialog.DisplayRectangle, new Rectangle(0,0,96,96), GraphicsUnit.Pixel); + } // IconDialog_Paint + + #endregion + + + private void CalcLineSize() + { + labelText.Text = "1⁰ ‡§" + Environment.NewLine + + "2 åÅĀā" + Environment.NewLine + + "3⁰ ‡§" + Environment.NewLine + + "4 åÅĀā"; + //Box.LineHeight = labelText.Height / 4; + + //labelText.MaximumSize = new Size(0, Box.LineHeight * MaxLinesText); + //labelException1.MaximumSize = new Size(0, Box.LineHeight * MaxLinesException); + } // private + } // sealed class MsgBoxExForm : Form +} // namespace diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/OldMsgBoxExForm.resx b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/OldMsgBoxExForm.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/OldMsgBoxExForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..47e9fb82 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Exception Message Box")] +[assembly: AssemblyDescription("AlphaCentaury.Common.GUI.ExceptionMsgBox")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("448697cf-3d5c-45c3-8775-844ba7129672")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/Resources.Designer.cs new file mode 100644 index 00000000..fabc4789 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/Resources.Designer.cs @@ -0,0 +1,257 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.WindowsForms.MsgBoxEx.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AlphaCentaury.Winforms.MsgBoxEx.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ArrowDetails { + get { + object obj = ResourceManager.GetObject("ArrowDetails", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to Abort. + /// + internal static string ButtonAbort { + get { + return ResourceManager.GetString("ButtonAbort", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cancel. + /// + internal static string ButtonCancel { + get { + return ResourceManager.GetString("ButtonCancel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Copy. + /// + internal static string ButtonCopy { + get { + return ResourceManager.GetString("ButtonCopy", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Details.... + /// + internal static string ButtonDetails { + get { + return ResourceManager.GetString("ButtonDetails", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ignore. + /// + internal static string ButtonIgnore { + get { + return ResourceManager.GetString("ButtonIgnore", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No. + /// + internal static string ButtonNo { + get { + return ResourceManager.GetString("ButtonNo", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to OK. + /// + internal static string ButtonOK { + get { + return ResourceManager.GetString("ButtonOK", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Retry. + /// + internal static string ButtonRetry { + get { + return ResourceManager.GetString("ButtonRetry", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Yes. + /// + internal static string ButtonYes { + get { + return ResourceManager.GetString("ButtonYes", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconError512 { + get { + object obj = ResourceManager.GetObject("IconError512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconError96 { + get { + object obj = ResourceManager.GetObject("IconError96", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconException512 { + get { + object obj = ResourceManager.GetObject("IconException512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconException96 { + get { + object obj = ResourceManager.GetObject("IconException96", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconInfo512 { + get { + object obj = ResourceManager.GetObject("IconInfo512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconInfo96 { + get { + object obj = ResourceManager.GetObject("IconInfo96", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconVerbose512 { + get { + object obj = ResourceManager.GetObject("IconVerbose512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconVerbose96 { + get { + object obj = ResourceManager.GetObject("IconVerbose96", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconWarning512 { + get { + object obj = ResourceManager.GetObject("IconWarning512", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IconWarning96 { + get { + object obj = ResourceManager.GetObject("IconWarning96", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/Resources.es.resx b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/Resources.es.resx new file mode 100644 index 00000000..65f26bfa --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/Resources.es.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abortar + + + Cancelar + + + Copiar + + + Detalles... + + + Ignorar + + + No + + + Aceptar + + + Reintentar + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/Resources.resx b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/Resources.resx new file mode 100644 index 00000000..dc7c6f92 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Properties/Resources.resx @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\resources\arrowdetails.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Abort + + + Cancel + + + Copy + + + Details... + + + Ignore + + + No + + + OK + + + Retry + + + Yes + + + ..\Resources\IconError512.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\IconError96.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\IconException512.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\IconException96.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\IconInfo512.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\IconInfo96.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\IconVerbose512.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\IconVerbose96.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\IconWarning512.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\IconWarning96.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/ArrowDetails.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/ArrowDetails.png new file mode 100644 index 00000000..c08691fe Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/ArrowDetails.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconError512.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconError512.png new file mode 100644 index 00000000..680484d0 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconError512.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconError96.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconError96.png new file mode 100644 index 00000000..77edc431 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconError96.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconException512.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconException512.png new file mode 100644 index 00000000..8d9e7e14 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconException512.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconException96.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconException96.png new file mode 100644 index 00000000..e3b6c4db Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconException96.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconInfo512.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconInfo512.png new file mode 100644 index 00000000..74705b33 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconInfo512.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconInfo96.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconInfo96.png new file mode 100644 index 00000000..a33afd37 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconInfo96.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconVerbose512.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconVerbose512.png new file mode 100644 index 00000000..8d87e2e5 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconVerbose512.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconVerbose96.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconVerbose96.png new file mode 100644 index 00000000..325e5694 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconVerbose96.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconWarning512.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconWarning512.png new file mode 100644 index 00000000..e016c0cd Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconWarning512.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconWarning96.png b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconWarning96.png new file mode 100644 index 00000000..17ea3d81 Binary files /dev/null and b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Resources/IconWarning96.png differ diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Winforms.MsgBoxEx.csproj b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Winforms.MsgBoxEx.csproj new file mode 100644 index 00000000..b8c4eb0f --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/Winforms.MsgBoxEx.csproj @@ -0,0 +1,134 @@ + + + + + Debug + AnyCPU + {448697CF-3D5C-45C3-8775-844BA7129672} + Library + Properties + AlphaCentaury.Winforms.MsgBoxEx + ExceptionMsgBox + v4.5.2 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + Form + + + Form + + + + Form + + + OldMsgBoxExForm.cs + + + + Form + + + MsgBoxExForm.cs + + + + True + True + Resources.resx + + + + + OldMsgBoxExForm.cs + + + MsgBoxExForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/license.txt b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/license.txt new file mode 100644 index 00000000..f6d1e8f2 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/license.txt @@ -0,0 +1,73 @@ +############################################################################## +## +## Library 'ExceptionMsgBox' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. ExceptionMsgBox +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + diff --git a/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/licensing.xml b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/licensing.xml new file mode 100644 index 00000000..2d679f39 --- /dev/null +++ b/1.5 'Kruger 60'/Assemblies/Winforms.MsgBoxEx/licensing.xml @@ -0,0 +1,100 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + diff --git a/1.5 'Kruger 60'/AssemblySolutionInfo.cs b/1.5 'Kruger 60'/AssemblySolutionInfo.cs index c38297d5..de8319ee 100644 --- a/1.5 'Kruger 60'/AssemblySolutionInfo.cs +++ b/1.5 'Kruger 60'/AssemblySolutionInfo.cs @@ -1,20 +1,46 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System.Reflection; -using System.Runtime.CompilerServices; [assembly: AssemblyFileVersion(SolutionVersion.AssemblyFileVersion)] [assembly: AssemblyInformationalVersion(SolutionVersion.AssemblyInformationalVersion)] [assembly: AssemblyProduct(SolutionVersion.AssemblyProduct)] -[assembly: AssemblyCompany("movistartv.codeplex.com")] +[assembly: AssemblyCompany(SolutionVersion.AssemblyCompany)] internal static class SolutionVersion { - public const string DefaultAssemblyVersion = "1.5.1010.0"; - public const string AssemblyFileVersion = "1.5.1010.0"; - public const string AssemblyInformationalVersion = "1.5.1010.0"; + public const string DefaultAssemblyVersion = "1.5.1015.0"; + public const string AssemblyFileVersion = "1.5.1015.0"; + public const string AssemblyInformationalVersion = "1.5.1015.0"; public const string AssemblyProduct = "IPTViewr: virtual decoder for movistar+" + " (v" + ProductVersion + ")"; - public const string ProductVersion = "1.5 \"Kruger 60\" Beta 1"; - public const string DefaultCopyright = "Copyright (C) 2014-2016, AlphaCentaury and contributors"; -} // class SolutionVersion \ No newline at end of file + public const string ProductVersion = "1.5 \"Kruger 60\" Beta 1 RTW"; + public const string DefaultCopyright = "Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury and contributors"; + public const string AssemblyCompany = "www.alphacentaury.org"; + + public static string[] CopyrightHeaderLines = + { + "==============================================================================", + "", + " Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury", + " All rights reserved.", + "", + " See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root", + " for complete license information.", + "", + " http://www.alphacentaury.org/movistartv", + " https://github.com/AlphaCentaury", + "", + "==============================================================================" + }; +} // class SolutionVersion diff --git a/1.5 'Kruger 60'/ChannelList/AppInitializer.cs b/1.5 'Kruger 60'/ChannelList/AppInitializer.cs new file mode 100644 index 00000000..0a3a2f6e --- /dev/null +++ b/1.5 'Kruger 60'/ChannelList/AppInitializer.cs @@ -0,0 +1,191 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; +using System.IO; +using System.Threading; +using System.Windows.Forms; +using IpTviewr.ChannelList.Properties; +using IpTviewr.Common; +using IpTviewr.Common.Configuration; +using IpTviewr.Common.Telemetry; +using IpTviewr.UiServices.Common.Start; +using IpTviewr.UiServices.Configuration; + +namespace IpTviewr.ChannelList +{ + internal class AppInitializer : ISplashAppInitializer + { + private ISplashScreen _splashScreen; + private InitializationResult _initializationResult; + private string[] _arguments; + + public AppInitializer(string[] arguments) + { + _arguments = arguments; + } // constructor + + public int ExitCode + { + get; + set; + } // ExitCode + + #region ISplashAppInitializer + + public void InitializeContext(SplashAppContext ctx) + { + // no-op + } // InitializeContext + + public Image SetupSplashScreen(Label progressLabel) + { + progressLabel.Location = new Point(40, 320); + progressLabel.Size = new Size(320, 50); + progressLabel.Text = InvariantTexts.SplashScreenDefaultStatus; + + return Resources.SplashScreenBackground; + } // SetupSplashScreen + + /// There's no need for a try/catch block. The underlying Task takes care of any unhandled exception and the splash makes it available in OnInitializationComplete + public void InitializeApp(ISplashScreen splash) + { + _splashScreen = splash; + _initializationResult = LoadConfiguration(); + + if (_initializationResult.InnerException != null) + { + AppTelemetry.FormException(_initializationResult.InnerException, _splashScreen.SplashForm, _initializationResult.Message); + } // if + } // InitializeApp + + public bool OnInitializationComplete(Exception ex) + { + try + { + if (ex != null) + { + MyApplication.HandleException(_splashScreen.SplashForm, Texts.MyAppCtxExceptionCaption, Texts.MyAppCtxExceptionMsg, ex); + ExitCode = -1; + return false; + } // if + + if (_initializationResult.IsError) + { + if (_initializationResult.InnerException == null) + { + _splashScreen.DisplayMessage(_initializationResult.Caption ?? Texts.MyAppCtxInitializationErrorCaption, + _initializationResult.Message, MessageBoxIcon.Exclamation); + ExitCode = -3; + } + else + { + _splashScreen.DisplayException(_initializationResult.Caption ?? Texts.MyAppCtxInitializationErrorCaption, + _initializationResult.Message, _initializationResult.InnerException); + ExitCode = -4; + } // if-else + + return false; + } // if + + _splashScreen.DisplayProgress(Texts.MyAppCtxStarting); + return true; + } + finally + { + _arguments = null; + _splashScreen = null; + } // try-finally + } // OnInitializationComplete + + public void DisplayMessage(string caption, string message, MessageBoxIcon icon) + { + MyApplication.HandleException(_splashScreen.SplashForm, caption, message, icon, null); + } // DisplayMessage + + public void DisplayException(string caption, string message, Exception exception) + { + MyApplication.HandleException(_splashScreen.SplashForm, Texts.MyAppCtxExceptionCaption, Texts.MyAppCtxExceptionMsg, exception); + } // DisplayException + + public Form CreateMainForm() + { + return new ChannelListForm(); + } // CreateMainForm + + #endregion + + private InitializationResult LoadConfiguration() + { + try + { + Program.StartTelemetry(); + + var result = AppConfig.Load(null, _splashScreen.DisplayProgress); + if (!AppConfig.IsFirstTimeConfigExecuted) + { + MessageBox.Show(result.Message, result.Caption, MessageBoxButtons.OK, MessageBoxIcon.Error); + Environment.Exit(-7); + } // if + + if (result.IsError) return result; + + result = ValidateConfiguration(AppConfig.Current); + if (result.IsError) return result; + + AppTelemetry.ScreenEvent(AppTelemetry.LoadEvent, "SplashScreen"); + + return InitializationResult.Ok; + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = Texts.MyAppLoadConfigExceptionCaption, + Message = Texts.MyAppLoadConfigException, + InnerException = ex + }; + } // try-catch + } // LoadConfiguration + + private static InitializationResult ValidateConfiguration(AppConfig config) + { + var recorderPath = config.Folders.Install; +#if !DEBUG + var myPath = Application.StartupPath; + if (myPath.EndsWith(Properties.InvariantTexts.DebugLocationPath, StringComparison.OrdinalIgnoreCase)) + { + recorderPath = Path.Combine(myPath, Properties.InvariantTexts.DebugRecorderLauncherPath); + recorderPath = Path.GetFullPath(recorderPath); + } + else + { + recorderPath = config.Folders.Install; + } // if-else +#endif // DEBUG + + var recorderLauncherPath = Path.Combine(recorderPath, InvariantTexts.ExeRecorderLauncher); + if (!File.Exists(recorderLauncherPath)) + { + return new InitializationResult() + { + Message = string.Format(Properties.Texts.MyAppRecorderLauncherNotFound, recorderLauncherPath) + }; + } // if + MyApplication.RecorderLauncherPath = recorderLauncherPath; + + return InitializationResult.Ok; + } // ValidateConfiguration + } // class AppInitializer +} // namespace diff --git a/1.5 'Kruger 60'/ChannelList/ChannelList.csproj b/1.5 'Kruger 60'/ChannelList/ChannelList.csproj index ff315ca3..e004c966 100644 --- a/1.5 'Kruger 60'/ChannelList/ChannelList.csproj +++ b/1.5 'Kruger 60'/ChannelList/ChannelList.csproj @@ -8,8 +8,8 @@ WinExe Properties IpTviewr.ChannelList - ChannelList - v4.5.2 + IPTViewr + v4.6.2 512 @@ -45,6 +45,7 @@ false + 8 AnyCPU @@ -55,31 +56,21 @@ prompt 4 false + 8 Resources\IPTV.ico + + true + + + + Properties\app.manifest + - - ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - False - ..\Third-party\TaskScheduler\2.2.2\v2.0\Microsoft.Win32.TaskScheduler.dll - - - ..\Services.EpgDiscovery\bin\Debug\Services.EpgDiscovery.dll - - - - False - ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - - @@ -88,18 +79,33 @@ Properties\AssemblySolutionInfo.cs + Form ChannelListForm.cs + + Form + + + Form + + + Form + + + Form + + + Form + True True CommonUiResources.resx - True True @@ -113,6 +119,7 @@ + True True @@ -156,6 +163,12 @@ Resources\solution-license_es.rtf + + Form + + + + SettingsSingleFileGenerator Settings.Designer.cs @@ -167,8 +180,8 @@ - - + + @@ -192,6 +205,7 @@ + @@ -219,67 +233,74 @@ - + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} - Core.IpTvProvider + IpTviewr.IpTvServices - + {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} DvbStpClient - + {b91c438d-0333-4d06-86cd-74ce82df6f40} Etsi.Ts102034 - + {e1748f45-dd50-4479-96f6-f7eba6f3e28b} IpTv.MovistarPlus - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common + + + {5a171dbb-855c-452b-93c6-229c7aa6c7a6} + Services.EpgDiscovery - + {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} Services.Record.Serialization - + {a4172cdd-c8fd-4c91-9aaf-54a948f26273} Services.Record - - {3a053f34-4edf-4071-b966-923255a0ae14} - Services.SqlServerCE - True - - + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} UiServices.Common - + {a722de9d-ae51-479c-825f-a19f4c69bd75} UiServices.Config - + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} UiServices.Discovery - + {ba481e42-f570-4d2c-94d4-21c4cce27762} UiServices.DvbStpClient - + {004C3829-FED4-4084-B23B-871193AFA8C7} UiServices.EPG - + {90f750b3-64db-493f-96a6-e68de5ea60a1} UiServices.Forms - + {971b720e-2ae8-4ea4-b5ce-7a1af11c3743} UiServices.Record + + {968C6EEB-1E79-446A-96AE-69CB225E1C37} + IpTViewr.Core + + + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4} + IpTviewr.Telemetry + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/ChannelList/Resources/AppTelemetry_en.rtf b/1.5 'Kruger 60'/ChannelList/Resources/AppTelemetry_en.rtf new file mode 100644 index 00000000..cd105bb0 Binary files /dev/null and b/1.5 'Kruger 60'/ChannelList/Resources/AppTelemetry_en.rtf differ diff --git a/1.5 'Kruger 60'/ChannelList/Resources/AppTelemetry_es.rtf b/1.5 'Kruger 60'/ChannelList/Resources/AppTelemetry_es.rtf new file mode 100644 index 00000000..eb4ae28e Binary files /dev/null and b/1.5 'Kruger 60'/ChannelList/Resources/AppTelemetry_es.rtf differ diff --git a/1.5 'Kruger 60'/ChannelList/Resources/GoogleTelemetry_en.rtf b/1.5 'Kruger 60'/ChannelList/Resources/GoogleTelemetry_en.rtf deleted file mode 100644 index f0fece29..00000000 Binary files a/1.5 'Kruger 60'/ChannelList/Resources/GoogleTelemetry_en.rtf and /dev/null differ diff --git a/1.5 'Kruger 60'/ChannelList/Resources/GoogleTelemetry_es.rtf b/1.5 'Kruger 60'/ChannelList/Resources/GoogleTelemetry_es.rtf deleted file mode 100644 index 63b76af7..00000000 Binary files a/1.5 'Kruger 60'/ChannelList/Resources/GoogleTelemetry_es.rtf and /dev/null differ diff --git a/1.5 'Kruger 60'/ChannelList/app.config b/1.5 'Kruger 60'/ChannelList/app.config index 3d5dc143..25414f0f 100644 --- a/1.5 'Kruger 60'/ChannelList/app.config +++ b/1.5 'Kruger 60'/ChannelList/app.config @@ -1,21 +1,85 @@ - + - - -
- - - - - - - - - - - - - - - - + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/ChannelList/license.txt b/1.5 'Kruger 60'/ChannelList/license.txt index f166ad01..ee66e5cd 100644 --- a/1.5 'Kruger 60'/ChannelList/license.txt +++ b/1.5 'Kruger 60'/ChannelList/license.txt @@ -1,84 +1,782 @@ -AVISO IMPORTANTE: El presente software NO ESTÁ SOPORTADO NI RESPALDADO por Movistar ni por Telefónica. Telefónica de España no tiene responsabilidad alguna si hay canales (incluso si están contratados) que no pueden verse en el PC. NO DEBE LLAMARSE NUNCA al 1002 o al 1004 si desaparecen canales de la lista o no pueden verse o cualquier otra anomalía. Telefónica sólo proporcionará ayuda y soporte técnico para su decodificador físico y sólo para los servicios contratados. - -EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. -En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. - -Este software, ya sea en forma de código binario o fuente, está sujeta a los términos de la Licencia Recíproca de Microsoft "Microsoft Reciprocal License" (Ms-RL), excepto cuanto se indica en "EXCEPCIONES". -Todos los demás derechos están reservados por el/los autor(es) del software. - -Aviso: Las traducciones al Español de este archivo se proporcionan únicamente a modo informativo y no tienen caracter vinculante o validez legal alguna. - --------------------------------------------------------------------------------- -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors --------------------------------------------------------------------------------- - -NOTICE: This software IS NOT SUPPORTED NOR ENDORSED by Movistar or Telefónica. Telefónica de España has no responsibility if there are channels that can not be seen on the PC, even if they are part of contracted services. -DO NOT EVER CALL 1002 or 1004 if channels disappear from the list or can not be seen or any other abnormality. Telefónica only provides help and support for their physical decoder and only for the contracted services. - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -Note: Spanish translations in this file are provided solely for informative purposes and have no binding or legal value whatsoever. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - ->> "Microsoft Exception Message Box" - -The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. - -http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) -x86: SQLServer2005_EMB.msi; x64: SQLServer2005_EMB_x64.msi - ->> "Task Scheduler Managed Wrapper" - -This software links to binary code from the Codeplex project "Task Scheduler Managed Wrapper" -https://taskscheduler.codeplex.com/ - -"Task Scheduler Managed Wrapper" software is licensed under the MIT License (MIT). Complete license text is provided below. - -***************************************************************************** -** The MIT License (MIT) ** -***************************************************************************** - -Copyright (c) 2003-2010 David Hall - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +############################################################################## +## +## Program 'IPTViewr' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Apache License Version 2.0, January 2004 + * The MIT License (MIT) + * Microsoft .NET Library License Terms + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IPTViewr +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.Core +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. IpTViewr.MovistarPlus +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. IpTViewr.Native +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. IpTviewr.Telemetry +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. Services.EpgDiscovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. Services.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. Services.Record.Serialization +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. Services.SqlServerCE +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +15. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +16. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +17. UiServices.DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +18. UiServices.EPG +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +19. UiServices.Forms +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +20. UiServices.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Apache License Version 2.0, January 2004 +// +//////////////////////////////////////////////////////////// + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +//////////////////////////////////////////////////////////// + +>>> 'Apache License Version 2.0, January 2004' applies to the following THIRD-PARTY components: <<< + +1. SQLitePCLRaw.bundle_green +------------------------------ +'nuget' package by Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + +2. SQLitePCLRaw.core +------------------------------ +'nuget' package by Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + +3. SQLitePCLRaw.lib.e_sqlite3.linux +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +4. SQLitePCLRaw.lib.e_sqlite3.osx +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +6. SQLitePCLRaw.provider.e_sqlite3.net45 +------------------------------ +'nuget' package by Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Microsoft.AppCenter.Analytics +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + +3. Microsoft.AppCenter.Crashes +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect crash reports for your application. + +4. Microsoft.AppCenter +------------------------------ +'nuget' package by Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + +5. Microsoft.NETCore.Platforms +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + +6. NETStandard.Library +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + +7. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +8. sqlite-net-pcl +------------------------------ +'nuget' package by Frank A. Krueger +Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + +9. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + +10. TaskScheduler +------------------------------ +'nuget' package by David Hall +Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft .NET Library License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at https://docs.microsoft.com/en-us/legal/gdpr. + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit www.microsoft.com/exporting. + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft .NET Library License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft.Win32.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for Win32-based libraries. + +2. System.AppContext +------------------------------ +'nuget' package by Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + +3. System.Collections.Concurrent +------------------------------ +'nuget' package by Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + +4. System.Collections +------------------------------ +'nuget' package by Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + +5. System.Console +------------------------------ +'nuget' package by Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + +6. System.Diagnostics.Debug +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + +7. System.Diagnostics.DiagnosticSource +------------------------------ +'nuget' package by Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + +8. System.Diagnostics.Tools +------------------------------ +'nuget' package by Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + +9. System.Diagnostics.Tracing +------------------------------ +'nuget' package by Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + +10. System.Globalization.Calendars +------------------------------ +'nuget' package by Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + +11. System.Globalization +------------------------------ +'nuget' package by Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + +12. System.IO.Compression.ZipFile +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + +13. System.IO.Compression +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams. + +14. System.IO.FileSystem.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + +15. System.IO.FileSystem +------------------------------ +'nuget' package by Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + +16. System.IO +------------------------------ +'nuget' package by Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + +17. System.Linq.Expressions +------------------------------ +'nuget' package by Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + +18. System.Linq +------------------------------ +'nuget' package by Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + +19. System.Net.Http +------------------------------ +'nuget' package by Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + +20. System.Net.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + +21. System.Net.Sockets +------------------------------ +'nuget' package by Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + +22. System.ObjectModel +------------------------------ +'nuget' package by Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + +23. System.Reflection.Extensions +------------------------------ +'nuget' package by Microsoft + Provides custom attribute extension methods for System.Reflection types. + +24. System.Reflection.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations for reflection-based libraries. + +25. System.Reflection +------------------------------ +'nuget' package by Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + +26. System.Resources.ResourceManager +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + +27. System.Runtime.Extensions +------------------------------ +'nuget' package by Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + +28. System.Runtime.Handles +------------------------------ +'nuget' package by Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + +29. System.Runtime.InteropServices.RuntimeInformation +------------------------------ +'nuget' package by Microsoft + Provides APIs to query about runtime and OS information. + +30. System.Runtime.InteropServices +------------------------------ +'nuget' package by Microsoft + Provides types that support COM interop and platform invoke services. + +31. System.Runtime.Numerics +------------------------------ +'nuget' package by Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + +32. System.Runtime +------------------------------ +'nuget' package by Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + +33. System.Security.Cryptography.Algorithms +------------------------------ +'nuget' package by Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + +34. System.Security.Cryptography.Encoding +------------------------------ +'nuget' package by Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + +35. System.Security.Cryptography.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for the cryptographic libraries. + +36. System.Security.Cryptography.X509Certificates +------------------------------ +'nuget' package by Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + +37. System.Text.Encoding.Extensions +------------------------------ +'nuget' package by Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + +38. System.Text.Encoding +------------------------------ +'nuget' package by Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + +39. System.Text.RegularExpressions +------------------------------ +'nuget' package by Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + +40. System.Threading.Tasks +------------------------------ +'nuget' package by Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + +41. System.Threading.Timer +------------------------------ +'nuget' package by Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + +42. System.Threading +------------------------------ +'nuget' package by Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + +43. System.Xml.ReaderWriter +------------------------------ +'nuget' package by Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + +44. System.Xml.XDocument +------------------------------ +'nuget' package by Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/ChannelList/licensing.xml b/1.5 'Kruger 60'/ChannelList/licensing.xml new file mode 100644 index 00000000..d1e52be3 --- /dev/null +++ b/1.5 'Kruger 60'/ChannelList/licensing.xml @@ -0,0 +1,800 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Core + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.MovistarPlus + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record.Serialization + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Telemetry + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.EPG + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Forms + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Record + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.SqlServerCE + Unknown + + + + + Apache-2.0 + Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + + Apache-2.0 + Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + + + MIT + Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + + + MIT + Microsoft + This package contains functionalities to collect crash reports for your application. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Frank A. Krueger + Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MIT + David Hall + Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + MS.NET + Microsoft + Provides common types for Win32-based libraries. + + + MS.NET + Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + + MS.NET + Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + + MS.NET + Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + + MS.NET + Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + + MS.NET + Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + + + MS.NET + Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + + MS.NET + Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + + MS.NET + Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + + MS.NET + Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + + MS.NET + Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + + MS.NET + Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + + + MS.NET + Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + + + MS.NET + Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + + + MS.NET + Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + + MS.NET + Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + + MS.NET + Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + + MS.NET + Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + + MS.NET + Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + + MS.NET + Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + + MS.NET + Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + + MS.NET + Microsoft + Provides custom attribute extension methods for System.Reflection types. + + + MS.NET + Microsoft + Provides common enumerations for reflection-based libraries. + + + MS.NET + Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + + MS.NET + Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + + MS.NET + Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + + MS.NET + Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + + MS.NET + Microsoft + Provides types that support COM interop and platform invoke services. + + + MS.NET + Microsoft + Provides APIs to query about runtime and OS information. + + + MS.NET + Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + + MS.NET + Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + + MS.NET + Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + + MS.NET + Microsoft + Provides common types for the cryptographic libraries. + + + MS.NET + Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + + MS.NET + Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + + MS.NET + Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + + MS.NET + Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + + MS.NET + Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + + MS.NET + Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + + + MS.NET + Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + + MS.NET + Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + + MS.NET + Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj b/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj deleted file mode 100644 index b037897f..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Core.IpTvProvider.csproj +++ /dev/null @@ -1,115 +0,0 @@ - - - - - Debug - AnyCPU - {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA} - Library - Properties - IpTviewr.Core.IpTvProvider - Core.IpTvProvider - v4.5.2 - 512 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - False - ..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - - - True - True - Texts.resx - - - - - - - - {b91c438d-0333-4d06-86cd-74ce82df6f40} - Etsi.Ts102034 - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {8986cd52-0c65-42d6-9c47-20ff47cf87bb} - Project.Native - - - {5A171DBB-855C-452B-93C6-229C7AA6C7A6} - Services.EpgDiscovery - - - {a722de9d-ae51-479c-825f-a19f4c69bd75} - UiServices.Config - - - {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} - UiServices.Discovery - - - - - - ResXFileCodeGenerator - Texts.Designer.cs - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgProviderCapabilities.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgProviderCapabilities.cs deleted file mode 100644 index 6e1a184e..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/EpgProviderCapabilities.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.Core.IpTvProvider.EPG -{ - [Flags] - public enum EpgProviderCapabilities - { - ExtendedInfo = 0x01, - ProgramThumbnail = 0x02, - } // enum EpgProviderCapabilities -} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs deleted file mode 100644 index 3217668e..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/IEpgInfoProvider.cs +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Services.EpgDiscovery; -using IpTviewr.UiServices.Discovery; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.Core.IpTvProvider.EPG -{ - public interface IEpgInfoProvider - { - EpgProviderCapabilities Capabilities { get; } - - //EpgProgramExtended GetEpgInfo(UiBroadcastService service, EpgProgram epgEvent, bool portrait); - - //string GetEpgProgramThumbnailUrl(UiBroadcastService service, EpgProgram epgEvent, bool portrait); - } // interface IEpgInfoProvider -} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs b/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs deleted file mode 100644 index 31522996..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/EPG/ProgramEpgInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2015, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using IpTviewr.UiServices.Discovery; -using IpTviewr.Services.EpgDiscovery; - -namespace IpTviewr.Core.IpTvProvider.EPG -{ - public class ProgramEpgInfo - { - public UiBroadcastService Service - { - get; - set; - } // Service - - public EpgProgram Base - { - get; - set; - } // Base - - public EpgProgramExtended Extended - { - get; - set; - } // Extended - } // ProgramEpgInfo -} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/ExternalTvPlayer.cs b/1.5 'Kruger 60'/Core.IpTvProvider/ExternalTvPlayer.cs deleted file mode 100644 index efcd2a8b..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/ExternalTvPlayer.cs +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Schema2014.Config; -using IpTviewr.UiServices.Configuration.Settings.TvPlayers; -using IpTviewr.UiServices.Discovery; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Security.Permissions; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Native; -using Microsoft.SqlServer.MessageBox; - -namespace IpTviewr.Core.IpTvProvider -{ - public static class ExternalTvPlayer - { - private static string[] LaunchParamKeys; - - public static void ShowTvChannel(Form owner, UiBroadcastService service, bool defaultPlayer = true) - { - TvPlayer player; - - if (service == null) return; - if (service.IsHidden) return; - - if (service.IsInactive) - { - var box = new ExceptionMessageBox() - { - Caption = owner.Text, - Text = string.Format(Properties.Texts.ShowTvChannelInactiveService, service.DisplayName), - Beep = true, - Symbol = ExceptionMessageBoxSymbol.Question, - Buttons = ExceptionMessageBoxButtons.YesNo, - DefaultButton = ExceptionMessageBoxDefaultButton.Button2, - }; - if (box.Show(owner) != System.Windows.Forms.DialogResult.Yes) return; - } // if - - var tvPlayerSettings = TvPlayersSettingsRegistration.Settings; - if (defaultPlayer) - { - player = tvPlayerSettings.GetDefaultPlayer(); - } - else - { - using (var dialog = new SelectTvPlayerDialog()) - { - if (dialog.ShowDialog(owner) != DialogResult.OK) - { - return; - } // if - - player = dialog.SelectedPlayer; - } // using - } // if-else - - ExternalTvPlayer.Launch(player, service, !tvPlayerSettings.DirectLaunch); - } // ShowTvChannel - - public static void Launch(TvPlayer player, UiBroadcastService service, bool throughShortcut) - { - if (!File.Exists(player.Path)) - { - var ex = new FileNotFoundException(); - throw new FileNotFoundException(ex.Message + "\r\n" + player.Path); - } // if - - if (LaunchParamKeys == null) - { - LaunchParamKeys = new string[] - { - "Channel.Url", - "Channel.Name", - "Channel.Description", - "Channel.Icon.Path", - }; - } // if - - var paramValues = new string[] - { - service.LocationUrl, - service.DisplayName, - service.DisplayDescription, - service.Logo.GetLogoIconPath(), - }; - - var parameters = ArgumentsManager.CreateParameters(LaunchParamKeys, paramValues, false); - var arguments = ArgumentsManager.ExpandArguments(player.Arguments, parameters, TvPlayer.ParameterOpenBrace, TvPlayer.ParameterCloseBrace, StringComparison.CurrentCultureIgnoreCase); - var launchArguments = ArgumentsManager.JoinArguments(arguments); - - if (throughShortcut) - { - LaunchShortcut(player, service, launchArguments); - } - else - { - LaunchProcess(player, launchArguments); - } // if-else - } // Launch - - [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] - private static void LaunchShortcut(TvPlayer player, UiBroadcastService service, string arguments) - { - var shortcutPath = Path.Combine(AppUiConfiguration.Current.Folders.Cache, service.FullServiceName) + ".lnk"; - - // delete exising shortcut - if (File.Exists(shortcutPath)) - { - File.SetAttributes(shortcutPath, FileAttributes.Normal); - File.Delete(shortcutPath); - } // if - - var shortcut = new ShellLink(); - shortcut.TargetPath = player.Path; - shortcut.Arguments = arguments; - shortcut.Description = string.Format(Properties.Texts.ExternalPlayerShortcutDescription, player.Name, service.DisplayName); - shortcut.IconLocation = service.Logo.GetLogoIconPath(); - shortcutPath = shortcut.CreateShortcut(shortcutPath); - - var start = new ProcessStartInfo() - { - UseShellExecute = true, - FileName = shortcutPath, - ErrorDialog = true, - }; - using (var process = Process.Start(start)) - { - // no op - } // using process - } // LaunchShortcut - - [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] - private static void LaunchProcess(TvPlayer player, string arguments) - { - var start = new ProcessStartInfo() - { - UseShellExecute = false, - ErrorDialog = true, - FileName = player.Path, - Arguments = arguments, - }; - using (var process = Process.Start(start)) - { - // no op - } // using process - } // LaunchProcess - } // ExternalTvPlayer -} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs deleted file mode 100644 index 3cefea06..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProvider.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Discovery; - -namespace IpTviewr.Core.IpTvProvider -{ - public abstract class IpTvProvider - { - #region Static methods - - public static IpTvProvider Current - { - get; - set; - } // Current - - #endregion - - #region IpTvProvider Members - - public EPG.IEpgInfoProvider EpgInfo - { - get; - protected set; - } // EpgInfo - - public abstract InitializationResult Initialize(); - - #endregion - } // class IpTvProvider -} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettings.cs b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettings.cs deleted file mode 100644 index f8b46ff2..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettings.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Schema2014.Config; - -namespace IpTviewr.Core.IpTvProvider -{ - [Serializable] - [XmlRoot("IpTvProvider", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class IpTvProviderSettings : IConfigurationItem - { - public string ProviderClass - { - get; - set; - } // ProviderClass - - #region IConfigurationItem Members - - bool IConfigurationItem.SupportsInitialization - { - get { return false; } - } // SupportsInitialization - - bool IConfigurationItem.SupportsValidation - { - get { return false; } - } // SupportsValidation - - InitializationResult IConfigurationItem.Initializate() - { - try - { - if (IpTvProvider.Current != null) return InitializationResult.Ok; - - var ipTvProviderType = Type.GetType(ProviderClass); - var ipTvProvider = (IpTvProvider)Activator.CreateInstance(ipTvProviderType); - - var result = ipTvProvider.Initialize(); - IpTvProvider.Current = ipTvProvider; - - return result; - } - catch (Exception ex) - { - return new InitializationResult(ex); - } // try-catch - } // Initializate - - string IConfigurationItem.Validate(string ownerTag) - { - throw new NotSupportedException(); - } // Validate - - #endregion - } // class IpTvProviderSettings -} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettingsRegistration.cs b/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettingsRegistration.cs deleted file mode 100644 index 3bd94a4d..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/IpTvProviderSettingsRegistration.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using IpTviewr.UiServices.Configuration; - -namespace IpTviewr.Core.IpTvProvider -{ - public class IpTvProviderSettingsRegistration : IConfigurationItemRegistration - { - private static int MyDirectIndex; - - public static IpTvProviderSettings Settings - { - get { return AppUiConfiguration.Current[MyDirectIndex] as IpTvProviderSettings; } - set { AppUiConfiguration.Current[MyDirectIndex] = value; } - } // Settings - - #region IConfigurationItemRegistration Members - - public Guid Id - { - get { return new Guid(AppUiConfiguration.IpTvProviderSettingsRegistrationGuid); } - } // Id - - public bool HasEditor - { - get { return false; } - } // HasEditor - - public IConfigurationItem CreateDefault() - { - throw new NotSupportedException(); - } // CreateDefault - - public Type ItemType - { - get { return typeof(IpTvProviderSettings); } - } // ItemType - - public string EditorDisplayName - { - get { throw new NotSupportedException(); } - } // EditorDisplayName - - public string EditorDescription - { - get { throw new NotSupportedException(); } - } // EditorDescription - - public Image EditorImage - { - get { throw new NotSupportedException(); } - } // EditorImage - - public int EditorPriority - { - get { throw new NotSupportedException(); } - } // EditorPriority - - public IConfigurationItemEditor CreateEditor(IConfigurationItem data) - { - throw new NotSupportedException(); - } // CreateEditor - - public int DirectIndex - { - get { return MyDirectIndex; } - set { MyDirectIndex = value; } - } // DirectIndex - - #endregion - } // class IpTvProviderSettingsRegistration -} // namespace diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/License.txt b/1.5 'Kruger 60'/Core.IpTvProvider/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Core.IpTvProvider/Properties/AssemblyInfo.cs deleted file mode 100644 index d46b8ccb..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Core.IpTvProvider")] -[assembly: AssemblyDescription("IpTviewr.Core.IpTvProvider")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("64e2117e-9b83-4d77-8cf0-243bc3864598")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.Designer.cs deleted file mode 100644 index bb4ed19e..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.Designer.cs +++ /dev/null @@ -1,83 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.Core.IpTvProvider.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Core.IpTvProvider.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Launches {0} player to view IPTV channel '{1}'. - /// - internal static string ExternalPlayerShortcutDescription { - get { - return ResourceManager.GetString("ExternalPlayerShortcutDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The selected TV channel has been marked as inactive and might not be available. - /// - ///Do you still want to show {0}?. - /// - internal static string ShowTvChannelInactiveService { - get { - return ResourceManager.GetString("ShowTvChannelInactiveService", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.es.resx b/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.es.resx deleted file mode 100644 index f5600eff..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.es.resx +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Abre el reproductor {0} para ver el canal IPTV '{1}' - - - El canal de TV seleccionado ha sido marcado como inactivo y puede no estar disponible. - -¿Desea ver en cualquier caso {0}? - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.resx b/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.resx deleted file mode 100644 index 5e3622df..00000000 --- a/1.5 'Kruger 60'/Core.IpTvProvider/Properties/Texts.resx +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Launches {0} player to view IPTV channel '{1}' - - - The selected TV channel has been marked as inactive and might not be available. - -Do you still want to show {0}? - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/ExternalTvPlayer.cs b/1.5 'Kruger 60'/Core/IpTViewr.Core/ExternalTvPlayer.cs new file mode 100644 index 00000000..3e5e4d38 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/ExternalTvPlayer.cs @@ -0,0 +1,182 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Diagnostics; +using System.IO; +using System.Security.Permissions; +using System.Windows.Forms; +using IpTviewr.Common; +using IpTviewr.Core.Properties; +using IpTviewr.Native; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Settings.TvPlayers; +using IpTviewr.UiServices.Discovery; +using Microsoft.SqlServer.MessageBox; + +namespace IpTviewr.Core +{ + public static class ExternalTvPlayer + { + private static string[] _launchParamKeys; + + public static void ShowTvChannel(Form owner, UiBroadcastService service, bool defaultPlayer = true) + { + TvPlayer player; + + if (service == null) return; + if (service.IsHidden) return; + + if (service.IsInactive) + { + var box = new ExceptionMessageBox() + { + Caption = owner.Text, + Text = string.Format(Texts.ShowTvChannelInactiveService, service.DisplayName), + Beep = true, + Symbol = ExceptionMessageBoxSymbol.Question, + Buttons = ExceptionMessageBoxButtons.YesNo, + DefaultButton = ExceptionMessageBoxDefaultButton.Button2, + }; + if (box.Show(owner) != DialogResult.Yes) return; + } // if + + var tvPlayerSettings = TvPlayersSettingsRegistration.Settings; + if (defaultPlayer) + { + player = tvPlayerSettings.GetDefaultPlayer(); + } + else + { + using (var dialog = new SelectTvPlayerDialog()) + { + if (dialog.ShowDialog(owner) != DialogResult.OK) + { + return; + } // if + + player = dialog.SelectedPlayer; + } // using + } // if-else + + try + { + Launch(player, service, !tvPlayerSettings.DirectLaunch); + } + catch (Exception e) + { + var box = new ExceptionMessageBox() + { + Caption = owner.Text, + Text = string.Format(Texts.ExternalPlayerLaunchError, player.Name, service.DisplayName), + InnerException = e, + Beep = true, + Symbol = ExceptionMessageBoxSymbol.Warning, + Buttons = ExceptionMessageBoxButtons.OK, + }; + + box.Show(owner); + } // try-catch + } // ShowTvChannel + + public static void Launch(TvPlayer player, UiBroadcastService service, bool throughShortcut) + { + if (!File.Exists(player.Path)) + { + var ex = new FileNotFoundException(); + throw new FileNotFoundException($"{ex.Message}\r\n{player.Path}"); + } // if + + if (_launchParamKeys == null) + { + _launchParamKeys = new[] + { + "Channel.Url", + "Channel.Name", + "Channel.Description", + "Channel.Icon.Path", + }; + } // if + + var paramValues = new[] + { + service.LocationUrl, + service.DisplayName, + service.DisplayDescription, + throughShortcut? service.Logo.GetLogoIconPath() : null, + }; + + var parameters = ArgumentsManager.CreateParameters(_launchParamKeys, paramValues, false); + var arguments = ArgumentsManager.ExpandArguments(player.Arguments, parameters, TvPlayer.ParameterOpenBrace, TvPlayer.ParameterCloseBrace, StringComparison.CurrentCultureIgnoreCase); + var launchArguments = ArgumentsManager.JoinArguments(arguments); + + if (throughShortcut) + { + LaunchShortcut(player, service, launchArguments, paramValues[3]); + } + else + { + LaunchProcess(player, launchArguments); + } // if-else + } // Launch + + [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] + private static void LaunchShortcut(TvPlayer player, UiBroadcastService service, string arguments, string iconLocation) + { + var shortcutPath = Path.Combine(AppConfig.Current.Folders.Cache, service.FullServiceName) + ".lnk"; + + // delete existing shortcut + if (File.Exists(shortcutPath)) + { + File.SetAttributes(shortcutPath, FileAttributes.Normal); + File.Delete(shortcutPath); + } // if + + var shortcut = new ShellLink + { + TargetPath = player.Path, + Arguments = arguments, + Description = string.Format(Texts.ExternalPlayerShortcutDescription, player.Name, service.DisplayName), + IconLocation = iconLocation + }; + shortcutPath = shortcut.CreateShortcut(shortcutPath); + + var start = new ProcessStartInfo() + { + UseShellExecute = true, + FileName = shortcutPath, + ErrorDialog = true, + }; + using (var process = Process.Start(start)) + { + // no op + } // using process + } // LaunchShortcut + + [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] + private static void LaunchProcess(TvPlayer player, string arguments) + { + var start = new ProcessStartInfo() + { + UseShellExecute = false, + ErrorDialog = true, + FileName = player.Path, + Arguments = arguments, + }; + using (var process = Process.Start(start)) + { + // no op + } // using process + } // LaunchProcess + } // ExternalTvPlayer +} // namespace diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/IpTViewr.Core.csproj b/1.5 'Kruger 60'/Core/IpTViewr.Core/IpTViewr.Core.csproj new file mode 100644 index 00000000..b37da204 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/IpTViewr.Core.csproj @@ -0,0 +1,96 @@ + + + + + Debug + AnyCPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37} + Library + Properties + IpTviewr.Core + IpTViewr.Core + v4.6.2 + 512 + true + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + Texts.resx + True + True + + + + + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} + IpTviewr.IpTvServices + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common + + + {8986cd52-0c65-42d6-9c47-20ff47cf87bb} + IpTviewr.Native + + + {a722de9d-ae51-479c-825f-a19f4c69bd75} + UiServices.Config + + + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + UiServices.Discovery + + + + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/IpTvProviderSettings.cs b/1.5 'Kruger 60'/Core/IpTViewr.Core/IpTvProviderSettings.cs new file mode 100644 index 00000000..fbac477a --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/IpTvProviderSettings.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; +using IpTviewr.Common.Configuration; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Config; + +namespace IpTviewr.Core +{ + [Serializable] + [XmlRoot("IpTvProvider", Namespace = ConfigCommon.ConfigXmlNamespace)] + public class IpTvProviderSettings : IConfigurationItem + { + #region IConfigurationItem Members + + public virtual bool SupportsInitialization => false; + + public virtual bool SupportsValidation => false; + + public virtual InitializationResult Initialize() => throw new NotSupportedException(); + + public virtual string Validate(string ownerTag) => throw new NotSupportedException(); + + #endregion + } // class IpTvProviderSettings +} // namespace diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/IpTvProviderSettingsRegistration.cs b/1.5 'Kruger 60'/Core/IpTViewr.Core/IpTvProviderSettingsRegistration.cs new file mode 100644 index 00000000..35cb4cd4 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/IpTvProviderSettingsRegistration.cs @@ -0,0 +1,64 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; +using IpTviewr.UiServices.Configuration; + +namespace IpTviewr.Core +{ + public class IpTvProviderSettingsRegistration : IConfigurationItemRegistration + { + private static int _myDirectIndex; + + public static IpTvProviderSettings Settings + { + get => AppConfig.Current[_myDirectIndex] as IpTvProviderSettings; + set => AppConfig.Current[_myDirectIndex] = value; + } // Settings + + #region IConfigurationItemRegistration Members + + public Guid Id => new Guid(AppConfig.IpTvProviderSettingsRegistrationGuid); + + public bool HasEditor => false; + + public IConfigurationItem CreateDefault() + { + throw new NotSupportedException(); + } // CreateDefault + + public Type ItemType => typeof(IpTvProviderSettings); + + public string EditorDisplayName => throw new NotSupportedException(); + + public string EditorDescription => throw new NotSupportedException(); + + public Image EditorImage => throw new NotSupportedException(); + + public int EditorPriority => throw new NotSupportedException(); + + public IConfigurationItemEditor CreateEditor(IConfigurationItem data) + { + throw new NotSupportedException(); + } // CreateEditor + + public int DirectIndex + { + get => _myDirectIndex; + set => _myDirectIndex = value; + } // DirectIndex + + #endregion + } // class IpTvProviderSettingsRegistration +} // namespace diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/LICENSE.ES.MD b/1.5 'Kruger 60'/Core/IpTViewr.Core/LICENSE.ES.MD new file mode 100644 index 00000000..4d006715 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/LICENSE.ES.MD @@ -0,0 +1,207 @@ +# Biblioteca 'IpTViewr.Core' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.Core +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Common +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/LICENSE.MD b/1.5 'Kruger 60'/Core/IpTViewr.Core/LICENSE.MD new file mode 100644 index 00000000..bc19d888 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/LICENSE.MD @@ -0,0 +1,179 @@ +# Library 'IpTViewr.Core' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.Core +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Common +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/License.txt b/1.5 'Kruger 60'/Core/IpTViewr.Core/License.txt new file mode 100644 index 00000000..b2442f0b --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/License.txt @@ -0,0 +1,187 @@ +############################################################################## +## +## Library 'IpTViewr.Core' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® Exception Message Box License Terms + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.Core +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. UiServices.Common +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. UiServices.DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..fe58a94f --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/AssemblyInfo.cs @@ -0,0 +1,44 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IpTViewr.Core")] +[assembly: AssemblyDescription("IpTViewr.Core")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("968c6eeb-1e79-446a-96ae-69cb225e1c37")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/Texts.Designer.cs new file mode 100644 index 00000000..f8028a42 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/Texts.Designer.cs @@ -0,0 +1,105 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Core.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Core.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Unable to launch '{0}' player to view channel '{1}'.. + /// + internal static string ExternalPlayerLaunchError { + get { + return ResourceManager.GetString("ExternalPlayerLaunchError", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Launches {0} player to view IPTV channel '{1}'. + /// + internal static string ExternalPlayerShortcutDescription { + get { + return ResourceManager.GetString("ExternalPlayerShortcutDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The selected TV channel has been marked as inactive and might not be available. + /// + ///Do you still want to show {0}?. + /// + internal static string ShowTvChannelInactiveService { + get { + return ResourceManager.GetString("ShowTvChannelInactiveService", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/Texts.es.resx b/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/Texts.es.resx new file mode 100644 index 00000000..f93e6ed5 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/Texts.es.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + No ha sido posible ejecutar el reproductor '{0}' para ver canal '{1}'. + + + Abre el reproductor {0} para ver el canal IPTV '{1}' + + + El canal de TV seleccionado ha sido marcado como inactivo y puede no estar disponible. + +¿Desea ver en cualquier caso {0}? + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/Texts.resx b/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/Texts.resx new file mode 100644 index 00000000..6f5d1f35 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/Properties/Texts.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Unable to launch '{0}' player to view channel '{1}'. + + + Launches {0} player to view IPTV channel '{1}' + + + The selected TV channel has been marked as inactive and might not be available. + +Do you still want to show {0}? + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core/IpTViewr.Core/licensing.xml b/1.5 'Kruger 60'/Core/IpTViewr.Core/licensing.xml new file mode 100644 index 00000000..f7b7e19e --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTViewr.Core/licensing.xml @@ -0,0 +1,218 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/GoogleAnalytics.cs b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/GoogleAnalytics.cs new file mode 100644 index 00000000..bf63e250 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/GoogleAnalytics.cs @@ -0,0 +1,589 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +#if DEBUG +#undef RELEASE +#else +#define RELEASE +#endif + +using IpTviewr.Common.Telemetry; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Net; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using IpTviewr.Native; + +namespace IpTviewr.Telemetry +{ + public sealed class GoogleAnalytics : ITelemetryProvider + { + private static readonly Uri UrlEndpoint = new Uri("https://www.google-analytics.com/collect"); + + private string _userAgent; + private string _applicationName; + private string _applicationId; + private string _dataSource; + + #region ITelemetryProvider implementation + + public bool Enabled { get; set; } + + public void Start(IReadOnlyDictionary properties) + { + if (properties == null) throw new InvalidOperationException(); + + TrackingId = properties["TrackingId"]; + _userAgent = BuildUserAgent(); + _applicationName = Path.GetFileNameWithoutExtension(Application.ExecutablePath); + _applicationId = Assembly.GetEntryAssembly()?.EntryPoint?.DeclaringType?.FullName; + _dataSource = GetType().FullName; + ClientId = properties["ClientId"]; + ManageSession(false); + } // Start + + public void End() + { + ManageSession(true); + EnsureHitsSent(); + } // End + + // ScreenLoad + + public void ScreenEvent(string eventName, string screenName, string data = null, IEnumerable> properties = null) + { + if (eventName == AppTelemetry.LoadEvent) + { + SendScreenHit(screenName, data); + } + else + { + + SendEventHit("formEvent", eventName, data, screenName); + } // if + } // ScreenEvent + + public void Exception(Exception ex, string screenName, string message = null, IEnumerable> properties = null) + { + SendExtendedExceptionHit(ex, true, message, screenName); + } // ExceptionExtended + + public void CustomEvent(string eventName, string action, string screenName, string data = null, IEnumerable> properties = null) + { + SendEventHit(eventName, action, data, screenName); + } // CustomEvent + + #endregion + + #region Google Analytics Measurement Protocol + + // Measurement Protocol Parameter Reference + // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters + + #region General + + /// + /// Protocol Version (required for all hit types) + /// + /// + /// The Protocol version. The current value is '1'. + /// + private const string AnalyticsProtocolVersion = "v"; + + /// + /// Current protocol version + /// + /// + /// This will only change when there are changes made that are not backwards compatible. + /// + private const string AnalyticsProtocolVersionValue = "1"; + + /// + /// Tracking ID / Web Property ID (required for all hit types) + /// + /// + /// The tracking ID / web property ID. The format is UA-XXXX-Y. All collected data is associated by this ID. + /// + private const string AnalyticsTrackingId = "tid"; + + /// + /// Data Source (optional) + /// + /// + /// Indicates the data source of the hit. + /// + private const string AnalyticsDataSource = "ds"; + + #endregion + + #region User + + /// + /// Client ID (optional) + /// + /// + /// This field is required if User ID (uid) is not specified in the request. This anonymously identifies a particular user, device, or browser instance. + /// For the web, this is generally stored as a first-party cookie with a two-year expiration. + /// For mobile apps, this is randomly generated for each particular instance of an application install. + /// The value of this field should be a random UUID (version 4) as described in http://www.ietf.org/rfc/rfc4122.txt. + /// + private const string AnalyticsClientId = "cid"; + + #endregion + + #region Session + + /// + /// Session Control (optional) + /// + /// + /// Used to control the session duration. + /// A value of 'start' forces a new session to start with this hit and 'end' forces the current session to end with this hit. + /// All other values are ignored. + /// + private const string AnalyticsSessionControl = "sc"; + + /// + /// Session Control start value + /// + private const string AnalyticsSessionStartValue = "start"; + + /// + /// Session Control end value + /// + private const string AnalyticsSessionEndValue = "end"; + + #endregion + + #region System Info + + /// + /// Screen Resolution (optional) + /// + /// + /// Specifies the screen resolution. + /// + private const string AnalyticsScreenResolution = "sr"; + + /// + /// Viewport size (optional) + /// + /// + /// Specifies the viewable area of the browser / device. + /// + private const string AnalyticsViewportSize = "vp"; + + /// + /// Screen Colors (optional) + /// + /// + /// Specifies the screen color depth. + /// + private const string AnalyticsScreenColors = "sd"; + + /// + /// User Language (optional) + /// + /// + /// Specifies the language. + /// + private const string AnalyticsUserLanguage = "ul"; + + #endregion + + #region Hit + + /// + /// Hit type (required for all hit types) + /// + /// + /// The type of hit. + /// Must be one of 'pageview', 'screenview', 'event', 'transaction', 'item', 'social', 'exception', 'timing'. + /// + private const string AnalyticsHitType = "t"; + + /// + /// Hit type: Event + /// + private const string AnalyticsHitTypeEventValue = "event"; + + /// + /// Hit type: Screen View + /// + private const string AnalyticsHitTypeScreenViewValue = "screenview"; + + /// + /// Hit type: Exception + /// + private const string AnalyticsHitTypeExceptionValue = "exception"; + + /// + /// Non-Interaction Hit (optional) + /// + /// + /// Specifies that a hit be considered non-interactive. + /// + private const string AnalyticsNonInteractionHit = "ni"; + + /// + /// Non-Interaction Hit parameter value + /// + private const string AnalyticsNonInteractionHitValue = "1"; + + #endregion + + #region Content Information + + /// + /// Screen Name (required for screenview hit type) + /// + /// + /// This parameter is required on mobile properties for screenview hits, where it is used for the 'Screen Name' of the screenview hit. + /// + private const string AnalyticsScreenName = "cd"; + + #endregion + + #region App Tracking + + /// + /// Application Name (required for any hit that has app related data) + /// + /// + /// Specifies the application name. This field is required for any hit that has app related data (i.e., app version, app ID, or app installer ID). + /// + private const string AnalyticsApplicationName = "an"; + + /// + /// Application ID (optional) + /// + /// + /// Application identifier. + /// + private const string AnalyticsApplicationId = "ai"; + + /// + /// Application Version (optional) + /// + /// + /// Specifies the application version. + /// + private const string AnalyticsApplicationVersion = "av"; + + #endregion + + #region Event Tracking (hit type = "event") + + /// + /// Event Category (required for event hit type) + /// + /// + /// Specifies the event category. Must not be empty. + /// + private const string AnalyticsEventCategory = "ec"; + + /// + /// Event Action (required for event hit type) + /// + /// + /// Specifies the event action. Must not be empty. + /// + private const string AnalyticsEventAction = "ea"; + + /// + /// Event Label (optional for event hit type) + /// + /// + /// Specifies the event label. + /// + private const string AnalyticsEventLabel = "el"; + + /// + /// Event Value (optional for event hit type) + /// + /// + /// Specifies the event value. Values must be non-negative. + /// + private const string AnalyticsEventValue = "ev"; + + #endregion + + #region Exceptions (hit type = "exception") + + /// + /// Exception Description (optional) + /// + /// + /// Specifies the description of an exception. + /// + private const string AnalyticsExceptionDescription = "exd"; + + #endregion + + #region Custom Dimensions / Metrics + + /// + /// Custom Dimension #1: OSVersion + /// + /// + /// Each custom dimension has an associated index. There is a maximum of 20 custom dimensions. + /// + private const string AnalyticsCustomOsVersion = "cd<1>"; + + /// + /// Custom Dimension #2: DPI + /// + /// + /// Each custom dimension has an associated index. There is a maximum of 20 custom dimensions. + /// + private const string AnalyticsCustomDpi = "cd<2>"; + + /// + /// Custom Dimension #2: OSBitnesss + /// + /// + /// Each custom dimension has an associated index. There is a maximum of 20 custom dimensions. + /// + private const string AnalyticsCustomOsBitness = "cd<3>"; + + #endregion + + #endregion + + public string TrackingId + { + get; + private set; + } // TrackingId + + public string ClientId + { + get; + private set; + } // ClientId + + [Conditional("RELEASE")] + public void EnsureHitsSent() + { + // this is a nasty trick to give time to the ThreadPool to send any remaining hits + // TODO: create a true queue + if (Enabled) + { + Thread.Sleep(5000); + } // if + } // EnsureHitsSent + + private IDictionary CreatePropertyBag() + { + var bag = new Dictionary + { + { AnalyticsProtocolVersion, AnalyticsProtocolVersionValue }, + { AnalyticsTrackingId, TrackingId }, + { AnalyticsClientId, ClientId }, + { AnalyticsUserLanguage, Thread.CurrentThread.CurrentUICulture.Name.ToLowerInvariant() }, + { AnalyticsApplicationName, _applicationName }, + { AnalyticsApplicationId, _applicationId }, + { AnalyticsApplicationVersion, SolutionVersion.AssemblyFileVersion }, + { AnalyticsDataSource, _dataSource } + }; + + return bag; + } // CreatePropertyBag + + private const string EventCategorySession = "Session"; + private const string EventActionSessionStart = "Start"; + private const string EventActionSessionEnd = "End"; + + private const string EventCategoryException = "Exception"; + + private void ManageSession(bool end) + { + ThreadPool.QueueUserWorkItem((o) => + { + WindowsDesktop.GetDpi(out var dpiX, out var dpiY); + var bag = CreatePropertyBag(); + + bag.Add(AnalyticsHitType, AnalyticsHitTypeEventValue); + bag.Add(AnalyticsEventCategory, EventCategorySession); + bag.Add(AnalyticsEventAction, end ? EventActionSessionEnd : EventActionSessionStart); + bag.Add(AnalyticsScreenResolution, $"{Screen.PrimaryScreen.Bounds.Width}x{Screen.PrimaryScreen.Bounds.Height}"); + bag.Add(AnalyticsViewportSize, $"{SystemInformation.WorkingArea.Width}x{SystemInformation.WorkingArea.Height}"); + bag.Add(AnalyticsScreenColors, $"{Screen.PrimaryScreen.BitsPerPixel}-bits"); + bag.Add(AnalyticsNonInteractionHit, AnalyticsNonInteractionHitValue); + bag.Add(AnalyticsCustomOsVersion, string.Format(CultureInfo.InvariantCulture, "OSVersion: {0}", Environment.OSVersion)); + bag.Add(AnalyticsCustomDpi, string.Format(CultureInfo.InvariantCulture, "DPI: {0}x{1}", dpiX, dpiY)); + bag.Add(AnalyticsCustomOsBitness, Environment.Is64BitOperatingSystem ? "64 bits" : "32 bits"); + Send(bag); + + bag = CreatePropertyBag(); + bag.Add(AnalyticsSessionControl, end ? AnalyticsSessionEndValue : AnalyticsSessionStartValue); + bag.Add(AnalyticsNonInteractionHit, AnalyticsNonInteractionHitValue); + Send(bag); + }); + } // End + + private void SendScreenHit(string screenName, string status = null) + { + ThreadPool.QueueUserWorkItem((o) => + { + var bag = CreatePropertyBag(); + bag.Add(AnalyticsHitType, AnalyticsHitTypeScreenViewValue); + bag.Add(AnalyticsScreenName, screenName); + if (status != null) + { + bag.Add(AnalyticsEventLabel, status); + } // if + Send(bag); + }); + } // SendScreenHit + + private void SendScreenHit(Form form, string status = null) + { + ThreadPool.QueueUserWorkItem((o) => + { + var bag = CreatePropertyBag(); + bag.Add(AnalyticsHitType, AnalyticsHitTypeScreenViewValue); + bag.Add(AnalyticsScreenName, status == null ? form.GetType().Name : $"{form.GetType().Name}: {status}"); // Screen Name + Send(bag); + }); + } // SendScreenHit + + private void SendExceptionHit(Exception ex) + { + ThreadPool.QueueUserWorkItem((o) => + { + var bag = CreatePropertyBag(); + bag.Add(AnalyticsHitType, AnalyticsHitTypeExceptionValue); + bag.Add(AnalyticsExceptionDescription, ex.GetType().FullName); + bag.Add(AnalyticsNonInteractionHit, AnalyticsNonInteractionHitValue); + Send(bag); + }); + } // SendExceptionHit + + private void SendExtendedExceptionHit(Exception ex, bool sendBasic = true, string context = null, string screenName = null) + { + ThreadPool.QueueUserWorkItem((o) => + { + if (sendBasic) + { + var basicBag = CreatePropertyBag(); + basicBag.Add(AnalyticsHitType, AnalyticsHitTypeExceptionValue); + basicBag.Add(AnalyticsExceptionDescription, ex.GetType().FullName); + basicBag.Add(AnalyticsNonInteractionHit, AnalyticsNonInteractionHitValue); + if (screenName != null) + { + basicBag.Add(AnalyticsScreenName, screenName); + } // if + + Send(basicBag); + } // if + + var bag = CreatePropertyBag(); + bag.Add(AnalyticsHitType, AnalyticsHitTypeEventValue); + bag.Add(AnalyticsEventCategory, EventCategoryException); + bag.Add(AnalyticsEventAction, ex.GetType().FullName); + if (context != null) + { + bag.Add(AnalyticsEventLabel, context); + } // if + if (screenName != null) + { + bag.Add(AnalyticsScreenName, screenName); + } // if + bag.Add(AnalyticsNonInteractionHit, AnalyticsNonInteractionHitValue); + Send(bag); + }); + } // SendExtendedExceptionHit + + private void SendEventHit(string category, string action, string label = null, string screenName = null, int? value = null) + { + ThreadPool.QueueUserWorkItem((o) => + { + var bag = CreatePropertyBag(); + bag.Add(AnalyticsHitType, AnalyticsHitTypeEventValue); + bag.Add(AnalyticsEventCategory, category); + bag.Add(AnalyticsEventAction, action); + if (label != null) + { + bag.Add(AnalyticsEventLabel, label); + } // if + if (value != null) + { + bag.Add(AnalyticsEventValue, value.Value.ToString(CultureInfo.InvariantCulture)); + } // if + if (screenName != null) + { + bag.Add(AnalyticsScreenName, screenName); + } // if + Send(bag); + }); + } // CustomEvent + + [Conditional("RELEASE")] // Do NOT send hits in debug mode + private void Send(IDictionary propertyBag) + { + try + { + var client = new WebClient(); + client.Headers.Add(HttpRequestHeader.UserAgent, _userAgent); + + var postData = GetPostData(propertyBag); + var binPostData = Encoding.UTF8.GetBytes(postData); + client.UploadData(UrlEndpoint, binPostData); + } + catch + { + // ignore + } // try-catch + } // Send + + private static string GetPostData(IDictionary propertyBag) + { + var result = new StringBuilder(); + foreach (var property in propertyBag) + { + if (result.Length > 0) result.Append("&"); + result.Append(Uri.EscapeDataString(property.Key)); + result.Append("="); + result.Append(Uri.EscapeDataString(property.Value)); + } // foreach + + return result.ToString(); + } // GetPostData + + private static string BuildUserAgent() + { + var osInfo = Environment.OSVersion; + var osVersion = osInfo.Version; + var osName = osInfo.Platform switch + { + PlatformID.Win32NT => "Windows NT", + PlatformID.Unix => "Unix", + PlatformID.MacOSX => "Macintosh", + PlatformID.Win32Windows => "Windows", + PlatformID.Win32S => "Windows", + PlatformID.WinCE => "Windows CE", + PlatformID.Xbox => "Xbox", + _ => "Unknown" + }; + + return $@"{"Mozilla/5.0"} ({osName} {osVersion.Major}.{osVersion.Minor}.{osVersion.Build})"; + } // BuildUserAgent + } // class GoogleAnalytics +} // namespace diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/IpTviewr.Telemetry.csproj b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/IpTviewr.Telemetry.csproj new file mode 100644 index 00000000..30d7edfc --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/IpTviewr.Telemetry.csproj @@ -0,0 +1,183 @@ + + + + + Debug + AnyCPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4} + Library + Properties + IpTviewr.Telemetry + IpTviewr.Telemetry + v4.6.2 + 512 + true + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + 8.0 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + 8.0 + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C} + IpTviewr.Common + + + {8986cd52-0c65-42d6-9c47-20ff47cf87bb} + IpTviewr.Native + + + + + ..\..\packages\Microsoft.AppCenter.2.6.2\lib\net45\Microsoft.AppCenter.dll + + + ..\..\packages\Microsoft.AppCenter.Analytics.2.6.2\lib\net45\Microsoft.AppCenter.Analytics.dll + + + ..\..\packages\Microsoft.AppCenter.Crashes.2.6.2\lib\net45\Microsoft.AppCenter.Crashes.dll + + + ..\..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll + + + ..\..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\..\packages\sqlite-net-pcl.1.6.292\lib\netstandard1.1\SQLite-net.dll + + + ..\..\packages\SQLitePCLRaw.bundle_green.1.1.14\lib\net45\SQLitePCLRaw.batteries_green.dll + + + ..\..\packages\SQLitePCLRaw.bundle_green.1.1.14\lib\net45\SQLitePCLRaw.batteries_v2.dll + + + ..\..\packages\SQLitePCLRaw.core.1.1.14\lib\net45\SQLitePCLRaw.core.dll + + + ..\..\packages\SQLitePCLRaw.provider.e_sqlite3.net45.1.1.14\lib\net45\SQLitePCLRaw.provider.e_sqlite3.dll + + + + ..\..\packages\System.AppContext.4.1.0\lib\net46\System.AppContext.dll + + + + ..\..\packages\System.Console.4.0.1\lib\net46\System.Console.dll + + + ..\..\packages\System.Diagnostics.DiagnosticSource.4.0.0\lib\net46\System.Diagnostics.DiagnosticSource.dll + + + ..\..\packages\System.Diagnostics.Tracing.4.1.0\lib\net462\System.Diagnostics.Tracing.dll + + + + ..\..\packages\System.Globalization.Calendars.4.0.1\lib\net46\System.Globalization.Calendars.dll + + + ..\..\packages\System.IO.4.1.0\lib\net462\System.IO.dll + + + ..\..\packages\System.IO.Compression.4.1.0\lib\net46\System.IO.Compression.dll + + + + ..\..\packages\System.IO.Compression.ZipFile.4.0.1\lib\net46\System.IO.Compression.ZipFile.dll + + + ..\..\packages\System.IO.FileSystem.4.0.1\lib\net46\System.IO.FileSystem.dll + + + ..\..\packages\System.IO.FileSystem.Primitives.4.0.1\lib\net46\System.IO.FileSystem.Primitives.dll + + + ..\..\packages\System.Net.Http.4.1.4\lib\net46\System.Net.Http.dll + + + ..\..\packages\System.Net.Sockets.4.1.0\lib\net46\System.Net.Sockets.dll + + + + ..\..\packages\System.Reflection.4.1.0\lib\net462\System.Reflection.dll + + + ..\..\packages\System.Runtime.4.1.2\lib\net462\System.Runtime.dll + + + ..\..\packages\System.Runtime.Extensions.4.1.2\lib\net462\System.Runtime.Extensions.dll + + + ..\..\packages\System.Runtime.InteropServices.4.1.0\lib\net462\System.Runtime.InteropServices.dll + + + ..\..\packages\System.Runtime.InteropServices.RuntimeInformation.4.0.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + + + ..\..\packages\System.Security.Cryptography.Algorithms.4.2.1\lib\net461\System.Security.Cryptography.Algorithms.dll + + + ..\..\packages\System.Security.Cryptography.Encoding.4.0.0\lib\net46\System.Security.Cryptography.Encoding.dll + + + ..\..\packages\System.Security.Cryptography.Primitives.4.0.0\lib\net46\System.Security.Cryptography.Primitives.dll + + + ..\..\packages\System.Security.Cryptography.X509Certificates.4.1.2\lib\net461\System.Security.Cryptography.X509Certificates.dll + + + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/LICENSE.ES.MD b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/LICENSE.ES.MD new file mode 100644 index 00000000..bc540c6d --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/LICENSE.ES.MD @@ -0,0 +1,605 @@ +# Biblioteca 'IpTviewr.Telemetry' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft .NET Library License Terms] + * [Apache License Version 2.0, January 2004] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Telemetry +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Microsoft.AppCenter.Analytics +_Paquete 'nuget' por Microsoft_ + +This package contains functionalities to collect session, device properties, events etc… for your application. + + +#### 3. Microsoft.AppCenter.Crashes +_Paquete 'nuget' por Microsoft_ + +This package contains functionalities to collect crash reports for your application. + + +#### 4. Microsoft.AppCenter +_Paquete 'nuget' por Microsoft_ + +This package contains the basic functionalities that all App Center services use to communicate with the backend. + + +#### 5. Microsoft.NETCore.Platforms +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + +#### 6. NETStandard.Library +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +A set of standard .NET APIs that are prescribed to be used and supported together. + + +#### 7. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 8. sqlite-net-pcl +_Paquete 'nuget' por Frank A. Krueger_ + +**Copyright (c) Krueger Systems, Inc.** + +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + + +### Microsoft .NET Library License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at [https://go.microsoft.com/fwlink/?LinkID=824704](https://go.microsoft.com/fwlink/?LinkID=824704). You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at [https://docs.microsoft.com/en-us/legal/gdpr](https://docs.microsoft.com/en-us/legal/gdpr). + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft .NET Library License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft.Win32.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for Win32-based libraries. + + +#### 2. System.AppContext +_Paquete 'nuget' por Microsoft_ + +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + +#### 3. System.Collections.Concurrent +_Paquete 'nuget' por Microsoft_ + +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + +#### 4. System.Collections +_Paquete 'nuget' por Microsoft_ + +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + +#### 5. System.Console +_Paquete 'nuget' por Microsoft_ + +Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + +#### 6. System.Diagnostics.Debug +_Paquete 'nuget' por Microsoft_ + +Provides classes and attributes that allows basic interaction with a debugger. + + +#### 7. System.Diagnostics.DiagnosticSource +_Paquete 'nuget' por Microsoft_ + +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + +#### 8. System.Diagnostics.Tools +_Paquete 'nuget' por Microsoft_ + +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + +#### 9. System.Diagnostics.Tracing +_Paquete 'nuget' por Microsoft_ + +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + +#### 10. System.Globalization.Calendars +_Paquete 'nuget' por Microsoft_ + +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + +#### 11. System.Globalization +_Paquete 'nuget' por Microsoft_ + +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + +#### 12. System.IO.Compression.ZipFile +_Paquete 'nuget' por Microsoft_ + +Provides classes that support the compression and decompression of streams using file system paths. + + +#### 13. System.IO.Compression +_Paquete 'nuget' por Microsoft_ + +Provides classes that support the compression and decompression of streams. + + +#### 14. System.IO.FileSystem.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common enumerations and exceptions for path-based I/O libraries. + + +#### 15. System.IO.FileSystem +_Paquete 'nuget' por Microsoft_ + +Provides types that allow reading and writing to files and types that provide basic file and directory support. + + +#### 16. System.IO +_Paquete 'nuget' por Microsoft_ + +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + +#### 17. System.Linq.Expressions +_Paquete 'nuget' por Microsoft_ + +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + +#### 18. System.Linq +_Paquete 'nuget' por Microsoft_ + +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + +#### 19. System.Net.Http +_Paquete 'nuget' por Microsoft_ + +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + +#### 20. System.Net.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + +#### 21. System.Net.Sockets +_Paquete 'nuget' por Microsoft_ + +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + +#### 22. System.ObjectModel +_Paquete 'nuget' por Microsoft_ + +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + +#### 23. System.Reflection.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides custom attribute extension methods for System.Reflection types. + + +#### 24. System.Reflection.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common enumerations for reflection-based libraries. + + +#### 25. System.Reflection +_Paquete 'nuget' por Microsoft_ + +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + +#### 26. System.Resources.ResourceManager +_Paquete 'nuget' por Microsoft_ + +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + +#### 27. System.Runtime.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + +#### 28. System.Runtime.Handles +_Paquete 'nuget' por Microsoft_ + +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + +#### 29. System.Runtime.InteropServices.RuntimeInformation +_Paquete 'nuget' por Microsoft_ + +Provides APIs to query about runtime and OS information. + + +#### 30. System.Runtime.InteropServices +_Paquete 'nuget' por Microsoft_ + +Provides types that support COM interop and platform invoke services. + + +#### 31. System.Runtime.Numerics +_Paquete 'nuget' por Microsoft_ + +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + +#### 32. System.Runtime +_Paquete 'nuget' por Microsoft_ + +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + +#### 33. System.Security.Cryptography.Algorithms +_Paquete 'nuget' por Microsoft_ + +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + +#### 34. System.Security.Cryptography.Encoding +_Paquete 'nuget' por Microsoft_ + +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + +#### 35. System.Security.Cryptography.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for the cryptographic libraries. + + +#### 36. System.Security.Cryptography.X509Certificates +_Paquete 'nuget' por Microsoft_ + +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + +#### 37. System.Text.Encoding.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + +#### 38. System.Text.Encoding +_Paquete 'nuget' por Microsoft_ + +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + +#### 39. System.Text.RegularExpressions +_Paquete 'nuget' por Microsoft_ + +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + +#### 40. System.Threading.Tasks +_Paquete 'nuget' por Microsoft_ + +Provides types that simplify the work of writing concurrent and asynchronous code. + + +#### 41. System.Threading.Timer +_Paquete 'nuget' por Microsoft_ + +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + +#### 42. System.Threading +_Paquete 'nuget' por Microsoft_ + +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + +#### 43. System.Xml.ReaderWriter +_Paquete 'nuget' por Microsoft_ + +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + +#### 44. System.Xml.XDocument +_Paquete 'nuget' por Microsoft_ + +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +### Apache License Version 2.0, January 2004 + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + + +> **'Apache License Version 2.0, January 2004'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. SQLitePCLRaw.bundle_green +_Paquete 'nuget' por Eric Sink_ + +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + +#### 2. SQLitePCLRaw.core +_Paquete 'nuget' por Eric Sink, et al_ + +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + +#### 3. SQLitePCLRaw.lib.e_sqlite3.linux +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 4. SQLitePCLRaw.lib.e_sqlite3.osx +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 6. SQLitePCLRaw.provider.e_sqlite3.net45 +_Paquete 'nuget' por Eric Sink et al_ + +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/LICENSE.MD b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/LICENSE.MD new file mode 100644 index 00000000..8a134f83 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/LICENSE.MD @@ -0,0 +1,577 @@ +# Library 'IpTviewr.Telemetry' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft .NET Library License Terms] + * [Apache License Version 2.0, January 2004] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Telemetry +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Microsoft.AppCenter.Analytics +_'nuget' package by Microsoft_ + +This package contains functionalities to collect session, device properties, events etc… for your application. + + +#### 3. Microsoft.AppCenter.Crashes +_'nuget' package by Microsoft_ + +This package contains functionalities to collect crash reports for your application. + + +#### 4. Microsoft.AppCenter +_'nuget' package by Microsoft_ + +This package contains the basic functionalities that all App Center services use to communicate with the backend. + + +#### 5. Microsoft.NETCore.Platforms +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + +#### 6. NETStandard.Library +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +A set of standard .NET APIs that are prescribed to be used and supported together. + + +#### 7. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 8. sqlite-net-pcl +_'nuget' package by Frank A. Krueger_ + +**Copyright (c) Krueger Systems, Inc.** + +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + + +### Microsoft .NET Library License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at [https://go.microsoft.com/fwlink/?LinkID=824704](https://go.microsoft.com/fwlink/?LinkID=824704). You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at [https://docs.microsoft.com/en-us/legal/gdpr](https://docs.microsoft.com/en-us/legal/gdpr). + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft .NET Library License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft.Win32.Primitives +_'nuget' package by Microsoft_ + +Provides common types for Win32-based libraries. + + +#### 2. System.AppContext +_'nuget' package by Microsoft_ + +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + +#### 3. System.Collections.Concurrent +_'nuget' package by Microsoft_ + +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + +#### 4. System.Collections +_'nuget' package by Microsoft_ + +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + +#### 5. System.Console +_'nuget' package by Microsoft_ + +Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + +#### 6. System.Diagnostics.Debug +_'nuget' package by Microsoft_ + +Provides classes and attributes that allows basic interaction with a debugger. + + +#### 7. System.Diagnostics.DiagnosticSource +_'nuget' package by Microsoft_ + +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + +#### 8. System.Diagnostics.Tools +_'nuget' package by Microsoft_ + +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + +#### 9. System.Diagnostics.Tracing +_'nuget' package by Microsoft_ + +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + +#### 10. System.Globalization.Calendars +_'nuget' package by Microsoft_ + +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + +#### 11. System.Globalization +_'nuget' package by Microsoft_ + +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + +#### 12. System.IO.Compression.ZipFile +_'nuget' package by Microsoft_ + +Provides classes that support the compression and decompression of streams using file system paths. + + +#### 13. System.IO.Compression +_'nuget' package by Microsoft_ + +Provides classes that support the compression and decompression of streams. + + +#### 14. System.IO.FileSystem.Primitives +_'nuget' package by Microsoft_ + +Provides common enumerations and exceptions for path-based I/O libraries. + + +#### 15. System.IO.FileSystem +_'nuget' package by Microsoft_ + +Provides types that allow reading and writing to files and types that provide basic file and directory support. + + +#### 16. System.IO +_'nuget' package by Microsoft_ + +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + +#### 17. System.Linq.Expressions +_'nuget' package by Microsoft_ + +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + +#### 18. System.Linq +_'nuget' package by Microsoft_ + +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + +#### 19. System.Net.Http +_'nuget' package by Microsoft_ + +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + +#### 20. System.Net.Primitives +_'nuget' package by Microsoft_ + +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + +#### 21. System.Net.Sockets +_'nuget' package by Microsoft_ + +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + +#### 22. System.ObjectModel +_'nuget' package by Microsoft_ + +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + +#### 23. System.Reflection.Extensions +_'nuget' package by Microsoft_ + +Provides custom attribute extension methods for System.Reflection types. + + +#### 24. System.Reflection.Primitives +_'nuget' package by Microsoft_ + +Provides common enumerations for reflection-based libraries. + + +#### 25. System.Reflection +_'nuget' package by Microsoft_ + +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + +#### 26. System.Resources.ResourceManager +_'nuget' package by Microsoft_ + +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + +#### 27. System.Runtime.Extensions +_'nuget' package by Microsoft_ + +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + +#### 28. System.Runtime.Handles +_'nuget' package by Microsoft_ + +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + +#### 29. System.Runtime.InteropServices.RuntimeInformation +_'nuget' package by Microsoft_ + +Provides APIs to query about runtime and OS information. + + +#### 30. System.Runtime.InteropServices +_'nuget' package by Microsoft_ + +Provides types that support COM interop and platform invoke services. + + +#### 31. System.Runtime.Numerics +_'nuget' package by Microsoft_ + +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + +#### 32. System.Runtime +_'nuget' package by Microsoft_ + +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + +#### 33. System.Security.Cryptography.Algorithms +_'nuget' package by Microsoft_ + +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + +#### 34. System.Security.Cryptography.Encoding +_'nuget' package by Microsoft_ + +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + +#### 35. System.Security.Cryptography.Primitives +_'nuget' package by Microsoft_ + +Provides common types for the cryptographic libraries. + + +#### 36. System.Security.Cryptography.X509Certificates +_'nuget' package by Microsoft_ + +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + +#### 37. System.Text.Encoding.Extensions +_'nuget' package by Microsoft_ + +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + +#### 38. System.Text.Encoding +_'nuget' package by Microsoft_ + +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + +#### 39. System.Text.RegularExpressions +_'nuget' package by Microsoft_ + +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + +#### 40. System.Threading.Tasks +_'nuget' package by Microsoft_ + +Provides types that simplify the work of writing concurrent and asynchronous code. + + +#### 41. System.Threading.Timer +_'nuget' package by Microsoft_ + +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + +#### 42. System.Threading +_'nuget' package by Microsoft_ + +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + +#### 43. System.Xml.ReaderWriter +_'nuget' package by Microsoft_ + +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + +#### 44. System.Xml.XDocument +_'nuget' package by Microsoft_ + +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +### Apache License Version 2.0, January 2004 + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + + +> **'Apache License Version 2.0, January 2004'** applies to the following **third-party components:** + +#### 1. SQLitePCLRaw.bundle_green +_'nuget' package by Eric Sink_ + +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + +#### 2. SQLitePCLRaw.core +_'nuget' package by Eric Sink, et al_ + +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + +#### 3. SQLitePCLRaw.lib.e_sqlite3.linux +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 4. SQLitePCLRaw.lib.e_sqlite3.osx +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 6. SQLitePCLRaw.provider.e_sqlite3.net45 +_'nuget' package by Eric Sink et al_ + +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..02b66ad7 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Project.Common")] +[assembly: AssemblyDescription("IpTviewr.Common")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8c3814bf-9482-41c2-ba1a-cba59f5c2ed4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/TelemetryFactory.cs b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/TelemetryFactory.cs new file mode 100644 index 00000000..c1fcec83 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/TelemetryFactory.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; +using IpTviewr.Common.Telemetry; + +namespace IpTviewr.Telemetry +{ + public class TelemetryFactory : ITelemetryFactory + { + public List GetProviders() + { + return new List(2) + { + new VsAppCenter(), + new GoogleAnalytics() + }; + } // GetProviders + } // class TelemetryFactory +} // namespace diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/VsAppCenter.cs b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/VsAppCenter.cs new file mode 100644 index 00000000..0fff3581 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/VsAppCenter.cs @@ -0,0 +1,105 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Windows.Forms; +using IpTviewr.Common.Telemetry; +using IpTviewr.Native; +using Microsoft.AppCenter; +using Microsoft.AppCenter.Analytics; +using Microsoft.AppCenter.Crashes; + +namespace IpTviewr.Telemetry +{ + public sealed class VsAppCenter : ITelemetryProvider + { + #region Implementation of ITelemetryProvider + + public bool Enabled + { + get => AppCenter.IsEnabledAsync().Result; + set => AppCenter.SetEnabledAsync(value).Wait(); + } // Enabled + + public void Start(IReadOnlyDictionary properties) + { + if (properties == null) throw new InvalidOperationException(); + + var countryCode = RegionInfo.CurrentRegion.TwoLetterISORegionName; + var exe = Path.GetFileNameWithoutExtension(Application.ExecutablePath); + WindowsDesktop.GetDpi(out var dpiX, out var dpiY); + +#if DEBUG + AppCenter.LogLevel = LogLevel.Verbose; +#endif + AppCenter.SetEnabledAsync(AppTelemetry.Enabled).Wait(); + Analytics.SetEnabledAsync(AppTelemetry.Enabled).Wait(); + Crashes.SetEnabledAsync(AppTelemetry.Enabled).Wait(); + + AppCenter.SetCountryCode(countryCode); + AppCenter.Start(properties["AppSecret"], typeof(Analytics), typeof(Crashes)); + Analytics.TrackEvent($"{exe}:Start", new Dictionary + { + {"CurrentCulture", CultureInfo.CurrentCulture.Name}, + {"CurrentUICulture", CultureInfo.CurrentUICulture.Name}, + {"InstalledUICulture", CultureInfo.InstalledUICulture.Name}, + {"MonitorCount", SystemInformation.MonitorCount.ToString(CultureInfo.InvariantCulture)}, + {"DPI", string.Format(CultureInfo.InvariantCulture, "{0}x{1}", dpiX, dpiY) }, + {"ScreenResolution", string.Format(CultureInfo.InvariantCulture, "{0}x{1}",Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)}, + {"ViewportSize", string.Format(CultureInfo.InvariantCulture, "{0}x{1}", SystemInformation.WorkingArea.Width, SystemInformation.WorkingArea.Height)}, + {"ScreenColors", string.Format(CultureInfo.InvariantCulture, "{0}-bits", Screen.PrimaryScreen.BitsPerPixel)}, + {"OSVersion", Environment.OSVersion.ToString()}, + {"OSBitness", Environment.Is64BitOperatingSystem? "64 bits" : "32 bits" } + }); + } // Start + + public void End() + { + var exe = Path.GetFileNameWithoutExtension(Application.ExecutablePath); + Analytics.TrackEvent($"{exe}:End"); + } // End + + public void ScreenEvent(string eventName, string screenName, string data = null, IEnumerable> properties = null) + { + Analytics.TrackEvent("Screen:" + eventName, new Dictionary + { + {"Screen", screenName }, + {"Data", data } + }); + } // ScreenEvent + + public void Exception(Exception ex, string screenName, string message = null, IEnumerable> properties = null) + { + Crashes.TrackError(ex, new Dictionary + { + {"Screen", screenName }, + {"Message", message } + }, ErrorAttachmentLog.AttachmentWithText(ex.StackTrace, "ex.StackTrace")); + } // Exception + + public void CustomEvent(string eventName, string action, string screenName, string data = null, IEnumerable> properties = null) + { + Analytics.TrackEvent(eventName, new Dictionary + { + {"Event", action }, + {"Data", data }, + {"Screen", screenName }, + }); + } // CustomEvent + + #endregion + } // class VsAppCenter +} // namespace diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/app.config b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/app.config new file mode 100644 index 00000000..e516e714 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/app.config @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/license.txt b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/license.txt new file mode 100644 index 00000000..19c2c0ca --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/license.txt @@ -0,0 +1,539 @@ +############################################################################## +## +## Library 'IpTviewr.Telemetry' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + * Microsoft .NET Library License Terms + * Apache License Version 2.0, January 2004 + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Telemetry +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Microsoft.AppCenter.Analytics +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + +3. Microsoft.AppCenter.Crashes +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect crash reports for your application. + +4. Microsoft.AppCenter +------------------------------ +'nuget' package by Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + +5. Microsoft.NETCore.Platforms +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + +6. NETStandard.Library +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + +7. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +8. sqlite-net-pcl +------------------------------ +'nuget' package by Frank A. Krueger +Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft .NET Library License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at https://docs.microsoft.com/en-us/legal/gdpr. + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit www.microsoft.com/exporting. + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft .NET Library License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft.Win32.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for Win32-based libraries. + +2. System.AppContext +------------------------------ +'nuget' package by Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + +3. System.Collections.Concurrent +------------------------------ +'nuget' package by Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + +4. System.Collections +------------------------------ +'nuget' package by Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + +5. System.Console +------------------------------ +'nuget' package by Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + +6. System.Diagnostics.Debug +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + +7. System.Diagnostics.DiagnosticSource +------------------------------ +'nuget' package by Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + +8. System.Diagnostics.Tools +------------------------------ +'nuget' package by Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + +9. System.Diagnostics.Tracing +------------------------------ +'nuget' package by Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + +10. System.Globalization.Calendars +------------------------------ +'nuget' package by Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + +11. System.Globalization +------------------------------ +'nuget' package by Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + +12. System.IO.Compression.ZipFile +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + +13. System.IO.Compression +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams. + +14. System.IO.FileSystem.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + +15. System.IO.FileSystem +------------------------------ +'nuget' package by Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + +16. System.IO +------------------------------ +'nuget' package by Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + +17. System.Linq.Expressions +------------------------------ +'nuget' package by Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + +18. System.Linq +------------------------------ +'nuget' package by Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + +19. System.Net.Http +------------------------------ +'nuget' package by Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + +20. System.Net.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + +21. System.Net.Sockets +------------------------------ +'nuget' package by Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + +22. System.ObjectModel +------------------------------ +'nuget' package by Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + +23. System.Reflection.Extensions +------------------------------ +'nuget' package by Microsoft + Provides custom attribute extension methods for System.Reflection types. + +24. System.Reflection.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations for reflection-based libraries. + +25. System.Reflection +------------------------------ +'nuget' package by Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + +26. System.Resources.ResourceManager +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + +27. System.Runtime.Extensions +------------------------------ +'nuget' package by Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + +28. System.Runtime.Handles +------------------------------ +'nuget' package by Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + +29. System.Runtime.InteropServices.RuntimeInformation +------------------------------ +'nuget' package by Microsoft + Provides APIs to query about runtime and OS information. + +30. System.Runtime.InteropServices +------------------------------ +'nuget' package by Microsoft + Provides types that support COM interop and platform invoke services. + +31. System.Runtime.Numerics +------------------------------ +'nuget' package by Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + +32. System.Runtime +------------------------------ +'nuget' package by Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + +33. System.Security.Cryptography.Algorithms +------------------------------ +'nuget' package by Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + +34. System.Security.Cryptography.Encoding +------------------------------ +'nuget' package by Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + +35. System.Security.Cryptography.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for the cryptographic libraries. + +36. System.Security.Cryptography.X509Certificates +------------------------------ +'nuget' package by Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + +37. System.Text.Encoding.Extensions +------------------------------ +'nuget' package by Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + +38. System.Text.Encoding +------------------------------ +'nuget' package by Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + +39. System.Text.RegularExpressions +------------------------------ +'nuget' package by Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + +40. System.Threading.Tasks +------------------------------ +'nuget' package by Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + +41. System.Threading.Timer +------------------------------ +'nuget' package by Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + +42. System.Threading +------------------------------ +'nuget' package by Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + +43. System.Xml.ReaderWriter +------------------------------ +'nuget' package by Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + +44. System.Xml.XDocument +------------------------------ +'nuget' package by Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +//////////////////////////////////////////////////////////// +// +// Apache License Version 2.0, January 2004 +// +//////////////////////////////////////////////////////////// + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +//////////////////////////////////////////////////////////// + +>>> 'Apache License Version 2.0, January 2004' applies to the following THIRD-PARTY components: <<< + +1. SQLitePCLRaw.bundle_green +------------------------------ +'nuget' package by Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + +2. SQLitePCLRaw.core +------------------------------ +'nuget' package by Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + +3. SQLitePCLRaw.lib.e_sqlite3.linux +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +4. SQLitePCLRaw.lib.e_sqlite3.osx +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +6. SQLitePCLRaw.provider.e_sqlite3.net45 +------------------------------ +'nuget' package by Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/licensing.xml b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/licensing.xml new file mode 100644 index 00000000..10929f3a --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/licensing.xml @@ -0,0 +1,540 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + + + Apache-2.0 + Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + + Apache-2.0 + Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + + + MIT + Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + + + MIT + Microsoft + This package contains functionalities to collect crash reports for your application. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Frank A. Krueger + Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + + MS.NET + Microsoft + Provides common types for Win32-based libraries. + + + MS.NET + Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + + MS.NET + Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + + MS.NET + Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + + MS.NET + Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + + MS.NET + Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + + + MS.NET + Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + + MS.NET + Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + + MS.NET + Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + + MS.NET + Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + + MS.NET + Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + + MS.NET + Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + + + MS.NET + Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + + + MS.NET + Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + + + MS.NET + Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + + MS.NET + Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + + MS.NET + Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + + MS.NET + Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + + MS.NET + Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + + MS.NET + Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + + MS.NET + Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + + MS.NET + Microsoft + Provides custom attribute extension methods for System.Reflection types. + + + MS.NET + Microsoft + Provides common enumerations for reflection-based libraries. + + + MS.NET + Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + + MS.NET + Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + + MS.NET + Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + + MS.NET + Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + + MS.NET + Microsoft + Provides types that support COM interop and platform invoke services. + + + MS.NET + Microsoft + Provides APIs to query about runtime and OS information. + + + MS.NET + Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + + MS.NET + Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + + MS.NET + Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + + MS.NET + Microsoft + Provides common types for the cryptographic libraries. + + + MS.NET + Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + + MS.NET + Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + + MS.NET + Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + + MS.NET + Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + + MS.NET + Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + + MS.NET + Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + + + MS.NET + Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + + MS.NET + Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + + MS.NET + Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/packages.config b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/packages.config new file mode 100644 index 00000000..4ea1ac53 --- /dev/null +++ b/1.5 'Kruger 60'/Core/IpTviewr.Telemetry/packages.config @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpBaseClient.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpBaseClient.cs deleted file mode 100644 index 0e1566e1..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpBaseClient.cs +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public abstract class DvbStpBaseClient - { - public const int UdpMaxDatagramSize = 65535; - protected const int DefaultHeaderLength = 12; - protected const int MaxHeaderLength = DefaultHeaderLength + 4; - - private byte[] TempBytesBuffer; - - public DvbStpBaseClient(IPAddress ip, int port) - { - MulticastIpAddress = ip; - MulticastPort = port; - ReceiveDatagramTimeout = 7500; // 7.5 seconds (7.5 s * 1,000 ms) - OperationTimeout = 600000; // 10 minutes (10 m * 60 s * 1,000 ms) - } // constructor - - public IPAddress MulticastIpAddress - { - get; - protected set; - } // MulticastIpAddress - - public int MulticastPort - { - get; - protected set; - } // MulticastPort - - public int ReceiveDatagramTimeout // in milliseconds - { - get; - set; - } // ReceiveDatagramTimeout - - public int DatagramCount - { - get; - private set; - } // public - - public bool CancelRequested - { - get; - protected set; - } // CancelRequested - - public DateTime StartTime - { - get; - private set; - } // StartTime - - public DateTime NoDataTimeoutStartTime - { - get; - private set; - } // NoDataTimeoutStartTime - - public int NoDataTimeout // in milliseconds - { - get; - set; - } // NoDataTimeout - - public int OperationTimeout // in milliseconds - { - get; - set; - } // OperationTimeout - - protected Socket Socket - { - get; - private set; - } // Socket - - protected byte[] DatagramData - { - get; - private set; - } // DatagramData - - protected DvbStpHeader Header - { - get; - private set; - } // Header - - protected int ReceivedBytes - { - get; - private set; - } // ReceivedBytes - - public virtual void Close() - { - if (Socket == null) return; - - Socket.Close(); - DatagramData = null; - TempBytesBuffer = null; - Header = null; - } // Close - - public virtual void CancelRequest() - { - CancelRequested = true; - } // CancelRequest - - protected void ReceiveData() - { - CancelRequested = false; - Connect(); - - while (!CancelRequested) - { - CheckTimeouts(); - - Receive(false); - if (Header.Version != 0) continue; - - // filter received section - if (FilterSection()) continue; - - // requested payloadId & segmentId found! - DecodeHeader(true); - - // process data - ProcessReceivedData(); - - // got all expected data? - if (EndReceptionLoop) - { - break; - } // if - } // while - } // ReceiveData - - protected virtual bool FilterSection() - { - return false; - } // FilterSection - - protected abstract void ProcessReceivedData(); - - protected bool EndReceptionLoop - { - get; - set; - } // EndReceptionLoop - - protected virtual void Connect() - { - Socket s; - MulticastOption multicastData; - - if (Socket != null) return; - - DatagramData = new byte[UdpMaxDatagramSize]; - TempBytesBuffer = new byte[4]; - - s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); - s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); - s.ReceiveTimeout = ReceiveDatagramTimeout; - s.Bind(new IPEndPoint(IPAddress.Any, MulticastPort)); - multicastData = new MulticastOption(MulticastIpAddress, IPAddress.Any); - s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, multicastData); - - Socket = s; - StartNoDataTimeout(); - } // Connect - - protected void Receive(bool decodeHeader) - { - ReceivedBytes = Socket.Receive(DatagramData); - DatagramCount = DatagramCount + 1; - - if (ReceivedBytes < DefaultHeaderLength) throw new InvalidDataException("ReceivedBytes < DefaultHeaderLength"); - - DecodeBasicHeader(); - - if ((decodeHeader) && (Header.Version == 0)) - { - DecodeHeader(true); - } // if - } // Receive - - protected void DecodeBasicHeader() - { - Header = new DvbStpHeader(); - Header.Version = (byte)(DatagramData[0] & DvbStpHeaderMasks.Version); - - // byte 4 - Header.PayloadId = DatagramData[4]; - - // byte 5-6 - Header.SegmentIdNetworkLo = DatagramData[5]; - Header.SegmentIdNetworkHi = DatagramData[6]; - - // byte 7 - Header.SegmentVersion = DatagramData[7]; - } // DecodeBasicHeader - - protected void DecodeHeader(bool fullDecode) - { - short networkShort; - int networkInt; - byte[] RawHeader; - - RawHeader = DatagramData; - if (fullDecode) - { - PartialDecodeHeader(); - } // if - - // byte 0 - // Header.Version computed at reception time - Header.Reserved = (byte)((RawHeader[0] & DvbStpHeaderMasks.Reserved) >> 3); - Header.Encription = (byte)((RawHeader[0] & DvbStpHeaderMasks.Encription) >> 1); - //Header.HasCRC computed in partial decode - - // byte 1-3 - TempBytesBuffer[0] = 0x00; - TempBytesBuffer[1] = RawHeader[1]; - TempBytesBuffer[2] = RawHeader[2]; - TempBytesBuffer[3] = RawHeader[3]; - networkInt = BitConverter.ToInt32(TempBytesBuffer, 0); - Header.TotalSegmentSize = IPAddress.NetworkToHostOrder(networkInt); - - // byte 4 - // Computed at reception: Header.PayloadId = RawHeader[4]; - - // byte 5-6 - // Computed at reception: Header.SegmentIdNetworkLo = DatagramData[5]; - // Computed at reception: Header.SegmentIdNetworkHi = DatagramData[6]; - networkShort = BitConverter.ToInt16(RawHeader, 5); - Header.SegmentId = IPAddress.NetworkToHostOrder(networkShort); - - // byte 7 - // Computed at reception: Header.SegmentVersion = RawHeader[7]; - - // byte 8-9 - TempBytesBuffer[0] = RawHeader[8]; - TempBytesBuffer[1] = (byte)(RawHeader[9] & DvbStpHeaderMasks.SectionNumberLSB); - networkShort = BitConverter.ToInt16(TempBytesBuffer, 0); - Header.SectionNumber = (short)((IPAddress.NetworkToHostOrder(networkShort) >> 4) & 0x00FFFF); - - // byte 9-10 - TempBytesBuffer[0] = (byte)(RawHeader[9] & DvbStpHeaderMasks.LastSectionNumberMSB); - TempBytesBuffer[1] = RawHeader[10]; - networkShort = BitConverter.ToInt16(TempBytesBuffer, 0); - Header.LastSectionNumber = IPAddress.NetworkToHostOrder(networkShort); - - // byte 11 - Header.Compression = (DvbStpHeader.CompressionMethod)(RawHeader[0] & DvbStpHeaderMasks.Compression); - // Header.HasServiceProviderId computed in PartialDecode - // Header.PrivateHeaderLength computed in PartialDecode - if (Header.PrivateHeaderLength > 0) - { - Header.PrivateHeaderOffset = DefaultHeaderLength + (Header.HasServiceProviderId ? 4 : 0); - } - else - { - Header.PrivateHeaderOffset = -1; - } // if-else - - // byte 12-15 - if (Header.HasServiceProviderId) - { - networkInt = BitConverter.ToInt32(RawHeader, 12); - Header.ServiceProviderId = IPAddress.NetworkToHostOrder(networkInt); - } // if - - // CRC - if (Header.HasCRC) - { - networkInt = BitConverter.ToInt32(RawHeader, Header.PayloadOffset + Header.PayloadSize); - Header.CRC = IPAddress.NetworkToHostOrder(networkInt); - } // if - - // not-implemnted - if ((Header.Encription != 0) || (Header.Compression != 0)) - { - throw new NotImplementedException(); - } // if - } // DecodeHeader - - protected void PartialDecodeHeader() - { - byte[] RawHeader; - - RawHeader = DatagramData; - - // byte[0] - Header.HasCRC = (RawHeader[0] & DvbStpHeaderMasks.HasCRC) == 0 ? false : true; - - // byte[11] - Header.HasServiceProviderId = (RawHeader[11] & DvbStpHeaderMasks.HasServiceProviderId) == 0 ? false : true; - Header.PrivateHeaderLength = (byte)(RawHeader[11] & DvbStpHeaderMasks.PrivateHeaderLength); - - Header.PayloadOffset = DefaultHeaderLength + (Header.HasServiceProviderId ? 4 : 0) + Header.PrivateHeaderLength; - Header.PayloadSize = ReceivedBytes - Header.PayloadOffset - (Header.HasCRC ? 4 : 0); - } // PartialDecodeHeader - - #region Timeout handling - - private void StartNoDataTimeout() - { - StartTime = DateTime.Now; - NoDataTimeoutStartTime = StartTime; - } // StartTimeout - - protected void ResetNoDataTimeout() - { - NoDataTimeoutStartTime = DateTime.Now; - } // ResetNoDataTimeout - - protected void CheckTimeouts() - { - TimeSpan elapsed; - - if (NoDataTimeout > 0) - { - elapsed = DateTime.Now - NoDataTimeoutStartTime; - if (elapsed.TotalMilliseconds > NoDataTimeout) throw new TimeoutException(); - } // if - if (OperationTimeout > 0) - { - elapsed = DateTime.Now - StartTime; - if (elapsed.TotalMilliseconds > OperationTimeout) throw new TimeoutException(); - } // if - } // CheckTimeouts - - #endregion - } // class DvbStpBaseClient -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpClientSegmentInfo.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpClientSegmentInfo.cs deleted file mode 100644 index dbed17d4..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpClientSegmentInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public class DvbStpClientSegmentInfo - { - public DvbStpClientSegmentInfo() - { - // no op - } // constructor - - public DvbStpClientSegmentInfo(byte payloadId, short? segmentId) - { - PayloadId = payloadId; - SegmentId = segmentId; - } // constructor - - // Required IN parameter - public byte PayloadId - { - get; - set; - } // PayloadId - - // Optional IN parameter. If not set, downloads the first segment found for the given PayloadId - // Set with downloaded SegmentId on exit - public short? SegmentId - { - get; - set; - } // SegmentId - - // Set on exit - public byte SegmentVersion - { - get; - set; - } // SegmentVersion - - // Set on exit - public byte[] Data - { - get; - set; - } // Data - } // class DvbStpClientSegmentInfo -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.cs deleted file mode 100644 index 74eafd49..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpEnhancedClient.cs +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public partial class DvbStpEnhancedClient : DvbStpBaseClient - { - private SegmentStatus[] Status; - private IList Payloads; - private int SegmentsReceived; - private int SegmentsPending; - private bool IsDownloadStarted; - - protected class SegmentStatus - { - public byte PayloadId; - public short SegmentId; - public byte[] ExpectedSegmentId; - public SegmentAssembler SegmentData; - public int InfoIndex; - public byte SegmentVersion; - public int DowloadRestartCount; - } // SegmentStatus - - public DvbStpEnhancedClient(IPAddress ip, int port) - : base(ip, port) - { - NoDataTimeout = 30000; // milliseconds - MaxDowloadRestartCount = 5; - } // constructor - - public int DowloadRestartCount - { - get; - private set; - } // DowloadRestartCount - - public int MaxDowloadRestartCount - { - get; - private set; - } // MaxDowloadRestartCount - - public void DownloadPayloads(IList payloads) - { - try - { - Setup(payloads); - ReceiveData(); - - if (CancelRequested) return; - - ProcessSegments(); - FireDownloadCompleted(); - } - finally - { - Clean(); - } // finally - } // DownloadPayloads - - public override void Close() - { - base.Close(); - Clean(); - } // Close - - protected override bool FilterSection() - { - // notify reception of section - FireSectionReceived(); - - // quick filtering of payloadId & segment - var status = Status[Header.PayloadId]; - if (status == null) return true; - - if (status.ExpectedSegmentId == null) - { - // accept first segment received as the one we're looking for and then ignore remaining segments - status.ExpectedSegmentId = new byte[] - { - Header.SegmentIdNetworkLo, - Header.SegmentIdNetworkHi - }; - } - else - { - if (Header.SegmentIdNetworkLo != status.ExpectedSegmentId[0]) return true; - if (Header.SegmentIdNetworkHi != status.ExpectedSegmentId[1]) return true; - } // if-else - - // is this segment completed? - if ((status.SegmentData != null) && (status.SegmentData.IsSegmentComplete)) return true; - - // accept this section data - return false; - } // FilterSection - - protected override void ProcessReceivedData() - { - // download started? - if (!IsDownloadStarted) - { - IsDownloadStarted = true; - FireDownloadStarted(); - } // if - - var status = Status[Header.PayloadId]; - - // have we just received a "first" section of the payload? - if (status.SegmentData == null) - { - InitSectionData(status); - } // if - - // notify reception of a requested section - FireSegmentSectionReceived(status); - - // store data - StoreSectionData(status); - } // ProcessReceivedData - - private void Setup(IList payloads) - { - Payloads = payloads; - SegmentsReceived = 0; - SegmentsPending = payloads.Count; - Status = new SegmentStatus[256]; - - for (int index = 0; index < payloads.Count; index++) - { - var info = payloads[index]; - var status = new SegmentStatus() - { - PayloadId = info.PayloadId, - SegmentId = -1, - SegmentVersion = 0xFF, - InfoIndex = index, - ExpectedSegmentId = info.SegmentId.HasValue ? BitConverter.GetBytes(IPAddress.HostToNetworkOrder(info.SegmentId.Value)) : null - }; - Status[info.PayloadId] = status; - } // for - } // Setup - - private void InitSectionData(SegmentStatus status) - { - // initialize segment data storage - status.SegmentId = Header.SegmentId; - status.SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); - status.SegmentVersion = Header.SegmentVersion; - - // notify start of download - FireSegmentDownloadStarted(status); - } // InitSectionData - - private void RestartSectionData(SegmentStatus status) - { - // increment restart count - DowloadRestartCount++; - status.DowloadRestartCount++; - - // avoid infinite restart loops - if (DowloadRestartCount > MaxDowloadRestartCount) - { - throw new TimeoutException(); - } // if - - // start over - var oldVersion = status.SegmentVersion; - status.SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); - status.SegmentVersion = Header.SegmentVersion; - ResetNoDataTimeout(); - - // notify of download restart - FireSegmentDownloadRestarted(status, oldVersion); - } // RestartSectionData - - private void StoreSectionData(SegmentStatus status) - { - // reset timeout - ResetNoDataTimeout(); - - // version change? - if (Header.SegmentVersion != status.SegmentVersion) - { - RestartSectionData(status); - } // if - - status.SegmentData.AddSectionData(Header.SectionNumber, DatagramData, Header.PayloadOffset, Header.PayloadSize); - if (status.SegmentData.IsSegmentComplete) - { - SegmentsReceived++; - SegmentsPending--; - FireSegmentDownloadCompleted(status); - } // if - - EndReceptionLoop = (SegmentsPending == 0); - } // StoreSectionData - - private void Clean() - { - Status = null; - Payloads = null; - } // Clean - - private void OnSectionReceived() - { - DvbStpSimpleClient.SectionReceivedEventArgs e; - - e = new DvbStpSimpleClient.SectionReceivedEventArgs() - { - DatagramCount = this.DatagramCount, - PayloadId = Header.PayloadId, - SegmentIdNetworkLo = Header.SegmentIdNetworkLo, - SegmentIdNetworkHi = Header.SegmentIdNetworkHi, - SegmentVersion = Header.SegmentVersion - }; - - SectionReceived(this, e); - } // OnSectionReceived - - private void ProcessSegments() - { - for (int index = 0; index < Payloads.Count; index++) - { - var segment = Payloads[index]; - var status = Status[segment.PayloadId]; - segment.SegmentId = status.SegmentId; - segment.SegmentVersion = status.SegmentVersion; - if ((status.SegmentData != null) && (!status.SegmentData.IsDisposed)) - { - segment.Data = status.SegmentData.GetPayload(); - } // if - } // for - } // ProcessSegments - } // sealed class DvbStpEnhancedClient -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs deleted file mode 100644 index 75138555..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorer.cs +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public partial class DvbStpExplorer : DvbStpBaseClient - { - public event EventHandler SectionReceived; - public event EventHandler UnexpectedHeaderVersionReceived; - public event EventHandler RunEnded; - - private short StartSectionNumber; - private int ReceivedPayloadBytes; - private DvbStpHeader LastHeader; - private IList ReceivedHeaders; - - protected bool EndLoop - { - get; - set; - } // EndLoop - - public DvbStpExplorer(IPAddress ip, int port) - : base(ip, port) - { - // no op - } // constructor - - public void ExploreMulticastStream() - { - try - { - Connect(); - - CancelRequested = false; - EndLoop = false; - StartSectionNumber = -1; - while (!(CancelRequested || EndLoop)) - { - Receive(true); - - if (StartSectionNumber == -1) - { - LastHeader = Header.Clone(); - LastHeader.SectionNumber--; - InitRun(); - } // if - - if (Header.Version != 0) - { - OnUnexpectedHeaderVersionReceived(); - } - else - { - OnSectionReceived(); - } // if-else - - if ((Header.PayloadId != LastHeader.PayloadId) || - (Header.SegmentId != LastHeader.SegmentId) || - (Header.SegmentVersion != LastHeader.SegmentVersion) || - (Header.SectionNumber != LastHeader.SectionNumber + 1)) - { - OnRunEnded(); - InitRun(); - } // if - - ReceivedPayloadBytes += Header.PayloadSize; - ReceivedHeaders.Add(Header.Clone()); - LastHeader = Header.Clone(); - } // while - - if (!CancelRequested) - { - OnRunEnded(); - } // if - } - finally - { - Close(); - } // - } // ExplorerMulticastStream - - protected override void ProcessReceivedData() - { - // our implementation (at least for now) is not using ReceiveData(), so there's no need for this function - throw new NotImplementedException(); - } // ProcessReceivedData - - private void InitRun() - { - StartSectionNumber = Header.SectionNumber; - ReceivedHeaders = new List(Header.LastSectionNumber + 1); - ReceivedPayloadBytes = 0; - } // InitRun - - private void OnSectionReceived() - { - var sectionReceived = SectionReceived; - if (sectionReceived == null) return; - - var args = new SectionReceivedEventArgs(); - - args.Header = Header.Clone(); - args.BytesReceived = ReceivedBytes; - args.Payload = new byte[Header.PayloadSize]; - Array.Copy(DatagramData, Header.PayloadOffset, args.Payload, 0, Header.PayloadSize); - if (Header.PrivateHeaderLength > 0) - { - args.PrivateHeader = new byte[Header.PrivateHeaderLength]; - Array.Copy(DatagramData, Header.PrivateHeaderOffset, args.PrivateHeader, 0, Header.PrivateHeaderLength); - } // if - - SectionReceived(this, args); - - if (args.Cancel) - { - CancelRequest(); - } // if - } // OnSectionReceived - - private void OnUnexpectedHeaderVersionReceived() - { - if (UnexpectedHeaderVersionReceived == null) return; - - var args = new UnexpectedHeaderVersionReceivedEventArgs(); - - args.HeaderVersion = Header.Version; - args.DatagramData = new byte[ReceivedBytes]; - Array.Copy(DatagramData, args.DatagramData, ReceivedBytes); - - UnexpectedHeaderVersionReceived(this, args); - - if (args.Cancel) - { - CancelRequest(); - } // if - } // OnUnexpectedHeaderVersionReceived - - private void OnRunEnded() - { - if (RunEnded == null) return; - - var args = new RunEndedEventArgs() - { - PayloadId = LastHeader.PayloadId, - ReceivedPayloadBytes = ReceivedPayloadBytes, - SegmentId = LastHeader.SegmentId, - LastSectionNumber = LastHeader.LastSectionNumber, - SegmentVersion = LastHeader.SegmentVersion, - StartSectionNumber = StartSectionNumber, - EndSectionNumber = LastHeader.SectionNumber, - TotalSegmentSize = LastHeader.TotalSegmentSize, - }; - - RunEnded(this, args); - - if (args.Cancel) - { - CancelRequest(); - } // if - } // OnRunEnded - } // class DvbStpExplorer -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs deleted file mode 100644 index fcdf44d8..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpExplorerEventArgs.cs +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public partial class DvbStpExplorer - { - public class SectionReceivedEventArgs : CancelEventArgs - { - public DvbStpHeader Header - { - get; - internal set; - } // Header - - public int BytesReceived - { - get; - internal set; - } // BytesReceived - - public byte[] PrivateHeader - { - get; - internal set; - } // PrivateHeader - - public byte[] Payload - { - get; - internal set; - } // Payload - } // class SectionReceivedEventArgs - - public class UnexpectedHeaderVersionReceivedEventArgs : CancelEventArgs - { - public byte HeaderVersion - { - get; - internal set; - } // headerVersion - - public byte[] DatagramData - { - get; - internal set; - } // DatagramData - } // class UnexpectedHeaderVersionReceivedEventArgs - - public class RunEndedEventArgs : CancelEventArgs - { - public byte PayloadId - { - get; - internal set; - } // PayloadId - - public short SegmentId - { - get; - internal set; - } // SegmentId - - public byte SegmentVersion - { - get; - internal set; - } // SegmentVersion - - public short LastSectionNumber - { - get; - internal set; - } // LastSectionNumber - - public short StartSectionNumber - { - get; - internal set; - } // StartSectionNumber - - public short EndSectionNumber - { - get; - internal set; - } // EndSectionNumber - - public int TotalSegmentSize - { - get; - internal set; - } // TotalSegmentSize - - public int ReceivedPayloadBytes - { - get; - internal set; - } // ReceivedPayloadBytes - } // class RunEndedEventArgs - } // partial class DvbStpExplorer -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs deleted file mode 100644 index 2847c864..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeader.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public class DvbStpHeader - { - public byte Version; - public byte Reserved; - public byte Encription; - public bool HasCRC; - public int TotalSegmentSize; - public byte PayloadId; - public short SegmentId; - public byte SegmentIdNetworkLo; - public byte SegmentIdNetworkHi; - public byte SegmentVersion; - public short SectionNumber; - public short LastSectionNumber; - public CompressionMethod Compression; - public bool HasServiceProviderId; - public byte PrivateHeaderLength; - public int ServiceProviderId; - public int PrivateHeaderOffset; - public int PayloadOffset; - public int PayloadSize; - public int CRC; - - public enum CompressionMethod: byte - { - None = 0, - BiM = 1, - GZip = 2, - Reserved1 = 3, - Reserved2 = 4, - Reserved3 = 5, - Reserved4 = 6, - User = 7, - } // enum CompressionMethod - - public DvbStpHeader Clone() - { - return MemberwiseClone() as DvbStpHeader; - } // Clone - - public override string ToString() - { - return string.Format("p{0:X2}s{1:X4}v{2:X2}-{3}", PayloadId, SegmentId, SegmentVersion, SectionNumber); - } // ToString - } // class DvbStpHeader -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeaderMasks.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpHeaderMasks.cs deleted file mode 100644 index 261258f4..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpHeaderMasks.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - /// - /// DVBSTP protocol, like allmost all protocols, use MSB 0 bit order transmission - /// Thus, for C#, bit 0 is bit 7 and so on - /// Hence, the masks seems to be "reversed" - /// http://en.wikipedia.org/wiki/Bit_numbering - /// - public static class DvbStpHeaderMasks - { - // byte 0 - public const byte Version = 0xC0; // 1100 0000 - public const byte Reserved = 0x38; // 0011 1000 - public const byte Encription = 0x06; // 0000 0110 - public const byte HasCRC = 0x01; // 0000 0001 - - // byte 8-9 - public const short SectionNumberLSB = 0xF0; // 1111 0000 - - // byte 9-10 - public const short LastSectionNumberMSB = 0x0F; // 0000 1111 - - // byte 11 - public const byte Compression = 0xE0; // 1110 0000 - public const byte HasServiceProviderId = 0x10; // 0001 0000 - public const byte PrivateHeaderLength = 0x0F; // 0000 1111 - } //static class DvbStpHeaderMasks -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpSegmentIdentity.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpSegmentIdentity.cs deleted file mode 100644 index 1835cd7d..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpSegmentIdentity.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public struct DvbStpSegmentIdentity - { - public byte PayloadId - { - get; - private set; - } // PayloadId - - public short Id - { - get; - private set; - } // SegmentId - - public byte Version - { - get; - private set; - } // Version - - public DvbStpSegmentIdentity(byte payloadId, short segmentId, byte segmentVersion) - : this() - { - PayloadId = payloadId; - Id = segmentId; - Version = segmentVersion; - } // constructor - - public DvbStpSegmentIdentity(DvbStpHeader header) - : this(header.PayloadId, header.SegmentId, header.SegmentVersion) - { - } // constructor - - public override string ToString() - { - return string.Format("p{0:X2}s{1:X4}v{2:X2}", PayloadId, Id, Version); - } // ToString - } // struct DvbStpSegmentIdentity -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClient.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClient.cs deleted file mode 100644 index 5ac30792..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClient.cs +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public sealed partial class DvbStpSimpleClient : DvbStpBaseClient - { - private byte ExpectedPayloadId; - private byte[] ExpectedSegmentId; - private SegmentAssembler SegmentData; - - public DvbStpSimpleClient(IPAddress ip, int port) - : base(ip, port) - { - NoDataTimeout = 30000; // milliseconds - MaxDowloadRestartCount = 5; - } // constructor - - public int ReceivedSections - { - get { return (SegmentData != null) ? SegmentData.ReceivedSections : 0; } - } // ReceivedSections - - public int SectionCount - { - get { return (SegmentData != null) ? SegmentData.LastSectionNumber + 1 : 0; } - } // SectionCount - - public byte SegmentVersion - { - get { return (SegmentData != null) ? SegmentData.SegmentIdentity.Version : (byte)0; } - } // SegmentVersion - - public int DowloadRestartCount - { - get; - private set; - } // DowloadRestartCount - - public int MaxDowloadRestartCount - { - get; - private set; - } // MaxDowloadRestartCount - - public event EventHandler SectionReceived; - public event EventHandler PayloadSectionReceived; - public event EventHandler DownloadStarted; - public event EventHandler DownloadCompleted; - public event EventHandler DownloadRestarted; - - public byte[] GetPayload(byte payloadId, short? segmentId) - { - try - { - ExpectedPayloadId = payloadId; - ExpectedSegmentId = segmentId.HasValue ? BitConverter.GetBytes(IPAddress.HostToNetworkOrder(segmentId.Value)) : null; - Clean(); - - ReceiveData(); - - if (CancelRequested) return null; - if (DownloadCompleted != null) OnDownloadCompleted(); - - return SegmentData.GetPayload(); - } - finally - { - Clean(); - } // finally - } // GetPayload - - public override void Close() - { - base.Close(); - Clean(); - } // Close - - protected override bool FilterSection() - { - // notify reception of section - if (SectionReceived != null) OnSectionReceived(); - - // quick filtering of payloadId & segment - if (Header.PayloadId != ExpectedPayloadId) return true; - if (ExpectedSegmentId == null) - { - // accept first segment received as the one we're looking for and then ignore remaining segments - ExpectedSegmentId = new byte[] - { - Header.SegmentIdNetworkLo, - Header.SegmentIdNetworkHi - }; - } - else - { - if (Header.SegmentIdNetworkLo != ExpectedSegmentId[0]) return true; - if (Header.SegmentIdNetworkHi != ExpectedSegmentId[1]) return true; - } // if-else - - // accept this section data - return false; - } // FilterSection - - protected override void ProcessReceivedData() - { - // have we just received a "first" section of the payload? - if (SegmentData == null) - { - InitSectionData(); - } // if - - // notify reception of a requested section - if (PayloadSectionReceived != null) OnPayloadSectionReceived(); - - // store data - StoreSectionData(); - } // ProcessReceivedData - - private void InitSectionData() - { - // initialize segment data storage - SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); - - // notify start of download - if (DownloadStarted != null) - { - OnDownloadStarted(); - } // if - } // InitSectionData - - private void RestartSectionData() - { - // increment restart count - DowloadRestartCount++; - - // avoid infinite restart loops - if (DowloadRestartCount > MaxDowloadRestartCount) - { - throw new TimeoutException(); - } // if - - // notify of download restart - if (DownloadRestarted != null) OnDowloadRestarted(); - - // start over - SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(Header), Header.LastSectionNumber); - ResetNoDataTimeout(); - } // RestartSectionData - - private void StoreSectionData() - { - // reset timeout - ResetNoDataTimeout(); - - // version change? - if (Header.SegmentVersion != SegmentVersion) - { - RestartSectionData(); - } // if - - SegmentData.AddSectionData(Header.SectionNumber, DatagramData, Header.PayloadOffset, Header.PayloadSize); - EndReceptionLoop = SegmentData.IsSegmentComplete; - } // StoreSectionData - - private void Clean() - { - SegmentData = null; - } // Clean - - private void OnSectionReceived() - { - SectionReceivedEventArgs e; - - e = new SectionReceivedEventArgs() - { - DatagramCount = this.DatagramCount, - PayloadId = Header.PayloadId, - SegmentIdNetworkLo = Header.SegmentIdNetworkLo, - SegmentIdNetworkHi = Header.SegmentIdNetworkHi, - SegmentVersion = Header.SegmentVersion - }; - - SectionReceived(this, e); - } // OnSectionReceived - - private void OnPayloadSectionReceived() - { - PayloadSectionReceived(this, GetPayloadSectionReceivedEventArgs()); - } // OnPayloadSectionReceived - - private PayloadSectionReceivedEventArgs GetPayloadSectionReceivedEventArgs() - { - return new PayloadSectionReceivedEventArgs() - { - PayloadId = Header.PayloadId, - SegmentId = Header.SegmentId, - SegmentVersion = Header.SegmentVersion, - SectionCount = this.SectionCount, - SectionsReceived = this.ReceivedSections, - SectionNumber = Header.SectionNumber, - }; - } // GetPayloadSectionReceivedEventArgs - - private void OnDownloadStarted() - { - DownloadStarted(this, GetPayloadSectionReceivedEventArgs()); - } // OnDownloadStarted - - private void OnDownloadCompleted() - { - DownloadCompleted(this, GetPayloadSectionReceivedEventArgs()); - } // OnDownloadCompleted - - private void OnDowloadRestarted() - { - DownloadRestartedEventArgs e; - - e = new DownloadRestartedEventArgs() - { - PayloadId = Header.PayloadId, - SegmentId = Header.SegmentId, - OldVersion = SegmentVersion, - NewVersion = Header.SegmentVersion, - SectionCount = Header.LastSectionNumber + 1 - }; - - DownloadRestarted(this, e); - } // OnDownloadRestarted - } // sealed class DvbStpSimpleClient -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClientEventArgs.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClientEventArgs.cs deleted file mode 100644 index 37145c59..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpSimpleClientEventArgs.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public partial class DvbStpSimpleClient - { - public class SectionReceivedEventArgs : EventArgs - { - public int DatagramCount; - public byte PayloadId; - public byte SegmentIdNetworkHi; - public byte SegmentIdNetworkLo; - public byte SegmentVersion; - } // class SectionReceivedEventArgs - - public class PayloadSectionReceivedEventArgs : EventArgs - { - public byte PayloadId; - public short SegmentId; - public byte SegmentVersion; - public short SectionNumber; - public int SectionCount; - public int SectionsReceived; - } // class PayloadSectionReceivedEventArgs - - public class DownloadRestartedEventArgs : EventArgs - { - public byte PayloadId; - public short SegmentId; - public int OldVersion; - public int NewVersion; - public int SectionCount; - } // class DownloadRestartedEventArgs - } // partial class DvbStpSimpleClient -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/DvbStpStreamClient.cs b/1.5 'Kruger 60'/DvbStpClient/DvbStpStreamClient.cs deleted file mode 100644 index 23b300ed..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/DvbStpStreamClient.cs +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public partial class DvbStpStreamClient : DvbStpBaseClient - { - public event EventHandler DownloadStarted; - public event EventHandler SegmentPayloadReceived; - - private PayloadStorage Storage; - - public bool IsDownloadStarted - { - get; - private set; - } // IsDownloadStarted - - protected bool EndLoop - { - get; - set; - } // EndLoop - - public DvbStpStreamClient(IPAddress ip, int port) - : base(ip, port) - { - // no op - } // constructor - - public void DownloadStream() - { - try - { - Storage = new PayloadStorage(true); - Storage.SegmentPayloadReceived += Storage_SegmentPayloadReceived; - ReceiveData(); - } - finally - { - Close(); - } // try-finally - } // ExplorerMulticastStream - - private void Storage_SegmentPayloadReceived(object sender, PayloadStorage.SegmentPayloadReceivedEventArgs e) - { - if (SegmentPayloadReceived != null) SegmentPayloadReceived(this, e); - } // Storage_SegmentPayloadReceived - - public override void Close() - { - base.Close(); - Clean(); - } // Close - - private void Clean() - { - if (Storage != null) Storage = null; - } // Clean - - protected override void ProcessReceivedData() - { - // download started? - if (!IsDownloadStarted) - { - IsDownloadStarted = true; - FireDownloadStarted(); - } // if - - Storage.AddSection(Header, DatagramData, true); - } // DvbStpStreamClient - - protected virtual void FireDownloadStarted() - { - OnDownloadStarted(this, EventArgs.Empty); - } // FireDownloadStarted - - protected virtual void OnDownloadStarted(object sender, EventArgs e) - { - DownloadStarted?.Invoke(sender, e); - } // OnDownloadStarted - } // class DvbStpStreamClient -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/License.txt b/1.5 'Kruger 60'/DvbStpClient/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.cs b/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.cs deleted file mode 100644 index 62dfda8f..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/PayloadStorage.cs +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public partial class PayloadStorage - { - private Dictionary Sections; - - internal static byte[] EmptyData = new byte[0]; - - public event EventHandler SegmentStarted; - public event EventHandler SectionReceived; - public event EventHandler SegmentReceived; - public event EventHandler SegmentPayloadReceived; - - public bool SaveData - { - get; - private set; - } // SaveData - - public PayloadStorage(bool saveData) - { - Sections = new Dictionary(); - SaveData = saveData; - } // constructor - - public bool AddSection(DvbStpHeader header, byte[] data, bool isRawData) - { - VersionStorage versions; - - var p = (int)header.PayloadId; - var s = (int)header.SegmentId; - var key = ((p << 16) | s); - - if (!Sections.TryGetValue(key, out versions)) - { - versions = CreateNewVersions(header); - Sections[key] = versions; - } // if - - return versions.AddSection(header, data, isRawData); - } // AddSection - - private VersionStorage CreateNewVersions(DvbStpHeader header) - { - VersionStorage versions; - - versions = new VersionStorage(header.PayloadId, header.SegmentId, SaveData); - if (SegmentStarted != null) - { - versions.SegmentStarted += Versions_SegmentStarted; - } // if - if (SectionReceived != null) - { - versions.SectionReceived += Versions_SectionReceived; - } // if - if (SegmentReceived != null) - { - versions.SegmentReceived += Versions_SegmentReceived; - } // if - if (SegmentPayloadReceived != null) - { - versions.SegmentPayloadReceived += Versions_SegmentPayloadReceived; - } // if - - return versions; - } // CreateNewVersions - - void Versions_SegmentStarted(object sender, SegmentStartedEventArgs e) - { - if (SegmentStarted == null) return; - - SegmentStarted(this, e); - } // Versions_SegmentStarted - - private void Versions_SectionReceived(object sender, SectionReceivedEventArgs e) - { - if (SectionReceived == null) return; - - SectionReceived(this, e); - } // Versions_SectionReceived - - private void Versions_SegmentReceived(object sender, SegmentReceivedEventArgs e) - { - if (SegmentReceived == null) return; - - SegmentReceived(this, e); - } // Versions_SegmentReceived - - private void Versions_SegmentPayloadReceived(object sender, SegmentPayloadReceivedEventArgs e) - { - if (SegmentPayloadReceived == null) return; - - SegmentPayloadReceived(this, e); - } // Versions_SegmentPayloadReceived - } // class PayloadStorage -} // namespace diff --git a/1.5 'Kruger 60'/DvbStpClient/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/DvbStpClient/Properties/AssemblyInfo.cs deleted file mode 100644 index d47592c1..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Cliente del protocolo DVB STP")] -[assembly: AssemblyDescription("IpTviewr.DvbStp.Client")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("cae0e7f0-58f2-4f86-99d9-e3504c47ede0")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/DvbStpClient/SegmentAssembler.cs b/1.5 'Kruger 60'/DvbStpClient/SegmentAssembler.cs deleted file mode 100644 index 95be9f3e..00000000 --- a/1.5 'Kruger 60'/DvbStpClient/SegmentAssembler.cs +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.DvbStp.Client -{ - public sealed class SegmentAssembler - { - private byte[][] SectionData; - - public DvbStpSegmentIdentity SegmentIdentity - { - get; - private set; - } // SegmentIdentity - - public int ReceivedSections - { - get; - private set; - } // ReceivedSections - - public int ReceivedBytes - { - get; - private set; - } // ReceivedBytes - - public int RemainingSections - { - get; - private set; - } // RemainingSections - - public int LastSectionNumber - { - get; - private set; - } // LastSectionNumber - - public bool IsDisposed - { - get; - private set; - } // IsDisposed - - public bool IsSegmentComplete - { - get { return RemainingSections <= 0; } - } // IsSegmentComplete - - public SegmentAssembler(DvbStpSegmentIdentity segmentIdentity, int lastSectionNumber) - { - SegmentIdentity = segmentIdentity; - LastSectionNumber = lastSectionNumber; - Reset(); - } // constructor - - public bool AddSectionData(int sectionNumber, byte[] data, int start, int length) - { - if (SectionData[sectionNumber] != null) return false; - - SectionData[sectionNumber] = new byte[length]; - Array.Copy(data, start, SectionData[sectionNumber], 0, length); - - ReceivedSections++; - RemainingSections--; - ReceivedBytes += length; - - return true; - } // AddSection - - public byte[] GetPayload() - { - if (IsDisposed) throw new ObjectDisposedException("SegmentAssembler"); - if ((!IsSegmentComplete) || (SectionData == null)) throw new InvalidOperationException(); - - int totalPayloadSize; - byte[] payload; - - totalPayloadSize = ReceivedBytes; - payload = new byte[totalPayloadSize]; - for (int i = 0, destIndex = 0; i < SectionData.Length; i++) - { - Array.Copy(SectionData[i], 0, payload, destIndex, SectionData[i].Length); - destIndex += SectionData[i].Length; - } // for - - return payload; - } // GetPayload - - public void Reset() - { - SectionData = new byte[LastSectionNumber + 1][]; - RemainingSections = LastSectionNumber + 1; - IsDisposed = false; - } // Reset - - public void Dispose() - { - SectionData = null; - IsDisposed = true; - } // Dispose - - /* - public int GetReceivedBytes() - { - int totalPayloadSize; - - totalPayloadSize = 0; - for (int i = 0; i < SectionData.Length; i++) - { - if (SectionData[i] != null) - { - totalPayloadSize += SectionData[i].Length; - } // if - } // for - - return totalPayloadSize; - } // GetReceivedBytes - */ - } // class SegmentAssembler -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/License.txt b/1.5 'Kruger 60'/Etsi.Ts102034/License.txt deleted file mode 100644 index b5c6b871..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/License.txt +++ /dev/null @@ -1,45 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -The logos for most/all movistar+ channels broadcasting at the time of writing this software, are provided in this package. These logos are the property of the respective channels and businesses. -Logos are provided in "good faith", in order to identify the different channels and no copyright infringment is intended. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions. \ No newline at end of file diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Etsi.Ts102034/Properties/AssemblyInfo.cs deleted file mode 100644 index 0204b57c..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ETSI TS 102-034 XML data types")] -[assembly: AssemblyDescription("Etsi.Ts102034")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("e7f4ce33-4e27-4f04-a71d-11e98480534d")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] \ No newline at end of file diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupport.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupport.cs deleted file mode 100644 index f7301ca3..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupport.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - /// - /// [en] Implementation of the Announcement support indicator from ETSI EN 300 468. - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:AnnouncementSupport - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class AnnouncementSupport - { - [XmlElement("Announcement")] - public AnnouncementSupportAnnouncement[] Announcement; - - [XmlAttribute] - public string SupportIndicator; - } // class AnnouncementSupport -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupportAnnouncement.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupportAnnouncement.cs deleted file mode 100644 index 46b264ee..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/AnnouncementSupportAnnouncement.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class AnnouncementSupportAnnouncement - { - [XmlElement("DVBTriplet", typeof(DvbTriplet))] - public DvbTriplet DvbTriplet; - - [XmlElement("TextualIdentifier", typeof(TextualIdentifier))] - public TextualIdentifier TextualIdentifier; - - [XmlAttribute] - public string Type; - - [XmlAttribute] - public string ReferenceType; - - [XmlAttribute] - public string ComponentTag; - } // class AnnouncementSupportAnnouncement -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastDiscoveryRoot.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastDiscoveryRoot.cs deleted file mode 100644 index 6dd8f138..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastDiscoveryRoot.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlRoot(ElementName = "ServiceDiscovery", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1", IsNullable = false)] - public partial class BroadcastDiscoveryRoot - { - /// - /// Version of this record. A change in this value indicates a change in one of the BroadcastDiscovery Records - /// - [XmlAttribute] - public string Version; - - [XmlElement("BroadcastDiscovery")] - public BroadcastOffering[] BroadcastDiscovery; - } // class BroadcastDiscoveryRoot -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastOffering.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastOffering.cs deleted file mode 100644 index 1c7f3c2b..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/BroadcastOffering.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - /// - /// [en] Provides a list of TS or services discovery information - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:BroadcastOffering - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName = "BroadcastOffering", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class BroadcastOffering : OfferingBase - { - [XmlElement("ServiceList")] - public IpServiceList[] Services; - } // class BroadcastOffering -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/CountryAvailability.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/CountryAvailability.cs deleted file mode 100644 index e8e659ad..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/CountryAvailability.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class CountryAvailability - { - [XmlAttribute] - public string Countries; - - [XmlAttribute] - [DefaultValue(true)] - public bool Available; - - public CountryAvailability() - { - this.Available = true; - } // default constructor - } // class CountryAvailability -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/FecLayerAddress.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/FecLayerAddress.cs deleted file mode 100644 index 3f078fea..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/FecLayerAddress.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName="FecLayerAddress", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class FecLayerAddress - { - [XmlAttribute] - public string Address; - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public ushort Port; - - [XmlIgnore] - public bool PortSpecified; - - [XmlAttribute(DataType = "positiveInteger")] - public string MaxBitrate; - - [XmlAttribute("RTSPControlURL", DataType = "anyURI")] - public string RtspControlUrl; - - [XmlAttribute("PayloadTypeNumber")] - public uint PayloadTypeNumber; - - [XmlIgnore] - public bool PayloadTypeNumberSpecified; - - [XmlAttribute("TransportProtocol")] - public TransportProtocolKind TransportProtocol; - - [XmlIgnore] - public bool TransportProtocolSpecified; - } // class FecLayerAddress -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpMulticastAddress.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpMulticastAddress.cs deleted file mode 100644 index ee47f73b..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpMulticastAddress.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class IpMulticastAddress - { - [XmlElement("FECBaseLayer")] - public FecLayerAddress FecBaseLayer; - - [XmlElement("FECEnhancementLayer")] - public FecLayerAddress[] FECEnhancementLayer; - - [XmlElement("CNAME")] - public string CName; - - [XmlElement("ssrc")] - public uint Ssrc; - - [XmlIgnore] - public bool SsrcSpecified; - - [XmlElement("RTPRetransmission")] - public RetransmissionInfo RtpRetransmission; - - [XmlAttribute] - public string Source; - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public ushort Port; - - [XmlAttribute("Streaming")] - public StreamingKind Streaming; - - /// - [XmlIgnore] - public bool StreamingSpecified; - - [XmlIgnore] - public string Url - { - get - { - return string.Format("{0}://@{1}:{2}", Protocol, Address, Port); - } // get - } // Url - - [XmlIgnore] - public string Protocol - { - get - { - if ((!StreamingSpecified) || (Streaming == StreamingKind.Rtp)) - { - return "rtp"; - } - else if (Streaming == StreamingKind.Udp) - { - return "udp"; - } - else - { - throw new IndexOutOfRangeException(); - } // if-else - } // get - } // Protocol - } // class IpMulticastAddress -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpService.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpService.cs deleted file mode 100644 index b6cc8dff..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpService.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName="IPService", Namespace = IpService.Namespace)] - public partial class IpService - { - public const string Namespace = "urn:dvb:metadata:iptv:sdns:2012-1"; - - [XmlElement("ServiceLocation")] - public ServiceLocation ServiceLocation; - - [XmlElement("TextualIdentifier")] - public TextualIdentifier TextualIdentifier; - - [XmlElement("DVBTriplet")] - public DvbTriplet[] DvbTriplet; - - [XmlElement(DataType = "positiveInteger")] - public string MaxBitrate; - - [XmlElement("SI")] - public ServiceInformation ServiceInformation; - - [XmlElement("AudioAttributes")] - public AudioAttributes[] AudioAttributes; - - [XmlElement("VideoAttributes")] - public VideoAttributes[] VideoAttributes; - - [XmlElement("ServiceAvailability")] - public ServiceAvailability[] ServiceAvailability; - - [XmlElement("Usage")] - public ServiceUsage[] Usage; - - [XmlElement("LinkedService")] - public IpService[] LinkedService; - } // class IpService -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpServiceList.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpServiceList.cs deleted file mode 100644 index 939f0b27..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/IpServiceList.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName="IPServiceList", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class IpServiceList - { - [XmlElement("ServicesDescriptionLocation")] - public DescriptionLocation[] ServicesDescriptionLocation; - - [XmlElement("SingleService")] - public IpService[] Services; - } // class IpServiceList -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescription.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescription.cs deleted file mode 100644 index 6380d8ea..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescription.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescription - { - [XmlElement("LogicalCell")] - public MosaicDescriptionLogicalCell[] LogicalCell; - - [XmlAttribute] - [DefaultValue(true)] - public bool EntryPoint; - - [XmlAttribute] - public string HorizontalCellsNumber; - - [XmlAttribute] - public string VerticalCellsNumber; - - public MosaicDescription() - { - this.EntryPoint = true; - } // default constructor - } // class MosaicDescription -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionAudioLink.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionAudioLink.cs deleted file mode 100644 index 1bccb21d..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionAudioLink.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescriptionAudioLink - { - [XmlAttribute] - public string Language; - - [XmlAttribute] - public string ComponentTag; - }// class MosaicDescriptionAudioLink -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionElementaryCell.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionElementaryCell.cs deleted file mode 100644 index 1f82982f..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionElementaryCell.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescriptionElementaryCell - { - [XmlAttribute] - public ushort CellId; - } // class MosaicDescriptionElementaryCell -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionLogicalCell.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionLogicalCell.cs deleted file mode 100644 index 8feb6635..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionLogicalCell.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescriptionLogicalCell - { - [XmlElement("ElementaryCell")] - public MosaicDescriptionElementaryCell[] ElementaryCell; - - [XmlElement("AudioLink")] - public MosaicDescriptionAudioLink[] AudioLink; - - [XmlElement("DVBTriplet", typeof(DvbTriplet))] - public DvbTriplet DvbTriplet; - - [XmlElement("PackageId", typeof(MosaicDescriptionPackageId))] - public MosaicDescriptionPackageId PackageId; - - [XmlElement("TextualId", typeof(TextualIdentifier))] - public TextualIdentifier TextualId; - - [XmlAttribute] - public ushort CellId; - - [XmlAttribute] - public string PresentationInfo; - - [XmlAttribute] - public string LinkageInfo; - - [XmlAttribute] - public string EventId; - } // class MosaicDescriptionLogicalCell -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionPackageId.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionPackageId.cs deleted file mode 100644 index a141395d..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MosaicDescriptionPackageId.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MosaicDescriptionPackageId - { - [XmlAttribute] - public string Domain; - - [XmlText] - public string Value; - } // class MosaicDescriptionPackageId -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MulticastRetransmission.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MulticastRetransmission.cs deleted file mode 100644 index 562e5315..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/MulticastRetransmission.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MulticastRetransmission - { - [XmlAttribute] - public string SourceAddress; - - [XmlAttribute] - public string GroupAddress; - - [XmlAttribute("ssrc")] - public uint Ssrc; - - [XmlIgnore] - public bool SsrcSpecified; - - [XmlAttribute("RTPPayloadTypeNumber")] - public uint RtpPayloadTypeNumber; - - [XmlIgnore] - public bool RtpPayloadTypeNumberSpecified; - - [XmlAttribute("dvb-original-copy-ret")] - public bool DvbOriginalCopyRet; - - [XmlIgnore] - public bool DvbOriginalCopyRetSpecified; - - [XmlAttribute("rtcp-mux")] - [DefaultValue(false)] - public bool RtcpMux; - - [XmlAttribute] - public uint DestinationPort; - - [XmlIgnore] - public bool DestinationPortSpecified; - - [XmlAttribute("rtx-time")] - public uint RtxTime; - - public MulticastRetransmission() - { - this.RtcpMux = false; - } // default constructor - } // MulticastRetransmission -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/PrimaryServiceInformationSource.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/PrimaryServiceInformationSource.cs deleted file mode 100644 index 6afe798e..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/PrimaryServiceInformationSource.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType("PrimaryServiceInformationSource", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public enum PrimaryServiceInformationSource - { - [XmlEnum("Stream")] - Stream, - [XmlEnum("XML")] - Xml, - } // enum PrimaryServiceInformationSource -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ProprietaryServiceGenre.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ProprietaryServiceGenre.cs deleted file mode 100644 index 4dd9c7ea..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ProprietaryServiceGenre.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [Serializable] - [DebuggerStepThrough] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ProprietaryServiceGenre - { - [XmlAttribute("href")] - public string Code - { - get; - set; - } // Code - - [XmlElement(Namespace = "urn:tva:metadata:2007")] - public string Name - { - get; - set; - } // Name - } // class ProprietaryServiceGenre -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ReplacementService.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ReplacementService.cs deleted file mode 100644 index 1a3a5823..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ReplacementService.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - /// - /// [en] implementation of The replacement_Service part of the Linkage_Descriptor in ETSI EN 300 468. Describes a service to try if the specified one fails. - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:ReplacementService - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ReplacementService - { - [XmlElement("DVBTriplet", typeof(DvbTriplet))] - public DvbTriplet DvbTriplet; - - [XmlElement("TextualIdentifier", typeof(TextualIdentifier))] - public TextualIdentifier TextualIdentifier; - - [XmlAttribute("ReplacementType")] - [DefaultValue("5")] - public string Kind; - - public ReplacementService() - { - this.Kind = "5"; - } // default constructor - } // class ReplacementService -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RetransmissionInfo.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RetransmissionInfo.cs deleted file mode 100644 index ffedebed..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RetransmissionInfo.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("RetransmissionInfo", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RetransmissionInfo - { - [XmlElement("RTCPReporting")] - public RtcpRetransmissionReporting RtcpReporting; - - [XmlElement("UnicastRET")] - public UnicastRetransmission UnicastRetransmission; - - [XmlElement("MulticastRET")] - public MulticastRetransmission MulticastRetransmission; - } // class RetransmissionInfo -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtcpRetransmissionReporting.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtcpRetransmissionReporting.cs deleted file mode 100644 index 0d2ef5a2..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtcpRetransmissionReporting.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("RtcpRetransmissionReporting", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RtcpRetransmissionReporting - { - [XmlAttribute] - public string DestinationAddress; - - [XmlAttribute] - public ushort DestinationPort; - - [XmlIgnore] - public bool DestinationPortSpecified; - - [XmlAttribute("dvb-t-ret", DataType = "positiveInteger")] - public string DvbRetransmission; - - [XmlAttribute("rtcp-bandwidth", DataType = "positiveInteger")] - public string TtcpBandwidth; - - [XmlAttribute("rtcp-rsize", DataType = "positiveInteger")] - public string RtcpRetransmissionSize; - - [XmlAttribute("trr-int", DataType = "positiveInteger")] - public string TrrInt; - - [XmlAttribute("dvb-disable-rtcp-rr")] - [DefaultValue(false)] - public bool DvbDisableTtcpRr; - - [XmlAttribute("dvb-enable-byte")] - [DefaultValue(false)] - public bool DvbEnableByte; - - [XmlAttribute("dvb-t-wait-min")] - [DefaultValue(typeof(uint), "0")] - public uint DvbTWaitMin; - - [XmlAttribute("dvb-t-wait-max")] - [DefaultValue(typeof(uint), "0")] - public uint DvbTWaitMax; - - [XmlAttribute("dvb-ssrc-bitmask")] - [DefaultValue("ffffffff")] - public string DvbSsrcBitmask; - - [XmlAttribute("dvb-rsi-mc-ret")] - public bool DvbRsiMcRet; - - [XmlIgnore] - public bool DvbRsiMcRetSpecified; - - [XmlAttribute("dvb-ssrc-upstream-client", DataType = "positiveInteger")] - public string DvbSsrcUpstreamClient; - - public RtcpRetransmissionReporting() - { - this.DvbDisableTtcpRr = false; - this.DvbEnableByte = false; - this.DvbTWaitMin = ((uint)(0)); - this.DvbTWaitMax = ((uint)(0)); - this.DvbSsrcBitmask = "ffffffff"; - } // default constructor - } // class RtcpRetransmissionReporting -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtspUrl.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtspUrl.cs deleted file mode 100644 index 17535548..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/RtspUrl.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class RtspUrl - { - [XmlAttribute("RTSPControlURL", DataType = "anyURI")] - public string ControlUrl; - - [XmlText(DataType = "anyURI")] - public string Value; - } // class RtspUrl -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceLocation.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceLocation.cs deleted file mode 100644 index 088494fc..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceLocation.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - /// - /// [en] The location of a service. Currently this supports either a broadcast system identifier or a multicast address (ASM and SSM) or RTSP. - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:ServiceLocation - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName = "ServiceLocation", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServiceLocation - { - [XmlElement("BroadcastSystem", typeof(string))] - public string BroadcastSystem; - - [XmlElement("IPMulticastAddress", typeof(IpMulticastAddress))] - public IpMulticastAddress IpMulticastAddress; - - [XmlElement("RTSPURL", typeof(RtspUrl))] - public RtspUrl RtspUrl; - - [XmlIgnore] - public string LocationUrl - { - get - { - if (IpMulticastAddress != null) return IpMulticastAddress.Url; - if (RtspUrl != null) return RtspUrl.Value; - return null; - } // get - } // LocationUrl - } // class ServiceLocation -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceUsage.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceUsage.cs deleted file mode 100644 index 80ce7ec1..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/ServiceUsage.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType("Usage", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public enum ServiceUsage - { - FCC, - PiP, - Main, - HD, - SD, - [XmlEnum("3D")] - ThreeD, - } // ServiceUsage -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/StreamingKind.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/StreamingKind.cs deleted file mode 100644 index 0163a3c1..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/StreamingKind.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(TypeName="StreamingType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public enum StreamingKind - { - [XmlEnum("rtp")] - Rtp, - [XmlEnum("udp")] - Udp, - } // enum StreamingKind -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/TransportProtocolKind.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/TransportProtocolKind.cs deleted file mode 100644 index 327ccd08..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/BroadcastDiscovery/TransportProtocolKind.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - - -namespace Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType("TransportProtocolType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public enum TransportProtocolKind - { - [XmlEnum("RTP-AVP")] - RtpAvp, - [XmlEnum("UDP-FEC")] - UdpFec, - } // enum TransportProtocolKind -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/DescriptionLocation.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/DescriptionLocation.cs deleted file mode 100644 index 7c099128..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/DescriptionLocation.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName = "DescriptionLocationBCG", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class DescriptionLocation - { - [XmlAttribute("preferred")] - public bool Preferred; - - /// True if Preferred is present in XML - [XmlIgnore] - public bool PreferredSpecified; - - [XmlText] - public string Value; - } // class DescriptionLocation -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbStpTransportMode.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbStpTransportMode.cs deleted file mode 100644 index 57d4c423..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbStpTransportMode.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class DvbStpTransportMode : PayloadList - { - [XmlAttribute] - public string Source; - - [XmlAttribute] - public string Address; - - [XmlAttribute] - public ushort Port; - } // class DvbStpTransportMode -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbTriplet.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbTriplet.cs deleted file mode 100644 index 386eb736..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/DvbTriplet.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class DvbTriplet - { - [XmlAttribute] - public ushort OrigNetId; - - [XmlAttribute] - public ushort TSId; - - [XmlAttribute] - public ushort ServiceId; - - [XmlAttribute] - public string TSIdWildcard; - - public DvbTriplet() - { - this.TSIdWildcard = "*"; - } // default constructor - } // class DvbTriplet -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/HttpTransportMode.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/HttpTransportMode.cs deleted file mode 100644 index 85df6bd8..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/HttpTransportMode.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class HttpTransportMode : PayloadList - { - [XmlAttribute(DataType = "anyURI")] - public string Location; - - [XmlAttribute("SOAP")] - [DefaultValue("false")] - public string Soap; - - public HttpTransportMode() - { - this.Soap = "false"; - } // default constructor - } // class HttpTransportMode -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/MultilingualText.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/MultilingualText.cs deleted file mode 100644 index d384077e..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/MultilingualText.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - /// - /// Specifies an element containing a textual message, which has a Language attribute specifying the language of the - /// string, using the ISO 639-2 three letter language code. - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class MultilingualText - { - [XmlAttribute] - public string Language; - - [XmlText] - public string Value; - } // class MultilingualText -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PackageAvailabilityCountryCode.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PackageAvailabilityCountryCode.cs deleted file mode 100644 index da0c7fca..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PackageAvailabilityCountryCode.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackageAvailabilityCountryCode - { - [XmlAttribute("Availability")] - [DefaultValue(true)] - public bool Availability; - - [XmlText] - public string Value; - - public PackageAvailabilityCountryCode() - { - this.Availability = true; - } // default constructor - } // class PackageAvailabilityCountryCode -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadList.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadList.cs deleted file mode 100644 index 2af6e020..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadList.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlInclude(typeof(DvbStpTransportMode))] - [XmlInclude(typeof(HttpTransportMode))] - [XmlInclude(typeof(ProviderOfferingPull))] - public partial class PayloadList - { - [XmlElement("PayloadId")] - public PayloadListPayloadId[] PayloadId; - } // PayloadList -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListPayloadId.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListPayloadId.cs deleted file mode 100644 index eb26ea54..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListPayloadId.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PayloadListPayloadId - { - [XmlElement("Segment")] - public PayloadListSegment[] Segment; - - [XmlAttribute] - public string Id; - } // PayloadListPayloadId -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListSegment.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListSegment.cs deleted file mode 100644 index 081c2633..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/PayloadListSegment.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("PayloadListSegmentType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PayloadListSegment - { - [XmlElement("TargetPackage")] - public TargetPackage[] TargetPackage; - - [XmlAttribute] - public string Version; - - [XmlAttribute("ID")] - public string Id; - } // class PayloadListSegment -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/ServiceAvailability.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/ServiceAvailability.cs deleted file mode 100644 index ccc5c115..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/ServiceAvailability.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServiceAvailability - { - public PackageAvailabilityCountryCode CountryCode; - - [XmlElement("Cells")] - public string[] Cells; - } // ServiceAvailability -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/TargetPackage.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/TargetPackage.cs deleted file mode 100644 index 0dccfcf2..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/TargetPackage.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("TargetPackageType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class TargetPackage - { - [XmlElement("PackageType")] - public MultilingualText[] PackageType; - - [XmlAttribute("PackageIDRef")] - public string PackageIdRef; - } // class TargetPackage -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/TextualIdentifier.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/TextualIdentifier.cs deleted file mode 100644 index a2ff5de6..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/Common/TextualIdentifier.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.Common -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - //[XmlInclude(typeof(PackageTextualIdentifier))] - public partial class TextualIdentifier - { - [XmlAttribute] - public string DomainName; - - [XmlAttribute] - public string ServiceName; - } // class TextualIdentifier -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideDiscoveryRoot.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideDiscoveryRoot.cs deleted file mode 100644 index b35afabb..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideDiscoveryRoot.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.ContentGuideDiscovery -{ - /// - /// This element is used in the first stage of service discovery. It is sent by service providers and is used as a link to their - /// own service discovery information. - /// - /// - /// An aggregating service provide may send multiple ServiceProvider elements in a single document. - /// If the element Offering is missing, then the ServiceProvider is not currently providing any services, but simply - /// announcing its presence. - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlRoot(ElementName = "ServiceDiscovery", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1", IsNullable = false)] - public partial class BroadcastContentGuideDiscoveryRoot // ServiceDiscovery - { - /// - /// Version of this record. A change in this value indicates a change in one of the ServiceProviderDiscovery Records - /// - [XmlAttribute] - public string Version; - - [XmlElement("BCGDiscovery")] - public BroadcastContentGuideOffering[] Offering; - } // class BroadcastContentGuideDiscoveryRoot -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideOffering.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideOffering.cs deleted file mode 100644 index ef450497..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ContentGuideDiscovery/BroadcastContentGuideOffering.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.ContentGuideDiscovery -{ - /// - /// [en] Provides information on Broadband Content Guide Offerings - /// - /// Schema origin: urn:dvb:metadata:iptv:sdns:2012-1:BroadcastContentGuideOffering - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class BroadcastContentGuideOffering : OfferingBase - { - [XmlElement("BCG")] - public BroadcastContentGuide[] ContentGuides; - } // class BroadcastContentGuideOffering -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/NamespaceUnification.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/NamespaceUnification.cs deleted file mode 100644 index 6ae8f5f5..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/NamespaceUnification.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Etsi.Ts102034.v010501.XmlSerialization -{ - /// - /// This class is intended to help in "unifying" the different TS 102 034 namespaces. - /// This allows to parse all XML documents from v01.01.01 to v01.05.01 using the same - /// XML .Net objects, regardless of document version. This is possible as v01.05.01 is - /// 100% backwards-compatible (at XML schema level, but not at code level) - /// - public static class NamespaceUnification - { - /// - /// - /// - /// Original TS 102 034 XML document namespace, possibly obsolete or not up-to-date - /// v01.05.01 equivalent up-to-date namespace - public static string Replacer(string ns) - { - switch (ns) - { - //v01.01.01 - case "urn:dvb:ipisdns:2003": return "urn:dvb:metadata:iptv:sdns:2012-1"; - // v01.02.01 - case "urn:dvb:ipisdns:2006": return "urn:dvb:metadata:iptv:sdns:2012-1"; - case "urn:tva:metadata:2004": return "urn:tva:metadata:2011"; - case "urn:mpeg:mpeg7:schema:2001": return "urn:tva:mpeg7:2008"; - // v01.03.01 - case "urn:dvb:ipi:sdns:2006": return "urn:dvb:metadata:iptv:sdns:2012-1"; - case "urn:tva:metadata:2005": return "urn:tva:metadata:2011"; - case "urn:tva:mpeg7:2005": return "urn:tva:mpeg7:2008"; - // v01.04.01 - case "urn:dvb:metadata:iptv:sdns:2008-1": return "urn:dvb:metadata:iptv:sdns:2012-1"; - default: - return ns; - } // switch - } // Replacer - } // NamespaceUnification -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/Package.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/Package.cs deleted file mode 100644 index c24a8a4b..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/Package.cs +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class Package - { - [XmlElement("PackageName")] - public MultilingualText[] Name; - - [XmlElement("CountryAvailability")] - public CountryAvailability[] CountryAvailability; - - [XmlElement("PackageDescription")] - public DescriptionLocation[] Description; - - [XmlElement("Service")] - public List Services; - - [XmlElement("PackageReference")] - public PackageReference[] References; - - [XmlElement("PackageAvailability")] - public ServiceAvailability[] PackageAvailability; - - [XmlAttribute] - public string Id; - - [XmlAttribute] - [DefaultValue(true)] - public bool Visible; - - public Package() - { - this.Visible = true; - } // default constructor - } // class Package -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageDiscoveryRoot.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageDiscoveryRoot.cs deleted file mode 100644 index d6c4c818..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageDiscoveryRoot.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlRoot(ElementName = "ServiceDiscovery", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1", IsNullable = false)] - public partial class PackageDiscoveryRoot - { - /// - /// Version of this record. A change in this value indicates a change in one of the PackageDiscovery Records - /// - [XmlAttribute] - public string Version; - - [XmlElement("PackageDiscovery")] - public PackagedServices[] PackageDiscovery; - - /// - /// Returns all packages of all PackageDiscoveries in a linear fashion - /// - /// Inemerable of all packages - public IEnumerable GetPackages() - { - var packages = from discovery in PackageDiscovery - from package in discovery.Packages - select package; - - return packages; - } // GetPackages - } // class BroadcastDiscoveryRoot -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageReference.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageReference.cs deleted file mode 100644 index f249100d..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageReference.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackageReference - { - [XmlAttribute] - public string Id; - } // PackageReference -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageTextualIdentifier.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageTextualIdentifier.cs deleted file mode 100644 index 987be65a..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackageTextualIdentifier.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackageTextualIdentifier : TextualIdentifier - { - [XmlAttribute(DataType = "positiveInteger")] - public string Priority; - } // PackageTextualIdentifier -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedService.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedService.cs deleted file mode 100644 index db10a63f..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedService.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("PackagedServiceType", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackagedService - { - [XmlElement("TextualID")] - public PackageTextualIdentifier[] TextualIdentifiers; - - [XmlElement("DVBTriplet")] - public DvbTriplet DvbTriplet; - - public DescriptionLocation DescriptionLocation; - - [XmlElement(DataType = "positiveInteger")] - public string LogicalChannelNumber; - } // class PackagedService -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedServices.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedServices.cs deleted file mode 100644 index 67d3fd87..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/PackageDiscovery/PackagedServices.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class PackagedServices : OfferingBase - { - [XmlElement("Package")] - public Package[] Packages; - } // class PackagedServices -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderDiscoveryRoot.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderDiscoveryRoot.cs deleted file mode 100644 index c6b2fe37..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderDiscoveryRoot.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery -{ - /// - /// This element is used in the first stage of service discovery. It is sent by service providers and is used as a link to their - /// own service discovery information. - /// - /// - /// An aggregating service provide may send multiple ServiceProvider elements in a single document. - /// If the element Offering is missing, then the ServiceProvider is not currently providing any services, but simply - /// announcing its presence. - /// - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - [XmlRoot(ElementName = "ServiceDiscovery", Namespace = "urn:dvb:metadata:iptv:sdns:2012-1", IsNullable = false)] - public partial class ProviderDiscoveryRoot // ServiceDiscovery - { - /// - /// Version of this record. A change in this value indicates a change in one of the ServiceProviderDiscovery Records - /// - [XmlAttribute] - public string Version; - - [XmlElement("ServiceProviderDiscovery")] - public ServiceProviderDiscovery[] ServiceProviderDiscovery; - } // class BroadcastDiscoveryRoot -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOffering.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOffering.cs deleted file mode 100644 index 93d2fc99..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOffering.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery -{ - /// - /// Provides the Push and/or Pull Offering of the Service Provider - /// - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ProviderOffering - { - /// - /// One entry per Pull Offering - /// - [XmlElement("Pull")] - public ProviderOfferingPull[] Pull - { - get; - set; - } // PullOffering - - /// - /// One entry per Push Offering - /// - [XmlElement("Push")] - public DvbStpTransportMode[] Push - { - get; - set; - } // PullOffering - } // class ProviderOffering -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOfferingPull.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOfferingPull.cs deleted file mode 100644 index 834610ac..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ProviderOfferingPull.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ProviderOfferingPull : PayloadList - { - [XmlAttribute(DataType = "anyURI")] - public string Location; - } // class ProviderOfferingPull -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProviderDiscovery.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProviderDiscovery.cs deleted file mode 100644 index 21f71979..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/ProviderDiscovery/ServiceProviderDiscovery.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:dvb:metadata:iptv:sdns:2012-1")] - public partial class ServiceProviderDiscovery - { - [XmlElement("ServiceProvider")] - public ServiceProvider[] Providers; - - [XmlAttribute] - public string Version; - } // ServiceProviderDiscovery -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatio.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatio.cs deleted file mode 100644 index 0770bf94..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatio.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("AspectRatioType", Namespace = "urn:tva:metadata:2011")] - public partial class AspectRatio - { - [XmlAttribute("type")] - [DefaultValue(AspectRatioKind.Original)] - public AspectRatioKind Kind; - - [XmlText] - public string Value; - - public AspectRatio() - { - this.Kind = AspectRatioKind.Original; - } // default constructor - } // class AspectRatio -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatioKind.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatioKind.cs deleted file mode 100644 index f84c1ee5..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AspectRatioKind.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType = true, Namespace = "urn:tva:metadata:2011")] - public enum AspectRatioKind - { - [XmlEnum("original")] - Original, - [XmlEnum("publication")] - Publication, - } // enum AspectRatioKind -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioAttributes.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioAttributes.cs deleted file mode 100644 index 06779ddb..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioAttributes.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("AudioAttributesType", Namespace = "urn:tva:metadata:2011")] - public partial class AudioAttributes - { - public ControlledTerm Coding; - - [XmlElement("NumOfChannels")] - public ushort NumberOfChannels; - - [XmlIgnore] - public bool NumberOfChannelsSpecified; - - public ControlledTerm MixType; - - public AudioLanguage AudioLanguage; - - public uint SampleFrequency; - - [XmlIgnore] - public bool SampleFrequencySpecified; - - public uint BitsPerSample; - - [XmlIgnore] - public bool BitsPerSampleSpecified; - - public BitRate BitRate; - } // class AudioAttributes -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioLanguage.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioLanguage.cs deleted file mode 100644 index 68a3586b..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/AudioLanguage.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Schema; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("AudioLanguageType", Namespace = "urn:tva:metadata:2011")] - public partial class AudioLanguage : ExtendedLanguage - { - [XmlAttribute("purpose")] - public string Purpose; - } // AudioLanguage -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/BitRate.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/BitRate.cs deleted file mode 100644 index 2223af8d..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/BitRate.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("BitRateType", Namespace = "urn:tva:metadata:2011")] - public partial class BitRate - { - [XmlAttribute("variable")] - [DefaultValue(false)] - public bool Variable; - - [XmlAttribute("minimum")] - public ulong Minimum; - - [XmlIgnore] - public bool MinimumSpecified; - - [XmlAttribute("average")] - public ulong Average; - - [XmlIgnore] - public bool AverageSpecified; - - [XmlAttribute("maximum")] - public ulong Maximum; - - [XmlIgnore] - public bool MaximumSpecified; - - [XmlText(DataType = "nonNegativeInteger")] - public string Value; - - public BitRate() - { - this.Variable = false; - } // default constructor - } // class BitRate -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ControlledTerm.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ControlledTerm.cs deleted file mode 100644 index 28f6383b..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ControlledTerm.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("ControlledTermType", Namespace = "urn:tva:metadata:2011")] - //[XmlInclude(typeof(GenreType))] - public partial class ControlledTerm - { - public TermName Name; - - public TextualData Definition; - - [XmlAttribute("href")] - public string href; - } // ControlledTerm -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/Explanation.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/Explanation.cs deleted file mode 100644 index 57ebc64c..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/Explanation.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(Namespace = "urn:tva:metadata:2011")] - public partial class Explanation : TextualData - { - [XmlAttribute("length")] - public ExplanationLength Length; - - [XmlIgnore] - public bool LengthSpecified; - } // class Explanation -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ExplanationLength.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ExplanationLength.cs deleted file mode 100644 index 0c0db314..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ExplanationLength.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType("ExplanationLengthType", Namespace = "urn:tva:metadata:2011")] - public enum ExplanationLength - { - [XmlEnum("short")] - Short, - [XmlEnum("medium")] - Medium, - [XmlEnum("long")] - Long, - } // enum ExplanationLength -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ScanKind.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ScanKind.cs deleted file mode 100644 index cca574e5..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/ScanKind.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType("ScanType", Namespace = "urn:tva:metadata:2011")] - public enum ScanKind - { - [XmlEnum("interlaced")] - Interlaced, - [XmlEnum("progressive")] - Progressive, - } // enum ScanKind -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TermName.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TermName.cs deleted file mode 100644 index c2b71f02..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TermName.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("TermNameType", Namespace = "urn:tva:metadata:2011")] - public partial class TermName : TextualData - { - [XmlAttribute("preferred")] - public bool Preferred; - - [XmlIgnore] - public bool PreferredSpecified; - } // TextualData -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TvaParentalGuidance.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TvaParentalGuidance.cs deleted file mode 100644 index afef7140..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/TvaParentalGuidance.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("TVAParentalGuidanceType", Namespace = "urn:tva:metadata:2011")] - public partial class TvaParentalGuidance : ParentalGuidance - { - [XmlElement("ExplanatoryText")] - public Explanation[] ExplanatoryText; - } // class TvaParentalGuidance -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoAttributes.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoAttributes.cs deleted file mode 100644 index 042ac8ef..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoAttributes.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("VideoAttributesType", Namespace = "urn:tva:metadata:2011")] - public partial class VideoAttributes - { - public ControlledTerm Coding; - - public ScanKind Scan; - - [XmlIgnore] - public bool ScanSpecified; - - public ushort HorizontalSize; - - [XmlIgnore] - public bool HorizontalSizeSpecified; - - public ushort VerticalSize; - - [XmlIgnore] - public bool VerticalSizeSpecified; - - [XmlElement("AspectRatio")] - public AspectRatio[] AspectRatio; - - public VideoColor Color; - - public string FrameRate; - - public BitRate BitRate; - - public ControlledTerm PictureFormat; - } // class VideoAttributes -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColor.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColor.cs deleted file mode 100644 index 35721c6c..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColor.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("ColorType", Namespace = "urn:tva:metadata:2011")] - public partial class VideoColor - { - [XmlAttribute("type")] - public VideoColorKind Kind; - } // class VideoColor -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColorKind.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColorKind.cs deleted file mode 100644 index 4ad70c3f..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Metadata/VideoColorKind.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType("ColorTypeType", Namespace = "urn:tva:metadata:2011")] - public enum VideoColorKind - { - [XmlEnum("color")] - Color, - - [XmlEnum("blackAndWhite")] - BlackAndWhite, - - [XmlEnum("blackAndWhiteAndColor")] - BlackAndWhiteAndColor, - - [XmlEnum("colorized")] - Colorized, - } // VideoColorKind -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ControlledTermUse.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ControlledTermUse.cs deleted file mode 100644 index aeede6a4..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ControlledTermUse.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("ControlledTermUseType", Namespace = "urn:tva:mpeg7:2008")] - public partial class ControlledTermUse : InlineTermDefinition - { - [XmlAttribute("href")] - public string TermUrl; - } // class ControlledTermUse -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguage.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguage.cs deleted file mode 100644 index 499643a9..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguage.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Schema; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("ExtendedLanguageType", Namespace = "urn:tva:mpeg7:2008")] - [XmlInclude(typeof(AudioLanguage))] - public partial class ExtendedLanguage - { - - [XmlAttribute("type")] - [DefaultValue(ExtendedLanguageKind.Original)] - public ExtendedLanguageKind Kind; - - [XmlAttribute("supplemental")] - [DefaultValue(false)] - public bool Supplemental; - - [XmlText(DataType = "language")] - public string Value; - - public ExtendedLanguage() - { - this.Kind = ExtendedLanguageKind.Original; - this.Supplemental = false; - } // default constructor - } // class ExtendedLanguage -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguageKind.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguageKind.cs deleted file mode 100644 index ff20aee6..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ExtendedLanguageKind.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Schema; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [XmlType(AnonymousType = true, Namespace = "urn:tva:mpeg7:2008")] - public enum ExtendedLanguageKind // original: ExtendedLanguageTypeType - { - [XmlEnum("original")] - Original, - [XmlEnum("dubbed")] - Dubbed, - [XmlEnum("background")] - Background, - } // enum ExtendedLanguageKind -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinition.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinition.cs deleted file mode 100644 index d7fef35d..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinition.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("InlineTermDefinitionType", Namespace = "urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TermUse))] - [XmlInclude(typeof(ControlledTermUse))] - public abstract partial class InlineTermDefinition - { - [XmlElement("Name")] - public InlineTermDefinitionTypeName[] Name; - - [XmlElement("Definition")] - public TextualData[] Definition; - } // class InlineTermDefinitionType -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinitionTypeName.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinitionTypeName.cs deleted file mode 100644 index b2e0ade9..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/InlineTermDefinitionTypeName.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = "urn:tva:mpeg7:2008")] - public partial class InlineTermDefinitionTypeName : TextualData - { - [XmlAttribute("preferred")] - public bool Preferred; - - [XmlIgnore] - public bool PreferredSpecified; - } // class InlineTermDefinitionTypeName -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ParentalGuidance.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ParentalGuidance.cs deleted file mode 100644 index 8d5bb870..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/ParentalGuidance.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("ParentalGuidance", Namespace = "urn:tva:mpeg7:2008")] - [XmlInclude(typeof(TvaParentalGuidance))] - public partial class ParentalGuidance - { - [XmlElement("MinimumAge", typeof(string), DataType = "nonNegativeInteger")] - public string MinimumAge; - - [XmlElement("ParentalRating", typeof(ControlledTermUse))] - public ControlledTermUse ParentalRating; - - [XmlElement("Region")] - public string[] Region; - } // ParentalGuidance -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TermUse.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TermUse.cs deleted file mode 100644 index f48a267f..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TermUse.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("TermUseType", Namespace = "urn:tva:mpeg7:2008")] - public partial class TermUse : InlineTermDefinition - { - [XmlAttribute("href")] - public string TermUrl; - } // class TermUseType -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualBase.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualBase.cs deleted file mode 100644 index 728136bd..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualBase.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Schema; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("TextualBaseType", Namespace = "urn:tva:mpeg7:2008")] - //[XmlInclude(typeof(TitleType))] - //[XmlInclude(typeof(ShortTitleType))] - //[XmlInclude(typeof(TextualType))] - //[XmlInclude(typeof(OrganizationNameType))] - //[XmlInclude(typeof(ServiceInformationNameType))] - [XmlInclude(typeof(Explanation))] - //[XmlInclude(typeof(SynopsisType))] - //[XmlInclude(typeof(KeywordType))] - [XmlInclude(typeof(TermName))] - //[XmlInclude(typeof(NameComponentType))] - public abstract partial class TextualBase - { - [XmlAttribute("lang", Form = XmlSchemaForm.Qualified, Namespace = "http://www.w3.org/XML/1998/namespace")] - public string Language; - - [XmlText] - public string Value; - } // TextualBase -} // namespace diff --git a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualData.cs b/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualData.cs deleted file mode 100644 index 5f4f3bce..00000000 --- a/1.5 'Kruger 60'/Etsi.Ts102034/v010501/XmlSerialization/TvAnytime/Mpeg7/TextualData.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Metadata; -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Xml.Serialization; - -namespace Etsi.Ts102034.v010501.XmlSerialization.TvAnytime.Mpeg7 -{ - [GeneratedCode("myxsdtool", "0.0.0.0")] - [Serializable] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType("TextualType", Namespace = "urn:tva:mpeg7:2008")] - //[XmlInclude(typeof(OrganizationNameType))] - //[XmlInclude(typeof(ServiceInformationNameType))] - [XmlInclude(typeof(Explanation))] - //[XmlInclude(typeof(SynopsisType))] - //[XmlInclude(typeof(KeywordType))] - [XmlInclude(typeof(TermName))] - public partial class TextualData : TextualBase - { - // no new elements or attributes - } // class TextualData -} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs index a703e035..a46380e7 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.Designer.cs @@ -1,5 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Native.WinForms; namespace IpTviewr.Tools.FirstTimeConfig { @@ -38,7 +50,7 @@ private void InitializeComponent() this.buttonPreviousPage = new System.Windows.Forms.Button(); this.buttonNextPage = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); - this.selectFolder = new IpTviewr.UiServices.Common.Controls.SelectFolderDialog(); + this.selectFolder = new IpTviewr.Native.WinForms.SelectFolderDialog(); this.wizardControl = new IpTviewr.Tools.FirstTimeConfig.WizardTabControl(); this.wizardPageReadme = new System.Windows.Forms.TabPage(); this.checkReadmeAck = new System.Windows.Forms.CheckBox(); @@ -46,27 +58,28 @@ private void InitializeComponent() this.pictureIconReadme = new System.Windows.Forms.PictureBox(); this.labelReadmeWarning = new System.Windows.Forms.Label(); this.wizardPagePrerequisites = new System.Windows.Forms.TabPage(); - this.groupVlc = new System.Windows.Forms.GroupBox(); + this.linkLabelNetFx = new System.Windows.Forms.LinkLabel(); + this.pictureBoxNetFxOk = new System.Windows.Forms.PictureBox(); + this.labelNetFx = new System.Windows.Forms.Label(); + this.buttonVerifyNetFx = new System.Windows.Forms.Button(); this.buttonTestVlc = new System.Windows.Forms.Button(); - this.labelVlcInstallCheckResult = new System.Windows.Forms.Label(); + this.linkLabelSetupSqlCe = new System.Windows.Forms.LinkLabel(); this.buttonFindVlc = new System.Windows.Forms.Button(); + this.linkLabelSetupEmb = new System.Windows.Forms.LinkLabel(); this.textBoxVlc = new System.Windows.Forms.TextBox(); this.labelVlcPath = new System.Windows.Forms.Label(); + this.pictureBoxSqlCeOk = new System.Windows.Forms.PictureBox(); this.pictureBoxVlcOk = new System.Windows.Forms.PictureBox(); this.buttonVerifyVlc = new System.Windows.Forms.Button(); + this.pictureBoxEmbOk = new System.Windows.Forms.PictureBox(); this.linkLabelPrerequisiteVlc = new System.Windows.Forms.LinkLabel(); - this.labelVlc = new System.Windows.Forms.Label(); - this.groupPrerequisites = new System.Windows.Forms.GroupBox(); - this.linkLabelSetupSqlCe = new System.Windows.Forms.LinkLabel(); - this.linkLabelSetupEmb = new System.Windows.Forms.LinkLabel(); - this.pictureBoxSqlCeOk = new System.Windows.Forms.PictureBox(); this.buttonVerifySqlCe = new System.Windows.Forms.Button(); + this.labelVlc = new System.Windows.Forms.Label(); + this.labelVlcInstallCheckResult = new System.Windows.Forms.Label(); + this.labelEmb = new System.Windows.Forms.Label(); this.linkLabelPrerequisiteSqlCe = new System.Windows.Forms.LinkLabel(); - this.labelSqlCe = new System.Windows.Forms.Label(); - this.pictureBoxEmbOk = new System.Windows.Forms.PictureBox(); this.buttonVerifyEmb = new System.Windows.Forms.Button(); - this.linkLabelPrerequisiteEmb = new System.Windows.Forms.LinkLabel(); - this.labelEmb = new System.Windows.Forms.Label(); + this.labelSqlCe = new System.Windows.Forms.Label(); this.wizardPageFirewall = new System.Windows.Forms.TabPage(); this.groupAnalytics = new System.Windows.Forms.GroupBox(); this.checkAnalyticsExceptions = new System.Windows.Forms.CheckBox(); @@ -103,10 +116,9 @@ private void InitializeComponent() this.wizardPageReadme.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureIconReadme)).BeginInit(); this.wizardPagePrerequisites.SuspendLayout(); - this.groupVlc.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxVlcOk)).BeginInit(); - this.groupPrerequisites.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxNetFxOk)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSqlCeOk)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxVlcOk)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEmbOk)).BeginInit(); this.wizardPageFirewall.SuspendLayout(); this.groupAnalytics.SuspendLayout(); @@ -166,18 +178,6 @@ private void InitializeComponent() this.buttonCancel.UseVisualStyleBackColor = true; this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); // - // selectFolder - // - this.selectFolder.Description = ""; - this.selectFolder.DontIncludeNetworkFoldersBelowDomainLevel = false; - this.selectFolder.NewStyle = true; - this.selectFolder.RootFolder = System.Environment.SpecialFolder.MyComputer; - this.selectFolder.SelectedPath = ""; - this.selectFolder.ShowBothFilesAndFolders = false; - this.selectFolder.ShowEditBox = true; - this.selectFolder.ShowFullPathInEditBox = true; - this.selectFolder.ShowNewFolderButton = true; - // // wizardControl // resources.ApplyResources(this.wizardControl, "wizardControl"); @@ -233,26 +233,58 @@ private void InitializeComponent() // // wizardPagePrerequisites // - this.wizardPagePrerequisites.Controls.Add(this.groupVlc); - this.wizardPagePrerequisites.Controls.Add(this.groupPrerequisites); + this.wizardPagePrerequisites.Controls.Add(this.linkLabelNetFx); + this.wizardPagePrerequisites.Controls.Add(this.pictureBoxNetFxOk); + this.wizardPagePrerequisites.Controls.Add(this.labelNetFx); + this.wizardPagePrerequisites.Controls.Add(this.buttonVerifyNetFx); + this.wizardPagePrerequisites.Controls.Add(this.buttonTestVlc); + this.wizardPagePrerequisites.Controls.Add(this.linkLabelSetupSqlCe); + this.wizardPagePrerequisites.Controls.Add(this.buttonFindVlc); + this.wizardPagePrerequisites.Controls.Add(this.linkLabelSetupEmb); + this.wizardPagePrerequisites.Controls.Add(this.textBoxVlc); + this.wizardPagePrerequisites.Controls.Add(this.labelVlcPath); + this.wizardPagePrerequisites.Controls.Add(this.pictureBoxSqlCeOk); + this.wizardPagePrerequisites.Controls.Add(this.pictureBoxVlcOk); + this.wizardPagePrerequisites.Controls.Add(this.buttonVerifyVlc); + this.wizardPagePrerequisites.Controls.Add(this.pictureBoxEmbOk); + this.wizardPagePrerequisites.Controls.Add(this.linkLabelPrerequisiteVlc); + this.wizardPagePrerequisites.Controls.Add(this.buttonVerifySqlCe); + this.wizardPagePrerequisites.Controls.Add(this.labelVlc); + this.wizardPagePrerequisites.Controls.Add(this.labelVlcInstallCheckResult); + this.wizardPagePrerequisites.Controls.Add(this.labelEmb); + this.wizardPagePrerequisites.Controls.Add(this.linkLabelPrerequisiteSqlCe); + this.wizardPagePrerequisites.Controls.Add(this.buttonVerifyEmb); + this.wizardPagePrerequisites.Controls.Add(this.labelSqlCe); resources.ApplyResources(this.wizardPagePrerequisites, "wizardPagePrerequisites"); this.wizardPagePrerequisites.Name = "wizardPagePrerequisites"; this.wizardPagePrerequisites.UseVisualStyleBackColor = true; // - // groupVlc - // - this.groupVlc.Controls.Add(this.buttonTestVlc); - this.groupVlc.Controls.Add(this.labelVlcInstallCheckResult); - this.groupVlc.Controls.Add(this.buttonFindVlc); - this.groupVlc.Controls.Add(this.textBoxVlc); - this.groupVlc.Controls.Add(this.labelVlcPath); - this.groupVlc.Controls.Add(this.pictureBoxVlcOk); - this.groupVlc.Controls.Add(this.buttonVerifyVlc); - this.groupVlc.Controls.Add(this.linkLabelPrerequisiteVlc); - this.groupVlc.Controls.Add(this.labelVlc); - resources.ApplyResources(this.groupVlc, "groupVlc"); - this.groupVlc.Name = "groupVlc"; - this.groupVlc.TabStop = false; + // linkLabelNetFx + // + resources.ApplyResources(this.linkLabelNetFx, "linkLabelNetFx"); + this.linkLabelNetFx.Name = "linkLabelNetFx"; + this.linkLabelNetFx.TabStop = true; + this.linkLabelNetFx.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteNetFx_LinkClicked); + // + // pictureBoxNetFxOk + // + this.pictureBoxNetFxOk.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; + resources.ApplyResources(this.pictureBoxNetFxOk, "pictureBoxNetFxOk"); + this.pictureBoxNetFxOk.Name = "pictureBoxNetFxOk"; + this.pictureBoxNetFxOk.TabStop = false; + // + // labelNetFx + // + resources.ApplyResources(this.labelNetFx, "labelNetFx"); + this.labelNetFx.Name = "labelNetFx"; + // + // buttonVerifyNetFx + // + this.buttonVerifyNetFx.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; + resources.ApplyResources(this.buttonVerifyNetFx, "buttonVerifyNetFx"); + this.buttonVerifyNetFx.Name = "buttonVerifyNetFx"; + this.buttonVerifyNetFx.UseVisualStyleBackColor = true; + this.buttonVerifyNetFx.Click += new System.EventHandler(this.buttonVerifyNet_Click); // // buttonTestVlc // @@ -262,10 +294,12 @@ private void InitializeComponent() this.buttonTestVlc.UseVisualStyleBackColor = true; this.buttonTestVlc.Click += new System.EventHandler(this.buttonTestVlc_Click); // - // labelVlcInstallCheckResult + // linkLabelSetupSqlCe // - resources.ApplyResources(this.labelVlcInstallCheckResult, "labelVlcInstallCheckResult"); - this.labelVlcInstallCheckResult.Name = "labelVlcInstallCheckResult"; + resources.ApplyResources(this.linkLabelSetupSqlCe, "linkLabelSetupSqlCe"); + this.linkLabelSetupSqlCe.Name = "linkLabelSetupSqlCe"; + this.linkLabelSetupSqlCe.TabStop = true; + this.linkLabelSetupSqlCe.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSetupSqlCe_LinkClicked); // // buttonFindVlc // @@ -275,6 +309,13 @@ private void InitializeComponent() this.buttonFindVlc.UseVisualStyleBackColor = true; this.buttonFindVlc.Click += new System.EventHandler(this.buttonFindVlc_Click); // + // linkLabelSetupEmb + // + resources.ApplyResources(this.linkLabelSetupEmb, "linkLabelSetupEmb"); + this.linkLabelSetupEmb.Name = "linkLabelSetupEmb"; + this.linkLabelSetupEmb.TabStop = true; + this.linkLabelSetupEmb.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSetupEmb_LinkClicked); + // // textBoxVlc // this.textBoxVlc.BackColor = System.Drawing.SystemColors.Window; @@ -287,6 +328,13 @@ private void InitializeComponent() resources.ApplyResources(this.labelVlcPath, "labelVlcPath"); this.labelVlcPath.Name = "labelVlcPath"; // + // pictureBoxSqlCeOk + // + this.pictureBoxSqlCeOk.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; + resources.ApplyResources(this.pictureBoxSqlCeOk, "pictureBoxSqlCeOk"); + this.pictureBoxSqlCeOk.Name = "pictureBoxSqlCeOk"; + this.pictureBoxSqlCeOk.TabStop = false; + // // pictureBoxVlcOk // this.pictureBoxVlcOk.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; @@ -302,6 +350,13 @@ private void InitializeComponent() this.buttonVerifyVlc.UseVisualStyleBackColor = true; this.buttonVerifyVlc.Click += new System.EventHandler(this.buttonVerifyVlc_Click); // + // pictureBoxEmbOk + // + this.pictureBoxEmbOk.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; + resources.ApplyResources(this.pictureBoxEmbOk, "pictureBoxEmbOk"); + this.pictureBoxEmbOk.Name = "pictureBoxEmbOk"; + this.pictureBoxEmbOk.TabStop = false; + // // linkLabelPrerequisiteVlc // resources.ApplyResources(this.linkLabelPrerequisiteVlc, "linkLabelPrerequisiteVlc"); @@ -309,55 +364,28 @@ private void InitializeComponent() this.linkLabelPrerequisiteVlc.TabStop = true; this.linkLabelPrerequisiteVlc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteVlc_LinkClicked); // + // buttonVerifySqlCe + // + this.buttonVerifySqlCe.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; + resources.ApplyResources(this.buttonVerifySqlCe, "buttonVerifySqlCe"); + this.buttonVerifySqlCe.Name = "buttonVerifySqlCe"; + this.buttonVerifySqlCe.UseVisualStyleBackColor = true; + this.buttonVerifySqlCe.Click += new System.EventHandler(this.buttonVerifySqlCe_Click); + // // labelVlc // resources.ApplyResources(this.labelVlc, "labelVlc"); this.labelVlc.Name = "labelVlc"; // - // groupPrerequisites - // - this.groupPrerequisites.Controls.Add(this.linkLabelSetupSqlCe); - this.groupPrerequisites.Controls.Add(this.linkLabelSetupEmb); - this.groupPrerequisites.Controls.Add(this.pictureBoxSqlCeOk); - this.groupPrerequisites.Controls.Add(this.buttonVerifySqlCe); - this.groupPrerequisites.Controls.Add(this.linkLabelPrerequisiteSqlCe); - this.groupPrerequisites.Controls.Add(this.labelSqlCe); - this.groupPrerequisites.Controls.Add(this.pictureBoxEmbOk); - this.groupPrerequisites.Controls.Add(this.buttonVerifyEmb); - this.groupPrerequisites.Controls.Add(this.linkLabelPrerequisiteEmb); - this.groupPrerequisites.Controls.Add(this.labelEmb); - resources.ApplyResources(this.groupPrerequisites, "groupPrerequisites"); - this.groupPrerequisites.Name = "groupPrerequisites"; - this.groupPrerequisites.TabStop = false; - // - // linkLabelSetupSqlCe - // - resources.ApplyResources(this.linkLabelSetupSqlCe, "linkLabelSetupSqlCe"); - this.linkLabelSetupSqlCe.Name = "linkLabelSetupSqlCe"; - this.linkLabelSetupSqlCe.TabStop = true; - this.linkLabelSetupSqlCe.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSetupSqlCe_LinkClicked); - // - // linkLabelSetupEmb - // - resources.ApplyResources(this.linkLabelSetupEmb, "linkLabelSetupEmb"); - this.linkLabelSetupEmb.Name = "linkLabelSetupEmb"; - this.linkLabelSetupEmb.TabStop = true; - this.linkLabelSetupEmb.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSetupEmb_LinkClicked); - // - // pictureBoxSqlCeOk + // labelVlcInstallCheckResult // - this.pictureBoxSqlCeOk.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; - resources.ApplyResources(this.pictureBoxSqlCeOk, "pictureBoxSqlCeOk"); - this.pictureBoxSqlCeOk.Name = "pictureBoxSqlCeOk"; - this.pictureBoxSqlCeOk.TabStop = false; + resources.ApplyResources(this.labelVlcInstallCheckResult, "labelVlcInstallCheckResult"); + this.labelVlcInstallCheckResult.Name = "labelVlcInstallCheckResult"; // - // buttonVerifySqlCe + // labelEmb // - this.buttonVerifySqlCe.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; - resources.ApplyResources(this.buttonVerifySqlCe, "buttonVerifySqlCe"); - this.buttonVerifySqlCe.Name = "buttonVerifySqlCe"; - this.buttonVerifySqlCe.UseVisualStyleBackColor = true; - this.buttonVerifySqlCe.Click += new System.EventHandler(this.buttonVerifySqlCe_Click); + resources.ApplyResources(this.labelEmb, "labelEmb"); + this.labelEmb.Name = "labelEmb"; // // linkLabelPrerequisiteSqlCe // @@ -366,18 +394,6 @@ private void InitializeComponent() this.linkLabelPrerequisiteSqlCe.TabStop = true; this.linkLabelPrerequisiteSqlCe.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteSqlCe_LinkClicked); // - // labelSqlCe - // - resources.ApplyResources(this.labelSqlCe, "labelSqlCe"); - this.labelSqlCe.Name = "labelSqlCe"; - // - // pictureBoxEmbOk - // - this.pictureBoxEmbOk.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.Error_16x16; - resources.ApplyResources(this.pictureBoxEmbOk, "pictureBoxEmbOk"); - this.pictureBoxEmbOk.Name = "pictureBoxEmbOk"; - this.pictureBoxEmbOk.TabStop = false; - // // buttonVerifyEmb // this.buttonVerifyEmb.Image = global::IpTviewr.Tools.FirstTimeConfig.Properties.Resources.ApproveReject_16x16; @@ -386,17 +402,10 @@ private void InitializeComponent() this.buttonVerifyEmb.UseVisualStyleBackColor = true; this.buttonVerifyEmb.Click += new System.EventHandler(this.buttonVerifyEmb_Click); // - // linkLabelPrerequisiteEmb - // - resources.ApplyResources(this.linkLabelPrerequisiteEmb, "linkLabelPrerequisiteEmb"); - this.linkLabelPrerequisiteEmb.Name = "linkLabelPrerequisiteEmb"; - this.linkLabelPrerequisiteEmb.TabStop = true; - this.linkLabelPrerequisiteEmb.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelPrerequisiteEmb_LinkClicked); - // - // labelEmb + // labelSqlCe // - resources.ApplyResources(this.labelEmb, "labelEmb"); - this.labelEmb.Name = "labelEmb"; + resources.ApplyResources(this.labelSqlCe, "labelSqlCe"); + this.labelSqlCe.Name = "labelSqlCe"; // // wizardPageFirewall // @@ -650,12 +659,10 @@ private void InitializeComponent() this.wizardPageReadme.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureIconReadme)).EndInit(); this.wizardPagePrerequisites.ResumeLayout(false); - this.groupVlc.ResumeLayout(false); - this.groupVlc.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxVlcOk)).EndInit(); - this.groupPrerequisites.ResumeLayout(false); - this.groupPrerequisites.PerformLayout(); + this.wizardPagePrerequisites.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxNetFxOk)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSqlCeOk)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxVlcOk)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxEmbOk)).EndInit(); this.wizardPageFirewall.ResumeLayout(false); this.groupAnalytics.ResumeLayout(false); @@ -677,18 +684,15 @@ private void InitializeComponent() #endregion - private IpTviewr.UiServices.Common.Controls.SelectFolderDialog selectFolder; + private SelectFolderDialog selectFolder; private System.Windows.Forms.OpenFileDialog openFile; private WizardTabControl wizardControl; private System.Windows.Forms.TabPage wizardPagePrerequisites; - private System.Windows.Forms.GroupBox groupPrerequisites; private System.Windows.Forms.Button buttonVerifyEmb; private System.Windows.Forms.LinkLabel linkLabelPrerequisiteVlc; private System.Windows.Forms.Label labelVlc; - private System.Windows.Forms.LinkLabel linkLabelPrerequisiteEmb; private System.Windows.Forms.Label labelEmb; private System.Windows.Forms.TabPage wizardPageFirewall; - private System.Windows.Forms.GroupBox groupVlc; private System.Windows.Forms.Button buttonVerifyVlc; private System.Windows.Forms.PictureBox pictureBoxVlcOk; private System.Windows.Forms.PictureBox pictureBoxEmbOk; @@ -743,5 +747,9 @@ private void InitializeComponent() private System.Windows.Forms.PictureBox pictureIconReadme; private System.Windows.Forms.CheckBox checkReadmeAck; private System.Windows.Forms.PictureBox pictureBoxEpgWarning; + private System.Windows.Forms.PictureBox pictureBoxNetFxOk; + private System.Windows.Forms.Label labelNetFx; + private System.Windows.Forms.Button buttonVerifyNetFx; + private System.Windows.Forms.LinkLabel linkLabelNetFx; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs index 827d3044..e8f9b057 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.cs @@ -1,55 +1,52 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.Common.Telemetry; using IpTviewr.Tools.FirstTimeConfig.Properties; using IpTviewr.UiServices.Common.Forms; -using IpTviewr.UiServices.Configuration; using IpTviewr.UiServices.Configuration.Schema2014.Config; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Diagnostics; -using System.Drawing; using System.IO; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.Tools.FirstTimeConfig { - public partial class ConfigForm : Form + public partial class ConfigForm : CommonBaseForm { - private string DefaultRecordingsSavePath; - private bool IsFormAllowedToClose; + private string _defaultRecordingsSavePath; + private bool _isFormAllowedToClose; public ConfigForm() { InitializeComponent(); - this.Icon = Properties.Resources.FirstTimeConfigIcon; + Icon = Resources.FirstTimeConfigIcon; wizardControl.LabelTitle = labelStepTitle; wizardControl.PreviousButton = buttonPreviousPage; wizardControl.NextButton = buttonNextPage; wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = true; } // constructor + public bool VlcIsX86OnX64 { get; set; } + private void ConfigForm_Load(object sender, EventArgs e) { - BasicGoogleTelemetry.SendScreenHit(this); - - selectFolder.Description = Properties.Texts.SelectFolderSaveDescription; - openFile.Title = Properties.Texts.OpenFileVlcTitle; - openFile.Filter = Properties.Texts.OpenFileVlcFilter; + // Description is no longer available in new SelectFolderDialog + // TODO: change text and set as caption + // selectFolder.Description = Texts.SelectFolderSaveDescription; + openFile.Title = Texts.OpenFileVlcTitle; + openFile.Filter = Texts.OpenFileVlcFilter; - try - { - DefaultRecordingsSavePath = Installation.GetCurrentUserVideosFolder(); - } - catch - { - DefaultRecordingsSavePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); - } // try-catch + _defaultRecordingsSavePath = Environment.GetFolderPath(Environment.SpecialFolder.MyVideos); wizardControl.Initialization[wizardPageReadme.Name] = PageReadme_Setup; wizardControl.Initialization[wizardPagePrerequisites.Name] = PagePrerequisites_Setup; @@ -71,7 +68,7 @@ private void ConfigForm_Shown(object sender, EventArgs e) private void ConfigForm_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = false; - if (IsFormAllowedToClose) return; + if (_isFormAllowedToClose) return; e.Cancel = true; DialogResult = DialogResult.None; @@ -92,7 +89,7 @@ private void buttonCancel_Click(object sender, EventArgs e) private bool ConfirmUserCancel() { - if (MessageBox.Show(this, Texts.ConfirmUserCancel, this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return false; + if (MessageBox.Show(this, Texts.ConfirmUserCancel, Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return false; EndWizard(DialogResult.Cancel, null, null); return true; @@ -128,17 +125,28 @@ private void checkReadmeAck_CheckedChanged(object sender, EventArgs e) wizardControl.UpdateWizardButtons(); } // checkReadmeAck_CheckedChanged -#endregion + #endregion -#region Prerequisites Page + #region Prerequisites Page private void PagePrerequisites_Setup() { wizardControl.IsPageAllowed[wizardPagePrerequisites.Name] = false; - buttonVerifyEmb.Visible = true; + linkLabelNetFx.Enabled = true; + if ((Environment.OSVersion.Version.Major >= 10)) + { + linkLabelNetFx.Text = Texts.NextFxWindows10Setup; + buttonVerifyNetFx.Enabled = false; + } // if + else + { + buttonVerifyNetFx.Enabled = true; + } // if-else + + buttonVerifyEmb.Visible = false; + linkLabelSetupEmb.Visible = false; linkLabelSetupEmb.Enabled = Installation.CheckRedistFile(Texts.DownloadEmbFile, Texts.DownloadEmbFile32bit); - linkLabelPrerequisiteEmb.Enabled = true; buttonVerifySqlCe.Visible = false; linkLabelSetupSqlCe.Enabled = false; @@ -151,58 +159,66 @@ private void PagePrerequisites_Setup() buttonFindVlc.Enabled = false; buttonTestVlc.Enabled = false; - PagePrerequisites_Step1(false); + PagePrerequisites_NetFx(false); } // PagePrerequisites_Setup - private void PagePrerequisites_Step1(bool withUi) + private void PagePrerequisites_NetFx(bool withUi) { - // Here lies .Net verification. This is no longer needed, as the MSI checks if installed or not + var installed = Installation.IsNet35Installed(out var message); + if (withUi) + { + MessageBox.Show(this, message, Text, MessageBoxButtons.OK, + installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); + } // if + if (!installed) return; + pictureBoxNetFxOk.Image = Resources.Sucess_16x16; + buttonVerifyNetFx.Visible = false; + linkLabelNetFx.Visible = false; + + buttonVerifyEmb.Visible = true; + linkLabelSetupEmb.Visible = true; linkLabelSetupEmb.Focus(); - PagePrerequisites_Step2(false); - } // PagePrerequisites_Step1 - private void PagePrerequisites_Step2(bool withUi) - { - string message; + PagePrerequisites_Emb(false); + } // PagePrerequisites_NetFx - var installed = Installation.IsEmbInstalled(out message); + private void PagePrerequisites_Emb(bool withUi) + { + var installed = Installation.IsEmbInstalled(out var message); if (withUi) { - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, + MessageBox.Show(this, message, Text, MessageBoxButtons.OK, installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); } // if if (!installed) return; pictureBoxEmbOk.Image = Resources.Sucess_16x16; buttonVerifyEmb.Visible = false; - linkLabelSetupEmb.Enabled = false; - linkLabelPrerequisiteEmb.Enabled = false; + linkLabelSetupEmb.Visible = false; buttonVerifySqlCe.Visible = true; linkLabelSetupSqlCe.Enabled = Installation.CheckRedistFile(Texts.DownloadSqlCeFile, Texts.DownloadSqlCeFile32bit); linkLabelPrerequisiteSqlCe.Enabled = true; linkLabelSetupSqlCe.Focus(); - PagePrerequisites_Step3(false); - } // PagePrerequisites_Step2 + PagePrerequisites_SqlCe(false); + } // PagePrerequisites_Emb - private void PagePrerequisites_Step3(bool withUi) + private void PagePrerequisites_SqlCe(bool withUi) { - string message; - - var installed = Installation.IsSqlCeInstalled(out message); + var installed = Installation.IsSqlCeInstalled(out var message); if (withUi) { - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, + MessageBox.Show(this, message, Text, MessageBoxButtons.OK, installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); } // if if (!installed) return; pictureBoxSqlCeOk.Image = Resources.Sucess_16x16; buttonVerifySqlCe.Visible = false; - linkLabelSetupSqlCe.Enabled = false; - linkLabelPrerequisiteSqlCe.Enabled = false; + linkLabelSetupSqlCe.Visible = false; + linkLabelPrerequisiteSqlCe.Visible = false; buttonVerifyVlc.Visible = true; linkLabelPrerequisiteVlc.Enabled = true; @@ -212,21 +228,21 @@ private void PagePrerequisites_Step3(bool withUi) buttonFindVlc.Enabled = true; buttonTestVlc.Enabled = false; - PagePrerequisites_Step4(false); - } // PagePrerequisites_Step3 + PagePrerequisites_Vlc(false); + } // PagePrerequisites_SqlCe - private void PagePrerequisites_Step4(bool withUi) + private void PagePrerequisites_Vlc(bool withUi) { - string message; - string path; - - path = textBoxVlc.Text; - var installed = Installation.IsVlcInstalled(out message, ref path); + var path = textBoxVlc.Text; + var isX86OnX64 = VlcIsX86OnX64; + var installed = Installation.IsVlcInstalled(out var message, ref path, ref isX86OnX64); + VlcIsX86OnX64 = isX86OnX64; textBoxVlc.Text = path; + if (withUi) { labelVlcInstallCheckResult.Text = null; - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, + MessageBox.Show(this, message, Text, MessageBoxButtons.OK, installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); } else @@ -241,23 +257,44 @@ private void PagePrerequisites_Step4(bool withUi) pictureBoxVlcOk.Image = Resources.Sucess_16x16; linkLabelPrerequisiteVlc.Visible = false; buttonVerifyVlc.Visible = false; - //buttonFindVlc.Enabled = false; buttonTestVlc.Enabled = true; buttonTestVlc.Focus(); - PagePrerequisites_Step5(false); - } // PagePrerequisites_Step4 + PagePrerequisites_End(false); + } // PagePrerequisites_Vlc - private void PagePrerequisites_Step5(bool withUi) + private void PagePrerequisites_End(bool withUi) { wizardControl.IsPageAllowed[wizardPageFirewall.Name] = true; wizardControl.UpdateWizardButtons(); - } // PagePrerequisites_Step5 + } // PagePrerequisites_End - private void linkLabelPrerequisiteNet_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + private void linkLabelPrerequisiteNetFx_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - Installation.OpenUrl(this, Properties.Texts.DownloadUrlNet); - } // linkLabelPrerequisiteNet_LinkClicked + if (Environment.OSVersion.Version.Major >= 10) + { + Installation.Windows10LoadNetFx35(this, labelNetFx.Text, labelNetFx, LoadNetFx_Completed); + } + else + { + Installation.OpenUrl(this, Texts.DownloadUrlNet); + } // if-else + } // linkLabelPrerequisiteNetFx_LinkClicked + + private void LoadNetFx_Completed(int errorCode) + { + pictureBoxNetFxOk.Image = errorCode switch + { + 0 => Resources.Sucess_16x16, + -2146232576 => Resources.Status_Pending_16x16, // 0x80131700 + _ => Resources.Error_16x16, + }; + + buttonVerifyNetFx.Enabled = (errorCode != 0); + wizardControl.ShowWizardButtons(true); + + if (errorCode == 0) PagePrerequisites_NetFx(true); + } // LoadNetFx_Completed private void linkLabelSetupEmb_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { @@ -267,24 +304,31 @@ private void linkLabelSetupEmb_LinkClicked(object sender, LinkLabelLinkClickedEv pictureBoxEmbOk.Image = Resources.Status_Wait_16x16; linkLabelSetupEmb.Enabled = false; - linkLabelPrerequisiteEmb.Enabled = false; buttonVerifyEmb.Enabled = false; wizardControl.ShowWizardButtons(false); } // linkLabelSetupEmb_LinkClicked - private void SetupEmb_Completed(bool success) + private void SetupEmb_Completed(int errorCode) { - pictureBoxEmbOk.Image = success ? Resources.Status_Pending_16x16 : Resources.Error_16x16; - linkLabelSetupEmb.Enabled = true; - linkLabelPrerequisiteEmb.Enabled = true; - buttonVerifyEmb.Enabled = true; wizardControl.ShowWizardButtons(true); + + if (errorCode == 0) + { + PagePrerequisites_Emb(true); + } // if + else + { + pictureBoxEmbOk.Image = Resources.Error_16x16; + linkLabelSetupEmb.Enabled = true; + buttonVerifyEmb.Enabled = true; + } // if-else } // SetupEmb_Completed + // TODO: purge all references to download MS-EMB private void linkLabelPrerequisiteEmb_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Installation.PromptDownloadFromVendor(this, "Microsoft", Texts.DownloadEmbFile, Texts.DownloadEmbFile32bit); - Installation.OpenUrl(this, Properties.Texts.DownloadUrlEmb); + Installation.OpenUrl(this, Texts.DownloadUrlEmb); } // linkLabelPrerequisiteEmb_LinkClicked private void linkLabelSetupSqlCe_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) @@ -300,44 +344,52 @@ private void linkLabelSetupSqlCe_LinkClicked(object sender, LinkLabelLinkClicked wizardControl.ShowWizardButtons(false); } // linkLabelSetupSqlCe_LinkClicked - private void SetupSqlCe_Completed(bool success) + private void SetupSqlCe_Completed(int errorCode) { - pictureBoxSqlCeOk.Image = success ? Resources.Status_Pending_16x16 : Resources.Error_16x16; - linkLabelSetupSqlCe.Enabled = true; - linkLabelPrerequisiteSqlCe.Enabled = true; - buttonVerifySqlCe.Enabled = true; wizardControl.ShowWizardButtons(true); + + if (errorCode == 0) + { + PagePrerequisites_SqlCe(true); + } // if + else + { + pictureBoxSqlCeOk.Image = Resources.Error_16x16; + linkLabelSetupSqlCe.Enabled = true; + linkLabelPrerequisiteSqlCe.Enabled = true; + buttonVerifySqlCe.Enabled = true; + } // if-else } // SetupSqlCe_Completed private void linkLabelPrerequisiteSqlCe_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Installation.PromptDownloadFromVendor(this, "Microsoft", Texts.DownloadSqlCeFile, Texts.DownloadSqlCeFile32bit); - Installation.OpenUrl(this, Properties.Texts.DownloadUrlSqlCe); + Installation.OpenUrl(this, Texts.DownloadUrlSqlCe); } // linkLabelPrerequisiteSqlCe_LinkClicked private void linkLabelPrerequisiteVlc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - Installation.OpenUrl(this, Properties.Texts.DownloadUrlVlc); + Installation.OpenUrl(this, Texts.DownloadUrlVlc); } // linkLabelPrerequisiteVlc_LinkClicked private void buttonVerifyNet_Click(object sender, EventArgs e) { - PagePrerequisites_Step1(true); + PagePrerequisites_NetFx(true); } // buttonVerifyNet_Click private void buttonVerifyEmb_Click(object sender, EventArgs e) { - PagePrerequisites_Step2(true); + PagePrerequisites_Emb(true); } // buttonVerifyEmb_Click private void buttonVerifySqlCe_Click(object sender, EventArgs e) { - PagePrerequisites_Step3(true); + PagePrerequisites_SqlCe(true); } // buttonVerifySqlCe_Click private void buttonVerifyVlc_Click(object sender, EventArgs e) { - PagePrerequisites_Step4(true); + PagePrerequisites_Vlc(true); } // buttonVerifyVlc_Click private void buttonFindVlc_Click(object sender, EventArgs e) @@ -359,19 +411,17 @@ private void buttonFindVlc_Click(object sender, EventArgs e) private void buttonTestVlc_Click(object sender, EventArgs e) { - string message; - var testMedia = Installation.GetTestMedia(); - var installed = Installation.TestVlcInstallation(out message, textBoxVlc.Text, testMedia); - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, + var installed = Installation.TestVlcInstallation(out var message, textBoxVlc.Text, testMedia); + MessageBox.Show(this, message, Text, MessageBoxButtons.OK, installed ? MessageBoxIcon.Information : MessageBoxIcon.Warning); if (!installed) return; } // buttonTestVlc_Click -#endregion + #endregion -#region Firewall page + #region Firewall page private void PageFirewall_Setup() { @@ -392,13 +442,13 @@ private void checkBoxFirewall_CheckedChanged(object sender, EventArgs e) private void buttonFirewall_Click(object sender, EventArgs e) { var result = Installation.RunSelfForFirewall( - checkBoxFirewallDecoder.Checked ? Program.AppUiConfig.Folders.Install : null, + checkBoxFirewallDecoder.Checked ? Program.AppConfigFolders.Install : null, checkBoxFirewallVlc.Checked ? textBoxVlc.Text : null); if (result.Message == null) return; if (result.InnerException != null) { - MessageBox.Show(this, Texts.FirewallException + "\r\n" + result.InnerException.ToString(), this.Text, + MessageBox.Show(this, Texts.FirewallException + "\r\n" + result.InnerException.ToString(), Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (result.IsOk) @@ -414,7 +464,7 @@ private void buttonFirewall_Click(object sender, EventArgs e) } else { - MessageBox.Show(this, result.Message, this.Text, MessageBoxButtons.OK, result.IsOk ? MessageBoxIcon.Information : MessageBoxIcon.Warning); + MessageBox.Show(this, result.Message, Text, MessageBoxButtons.OK, result.IsOk ? MessageBoxIcon.Information : MessageBoxIcon.Warning); } // if-else } // buttonFirewall_Click @@ -435,13 +485,6 @@ private void checkEnableAnalytics_CheckedChanged(object sender, EventArgs e) { var enabled = checkEnableAnalytics.Checked; -#if (DEBUG == false) - if (!enabled) - { - MessageBox.Show(this, Properties.Texts.AnalyticsKeepChecked, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); - } // if -#endif - checkAnalyticsUsage.Checked = enabled; checkAnalyticsUsage.Enabled = enabled; @@ -451,33 +494,31 @@ private void checkEnableAnalytics_CheckedChanged(object sender, EventArgs e) private void linkAnalyticsHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - HelpDialog.ShowRtfHelp(this, Properties.Texts.GoogleTelemetry, Properties.Texts.TelemetryHelpCaption); + HelpDialog.ShowRtfHelp(this, Texts.AppTelemetryHelp, Texts.TelemetryHelpCaption); } // linkAnalyticsHelp_LinkClicked -#endregion + #endregion -#region Basic page + #region Basic page private void PageBasic_Setup() { wizardControl.IsPageAllowed[wizardPageRecordings.Name] = true; } // PageBasic_Setup -#endregion + #endregion -#region Recording page + #region Recording page private void PageRecordings_Setup() { - textBoxSave.Text = DefaultRecordingsSavePath; + textBoxSave.Text = _defaultRecordingsSavePath; labelCreatingConfig.Visible = false; } // PageRecordings_Setup private void buttonBrowseSave_Click(object sender, EventArgs e) { - selectFolder.NewStyle = true; - selectFolder.SelectedPath = string.IsNullOrEmpty(textBoxSave.Text) ? DefaultRecordingsSavePath : textBoxSave.Text; - selectFolder.RootFolder = Environment.SpecialFolder.Desktop; + selectFolder.SelectedPath = string.IsNullOrEmpty(textBoxSave.Text) ? _defaultRecordingsSavePath : textBoxSave.Text; if (selectFolder.ShowDialog(this) != DialogResult.OK) return; textBoxSave.Text = selectFolder.SelectedPath; @@ -506,11 +547,11 @@ private void buttonConfig_Click(object sender, EventArgs e) rootFolder = Path.Combine(rootFolder, subFolder); } // if - xmlConfigPath = Path.Combine(Program.AppUiConfig.Folders.Base, "user-config.xml"); + xmlConfigPath = Path.Combine(Program.AppConfigFolders.Base, "user-config.xml"); if (File.Exists(xmlConfigPath)) { - if (MessageBox.Show(this, Properties.Texts.OverwriteXmlConfigFile, this.Text, + if (MessageBox.Show(this, Texts.OverwriteXmlConfigFile, Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != DialogResult.Yes) { return; @@ -519,7 +560,7 @@ private void buttonConfig_Click(object sender, EventArgs e) labelCreatingConfig.Visible = true; labelCreatingConfig.Refresh(); - var success = Configuration.Create(textBoxVlc.Text, + var success = Configuration.Create(textBoxVlc.Text, VlcIsX86OnX64, rootFolder, new TelemetryConfiguration(checkEnableAnalytics.Checked, checkAnalyticsUsage.Checked, checkAnalyticsExceptions.Checked), new EpgConfig(checkEpg.Checked, -1, 7), @@ -535,17 +576,17 @@ private void buttonConfig_Click(object sender, EventArgs e) } // if-else } // buttonConfig_Click -#endregion + #endregion -#region End wizard + #region End wizard private void EndWizard(DialogResult result, string message, Exception ex) { - IsFormAllowedToClose = true; + _isFormAllowedToClose = true; Program.SetWizardResult(result, message, ex); Close(); } // EndWizard -#endregion + #endregion } // class ConfigForm } // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.es.resx b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.es.resx index 1018e838..02a02735 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.es.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.es.resx @@ -126,6 +126,21 @@ &Cancelar + + Información importante sobre el uso de este programa + + + Paso 1: Verificación de instalación del software necesario + + + Paso 2: Cortafuegos de Windows y mejora del software + + + Paso 3: Configuración y ajustes básicos + + + Paso 4: Configuración de la funcionalidad de grabación + 318, 17 @@ -136,15 +151,24 @@ Lea atentamente la siguiente información hasta el final antes de utilizar este programa. - - Información importante sobre el uso de este programa + + Descargar de microsoft.com + + + Co&mprobar... &Probar... + + Instalar con archivo de instalación local + &Localizar... + + Instalar con archivo de instalación local + 96, 13 @@ -154,72 +178,33 @@ Co&mprobar... - - 231, 27 - - - 132, 13 - Descargar de videolan.org + + Co&mprobar... + 146, 13 Reproductor VLC de Videolan - - Software adicional - - - 193, 13 - - - Instalar con archivo de instalación local - - - 193, 13 - - - Instalar con archivo de instalación local - - - Co&mprobar... - - - 232, 100 - - - 139, 13 + + + 4 Descargar de microsoft.com - 0 Co&mprobar... - - 232, 50 - - - 139, 13 - - - Descargar de microsoft.com - - - 4 - - - Descargar e instalar requisitos previos - - - Paso 1: Verificación de instalación del software necesario + + Recolección de datos de utilización 189, 17 @@ -248,8 +233,8 @@ Ayudar a mejorar el software (recomendado) - - Recolección de datos de utilización + + Configuración del Cortafuegos de Windows (Windows Firewall) 367, 17 @@ -275,11 +260,8 @@ Permitir comunicar a través del cortafuegos a &todos los programas del decodificador virtual - - Configuración del Cortafuegos de Windows (Windows Firewall) - - - Paso 2: Cortafuegos de Windows y mejora del software + + Asignación de números de canal 453, 17 @@ -298,14 +280,8 @@ ¿Qué tipo de canal debe aparecer antes? - - Asignación de números de canal - - - 446, 17 - - - Actualizar automáticamente los datos EPG si tienen más de 24h en la siguiente ejecución + + Guía electrónica de programación (EPG) 445, 13 @@ -319,18 +295,15 @@ Habilitar la función de EPG - - Guía electrónica de programación (EPG) - - - Paso 3: Configuración y ajustes básicos - Creando los archivos de configuración de la aplicación y de preferencias de usuario... Configurar la &aplicación + + Grabación de programas + 401, 17 @@ -355,16 +328,6 @@ Seleccione la carpeta en la que, por defecto, se guardarán las grabaciones: - - Grabación de programas - - - Paso 4: Configuración de la funcionalidad de grabación - - - - Inherit - Asistente de configuración inicial diff --git a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx index 136b2dd1..9b2d86c3 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/ConfigForm.resx @@ -441,17 +441,146 @@ 0 + + True + + + NoControl + + + 28, 31 + + + 3, 3, 3, 3 + + + 146, 13 + + + 1 + + + Download from microsoft.com + + + linkLabelNetFx + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 0 + + + NoControl + + + 6, 11 + + + 16, 16 + + + CenterImage + + + 14 + + + pictureBoxNetFxOk + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 1 + + + True + + + Tahoma, 8.25pt + + + NoControl + + + 26, 12 + + + 3, 3, 3, 3 + + + 162, 13 + + + 0 + + + Microsoft® .NET Framework 3.5 + + + labelNetFx + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 2 + + + NoControl + + + 369, 6 + + + 100, 25 + + + 2 + + + &Verify... + + + MiddleRight + + + ImageBeforeText + + + buttonVerifyNetFx + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 3 + NoControl - 237, 76 + 237, 212 100, 25 - 6 + 16 &Test... @@ -469,46 +598,52 @@ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupVlc + wizardPagePrerequisites - 0 + 4 - + + True + + NoControl - - 9, 114 + + 26, 132 - - 460, 42 + + 127, 13 - - 7 + + 8 - - labelVlcInstallCheckResult + + Install from local setup file - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + linkLabelSetupSqlCe - - groupVlc + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + wizardPagePrerequisites + + + 5 NoControl - 131, 76 + 131, 212 100, 25 - 5 + 15 Set &location... @@ -526,19 +661,49 @@ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupVlc + wizardPagePrerequisites - 2 + 6 + + + True + + + NoControl + + + 26, 82 + + + 127, 13 + + + 5 + + + Install from local setup file + + + linkLabelSetupEmb + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 7 - 131, 50 + 131, 186 338, 20 - 4 + 14 textBoxVlc @@ -547,10 +712,10 @@ System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupVlc + wizardPagePrerequisites - 3 + 8 True @@ -559,13 +724,13 @@ NoControl - 6, 53 + 6, 189 101, 13 - 3 + 13 VLC player location: @@ -577,16 +742,43 @@ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupVlc + wizardPagePrerequisites - 4 + 9 + + + NoControl + + + 6, 106 + + + 16, 16 + + + CenterImage + + + 11 + + + pictureBoxSqlCeOk + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 10 NoControl - 6, 24 + 6, 160 16, 16 @@ -604,22 +796,22 @@ System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupVlc + wizardPagePrerequisites - 5 + 11 NoControl - 369, 19 + 369, 155 100, 25 - 2 + 12 &Verify... @@ -637,10 +829,37 @@ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupVlc + wizardPagePrerequisites - 6 + 12 + + + NoControl + + + 6, 56 + + + 16, 16 + + + CenterImage + + + 7 + + + pictureBoxEmbOk + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 13 True @@ -649,7 +868,7 @@ NoControl - 216, 25 + 216, 161 3, 3, 3, 3 @@ -658,7 +877,7 @@ 139, 13 - 1 + 11 Download from videolan.org @@ -670,11 +889,44 @@ System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupVlc + wizardPagePrerequisites + 14 + + + NoControl + + + 369, 101 + + + 100, 25 + + 7 + + &Verify... + + + MiddleRight + + + ImageBeforeText + + + buttonVerifySqlCe + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + wizardPagePrerequisites + + + 15 + True @@ -685,7 +937,7 @@ NoControl - 28, 25 + 28, 161 3, 3, 3, 3 @@ -694,7 +946,7 @@ 101, 13 - 0 + 10 Videolan VLC player @@ -706,154 +958,73 @@ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupVlc - - - 8 - - - 7, 138 - - - 475, 109 - - - 1 - - - Additional software - - - groupVlc - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - wizardPagePrerequisites - - 0 - - - True + + 16 - + NoControl - - 26, 100 - - - 127, 13 - - - 5 - - - Install from local setup file - - - linkLabelSetupSqlCe - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 9, 212 - - groupPrerequisites + + 460, 42 - + 0 - - True - - - NoControl - - - 26, 50 - - - 127, 13 - - - 1 - - - Install from local setup file - - - linkLabelSetupEmb - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 1 - - - NoControl - - - 6, 74 - - - 16, 16 + + False - - CenterImage + + labelVlcInstallCheckResult - - 11 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - pictureBoxSqlCeOk + + wizardPagePrerequisites - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17 - - groupPrerequisites + + True - - 2 + + Tahoma, 8.25pt - + NoControl - - 369, 69 - - - 100, 25 + + 26, 57 - - 7 + + 3, 3, 3, 3 - - &Verify... + + 177, 13 - - MiddleRight + + 3 - - ImageBeforeText + + Microsoft® Exception Message Box - - buttonVerifySqlCe + + labelEmb - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupPrerequisites + + wizardPagePrerequisites - - 3 + + 18 True @@ -862,7 +1033,7 @@ NoControl - 217, 100 + 216, 132 3, 3, 3, 3 @@ -871,7 +1042,7 @@ 146, 13 - 6 + 9 Download from microsoft.com @@ -883,85 +1054,22 @@ System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupPrerequisites + wizardPagePrerequisites - 4 - - - True - - - Tahoma, 8.25pt - - - NoControl - - - 26, 75 - - - 3, 3, 3, 3 - - - 184, 13 - - - 4 - - - Microsoft® SQL Server® CE 4.0 SP1 - - - labelSqlCe - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 5 - - - NoControl - - - 6, 24 - - - 16, 16 - - - CenterImage - - - 7 - - - pictureBoxEmbOk - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 6 + 19 NoControl - 369, 19 + 369, 51 100, 25 - 3 + 4 &Verify... @@ -979,103 +1087,46 @@ System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - groupPrerequisites + wizardPagePrerequisites - 7 - - - True + 20 - - NoControl - - - 217, 50 - - - 3, 3, 3, 3 - - - 146, 13 - - - 2 - - - Download from microsoft.com - - - linkLabelPrerequisiteEmb - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupPrerequisites - - - 8 - - + True - + Tahoma, 8.25pt - + NoControl - - 26, 25 + + 26, 107 - + 3, 3, 3, 3 - - 177, 13 + + 184, 13 - - 0 + + 6 - - Microsoft® Exception Message Box + + Microsoft® SQL Server® CE 4.0 SP1 - - labelEmb + + labelSqlCe - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupPrerequisites - - - 9 - - - 6, 6 - - - 475, 126 - - - 0 - - - Download and install pre-requisites - - - groupPrerequisites - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + wizardPagePrerequisites - - 1 + + 21 4, 25 @@ -2021,14 +2072,11 @@ Which channels should appear first? 493, 359 - - NoControl - CenterScreen - First-time configuration assistant + [DEBUG] First-time configuration assistant openFile @@ -2040,12 +2088,12 @@ Which channels should appear first? selectFolder - IpTviewr.UiServices.Common.Controls.SelectFolderDialog, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null + IpTviewr.Native.WinForms.SelectFolderDialog, IpTViewr.Native, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null ConfigForm - System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + IpTviewr.UiServices.Common.Forms.CommonBaseForm, UiServices.Common, Version=1.5.1010.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Configuration.cs b/1.5 'Kruger 60'/FirstTimeConfig/Configuration.cs index 4876554a..1b1ad10f 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Configuration.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Configuration.cs @@ -1,6 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Core; using IpTviewr.UiServices.Configuration; using IpTviewr.UiServices.Configuration.Schema2014.Config; using IpTviewr.UiServices.Configuration.Settings.Network; @@ -9,31 +20,33 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; +using System.Net.Mime; +using System.Security.AccessControl; using System.Windows.Forms; -using System.Xml; -using System.Xml.Linq; -using IpTviewr.Core.IpTvProvider; -using IpTviewr.MovistarPlus; +using IpTviewr.Common.Telemetry; +using IpTviewr.Tools.FirstTimeConfig.Properties; +using IpTviewr.UiServices.Configuration.Properties; +using IpTviewr.UiServices.Configuration.Settings; +using Microsoft.Win32; namespace IpTviewr.Tools.FirstTimeConfig { internal class Configuration { - public static bool Create(string vlcPath, string rootSaveLocation, TelemetryConfiguration analytics, EpgConfig epg, bool sdPriority, string xmlConfigPath, out string message) + public static bool Create(string vlcPath, bool vlcIsX86OnX64, string rootSaveLocation, TelemetryConfiguration telemetry, EpgConfig epg, bool sdPriority, string xmlConfigPath, out string message) { - UserConfig user; - try { - user = new UserConfig() + Settings.Default.Telemetry = telemetry; + Settings.Default.Save(); + JsonSettingsProvider.Close(Settings.Default); + + var user = new UserConfig() { - Telemetry = analytics, - PreferredLanguages = Properties.Texts.DvbIpTv_PreferredLanguages, + PreferredLanguages = Texts.DvbIpTv_PreferredLanguages, Record = new RecordConfig() { - SaveLocations = new RecordSaveLocation[] + SaveLocations = new[] { new RecordSaveLocation() { @@ -41,30 +54,30 @@ public static bool Create(string vlcPath, string rootSaveLocation, TelemetryConf }, // RecordSaveLocation new RecordSaveLocation() { - Name = Properties.Texts.SaveLocationSeriesName, - Path = Path.Combine(rootSaveLocation, Properties.Texts.SaveLocationSeriesFolder) + Name = Texts.SaveLocationSeriesName, + Path = Path.Combine(rootSaveLocation, Texts.SaveLocationSeriesFolder) }, // RecordSaveLocation new RecordSaveLocation() { - Name = Properties.Texts.SaveLocationMoviesName, - Path = Path.Combine(rootSaveLocation, Properties.Texts.SaveLocationMoviesFolder) + Name = Texts.SaveLocationMoviesName, + Path = Path.Combine(rootSaveLocation, Texts.SaveLocationMoviesFolder) } // RecordSaveLocation }, // SaveLocations - TaskSchedulerFolders = new RecordTaskSchedulerFolder[] + TaskSchedulerFolders = new[] { new RecordTaskSchedulerFolder() { - Name = Properties.Texts.TaskSchedulerFolderDvbIpTv, + Name = Texts.TaskSchedulerFolderDvbIpTv, Path = "\\IPTViewr" } // RecordTaskSchedulerFolder }, // TaskSchedulerFolders - Recorders = new RecorderConfig[] + Recorders = new[] { new RecorderConfig() { Name = "VLC", Path = vlcPath, - Arguments = new string[] + Arguments = new[] { "--intf=dummy", "--dummy-quiet", @@ -80,53 +93,55 @@ public static bool Create(string vlcPath, string rootSaveLocation, TelemetryConf }, // Record Epg = epg, ChannelNumberStandardDefinitionPriority = sdPriority, - }; // user + }; foreach (var location in user.Record.SaveLocations) { Directory.CreateDirectory(location.Path); } // foreach - var tvPlayers = GetTvPlayers(vlcPath); - var movistarPlusIpTvProviderSettings = new IpTvProviderSettings() - { - ProviderClass = typeof(IpTvProviderMovistarPlus).AssemblyQualifiedName - }; + var tvPlayers = GetTvPlayers(vlcPath, vlcIsX86OnX64); + var movistarPlusIpTvProviderSettings = new IpTvProviderSettings(); - var config = AppUiConfiguration.CreateForUserConfig(user); + var config = AppConfig.CreateForUserConfig(user); config.RegisterConfiguration(new UiBroadcastListSettingsRegistration(), null, true); - config.RegisterConfiguration(new TvPlayersSettingsRegistration(), tvPlayers, false); + config.RegisterConfiguration(new TvPlayersSettingsRegistration(), tvPlayers); config.RegisterConfiguration(new NetworkSettingsRegistration(), null, true); - config.RegisterConfiguration(new IpTvProviderSettingsRegistration(), movistarPlusIpTvProviderSettings, false); + config.RegisterConfiguration(new IpTvProviderSettingsRegistration(), movistarPlusIpTvProviderSettings); + + message = CreateRegistryEntries(); + if (message != null) return false; config.Save(xmlConfigPath); - message = Properties.Texts.ConfigurationCreateOk; + message = Texts.ConfigurationCreateOk; return true; } catch (Exception ex) { - message = string.Format(Properties.Texts.ConfigurationCreateException, ex.ToString()); + message = string.Format(Texts.ConfigurationCreateException, ex); return false; } // try-catch } // Create - private static TvPlayersSettings GetTvPlayers(string vlcPath) + private static TvPlayersSettings GetTvPlayers(string vlcPath, bool isX86OnX64) { - List players; - TvPlayer player; - string path; + const string vlcGuid = "{C12055FC-315A-47C4-B9CC-48D2E6ECD8FA}"; + const string vlcX86Guid = "{364A5B10-6895-438F-8FBE-405E0D816721}"; + const string vlcSameGuid = "{4154BC96-5FE0-45C2-9895-083C4FB4C8CE}"; + const string vlcX86SameGuid = "{076D734D-D8F2-4CBB-8AAE-B26237D99BCD}"; + const string mpcGuid = "{8FFA2EE6-8823-40B1-B20F-F962389D4B07}"; + const string mpcX86Guid = "{289A17CA-2A6D-4F3C-96DA-9BC91DCB4489}"; - players = new List(3); - var programFilesFolder86 = Installation.GetProgramFilesAnyFolder(); + var players = new List(3); // VLC - player = new TvPlayer() + var player = new TvPlayer { - Name = "VLC", - Id = new Guid("{C12055FC-315A-47C4-B9CC-48D2E6ECD8FA}"), + Name = isX86OnX64? Texts.GetTvPlayersVlcX86 : Texts.GetTvPlayersVlc, + Id = new Guid(isX86OnX64? vlcX86Guid : vlcGuid), Path = vlcPath, - Arguments = new string[] + Arguments = new[] { "{param:Channel.Url}", ":meta-title={param:Channel.Name}", @@ -137,10 +152,10 @@ private static TvPlayersSettings GetTvPlayers(string vlcPath) // VLC (new window) player = new TvPlayer() { - Name = Properties.Texts.GetTvPlayersVlcSameWindow, - Id = new Guid("{4154BC96-5FE0-45C2-9895-083C4FB4C8CE}"), + Name = isX86OnX64 ? Texts.GetTvPlayersVlcSameWindowX86 : Texts.GetTvPlayersVlcSameWindow, + Id = new Guid(isX86OnX64? vlcX86SameGuid : vlcSameGuid), Path = vlcPath, - Arguments = new string[] + Arguments = new[] { "{param:Channel.Url}", ":meta-title={param:Channel.Name}", @@ -151,32 +166,60 @@ private static TvPlayersSettings GetTvPlayers(string vlcPath) players.Add(player); // locate K-Lite Codec Pack Media Player Classic - path = Path.Combine(programFilesFolder86, "K-Lite Codec Pack\\Media Player Classic\\mpc-hc.exe"); + Installation.GetProgramFilesFolder(out var programFilesFolder, out var programFilesFolder86); + + var path = Path.Combine(programFilesFolder, Resources.MpcDefaultLocation); if (File.Exists(path)) { - player = new TvPlayer() - { - Name = "K-Lite Media Player Classic", - Id = new Guid("{8FFA2EE6-8823-40B1-B20F-F962389D4B07}"), - Path = path, - Arguments = new string[] - { - "{param:Channel.Url}", - "/play", - } // Arguments - }; // TvPlayer + AddMpcPlayer(path, false, mpcGuid); + } // if - players.Add(player); + if (programFilesFolder86 != null) + { + path = Path.Combine(programFilesFolder86, Resources.MpcDefaultLocation); + if (File.Exists(path)) + { + AddMpcPlayer(path, true, mpcX86Guid); + } // if } // if var tvPlayers = new TvPlayersSettings() { DirectLaunch = false, - DefaultPlayerId = new Guid("{C12055FC-315A-47C4-B9CC-48D2E6ECD8FA}"), + DefaultPlayerId = new Guid(vlcGuid), Players = players.ToArray() }; return tvPlayers; + + void AddMpcPlayer(string playerPath, bool isX86OnX64Player, string guid) + { + player = new TvPlayer() + { + Name = isX86OnX64Player ? Texts.GetTvPlayersMpcX86 : Texts.GetTvPlayersMpc, + Id = new Guid(guid), + Path = playerPath, + Arguments = new[] + { + "{param:Channel.Url}", + "/play", + } // Arguments + }; // TvPlayer + + players.Add(player); + } // local AddMpcPlayer } // GetTvPlayers + + private static string CreateRegistryEntries() + { + using var keyCurrentUser = Registry.CurrentUser; + var fullKeyPath = AppConfig.RegistryKey_Root; + var rootKey = string.Format(fullKeyPath, Application.ProductVersion); + using var root = keyCurrentUser.OpenSubKey(rootKey, true); + if (root == null) return string.Format(AppConfig.RegistryMissingKey, rootKey); + + root.SetValue(AppConfig.RegistryValue_FirstTimeConfig, "1"); + return null; + } // CreateRegistryEntries } // class Configuration } // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.Designer.cs index be34b9b7..7b9892c4 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Tools.FirstTimeConfig { @@ -148,4 +158,4 @@ private void InitializeComponent() private System.Windows.Forms.Label labelSuccess; private System.Windows.Forms.PictureBox pictureBoxSuccess; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.cs b/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.cs index bb7bc4f1..ae554d25 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/FirewallForm.cs @@ -1,14 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.Tools.FirstTimeConfig.Properties; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.Tools.FirstTimeConfig @@ -18,7 +22,7 @@ public partial class FirewallForm : Form public FirewallForm() { InitializeComponent(); - this.Icon = Resources.FirewallIcon; + Icon = Resources.FirewallIcon; checkBoxFirewallDecoder.Enabled = !string.IsNullOrEmpty(Program.FirewallBinPath); checkBoxFirewallDecoder.Checked = checkBoxFirewallDecoder.Enabled; @@ -30,15 +34,14 @@ public FirewallForm() private void buttonFirewall_Click(object sender, EventArgs e) { string message; - - var ok = Installation.ConfigureFirewall( + _ = Installation.ConfigureFirewall( checkBoxFirewallDecoder.Checked ? Program.FirewallBinPath : null, checkBoxFirewallVlc.Checked ? Program.FirewallVlcPath : null, out message); if (message != null) { - MessageBox.Show(this, message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); + MessageBox.Show(this, message, Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // if diff --git a/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj b/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj index d18842bf..698eaddf 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj +++ b/1.5 'Kruger 60'/FirstTimeConfig/FirstTimeConfig.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.Tools.FirstTimeConfig FirstTimeConfig - v4.5.2 + v4.6.2 512 SAK SAK @@ -18,7 +18,7 @@ - x86 + AnyCPU true full false @@ -27,6 +27,7 @@ prompt 4 false + 8 AnyCPU @@ -37,6 +38,7 @@ prompt 4 false + 8 Resources\first-time-config.ico @@ -44,13 +46,16 @@ + + Properties\app.manifest + + + ..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + - + - - - @@ -73,7 +78,6 @@ FirewallForm.cs - @@ -81,6 +85,7 @@ True Texts.resx + Form @@ -138,13 +143,17 @@ WizardWelcomeDialog.cs - - Resources\GoogleTelemetry_en.rtf + + Resources\AppTelemetry_en.rtf - - Resources\GoogleTelemetry_es.rtf + + Resources\AppTelemetry_es.rtf + + + + SettingsSingleFileGenerator Settings.Designer.cs @@ -176,6 +185,7 @@ Resources\Status_Wait_16x16.png + @@ -189,34 +199,42 @@ - + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} - Core.IpTvProvider + IpTviewr.IpTvServices - + {e1748f45-dd50-4479-96f6-f7eba6f3e28b} IpTv.MovistarPlus - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common - - {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} - Services.Record.Serialization + + {8986CD52-0C65-42D6-9C47-20FF47CF87BB} + IpTviewr.Native - + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} UiServices.Common - + {a722de9d-ae51-479c-825f-a19f4c69bd75} UiServices.Config - + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} UiServices.Discovery + + {968C6EEB-1E79-446A-96AE-69CB225E1C37} + IpTViewr.Core + + + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4} + IpTviewr.Telemetry + diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Installation.cs b/1.5 'Kruger 60'/FirstTimeConfig/Installation.cs index a74da612..2c91a234 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Installation.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Installation.cs @@ -1,55 +1,187 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== -using Microsoft.Win32; -using IpTviewr.Common.Telemetry; -using IpTviewr.Tools.FirstTimeConfig.Properties; -using IpTviewr.UiServices.Configuration; using System; -using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; -using System.Reflection; using System.Text; using System.Windows.Forms; +using IpTviewr.Common.Configuration; +using IpTviewr.Common.Telemetry; +using IpTviewr.Native; +using IpTviewr.Tools.FirstTimeConfig.Properties; +using IpTviewr.UiServices.Configuration; +using JetBrains.Annotations; +using Microsoft.Win32; namespace IpTviewr.Tools.FirstTimeConfig { internal class Installation { - private static string RedistFolder; + private static string _redistFolder; - public static bool Is32BitWindows - { - get; - set; - } // Is32BitWindow + public static bool Is32BitWindows { get; set; } - public static AppUiConfiguration LoadRegistrySettings(out InitializationResult initializationResult) + public static AppUiConfigurationFolders LoadFolders(out InitializationResult initializationResult) { Is32BitWindows = WindowsBitness.Is32BitWindows(); - var result = AppUiConfiguration.LoadRegistryAppConfiguration(out initializationResult); + var folders = AppConfig.LoadFoldersConfiguration(out initializationResult); #if DEBUG - RedistFolder = Path.Combine(result.Folders.Base, "Bin\\Redist"); + _redistFolder = Path.Combine(folders.Base, "Bin\\Redist"); #else - RedistFolder = Path.Combine(result.Folders.Install, "Redist"); + _redistFolder = Path.Combine(folders.Install, "Redist"); #endif + return folders; + } // LoadFolders - return result; - } // LoadRegistrySettings + public static void GetProgramFilesFolder([NotNull] out string folder, [CanBeNull] out string altFolder) + { + folder = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); + altFolder = Is32BitWindows ? null : Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86); + } // GetProgramFilesAnyFolder - #region IsComponentInstalled + public static string GetTestMedia() + { + var step = 1; + while (true) + { + try + { + var folder = step switch + { + 1 => Environment.GetFolderPath(Environment.SpecialFolder.CommonVideos), + 2 => Environment.GetFolderPath(Environment.SpecialFolder.MyVideos), + 3 => Environment.GetFolderPath(Environment.SpecialFolder.CommonMusic), + 4 => Environment.GetFolderPath(Environment.SpecialFolder.MyMusic), + _ => null, + }; // switch + + switch (folder) + { + case "": + continue; + case null: + return null; + } // switch + + var files = Directory.GetFiles(folder); + var q = from file in files + let ext = Path.GetExtension(file).ToLowerInvariant() + where ext == ".wmv" || ext == ".mp4" || ext == ".mkv" || ext == ".avi" || + ext == ".wma" || ext == ".mp3" || ext == ".aac" || ext == ".wav" + select file; + var media = q.FirstOrDefault(); + if (media != null) return media; + } + catch + { + // ignore + } // try-catch + + step++; + } // while + } // GetTestMedia - public static bool IsNetInstalled(out string message) + public static void OpenUrl(Form parent, string url) { - RegistryKey key; - object value; - int intValue; + try + { + using var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = url, + UseShellExecute = true, + ErrorDialog = true, + ErrorDialogParentHandle = parent.Handle + } + }; + process.Start(); + } + catch (Exception ex) + { + MessageBox.Show(parent, + string.Format(Texts.OpenUrlError, url, ex), + parent.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); + } // try-catch + } // OpenUrl + + internal static string Launch(IWin32Window parent, string basePath, string programFile) + { + var filename = programFile == null ? basePath : Path.Combine(basePath, programFile); + + try + { + using var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = filename, + UseShellExecute = true, + ErrorDialog = true, + ErrorDialogParentHandle = parent?.Handle ?? IntPtr.Zero + } + }; + process.Start(); + return null; + } + catch (Exception ex) + { + return string.Format(Texts.LaunchProgramException, filename, ex); + } // try-catch + } // Launch + + private static bool IsAssemblyInstalled(string assemblyName, out Version assemblyVersion, out Version fileVersion) + { + assemblyVersion = new Version(); + fileVersion = new Version(); + AppDomain domain = null; + + try + { + string location; + + domain = AppDomain.CreateDomain("AssemblyLoadTest"); + try + { + var assembly = domain.Load(assemblyName); + assemblyVersion = assembly.GetName().Version; + location = assembly.Location; + } + catch + { + return false; + } // try-finally + + var fileVersionInfo = FileVersionInfo.GetVersionInfo(location); + fileVersion = new Version(fileVersionInfo.FileMajorPart, fileVersionInfo.FileMinorPart, fileVersionInfo.FileBuildPart, fileVersionInfo.FilePrivatePart); + + return true; + } + finally + { + if (domain != null) AppDomain.Unload(domain); + } // try-catch + } // IsAssemblyInstalled + + #region IsComponentInstalled - string[] keys = new string[] + public static bool IsNet35Installed(out string message) + { + var keys = new[] { "SOFTWARE", "Microsoft", @@ -60,53 +192,64 @@ public static bool IsNetInstalled(out string message) try { - key = Microsoft.Win32.Registry.LocalMachine; + var key = Registry.LocalMachine; foreach (var keyName in keys) { var newKey = key.OpenSubKey(keyName); key.Close(); key = newKey; - if (key == null) { message = Properties.Texts.IsNetInstalledNotInstalled; return false; } + if (key != null) continue; + + message = Texts.IsNetInstalledNotInstalled; + return false; } // foreach - value = key.GetValue("Install"); - if (value == null) { message = string.Format(Properties.Texts.IsNetInstalledKeyValueNotFound, "Install"); return false; } - intValue = 0; - if ((!int.TryParse(value.ToString(), out intValue)) || (intValue < 0)) + var value = key.GetValue("Install"); + if (value == null) + { + message = string.Format(Texts.IsNetInstalledKeyValueNotFound, "Install"); + return false; + } + + if (!int.TryParse(value.ToString(), out var intValue) || intValue < 0) { - message = string.Format(Properties.Texts.IsNetInstalledKeyValueLessThan, "Install", "1"); return false; + message = string.Format(Texts.IsNetInstalledKeyValueLessThan, "Install", "1"); + return false; } // if value = key.GetValue("SP"); - if (value == null) { message = string.Format(Properties.Texts.IsNetInstalledKeyValueNotFound, "SP"); return false; } - intValue = 0; - if ((!int.TryParse(value.ToString(), out intValue)) || (intValue < 0)) + if (value == null) + { + message = string.Format(Texts.IsNetInstalledKeyValueNotFound, "SP"); + return false; + } + + if (!int.TryParse(value.ToString(), out intValue) || intValue < 0) { - message = string.Format(Properties.Texts.IsNetInstalledKeyValueLessThan, "SP", "1"); return false; + message = string.Format(Texts.IsNetInstalledKeyValueLessThan, "SP", "1"); + return false; } // if - message = Properties.Texts.IsNetInstalledOk; + message = Texts.IsNetInstalledOk; return true; } catch (Exception ex) { - message = string.Format(Properties.Texts.IsNetInstalledException, ex.ToString()); + message = string.Format(Texts.IsNetInstalledException, ex); return false; } // try-catch - } // IsNetInstalled + } // IsNet35Installed public static bool IsEmbInstalled(out string message) { try { - Version assemblyVersion, fileVersion; - // Solve bug per work item 1757 - var found = IsAssemblyInstalled(Resources.EmbComponentAssemblyName, out assemblyVersion, out fileVersion); + var found = IsAssemblyInstalled(Resources.EmbComponentAssemblyName, out _, out var fileVersion); if (!found) { - message = Properties.Texts.IsEmbInstalledNotInstalled; + message = Texts.IsEmbInstalledNotInstalled; return false; } // if @@ -115,22 +258,20 @@ public static bool IsEmbInstalled(out string message) } catch (Exception ex) { - message = string.Format(Texts.IsEmbInstalledException, ex.ToString()); + message = string.Format(Texts.IsEmbInstalledException, ex); return false; } // try-catch - } // IsEmbNotInstalled + } // IsEmbNotInstalled public static bool IsSqlCeInstalled(out string message) { try { - Version assemblyVersion, fileVersion; - - var found = IsAssemblyInstalled(Resources.SqlCeComponentAssemblyName, out assemblyVersion, out fileVersion); + var found = IsAssemblyInstalled(Resources.SqlCeComponentAssemblyName, out _, out var fileVersion); if (!found) { - message = Properties.Texts.IsSqlCeInstalledNotInstalled; + message = Texts.IsSqlCeInstalledNotInstalled; return false; } // if @@ -139,24 +280,53 @@ public static bool IsSqlCeInstalled(out string message) } catch (Exception ex) { - message = string.Format(Texts.IsSqlCeInstalledException, ex.ToString()); + message = string.Format(Texts.IsSqlCeInstalledException, ex); return false; } // try-catch - } // IsSqlCeInstalled + } // IsSqlCeInstalled - public static bool IsVlcInstalled(out string message, ref string path) + public static bool IsVlcInstalled(out string message, ref string path, ref bool isX86OnX64) { try { + bool exists; + // locate VLC at it's default location + GetProgramFilesFolder(out var programFiles, out var programFiles86); + if (string.IsNullOrEmpty(path)) { - var programFiles = GetProgramFilesAnyFolder(); path = Path.Combine(programFiles, Resources.VlcDefaultLocation); - } // if + exists = File.Exists(path); + isX86OnX64 = false; + + if (!exists && (programFiles86 != null)) + { + // try x86 version + path = Path.Combine(programFiles86, Resources.VlcDefaultLocation); + exists = File.Exists(path); + + if (exists) + { + isX86OnX64 = true; + } + else + { + // revert path to Program Files + path = Path.Combine(programFiles, Resources.VlcDefaultLocation); + } // if-else + } // if + } + else + { + exists = File.Exists(path); + if (exists) + { + isX86OnX64 = (programFiles86 != null) && (path.StartsWith(programFiles86, StringComparison.CurrentCultureIgnoreCase)); + } // if + } // if-else - // file exists? - if (!File.Exists(path)) + if (!exists) { message = string.Format(Texts.IsVlcInstalledNotInstalled, path); return false; @@ -195,7 +365,7 @@ public static bool IsVlcInstalled(out string message, ref string path) } catch (Exception ex) { - message = string.Format(Texts.IsVlcInstalledException, ex.ToString()); + message = string.Format(Texts.IsVlcInstalledException, ex); return false; } // try-catch } // IsVlcInstalled @@ -204,27 +374,27 @@ public static bool TestVlcInstallation(out string message, string path, string t { try { - using (var process = new Process()) + using var process = new Process { - process.StartInfo = new ProcessStartInfo() + StartInfo = new ProcessStartInfo { FileName = path, - Arguments = (testVideoPath != null) ? string.Format("\"{0}\"", testVideoPath) : null, - UseShellExecute = false, - }; - process.Start(); + Arguments = testVideoPath != null ? $"\"{testVideoPath}\"" : "", + UseShellExecute = false + } + }; + process.Start(); - // TODO: WaitForExit in a non-blocking manner - // process.WaitForExit(); - } // using process + // TODO: WaitForExit in a non-blocking manner + // process.WaitForExit(); } catch (Exception ex) { - message = string.Format(Properties.Texts.TestVlcInstallationException, ex.ToString()); + message = string.Format(Texts.TestVlcInstallationException, ex); return false; } // try-catch - message = Properties.Texts.TestVlcInstallationOk; + message = Texts.TestVlcInstallationOk; return true; } // TestVlcInstallation @@ -232,97 +402,122 @@ public static bool TestVlcInstallation(out string message, string path, string t #region Redist setup - public static bool CheckRedistFile(string file64bit, string file32bit) + public static bool CheckRedistFile(string file64Bit, string file32Bit) { - var file = GetRedistFileFullPath(file64bit, file32bit); + var file = GetRedistFileFullPath(file64Bit, file32Bit); return File.Exists(file); } // CheckRedistFile - public static void PromptDownloadFromVendor(Form owner, string vendor, string file64bit, string file32bit) + public static void PromptDownloadFromVendor(Form owner, string vendor, string file64Bit, string file32Bit) { - string text; - - if (Is32BitWindows) - { - text = string.Format(Properties.Texts.DownloadFromVendor32bit, vendor, file32bit); - } - else - { - text = string.Format(Properties.Texts.DownloadFromVendor64bit, vendor, file64bit); - } // if-else + var text = string.Format(Is32BitWindows ? Texts.DownloadFromVendor32bit : Texts.DownloadFromVendor64bit, + vendor, Is32BitWindows ? file32Bit : file64Bit); MessageBox.Show(owner, text, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } // PromptDownloadFromVendor - public static bool RedistSetup(Form owner, string file64bit, string file32bit, string productName, Label labelProduct, Action setupExitCallback) + public static bool RedistSetup([NotNull] Form owner, string file64Bit, string file32Bit, string productName, Label labelProduct, Action setupExitCallback) { - Exception exception; - var filename = GetRedistFileFullPath(file64bit, file32bit); + var filename = GetRedistFileFullPath(file64Bit, file32Bit); - exception = null; try { - var process = new Process(); - process.StartInfo = new ProcessStartInfo() - { - FileName = filename, - UseShellExecute = true, - ErrorDialog = true, - ErrorDialogParentHandle = (owner != null) ? owner.Handle : IntPtr.Zero, - }; - process.EnableRaisingEvents = true; - process.Exited += (o, e) => - { - var exitCode = process.ExitCode; - process.Dispose(); - - owner.BeginInvoke(new RedistSetup_ProcessExited_Delegate(RedistSetup_ProcessExited), exitCode, owner, productName, labelProduct, setupExitCallback); - }; - process.Start(); - - labelProduct.Text = string.Format(Texts.RedistSetupInstalling, productName); + LaunchSetup(owner, filename, productName, labelProduct, RedistSetup_ProcessExited, setupExitCallback); return true; } - catch (Win32Exception ex) + catch (Win32Exception ex) when (ex.NativeErrorCode == 1223) // Operation cancelled by user { - if (ex.NativeErrorCode != 1223) // Operation cancelled by user - { - exception = ex; - } // if + // do nothing } catch (Exception ex) { - exception = ex; + var message = string.Format(Texts.LaunchSetupException, filename, productName, ex); + MessageBox.Show(owner, message, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); } // try-catch - if (exception != null) + return false; + } // RedistSetup + + public static bool Windows10LoadNetFx35([NotNull] Form owner, string productName, Label labelProduct, Action setupExitCallback) + { + var filename = Path.Combine(_redistFolder, "LoadNetFx35.exe"); + + var msg = string.Format(Texts.NetFxRequired, productName); + MessageBox.Show(owner, msg, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); + + try + { + LaunchSetup(owner, filename, productName, labelProduct, Windows10LoadNetFx35_ProcessExited, setupExitCallback); + + return true; + } + catch (Exception ex) { - var message = string.Format(Properties.Texts.LaunchSetupException, filename, labelProduct.Text, exception.ToString()); + var message = string.Format(Texts.LaunchSetupException, filename, productName, ex); MessageBox.Show(owner, message, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); - } // if - return false; - } // RedistSetup + return false; + } // try-catch + } // Windows10LoadNetFx35 + + private static void LaunchSetup([NotNull] Form owner, string filename, string productName, Label labelProduct, SetupProcessExitedDelegate processExitedDelegate, + Action setupExitCallback) + { + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = filename, + UseShellExecute = true, + ErrorDialog = true, + ErrorDialogParentHandle = owner.Handle + }, + EnableRaisingEvents = true + }; + process.Exited += (o, e) => + { + var exitCode = process.ExitCode; + process.Dispose(); + + owner?.BeginInvoke(processExitedDelegate, exitCode, owner, productName, labelProduct, setupExitCallback); + }; + process.Start(); + + labelProduct.Text = string.Format(Texts.RedistSetupInstalling, productName); + } // LaunchSetup - private delegate void RedistSetup_ProcessExited_Delegate(int exitCode, Form owner, string productName, Label labelProduct, Action setupExitCallback); + private delegate void SetupProcessExitedDelegate(int exitCode, Form owner, string productName, Label labelProduct, Action setupExitCallback); - static void RedistSetup_ProcessExited(int exitCode, Form owner, string productName, Label labelProduct, Action setupExitCallback) + private static void RedistSetup_ProcessExited(int exitCode, Form owner, string productName, Label labelProduct, Action setupExitCallback) { - var format = (exitCode == 0) ? Texts.LaunchSetupSuccess : Texts.LaunchSetupError; - var message = string.Format(format, productName, exitCode); - MessageBox.Show(owner, message, owner.Text, MessageBoxButtons.OK, exitCode == 0 ? MessageBoxIcon.Information : MessageBoxIcon.Warning); + if (exitCode != 0) + { + var message = string.Format(Texts.LaunchSetupError, productName, exitCode); + MessageBox.Show(owner, message, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); + } // if labelProduct.Text = productName; - - setupExitCallback(exitCode == 0); + setupExitCallback(exitCode); } // RedistSetup_ProcessExited - private static string GetRedistFileFullPath(string file64bit, string file32bit) + private static void Windows10LoadNetFx35_ProcessExited(int exitCode, Form owner, string productName, Label labelProduct, Action setupExitCallback) + { + if (exitCode != -2146232576) // 0x80131700 = .Net FX not installed + { + var message = string.Format(Texts.LaunchSetupError, productName, exitCode); + MessageBox.Show(owner, message, owner.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); + } // if + + labelProduct.Text = productName; + setupExitCallback(exitCode); + } // Windows10LoadNetFx35_ProcessExited + + private static string GetRedistFileFullPath(string file64Bit, string file32Bit) { - var file = Is32BitWindows ? file32bit : file64bit; - file.Replace('\\', Path.DirectorySeparatorChar); - file = Path.Combine(RedistFolder, file); + var file = Is32BitWindows ? file32Bit : file64Bit; + file = file.Replace('\\', Path.DirectorySeparatorChar); + file = Path.Combine(_redistFolder, file); return file; } // GetRedistFileFullPath @@ -337,14 +532,14 @@ public static InitializationResult RunSelfForFirewall(string binPath, string vlc try { - BasicGoogleTelemetry.SendScreenHit("FirewallForm"); + AppTelemetry.ScreenEvent(AppTelemetry.LoadEvent, "FirewallForm"); var arguments = new StringBuilder(); arguments.AppendFormat("/ForceUiCulture:{0}", CultureInfo.CurrentUICulture.Name); arguments.Append(" /firewall"); if (!string.IsNullOrEmpty(binPath)) { - arguments.Append (" \""); + arguments.Append(" \""); arguments.AppendFormat("/decoder:{0}", binPath); // this trick is to avoid a nasty 'feature' of .NET (or even Windows) when parsing arguments // The bin path ends with '\' and if followed by '"', then it will be interpreted as '"' @@ -353,6 +548,7 @@ public static InitializationResult RunSelfForFirewall(string binPath, string vlc arguments.Append("*.exe"); arguments.Append("\""); } // if + if (!string.IsNullOrEmpty(vlcPath)) { arguments.Append(" \""); @@ -362,63 +558,46 @@ public static InitializationResult RunSelfForFirewall(string binPath, string vlc using (var process = new Process()) { - process.StartInfo = new ProcessStartInfo() + process.StartInfo = new ProcessStartInfo { FileName = Application.ExecutablePath, Arguments = arguments.ToString(), UseShellExecute = true, - Verb = "runas", + Verb = "runas" }; process.Start(); process.WaitForExit(); exitCode = process.ExitCode; } // using process } - catch (Win32Exception win32) + catch (Win32Exception win32) when (win32.NativeErrorCode == 1223) // operation cancelled by user { - if (win32.NativeErrorCode == 1223) // operation cancelled by user - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: UACancel"); - return new InitializationResult(Texts.FirewallUserCancel); - } - else - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: Exception"); - return new InitializationResult(win32); - } // if-else + AppTelemetry.ScreenEvent("UACancel", "FirewallForm"); + return new InitializationResult(Texts.FirewallUserCancel); } catch (Exception ex) { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: Exception"); - BasicGoogleTelemetry.SendExtendedExceptionHit(ex, true, "FirewallForm: Execute", "FirewallForm"); - return new InitializationResult(ex); + AppTelemetry.ScreenEvent("Exception", "FirewallForm"); + AppTelemetry.ScreenException(ex, "FirewallForm", "process.Start()"); + return new InitializationResult(ex, "Unable to execute Firewall configuration program."); } // try-catch if (exitCode == 0) { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: Ok"); + AppTelemetry.ScreenEvent("Ok", "FirewallForm"); return new InitializationResult(Texts.FirewallOk) { IsOk = true }; } - else if (exitCode > 0) - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: Cancel"); - return new InitializationResult(Texts.FirewallUserCancel); - } - else - { - BasicGoogleTelemetry.SendScreenHit("FirewallForm: " + exitCode.ToString()); - return new InitializationResult((string)null); - } // if-else + + AppTelemetry.ScreenEvent($"Cancel ({exitCode})", "FirewallForm"); + return new InitializationResult(Texts.FirewallUserCancel); } // RunSelfForFirewall public static bool ConfigureFirewall(string binPath, string vlcPath, out string message) { - WindowsFirewall firewall; - - firewall = null; + WindowsFirewall firewall = null; try { firewall = new WindowsFirewall(); @@ -426,13 +605,13 @@ public static bool ConfigureFirewall(string binPath, string vlcPath, out string if (binPath != null) { binPath = Path.GetDirectoryName(binPath); - var programs = Resources.FirewallProgramList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + var programs = Resources.FirewallProgramList.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var program in programs) { var programPath = Path.Combine(binPath, program); var fileVersionInfo = FileVersionInfo.GetVersionInfo(programPath); var name = string.Format(Resources.FirewallRulePrefix, fileVersionInfo.OriginalFilename); - var description = string.Format(Properties.Texts.FirewallDvbIpTvRuleDescription, + var description = string.Format(Texts.FirewallDvbIpTvRuleDescription, fileVersionInfo.OriginalFilename, "{0}", SolutionVersion.AssemblyProduct); // for reasons unknown the path can not contain the '~' symbol!! @@ -442,10 +621,7 @@ public static bool ConfigureFirewall(string binPath, string vlcPath, out string } // foreach program } // if - if (vlcPath != null) - { - firewall.AllowProgram(vlcPath, string.Format(Resources.FirewallRulePrefix, "VLC media player"), Properties.Texts.FirewallVlcRuleDescription); - } // if + if (vlcPath != null) firewall.AllowProgram(vlcPath, string.Format(Resources.FirewallRulePrefix, "VLC media player"), Texts.FirewallVlcRuleDescription); } catch (Exception ex) { @@ -454,162 +630,13 @@ public static bool ConfigureFirewall(string binPath, string vlcPath, out string } finally { - if (firewall != null) firewall.Dispose(); - } // try-catch-finally + firewall?.Dispose(); + } // try-catch-finally message = null; return true; } // ConfigureFirewall #endregion - - public static string GetProgramFilesAnyFolder() - { - try - { - return Installation.GetProgramFilesx86Folder(); - } - catch - { - return Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); - } // try-catch - } // GetProgramFilesAnyFolder - - public static string GetProgramFilesx86Folder() - { - var folder = KnownFolders.GetKnownFolder(KnownFolders.System.ProgramFiles_x86, KnownFolders.Flags.None); - return System.Environment.ExpandEnvironmentVariables(folder); - } // GetProgramFilesx86Folder - - public static string GetCurrentUserVideosFolder() - { - var folder = KnownFolders.GetKnownFolder(KnownFolders.CurrentUser.Videos, KnownFolders.Flags.None); - return System.Environment.ExpandEnvironmentVariables(folder); - } // GetCurrentUserVideosFolder - - public static string GetTestMedia() - { - string folder; - int step; - - step = 1; - folder = null; - while (true) - { - try - { - switch (step) - { - case 1: folder = KnownFolders.GetKnownFolder(KnownFolders.Common.SampleVideos, KnownFolders.Flags.None); break; - case 2: folder = KnownFolders.GetKnownFolder(KnownFolders.CurrentUser.Videos, KnownFolders.Flags.None); break; - case 3: folder = KnownFolders.GetKnownFolder(KnownFolders.Common.SampleMusic, KnownFolders.Flags.None); break; - case 4: folder = KnownFolders.GetKnownFolder(KnownFolders.CurrentUser.Music, KnownFolders.Flags.None); break; - default: - return null; - } // switch - - var files = Directory.GetFiles(folder); - var q = from file in files - let ext = Path.GetExtension(file).ToLowerInvariant() - where ((ext == ".wmv") || (ext == ".mp4") || (ext == ".mkv") || (ext == ".avi") || - (ext == ".wma") || (ext == ".mp3") || (ext == ".aac") || (ext == ".wav")) - select file; - var media = q.FirstOrDefault(); - if (media != null) return media; - } - catch - { - // ignore - } // try-catch - step++; - } // while - } // GetTestMedia - - public static void OpenUrl(Form parent, string url) - { - try - { - using (var process = new Process()) - { - process.StartInfo = new ProcessStartInfo() - { - FileName = url, - UseShellExecute = true, - ErrorDialog = true, - ErrorDialogParentHandle = parent.Handle, - }; - process.Start(); - } // using process - } - catch (Exception ex) - { - MessageBox.Show(parent, - string.Format(Properties.Texts.OpenUrlError, url, ex.ToString()), - parent.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); - } // try-catch - } // OpenUrl - - internal static string Launch(IWin32Window parent, string basePath, string programFile) - { - var filename = (programFile == null) ? basePath : Path.Combine(basePath, programFile); - - try - { - using (var process = new Process()) - { - process.StartInfo = new ProcessStartInfo() - { - FileName = filename, - UseShellExecute = true, - ErrorDialog = true, - ErrorDialogParentHandle = (parent != null)? parent.Handle : IntPtr.Zero, - }; - process.Start(); - return null; - } // using process - } - catch (Exception ex) - { - return string.Format(Properties.Texts.LaunchProgramException, filename, ex.ToString()); - } // try-catch - } // Launch - - private static bool IsAssemblyInstalled(string assemblyName, out Version assemblyVersion, out Version fileVersion) - { - AppDomain domain; - string location; - - assemblyVersion = new Version(); - fileVersion = new Version(); - domain = null; - location = null; - - try - { - domain = AppDomain.CreateDomain("AssemblyLoadTest"); - try - { - var assembly = domain.Load(assemblyName); - assemblyVersion = assembly.GetName().Version; - location = assembly.Location; - } - catch - { - return false; - } // try-finally - - var fileVersionInfo = FileVersionInfo.GetVersionInfo(location); - fileVersion = new Version(fileVersionInfo.FileMajorPart, fileVersionInfo.FileMinorPart, fileVersionInfo.FileBuildPart, fileVersionInfo.FilePrivatePart); - - return true; - } - finally - { - if (domain != null) - { - AppDomain.Unload(domain); - } // if - } // try-catch - } // IsAssemblyInstalled } // class Installation } // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/KnownFolders.cs b/1.5 'Kruger 60'/FirstTimeConfig/KnownFolders.cs deleted file mode 100644 index 1f613016..00000000 --- a/1.5 'Kruger 60'/FirstTimeConfig/KnownFolders.cs +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Security.Permissions; -using System.Text; - -namespace IpTviewr.Tools.FirstTimeConfig -{ - public class KnownFolders - { - internal class UnsafeNativeMethods - { - [DllImport("shell32.dll")] - public static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, - uint dwFlags, IntPtr hToken, out IntPtr pszPath); - } // class UnsafeNativeMethods - - public class CurrentUser - { - public const string Music = "4BD8D571-6D19-48D3-BE97-422220080E43"; - public const string Videos = "18989B1D-99B5-455B-841C-AB7C74E4DDFC"; - // work in progress - } // class CurrentUser - - public class Common - { - public const string SampleMusic = "B250C668-F57D-4EE1-A63C-290EE7D1AA1F"; - public const string SampleVideos = "859EAD94-2E85-48AD-A71A-0969CB56A6CD"; - // work in progress - } // class Common - - public class System - { - public const string ProgramFiles = "905e63b6-c1bf-494e-b29c-65b732d3d21a"; - public const string ProgramFiles_x86 = "7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E"; - /// This value is not supported on 32-bit operating systems. It also is not supported for 32-bit applications running on 64-bit operating systems. Attempting to use ProgramFiles_x64 in either situation results in an error. - public const string ProgramFiles_x64 = "6D809377-6AF0-444b-8957-A3773F02200E"; - // work in progress - } // class System - - public class Virtual - { - // work in progress - } // class Virtual - - [Flags] - public enum Flags: uint - { - /// No special retrieval options. - None = 0, - - /// Build a simple IDList (PIDL) This value can be used when you want to retrieve the file system path but do not specify this value if you are retrieving the localized display name of the folder because it might not resolve correctly. - SimpleIdList = 0x00000100, - - /// Gets the folder's default path independent of the current location of its parent. 'DefaultPath' flag must also be set. - NotParentRelative = 0x00000200, - - /// Gets the default path for a known folder. If this flag is not set, the function retrieves the current—and possibly redirected—path of the folder. The execution of this flag includes a verification of the folder's existence unless 'DoNotVerify' flag is set. - DefaultPath = 0x00000400, - - /// Initializes the folder using its Desktop.ini settings. If the folder cannot be initialized, the function returns a failure code and no path is returned. This flag should always be combined with 'Create' flag. - /// If the folder is located on a network, the function might take a longer time to execute. - Init = 0x00000800, - - /// Gets the true system path for the folder, free of any aliased placeholders such as %USERPROFILE%, returned by SHGetKnownFolderIDList and IKnownFolder::GetIDList. This flag has no effect on paths returned by SHGetKnownFolderPath and IKnownFolder::GetPath. By default, known folder retrieval functions and methods return the aliased path if an alias exists. - NoAlias = 0x00001000, - - /// Stores the full path in the registry without using environment strings. If this flag is not set, portions of the path may be represented by environment strings such as %USERPROFILE%. This flag can only be used with SHSetKnownFolderPath and IKnownFolder::SetPath. - DoNotUnexpand = 0x00002000, - - /// Do not verify the folder's existence before attempting to retrieve the path or IDList. - DoNotVerify = 0x00004000, - - /// Forces the creation of the specified folder if that folder does not already exist. The security provisions predefined for that folder are applied. If the folder does not exist and cannot be created, the function returns a failure code and no path is returned. - /// This value can be used only with the following functions and methods: SHGetKnownFolderPath, SHGetKnownFolderIDList, IKnownFolder::GetIDList, IKnownFolder::GetPath and IKnownFolder::GetShellItem - Create = 0x00008000, - - /// When running inside an app container, or when providing an app container token, this flag prevents redirection to app container folders. Instead, it retrieves the path that would be returned where it not running inside an app container. (Introduced in Windows 7.) - NoAppContainerRedirection = 0x00010000, - - /// Return only aliased PIDLs. Do not use the file system path.(Introduced in Windows 7.) - AliasOnly = 0x80000000 - } // Flags - - [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] - public static string GetKnownFolder(string knownFolderGuid, Flags flags) - { - IntPtr pszPath; - - var guid = new Guid(knownFolderGuid); - var hResult = UnsafeNativeMethods.SHGetKnownFolderPath(guid, (uint)flags, IntPtr.Zero, out pszPath); - if (hResult != 0) - { - throw Marshal.GetExceptionForHR(hResult); - } // if - - var path = Marshal.PtrToStringUni(pszPath); - Marshal.FreeCoTaskMem(pszPath); - pszPath = IntPtr.Zero; - - return path; - } // GetKnownFolder - } // class KnownFolders -} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/LICENSE.ES.MD b/1.5 'Kruger 60'/FirstTimeConfig/LICENSE.ES.MD new file mode 100644 index 00000000..0f2b1ff7 --- /dev/null +++ b/1.5 'Kruger 60'/FirstTimeConfig/LICENSE.ES.MD @@ -0,0 +1,705 @@ +# Programa 'FirstTimeConfig' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este PROGRAMA (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios, incluyendo, en su caso, al Grupo Teléfonica. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Apache License Version 2.0, January 2004] + * [The MIT License (MIT)] + * [Microsoft .NET Library License Terms] + * [Microsoft® Exception Message Box License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. FirstTimeConfig +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.Core +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. IpTViewr.MovistarPlus +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. IpTviewr.Telemetry +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. UiServices.DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Apache License Version 2.0, January 2004 + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + + +> **'Apache License Version 2.0, January 2004'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. SQLitePCLRaw.bundle_green +_Paquete 'nuget' por Eric Sink_ + +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + +#### 2. SQLitePCLRaw.core +_Paquete 'nuget' por Eric Sink, et al_ + +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + +#### 3. SQLitePCLRaw.lib.e_sqlite3.linux +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 4. SQLitePCLRaw.lib.e_sqlite3.osx +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 6. SQLitePCLRaw.provider.e_sqlite3.net45 +_Paquete 'nuget' por Eric Sink et al_ + +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Microsoft.AppCenter.Analytics +_Paquete 'nuget' por Microsoft_ + +This package contains functionalities to collect session, device properties, events etc… for your application. + + +#### 3. Microsoft.AppCenter.Crashes +_Paquete 'nuget' por Microsoft_ + +This package contains functionalities to collect crash reports for your application. + + +#### 4. Microsoft.AppCenter +_Paquete 'nuget' por Microsoft_ + +This package contains the basic functionalities that all App Center services use to communicate with the backend. + + +#### 5. Microsoft.NETCore.Platforms +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + +#### 6. NETStandard.Library +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +A set of standard .NET APIs that are prescribed to be used and supported together. + + +#### 7. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 8. sqlite-net-pcl +_Paquete 'nuget' por Frank A. Krueger_ + +**Copyright (c) Krueger Systems, Inc.** + +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + +#### 9. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft .NET Library License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at [https://go.microsoft.com/fwlink/?LinkID=824704](https://go.microsoft.com/fwlink/?LinkID=824704). You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at [https://docs.microsoft.com/en-us/legal/gdpr](https://docs.microsoft.com/en-us/legal/gdpr). + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft .NET Library License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft.Win32.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for Win32-based libraries. + + +#### 2. System.AppContext +_Paquete 'nuget' por Microsoft_ + +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + +#### 3. System.Collections.Concurrent +_Paquete 'nuget' por Microsoft_ + +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + +#### 4. System.Collections +_Paquete 'nuget' por Microsoft_ + +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + +#### 5. System.Console +_Paquete 'nuget' por Microsoft_ + +Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + +#### 6. System.Diagnostics.Debug +_Paquete 'nuget' por Microsoft_ + +Provides classes and attributes that allows basic interaction with a debugger. + + +#### 7. System.Diagnostics.DiagnosticSource +_Paquete 'nuget' por Microsoft_ + +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + +#### 8. System.Diagnostics.Tools +_Paquete 'nuget' por Microsoft_ + +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + +#### 9. System.Diagnostics.Tracing +_Paquete 'nuget' por Microsoft_ + +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + +#### 10. System.Globalization.Calendars +_Paquete 'nuget' por Microsoft_ + +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + +#### 11. System.Globalization +_Paquete 'nuget' por Microsoft_ + +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + +#### 12. System.IO.Compression.ZipFile +_Paquete 'nuget' por Microsoft_ + +Provides classes that support the compression and decompression of streams using file system paths. + + +#### 13. System.IO.Compression +_Paquete 'nuget' por Microsoft_ + +Provides classes that support the compression and decompression of streams. + + +#### 14. System.IO.FileSystem.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common enumerations and exceptions for path-based I/O libraries. + + +#### 15. System.IO.FileSystem +_Paquete 'nuget' por Microsoft_ + +Provides types that allow reading and writing to files and types that provide basic file and directory support. + + +#### 16. System.IO +_Paquete 'nuget' por Microsoft_ + +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + +#### 17. System.Linq.Expressions +_Paquete 'nuget' por Microsoft_ + +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + +#### 18. System.Linq +_Paquete 'nuget' por Microsoft_ + +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + +#### 19. System.Net.Http +_Paquete 'nuget' por Microsoft_ + +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + +#### 20. System.Net.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + +#### 21. System.Net.Sockets +_Paquete 'nuget' por Microsoft_ + +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + +#### 22. System.ObjectModel +_Paquete 'nuget' por Microsoft_ + +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + +#### 23. System.Reflection.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides custom attribute extension methods for System.Reflection types. + + +#### 24. System.Reflection.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common enumerations for reflection-based libraries. + + +#### 25. System.Reflection +_Paquete 'nuget' por Microsoft_ + +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + +#### 26. System.Resources.ResourceManager +_Paquete 'nuget' por Microsoft_ + +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + +#### 27. System.Runtime.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + +#### 28. System.Runtime.Handles +_Paquete 'nuget' por Microsoft_ + +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + +#### 29. System.Runtime.InteropServices.RuntimeInformation +_Paquete 'nuget' por Microsoft_ + +Provides APIs to query about runtime and OS information. + + +#### 30. System.Runtime.InteropServices +_Paquete 'nuget' por Microsoft_ + +Provides types that support COM interop and platform invoke services. + + +#### 31. System.Runtime.Numerics +_Paquete 'nuget' por Microsoft_ + +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + +#### 32. System.Runtime +_Paquete 'nuget' por Microsoft_ + +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + +#### 33. System.Security.Cryptography.Algorithms +_Paquete 'nuget' por Microsoft_ + +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + +#### 34. System.Security.Cryptography.Encoding +_Paquete 'nuget' por Microsoft_ + +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + +#### 35. System.Security.Cryptography.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for the cryptographic libraries. + + +#### 36. System.Security.Cryptography.X509Certificates +_Paquete 'nuget' por Microsoft_ + +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + +#### 37. System.Text.Encoding.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + +#### 38. System.Text.Encoding +_Paquete 'nuget' por Microsoft_ + +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + +#### 39. System.Text.RegularExpressions +_Paquete 'nuget' por Microsoft_ + +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + +#### 40. System.Threading.Tasks +_Paquete 'nuget' por Microsoft_ + +Provides types that simplify the work of writing concurrent and asynchronous code. + + +#### 41. System.Threading.Timer +_Paquete 'nuget' por Microsoft_ + +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + +#### 42. System.Threading +_Paquete 'nuget' por Microsoft_ + +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + +#### 43. System.Xml.ReaderWriter +_Paquete 'nuget' por Microsoft_ + +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + +#### 44. System.Xml.XDocument +_Paquete 'nuget' por Microsoft_ + +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + diff --git a/1.5 'Kruger 60'/FirstTimeConfig/LICENSE.MD b/1.5 'Kruger 60'/FirstTimeConfig/LICENSE.MD new file mode 100644 index 00000000..2030781b --- /dev/null +++ b/1.5 'Kruger 60'/FirstTimeConfig/LICENSE.MD @@ -0,0 +1,677 @@ +# Program 'FirstTimeConfig' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Apache License Version 2.0, January 2004] + * [The MIT License (MIT)] + * [Microsoft .NET Library License Terms] + * [Microsoft® Exception Message Box License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. FirstTimeConfig +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.Core +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. IpTViewr.MovistarPlus +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. IpTviewr.Telemetry +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. UiServices.DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Apache License Version 2.0, January 2004 + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + + +> **'Apache License Version 2.0, January 2004'** applies to the following **third-party components:** + +#### 1. SQLitePCLRaw.bundle_green +_'nuget' package by Eric Sink_ + +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + +#### 2. SQLitePCLRaw.core +_'nuget' package by Eric Sink, et al_ + +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + +#### 3. SQLitePCLRaw.lib.e_sqlite3.linux +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 4. SQLitePCLRaw.lib.e_sqlite3.osx +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 6. SQLitePCLRaw.provider.e_sqlite3.net45 +_'nuget' package by Eric Sink et al_ + +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Microsoft.AppCenter.Analytics +_'nuget' package by Microsoft_ + +This package contains functionalities to collect session, device properties, events etc… for your application. + + +#### 3. Microsoft.AppCenter.Crashes +_'nuget' package by Microsoft_ + +This package contains functionalities to collect crash reports for your application. + + +#### 4. Microsoft.AppCenter +_'nuget' package by Microsoft_ + +This package contains the basic functionalities that all App Center services use to communicate with the backend. + + +#### 5. Microsoft.NETCore.Platforms +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + +#### 6. NETStandard.Library +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +A set of standard .NET APIs that are prescribed to be used and supported together. + + +#### 7. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 8. sqlite-net-pcl +_'nuget' package by Frank A. Krueger_ + +**Copyright (c) Krueger Systems, Inc.** + +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + +#### 9. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft .NET Library License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at [https://go.microsoft.com/fwlink/?LinkID=824704](https://go.microsoft.com/fwlink/?LinkID=824704). You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at [https://docs.microsoft.com/en-us/legal/gdpr](https://docs.microsoft.com/en-us/legal/gdpr). + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft .NET Library License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft.Win32.Primitives +_'nuget' package by Microsoft_ + +Provides common types for Win32-based libraries. + + +#### 2. System.AppContext +_'nuget' package by Microsoft_ + +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + +#### 3. System.Collections.Concurrent +_'nuget' package by Microsoft_ + +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + +#### 4. System.Collections +_'nuget' package by Microsoft_ + +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + +#### 5. System.Console +_'nuget' package by Microsoft_ + +Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + +#### 6. System.Diagnostics.Debug +_'nuget' package by Microsoft_ + +Provides classes and attributes that allows basic interaction with a debugger. + + +#### 7. System.Diagnostics.DiagnosticSource +_'nuget' package by Microsoft_ + +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + +#### 8. System.Diagnostics.Tools +_'nuget' package by Microsoft_ + +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + +#### 9. System.Diagnostics.Tracing +_'nuget' package by Microsoft_ + +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + +#### 10. System.Globalization.Calendars +_'nuget' package by Microsoft_ + +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + +#### 11. System.Globalization +_'nuget' package by Microsoft_ + +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + +#### 12. System.IO.Compression.ZipFile +_'nuget' package by Microsoft_ + +Provides classes that support the compression and decompression of streams using file system paths. + + +#### 13. System.IO.Compression +_'nuget' package by Microsoft_ + +Provides classes that support the compression and decompression of streams. + + +#### 14. System.IO.FileSystem.Primitives +_'nuget' package by Microsoft_ + +Provides common enumerations and exceptions for path-based I/O libraries. + + +#### 15. System.IO.FileSystem +_'nuget' package by Microsoft_ + +Provides types that allow reading and writing to files and types that provide basic file and directory support. + + +#### 16. System.IO +_'nuget' package by Microsoft_ + +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + +#### 17. System.Linq.Expressions +_'nuget' package by Microsoft_ + +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + +#### 18. System.Linq +_'nuget' package by Microsoft_ + +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + +#### 19. System.Net.Http +_'nuget' package by Microsoft_ + +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + +#### 20. System.Net.Primitives +_'nuget' package by Microsoft_ + +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + +#### 21. System.Net.Sockets +_'nuget' package by Microsoft_ + +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + +#### 22. System.ObjectModel +_'nuget' package by Microsoft_ + +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + +#### 23. System.Reflection.Extensions +_'nuget' package by Microsoft_ + +Provides custom attribute extension methods for System.Reflection types. + + +#### 24. System.Reflection.Primitives +_'nuget' package by Microsoft_ + +Provides common enumerations for reflection-based libraries. + + +#### 25. System.Reflection +_'nuget' package by Microsoft_ + +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + +#### 26. System.Resources.ResourceManager +_'nuget' package by Microsoft_ + +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + +#### 27. System.Runtime.Extensions +_'nuget' package by Microsoft_ + +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + +#### 28. System.Runtime.Handles +_'nuget' package by Microsoft_ + +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + +#### 29. System.Runtime.InteropServices.RuntimeInformation +_'nuget' package by Microsoft_ + +Provides APIs to query about runtime and OS information. + + +#### 30. System.Runtime.InteropServices +_'nuget' package by Microsoft_ + +Provides types that support COM interop and platform invoke services. + + +#### 31. System.Runtime.Numerics +_'nuget' package by Microsoft_ + +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + +#### 32. System.Runtime +_'nuget' package by Microsoft_ + +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + +#### 33. System.Security.Cryptography.Algorithms +_'nuget' package by Microsoft_ + +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + +#### 34. System.Security.Cryptography.Encoding +_'nuget' package by Microsoft_ + +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + +#### 35. System.Security.Cryptography.Primitives +_'nuget' package by Microsoft_ + +Provides common types for the cryptographic libraries. + + +#### 36. System.Security.Cryptography.X509Certificates +_'nuget' package by Microsoft_ + +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + +#### 37. System.Text.Encoding.Extensions +_'nuget' package by Microsoft_ + +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + +#### 38. System.Text.Encoding +_'nuget' package by Microsoft_ + +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + +#### 39. System.Text.RegularExpressions +_'nuget' package by Microsoft_ + +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + +#### 40. System.Threading.Tasks +_'nuget' package by Microsoft_ + +Provides types that simplify the work of writing concurrent and asynchronous code. + + +#### 41. System.Threading.Timer +_'nuget' package by Microsoft_ + +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + +#### 42. System.Threading +_'nuget' package by Microsoft_ + +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + +#### 43. System.Xml.ReaderWriter +_'nuget' package by Microsoft_ + +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + +#### 44. System.Xml.XDocument +_'nuget' package by Microsoft_ + +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + diff --git a/1.5 'Kruger 60'/FirstTimeConfig/License.txt b/1.5 'Kruger 60'/FirstTimeConfig/License.txt index 564d5dfc..1d12306f 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/License.txt +++ b/1.5 'Kruger 60'/FirstTimeConfig/License.txt @@ -1,43 +1,630 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions +############################################################################## +## +## Program 'FirstTimeConfig' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Apache License Version 2.0, January 2004 + * The MIT License (MIT) + * Microsoft .NET Library License Terms + * Microsoft® Exception Message Box License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. FirstTimeConfig +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.Core +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. IpTViewr.MovistarPlus +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. IpTviewr.Telemetry +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. UiServices.DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Apache License Version 2.0, January 2004 +// +//////////////////////////////////////////////////////////// + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +//////////////////////////////////////////////////////////// + +>>> 'Apache License Version 2.0, January 2004' applies to the following THIRD-PARTY components: <<< + +1. SQLitePCLRaw.bundle_green +------------------------------ +'nuget' package by Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + +2. SQLitePCLRaw.core +------------------------------ +'nuget' package by Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + +3. SQLitePCLRaw.lib.e_sqlite3.linux +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +4. SQLitePCLRaw.lib.e_sqlite3.osx +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +6. SQLitePCLRaw.provider.e_sqlite3.net45 +------------------------------ +'nuget' package by Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Microsoft.AppCenter.Analytics +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + +3. Microsoft.AppCenter.Crashes +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect crash reports for your application. + +4. Microsoft.AppCenter +------------------------------ +'nuget' package by Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + +5. Microsoft.NETCore.Platforms +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + +6. NETStandard.Library +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + +7. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +8. sqlite-net-pcl +------------------------------ +'nuget' package by Frank A. Krueger +Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + +9. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft .NET Library License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at https://docs.microsoft.com/en-us/legal/gdpr. + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit www.microsoft.com/exporting. + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft .NET Library License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft.Win32.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for Win32-based libraries. + +2. System.AppContext +------------------------------ +'nuget' package by Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + +3. System.Collections.Concurrent +------------------------------ +'nuget' package by Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + +4. System.Collections +------------------------------ +'nuget' package by Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + +5. System.Console +------------------------------ +'nuget' package by Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + +6. System.Diagnostics.Debug +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + +7. System.Diagnostics.DiagnosticSource +------------------------------ +'nuget' package by Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + +8. System.Diagnostics.Tools +------------------------------ +'nuget' package by Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + +9. System.Diagnostics.Tracing +------------------------------ +'nuget' package by Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + +10. System.Globalization.Calendars +------------------------------ +'nuget' package by Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + +11. System.Globalization +------------------------------ +'nuget' package by Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + +12. System.IO.Compression.ZipFile +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + +13. System.IO.Compression +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams. + +14. System.IO.FileSystem.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + +15. System.IO.FileSystem +------------------------------ +'nuget' package by Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + +16. System.IO +------------------------------ +'nuget' package by Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + +17. System.Linq.Expressions +------------------------------ +'nuget' package by Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + +18. System.Linq +------------------------------ +'nuget' package by Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + +19. System.Net.Http +------------------------------ +'nuget' package by Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + +20. System.Net.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + +21. System.Net.Sockets +------------------------------ +'nuget' package by Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + +22. System.ObjectModel +------------------------------ +'nuget' package by Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + +23. System.Reflection.Extensions +------------------------------ +'nuget' package by Microsoft + Provides custom attribute extension methods for System.Reflection types. + +24. System.Reflection.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations for reflection-based libraries. + +25. System.Reflection +------------------------------ +'nuget' package by Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + +26. System.Resources.ResourceManager +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + +27. System.Runtime.Extensions +------------------------------ +'nuget' package by Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + +28. System.Runtime.Handles +------------------------------ +'nuget' package by Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + +29. System.Runtime.InteropServices.RuntimeInformation +------------------------------ +'nuget' package by Microsoft + Provides APIs to query about runtime and OS information. + +30. System.Runtime.InteropServices +------------------------------ +'nuget' package by Microsoft + Provides types that support COM interop and platform invoke services. + +31. System.Runtime.Numerics +------------------------------ +'nuget' package by Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + +32. System.Runtime +------------------------------ +'nuget' package by Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + +33. System.Security.Cryptography.Algorithms +------------------------------ +'nuget' package by Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + +34. System.Security.Cryptography.Encoding +------------------------------ +'nuget' package by Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + +35. System.Security.Cryptography.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for the cryptographic libraries. + +36. System.Security.Cryptography.X509Certificates +------------------------------ +'nuget' package by Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + +37. System.Text.Encoding.Extensions +------------------------------ +'nuget' package by Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + +38. System.Text.Encoding +------------------------------ +'nuget' package by Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + +39. System.Text.RegularExpressions +------------------------------ +'nuget' package by Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + +40. System.Threading.Tasks +------------------------------ +'nuget' package by Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + +41. System.Threading.Timer +------------------------------ +'nuget' package by Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + +42. System.Threading +------------------------------ +'nuget' package by Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + +43. System.Xml.ReaderWriter +------------------------------ +'nuget' package by Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + +44. System.Xml.XDocument +------------------------------ +'nuget' package by Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Program.cs b/1.5 'Kruger 60'/FirstTimeConfig/Program.cs index 52fa52e3..2c562e78 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Program.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Program.cs @@ -1,14 +1,26 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.Common.Telemetry; +using IpTviewr.Telemetry; using IpTviewr.UiServices.Configuration; using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Threading; using System.Windows.Forms; +using IpTviewr.Common.Configuration; +using IpTviewr.Tools.FirstTimeConfig.Properties; namespace IpTviewr.Tools.FirstTimeConfig { @@ -22,11 +34,11 @@ static class Program internal static bool RunFirewallConfiguration; internal static string FirewallBinPath; internal static string FirewallVlcPath; - internal static AppUiConfiguration AppUiConfig; + internal static AppUiConfigurationFolders AppConfigFolders; - private static DialogResult WizardEndResult; - private static string WizardEndText; - private static Exception WizardEndException; + private static DialogResult _wizardEndResult; + private static string _wizardEndText; + private static Exception _wizardEndException; /// /// The main entry point for the application. @@ -42,18 +54,20 @@ static int Main(string[] arguments) if (!RunFirewallConfiguration) { var result = LaunchWizard(); - BasicGoogleTelemetry.EnsureHitsSents(); + AppTelemetry.End(); return result; } - else + + using var dlg = new FirewallForm(); + dlg.ShowDialog(); + + return dlg.DialogResult switch { - using (var dlg = new FirewallForm()) - { - dlg.ShowDialog(); - return (dlg.DialogResult == DialogResult.OK) ? 0 : (dlg.DialogResult == DialogResult.Cancel) ? 1 : -1; - } // using dlg - } // if-else + DialogResult.OK => 0, + DialogResult.Cancel => 1, + _ => -1 + }; } // Main internal static void SetWizardResult(DialogResult endResult) @@ -63,35 +77,38 @@ internal static void SetWizardResult(DialogResult endResult) internal static void SetWizardResult(DialogResult endResult, string message, Exception ex) { - WizardEndResult = endResult; - WizardEndText = message; - WizardEndException = ex; + _wizardEndResult = endResult; + _wizardEndText = message; + _wizardEndException = ex; } // SetWizardResult static int LaunchWizard() { - InitializationResult initResult; - bool launchMainProgram = false; - int result = 0; + bool launchMainProgram; + int result; - WizardEndResult = DialogResult.Abort; + _wizardEndResult = DialogResult.Abort; + + AppConfigFolders = Installation.LoadFolders(out var initResult); + if (string.IsNullOrEmpty(Settings.Default.Telemetry_GoogleAnalyticsClientId)) + { + Settings.Default.Telemetry_GoogleAnalyticsClientId = Guid.NewGuid().ToString("D"); + Settings.Default.Save(); + } // if - AppUiConfig = Installation.LoadRegistrySettings(out initResult); - if (AppUiConfig == null) + if (AppConfigFolders == null) { - Program.SetWizardResult(DialogResult.Abort, string.Format("{0}\r\n{1}", initResult.Caption, initResult.Message), initResult.InnerException); + SetWizardResult(DialogResult.Abort, $"{initResult.Caption}\r\n{initResult.Message}", initResult.InnerException); goto End; } // if - BasicGoogleTelemetry.Init(Properties.Resources.AnalyticsGoogleTrackingId, AppUiConfig.AnalyticsClientId, true, true, true); using (var dlg = new WizardWelcomeDialog()) { - switch (dlg.ShowDialog()) + if (dlg.ShowDialog() == DialogResult.Cancel) { - case DialogResult.Cancel: - Program.SetWizardResult(DialogResult.Cancel); - goto End; - } // switch + SetWizardResult(DialogResult.Cancel); + goto End; + } // if } // using using (var dlg = new ConfigForm()) @@ -102,28 +119,27 @@ static int LaunchWizard() End: using (var dlg = new WizardEndDialog()) { - dlg.EndResult = WizardEndResult; - dlg.ErrorMessage = WizardEndText; - dlg.ErrorException = WizardEndException; + dlg.EndResult = _wizardEndResult; + dlg.ErrorMessage = _wizardEndText; + dlg.ErrorException = _wizardEndException; dlg.ShowDialog(); launchMainProgram = dlg.checkRunMainProgram.Checked; - result = (WizardEndResult == DialogResult.OK) ? 0 : -1; + result = (_wizardEndResult == DialogResult.OK) ? 0 : -1; } // using - if (launchMainProgram) + if (!launchMainProgram) return result; + + var message = Installation.Launch(null, AppConfigFolders?.Install, Resources.SuccessExecuteProgram); + if (message != null) { - var message = Installation.Launch(null, AppUiConfig.Folders.Install, Properties.Resources.SuccessExecuteProgram); - if (message != null) - { - MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Stop); - } // if + MessageBox.Show(message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Stop); } // if return result; } // LaunchWizard - static void ProcessArguments(string[] arguments) + private static void ProcessArguments(string[] arguments) { if ((arguments == null) || (arguments.Length == 0)) return; @@ -157,17 +173,12 @@ static void ProcessArguments(string[] arguments) } // if } // foreach - if (culture != null) - { - ForceUiCulture(culture); - } // if + ForceUiCulture(culture); } // ProcessArguments - static void ForceUiCulture(string culture) + private static void ForceUiCulture(string culture) { - if (culture == null) return; - culture = culture.Trim(); - if (culture == string.Empty) return; + if (string.IsNullOrWhiteSpace(culture)) return; try { @@ -175,7 +186,7 @@ static void ForceUiCulture(string culture) } catch { - MessageBox.Show(Properties.Texts.ExceptionForceUiCulture, + MessageBox.Show(Texts.ExceptionForceUiCulture, Path.GetFileName(Application.ExecutablePath), MessageBoxButtons.OK, MessageBoxIcon.Error); } // try-catch diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/AssemblyInfo.cs index 6c0d713e..96682cf0 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/AssemblyInfo.cs @@ -1,31 +1,40 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Asistente de configuración inicial")] -[assembly: AssemblyDescription("FirstTimeConfig app")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("90f45ef0-800b-4c93-8bb4-243ff0c002d1")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] - +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Asistente de configuración inicial")] +[assembly: AssemblyDescription("FirstTimeConfig app")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("90f45ef0-800b-4c93-8bb4-243ff0c002d1")] + +// Version information for an assembly consists of the following four values: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] + diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.Designer.cs index df8f2891..83f5f3cd 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.Designer.cs @@ -1,4 +1,17 @@ -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 @@ -19,7 +32,7 @@ namespace IpTviewr.Tools.FirstTimeConfig.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -110,15 +123,6 @@ internal static System.Drawing.Bitmap ActionRun_16x16 { } } - /// - /// Looks up a localized string similar to UA-66146192-3. - /// - internal static string AnalyticsGoogleTrackingId { - get { - return ResourceManager.GetString("AnalyticsGoogleTrackingId", resourceCulture); - } - } - /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -198,7 +202,7 @@ internal static System.Drawing.Icon FirewallIcon { } /// - /// Looks up a localized string similar to ChannelList.exe. + /// Looks up a localized string similar to IPTViewr.exe. /// internal static string FirewallProgramList { get { @@ -225,6 +229,15 @@ internal static System.Drawing.Icon FirstTimeConfigIcon { } } + /// + /// Looks up a localized string similar to K-Lite Codec Pack\\Media Player Classic\\mpc-hc.exe. + /// + internal static string MpcDefaultLocation { + get { + return ResourceManager.GetString("MpcDefaultLocation", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -304,7 +317,7 @@ internal static System.Drawing.Bitmap Success_48x48 { } /// - /// Looks up a localized string similar to ChannelList.exe. + /// Looks up a localized string similar to IPTViewr.exe. /// internal static string SuccessExecuteProgram { get { @@ -322,6 +335,24 @@ internal static System.Drawing.Bitmap Sucess_16x16 { } } + /// + /// Looks up a localized string similar to 36b7045d-3bfe-4166-bd7c-4b012f5365e0. + /// + internal static string TelemetryAppCenter_AppSecret { + get { + return ResourceManager.GetString("TelemetryAppCenter_AppSecret", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to UA-66146192-4. + /// + internal static string TelemetryGoogleAnalytics_TrackingId { + get { + return ResourceManager.GetString("TelemetryGoogleAnalytics_TrackingId", resourceCulture); + } + } + /// /// Looks up a localized string similar to VideoLAN\VLC\vlc.exe. /// @@ -332,7 +363,7 @@ internal static string VlcDefaultLocation { } /// - /// Looks up a localized string similar to 2.2.4.0. + /// Looks up a localized string similar to 3.0.0.0. /// internal static string VlcExeTargetVersion { get { @@ -350,7 +381,7 @@ internal static string VlcLibFilename { } /// - /// Looks up a localized string similar to 2.2.0.0. + /// Looks up a localized string similar to 3.0.0.0. /// internal static string VlcLibTargetVersion { get { diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.resx b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.resx index 5cdcad81..ddc7e49c 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Resources.resx @@ -112,12 +112,12 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + ..\Resources\ApproveReject_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -164,7 +164,7 @@ ..\Resources\Settings_16x616.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - 2.2.4.0 + 3.0.0.0 ..\Resources\ActionOk_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -176,7 +176,7 @@ ..\resources\success_48x48.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - 2.2.0.0 + 3.0.0.0 ..\Resources\openfolderHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -188,11 +188,11 @@ IPTViewr v1.5 'Kruger 60': {0} - ChannelList.exe + IPTViewr.exe One program per line - ChannelList.exe + IPTViewr.exe 9.0.1399.0 @@ -212,8 +212,8 @@ ..\resources\wizardtop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - UA-66146192-3 + + UA-66146192-4 Get new property for every new major version or new phase! @@ -225,4 +225,11 @@ ..\resources\first-time-config.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + 36b7045d-3bfe-4166-bd7c-4b012f5365e0 + Get new secret for every new major version or new phase! + + + K-Lite Codec Pack\\Media Player Classic\\mpc-hc.exe + \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs index 46efd369..c1d9a3de 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.Designer.cs @@ -1,4 +1,17 @@ -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 @@ -12,7 +25,7 @@ namespace IpTviewr.Tools.FirstTimeConfig.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -22,5 +35,28 @@ public static Settings Default { return defaultInstance; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string Telemetry_GoogleAnalyticsClientId { + get { + return ((string)(this["Telemetry_GoogleAnalyticsClientId"])); + } + set { + this["Telemetry_GoogleAnalyticsClientId"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::IpTviewr.Common.Telemetry.TelemetryConfiguration Telemetry { + get { + return ((global::IpTviewr.Common.Telemetry.TelemetryConfiguration)(this["Telemetry"])); + } + set { + this["Telemetry"] = value; + } + } } } diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.cs new file mode 100644 index 00000000..eca900fe --- /dev/null +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.cs @@ -0,0 +1,25 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Configuration; +using IpTviewr.UiServices.Configuration.Settings; + +namespace IpTviewr.Tools.FirstTimeConfig.Properties +{ + [SettingsProvider(typeof(JsonSettingsProvider))] + internal partial class Settings + { + // no additional method + // used to add [SettingsProvider] + } // class Settings +} // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.settings b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.settings index 39645652..61cec1d1 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.settings +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Settings.settings @@ -3,5 +3,12 @@ - + + + + + + + + diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs index a60ecf02..b9ed78c7 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.Designer.cs @@ -1,4 +1,17 @@ -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 @@ -19,7 +32,7 @@ namespace IpTviewr.Tools.FirstTimeConfig.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Texts { @@ -61,12 +74,17 @@ internal Texts() { } /// - /// Looks up a localized string similar to Please keep this option selected! - ///Collecting usage data helps us improve the program and this is crucial in pre-release versions. + /// Looks up a localized string similar to {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset2 Symbol;}} + ///{\*\generator Riched20 10.0.18362}\viewkind4\uc1 + ///\pard\sa200\sl276\slmult1\qc\b\f0\fs28\lang10\tab Help us improve this program!\b0\par + /// + ///\pard\sl276\slmult1\qj\fs24 Collecting this information helps us to improve the program through a better understanding of trends and usage patterns of the program, and helps us to try to detect problems and errors.\par + /// + ///\pard{\pntext\f1\'B7\tab}{\* [rest of string was truncated]";. /// - internal static string AnalyticsKeepChecked { + internal static string AppTelemetryHelp { get { - return ResourceManager.GetString("AnalyticsKeepChecked", resourceCulture); + return ResourceManager.GetString("AppTelemetryHelp", resourceCulture); } } @@ -261,6 +279,33 @@ internal static string FirewallVlcRuleDescription { } } + /// + /// Looks up a localized string similar to K-Lite Media Player Classic. + /// + internal static string GetTvPlayersMpc { + get { + return ResourceManager.GetString("GetTvPlayersMpc", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to K-Lite Media Player Classic (32 bits). + /// + internal static string GetTvPlayersMpcX86 { + get { + return ResourceManager.GetString("GetTvPlayersMpcX86", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to VLC. + /// + internal static string GetTvPlayersVlc { + get { + return ResourceManager.GetString("GetTvPlayersVlc", resourceCulture); + } + } + /// /// Looks up a localized string similar to VLC (no new window). /// @@ -271,14 +316,20 @@ internal static string GetTvPlayersVlcSameWindow { } /// - /// Looks up a localized string similar to {\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset2 Symbol;}} - ///{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\qc\lang10\b\f0\fs28 Help improve this program!\b0\par - ///\pard\sl276\slmult1\qj\fs24 Collecting this information helps us to improve the program through a better understanding of trends and usage patterns of the program, and helps us to try to detect problems and errors.\par - ///\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnin [rest of string was truncated]";. + /// Looks up a localized string similar to VLC (no new window - 32 bits). /// - internal static string GoogleTelemetry { + internal static string GetTvPlayersVlcSameWindowX86 { get { - return ResourceManager.GetString("GoogleTelemetry", resourceCulture); + return ResourceManager.GetString("GetTvPlayersVlcSameWindowX86", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to VLC (32 bits). + /// + internal static string GetTvPlayersVlcX86 { + get { + return ResourceManager.GetString("GetTvPlayersVlcX86", resourceCulture); } } @@ -489,6 +540,29 @@ internal static string LaunchSetupSuccess { } } + /// + /// Looks up a localized string similar to {0} is an optional feature of Windows 10 and is not installed. + ///Windows will now ask you if you wish to install it. + /// + ///1. Select 'Download and install this feature'. + ///2. Follow the wizard to completion. + ///3. Press 'Verify...' to check if {0} is properly installed.. + /// + internal static string NetFxRequired { + get { + return ResourceManager.GetString("NetFxRequired", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Install as Windows optional feature. + /// + internal static string NextFxWindows10Setup { + get { + return ResourceManager.GetString("NextFxWindows10Setup", resourceCulture); + } + } + /// /// Looks up a localized string similar to VLC player|vlc.exe|Programs|*.exe. /// @@ -540,7 +614,7 @@ internal static string ProductFullName { } /// - /// Looks up a localized string similar to movistar+ channels. + /// Looks up a localized string similar to IPTViewr for movistar+. /// internal static string ProductMainProgramName { get { @@ -558,9 +632,11 @@ internal static string ProductShortName { } /// - /// Looks up a localized string similar to {\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\fnil\fcharset0 Calibri;}{\f2\fnil\fcharset2 Symbol;}} - ///{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\sl276\slmult1\qj\lang10\f0\fs24 This program \b requires\b0 , necessarily, having contracted \b a movistar+ subscription\b0 in either fiber (FFTH) or DSL mode in Spain. \b The satellite connection is not supported\b0 .\par - ///\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\n [rest of string was truncated]";. + /// Looks up a localized string similar to {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\fnil\fcharset0 Calibri;}{\f2\fnil\fcharset2 Symbol;}} + ///{\*\generator Riched20 10.0.18362}\viewkind4\uc1 + ///\pard\nowidctlpar\sl276\slmult1\qj\f0\fs24\lang10 This program \b requires\b0 , necessarily, having contracted \b a movistar+ subscription\b0 in either fiber (FFTH) or DSL mode in Spain. \b The satellite connection is not supported\b0 .\par + /// + ///\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\p [rest of string was truncated]";. /// internal static string Readme { get { diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.es.resx b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.es.resx index 87a71ccc..e88d0015 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.es.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.es.resx @@ -112,15 +112,11 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Por favor, ¡mantenga esta opción seleccionada! -La recopilación de datos de uso nos ayuda a mejorar el programa y ésto es crucial en las versiones preliminares. - No ha sido posible crear el archivo de configuración. Se ha producido un error. @@ -192,15 +188,27 @@ Please verify the value of the 'ForceUICulture' program argument. Permitir conexiones {0} entrantes al reproductor VLC - - VLC (en la misma ventana) + + K-Lite Media Player Classic + + + K-Lite Media Player Classic (32 bits) + + + VLC VLC (en la misma ventana) - - - ..\..\channellist\resources\googletelemetry_es.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + VLC (en la misma ventana - 32 bits) + + + VLC (32 bits) + + + + ..\..\channellist\resources\apptelemetry_es.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 No ha sido posible determinar si el componente Microsoft® Exception Message Box se encuentra instalado. @@ -303,7 +311,7 @@ Si sobreescribe el archivo se perderá cualquier configuración personalizada. IPTViewr: decodificador virtual para movistar+ - Canales movistar+ + IPTViewr para movistar+ v1.5 “Kruger 60” beta 1 @@ -375,4 +383,15 @@ Para configurar adecuadamente la aplicación mas tarde, ejecute el asistente de La aplicación no está configurada adecuadamente y no se podrá ejecutar. Para configurar adecuadamente la aplicación mas tarde, ejecute el asistente de nuevo. + + {0} es una característica opcional de Windows 10 y no está instalada. +Windows le preguntará a continuación si desea instalarla. + +1. Seleccione la opción 'Descargar e instalar esta característica'. +2. Siga el asistente hasta su finalización. +3. Presione 'Comprobar...' para verificar si {0} está instalado correctamente. + + + Instalar como característica adicional de Windows + \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.resx b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.resx index 105137a8..64e07d05 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/Texts.resx @@ -112,15 +112,11 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Please keep this option selected! -Collecting usage data helps us improve the program and this is crucial in pre-release versions - Unable to create the configuration file. An error has occurred. @@ -192,12 +188,27 @@ Verifique el valor del argumento 'ForceUICulture' pasado al programa. Allow VLC media player {0} inbound connections + + K-Lite Media Player Classic + + + K-Lite Media Player Classic (32 bits) + + + VLC + VLC (no new window) - - - ..\..\channellist\resources\googletelemetry_en.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + VLC (no new window - 32 bits) + + + VLC (32 bits) + + + + ..\..\channellist\resources\apptelemetry_en.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 Unable to determine if the Microsoft® Exception Message Box component is installed. @@ -301,7 +312,7 @@ Do you want to overwrite the existing file? IPTViewr: virtual decoder for movistar+ - movistar+ channels + IPTViewr for movistar+ v1.5 “Kruger 60” Beta 1 @@ -373,4 +384,15 @@ To properly configure the application at a later time, please run this wizard ag The application is not properly configured and will not run. To properly configure the application at a later time, please run this wizard again. + + {0} is an optional feature of Windows 10 and is not installed. +Windows will now ask you if you wish to install it. + +1. Select 'Download and install this feature'. +2. Follow the wizard to completion. +3. Press 'Verify...' to check if {0} is properly installed. + + + Install as Windows optional feature + \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Properties/app.manifest b/1.5 'Kruger 60'/FirstTimeConfig/Properties/app.manifest new file mode 100644 index 00000000..95fed124 --- /dev/null +++ b/1.5 'Kruger 60'/FirstTimeConfig/Properties/app.manifest @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Resources/Readme_en.rtf b/1.5 'Kruger 60'/FirstTimeConfig/Resources/Readme_en.rtf index 14907710..7fa61044 100644 Binary files a/1.5 'Kruger 60'/FirstTimeConfig/Resources/Readme_en.rtf and b/1.5 'Kruger 60'/FirstTimeConfig/Resources/Readme_en.rtf differ diff --git a/1.5 'Kruger 60'/FirstTimeConfig/Resources/Readme_es.rtf b/1.5 'Kruger 60'/FirstTimeConfig/Resources/Readme_es.rtf index 13ac657a..012a9dba 100644 Binary files a/1.5 'Kruger 60'/FirstTimeConfig/Resources/Readme_es.rtf and b/1.5 'Kruger 60'/FirstTimeConfig/Resources/Readme_es.rtf differ diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WindowsFirewall.cs b/1.5 'Kruger 60'/FirstTimeConfig/WindowsFirewall.cs index d6c2277f..7626087b 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WindowsFirewall.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WindowsFirewall.cs @@ -1,38 +1,45 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using NetFwTypeLib; using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; -using System.Text; namespace IpTviewr.Tools.FirstTimeConfig { internal class WindowsFirewall : IDisposable { - private bool Disposed; - private INetFwPolicy2 FirewallPolicy; - private Type NetFwRuleType; - private bool SupportsIFwRule2; + private bool _disposed; + private readonly INetFwPolicy2 _firewallPolicy; + private readonly Type _netFwRuleType; + private readonly bool _supportsIFwRule2; public WindowsFirewall() { var fwPolicy2Type = Type.GetTypeFromCLSID(new Guid("E2B3C97F-6AE1-41AC-817A-F6F92166D7DD")); - FirewallPolicy = (INetFwPolicy2)Activator.CreateInstance(fwPolicy2Type); + _firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(fwPolicy2Type); - NetFwRuleType = Type.GetTypeFromCLSID(new Guid("2C5BC43E-3369-4C33-AB0C-BE9469677AF4")); + _netFwRuleType = Type.GetTypeFromCLSID(new Guid("2C5BC43E-3369-4C33-AB0C-BE9469677AF4")); object rule = null; INetFwRule2 rule2 = null; try { - rule = Activator.CreateInstance(NetFwRuleType); + rule = Activator.CreateInstance(_netFwRuleType); rule2 = rule as INetFwRule2; if (rule2 != null) { - SupportsIFwRule2 = true; + _supportsIFwRule2 = true; } // if } finally @@ -49,9 +56,9 @@ public WindowsFirewall() public void AllowProgram(string path, string name, string description) { - if (SupportsIFwRule2) + if (_supportsIFwRule2) { - AllowProgramWin7plus(path, name, description); + AllowProgramWin7Plus(path, name, description); } else { @@ -61,16 +68,16 @@ public void AllowProgram(string path, string name, string description) public void Dispose() { - if (Disposed) return; + if (_disposed) return; Dispose(true); GC.SuppressFinalize(this); } // Dispose private void Dispose(bool disposing) { - Marshal.FinalReleaseComObject(FirewallPolicy); + Marshal.FinalReleaseComObject(_firewallPolicy); - Disposed = true; + _disposed = true; } // Dispose private void AllowProgramWinVista(string path, string name, string description) @@ -83,7 +90,7 @@ private void AllowProgramWinVista(string path, string name, string description) fwRules = null; try { - fwRuleTcp = (INetFwRule)Activator.CreateInstance(NetFwRuleType); + fwRuleTcp = (INetFwRule)Activator.CreateInstance(_netFwRuleType); fwRuleTcp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; fwRuleTcp.ApplicationName = path; fwRuleTcp.Description = string.Format(description, "TCP"); @@ -92,7 +99,7 @@ private void AllowProgramWinVista(string path, string name, string description) fwRuleTcp.Name = name; fwRuleTcp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; - fwRuleUdp = (INetFwRule)Activator.CreateInstance(NetFwRuleType); + fwRuleUdp = (INetFwRule)Activator.CreateInstance(_netFwRuleType); fwRuleUdp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; fwRuleUdp.ApplicationName = path; fwRuleUdp.Description = string.Format(description, "UDP"); @@ -101,7 +108,7 @@ private void AllowProgramWinVista(string path, string name, string description) fwRuleUdp.Name = name; fwRuleUdp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; - fwRules = FirewallPolicy.Rules; + fwRules = _firewallPolicy.Rules; fwRules.Add(fwRuleTcp); fwRules.Add(fwRuleUdp); } @@ -113,7 +120,7 @@ private void AllowProgramWinVista(string path, string name, string description) } // try-finally } // AllowProgramWinVista - private void AllowProgramWin7plus(string path, string name, string description) + private void AllowProgramWin7Plus(string path, string name, string description) { INetFwRule2 fwRuleTcp, fwRuleUdp; INetFwRules fwRules; @@ -123,7 +130,7 @@ private void AllowProgramWin7plus(string path, string name, string description) fwRules = null; try { - fwRuleTcp = (INetFwRule2)Activator.CreateInstance(NetFwRuleType); + fwRuleTcp = (INetFwRule2)Activator.CreateInstance(_netFwRuleType); fwRuleTcp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; fwRuleTcp.ApplicationName = path; fwRuleTcp.Description = string.Format(description, "TCP"); @@ -133,7 +140,7 @@ private void AllowProgramWin7plus(string path, string name, string description) fwRuleTcp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; fwRuleTcp.Profiles = (int)(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE | NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN); - fwRuleUdp = (INetFwRule2)Activator.CreateInstance(NetFwRuleType); + fwRuleUdp = (INetFwRule2)Activator.CreateInstance(_netFwRuleType); fwRuleUdp.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; fwRuleUdp.ApplicationName = path; fwRuleUdp.Description = string.Format(description, "UDP"); @@ -143,7 +150,7 @@ private void AllowProgramWin7plus(string path, string name, string description) fwRuleUdp.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; fwRuleUdp.Profiles = (int)(NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PRIVATE | NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_DOMAIN); - fwRules = FirewallPolicy.Rules; + fwRules = _firewallPolicy.Rules; fwRules.Add(fwRuleTcp); fwRules.Add(fwRuleUdp); } diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.Designer.cs index b0c68204..8e344d3f 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Tools.FirstTimeConfig { @@ -159,4 +169,4 @@ private void InitializeComponent() internal System.Windows.Forms.CheckBox checkRunMainProgram; private System.Windows.Forms.LinkLabel linkErrorDetails; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.cs index 73845373..163ddd25 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardEndDialog.cs @@ -1,13 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.Common.Telemetry; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; using System.Windows.Forms; namespace IpTviewr.Tools.FirstTimeConfig @@ -17,7 +22,7 @@ public partial class WizardEndDialog : Form public WizardEndDialog() { InitializeComponent(); - this.Icon = Properties.Resources.FirstTimeConfigIcon; + Icon = Properties.Resources.FirstTimeConfigIcon; } // constructor public DialogResult EndResult @@ -42,24 +47,24 @@ private void WizardEndDialog_Load(object sender, EventArgs e) { switch (EndResult) { - case System.Windows.Forms.DialogResult.OK: - BasicGoogleTelemetry.SendScreenHit(this, "Ok"); + case DialogResult.OK: + AppTelemetry.FormEvent("Ok", this); pictureEndIcon.Image = Properties.Resources.Success_48x48; labelEndTitle.Text = Properties.Texts.WizardEndTitleOk; labelEndText.Text = string.Format(labelEndText.Text, Properties.Texts.WizardEndTextOk); checkRunMainProgram.Visible = true; - checkRunMainProgram.Checked = !string.IsNullOrEmpty(Program.AppUiConfig.Folders.Install); + checkRunMainProgram.Checked = !string.IsNullOrEmpty(Program.AppConfigFolders.Install); checkRunMainProgram.Enabled = checkRunMainProgram.Checked; checkRunMainProgram.Text = string.Format(checkRunMainProgram.Text, Properties.Texts.ProductMainProgramName); break; - case System.Windows.Forms.DialogResult.Cancel: - BasicGoogleTelemetry.SendScreenHit(this, "Cancel"); + case DialogResult.Cancel: + AppTelemetry.FormEvent("Cancel", this); pictureEndIcon.Image = Properties.Resources.Warning_48x48; labelEndTitle.Text = Properties.Texts.WizardEndTitleCancel; labelEndText.Text = string.Format(labelEndText.Text, Properties.Texts.WizardEndTextCancel); break; default: - BasicGoogleTelemetry.SendScreenHit(this, "Abort"); + AppTelemetry.FormEvent("Abort", this); pictureEndIcon.Image = Properties.Resources.Exclamation_48x48; labelEndTitle.Text = Properties.Texts.WizardEndTitleAbort; labelEndText.Text = string.Format(labelEndText.Text, Properties.Texts.WizardEndTextAbort); @@ -81,7 +86,7 @@ private void linkErrorDetails_LinkClicked(object sender, LinkLabelLinkClickedEve } else { - text = string.Format("{0}\r\n\r\n{1}", ErrorMessage, ErrorException.ToString()); + text = $"{ErrorMessage}\r\n\r\n{ErrorException.ToString()}"; } // if-else } else @@ -96,7 +101,7 @@ private void linkErrorDetails_LinkClicked(object sender, LinkLabelLinkClickedEve } // if-else } // if-else - MessageBox.Show(this, text, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); + MessageBox.Show(this, text, Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); } // linkErrorDetails_LinkClicked } // class WizardEndDialog } // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardTabControl.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardTabControl.cs index 936d5746..e429933e 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardTabControl.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardTabControl.cs @@ -1,12 +1,20 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.Common.Telemetry; using System; using System.Collections.Generic; using System.ComponentModel; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.Tools.FirstTimeConfig @@ -62,7 +70,7 @@ protected override void OnCreateControl() UpdateWizardButtons(); PreviousButton.Click += PreviousButton_Click; NextButton.Click += NextButton_Click; - this.Selected += WizardTabControl_Selected; + Selected += WizardTabControl_Selected; } // OnCreateControl protected override void WndProc(ref Message m) @@ -108,7 +116,7 @@ protected override void OnSelecting(TabControlCancelEventArgs e) { Initialization.Remove(e.TabPage.Name); init(); - BasicGoogleTelemetry.SendScreenHit(this.FindForm(), e.TabPage.Text); + AppTelemetry.FormEvent(e.TabPage.Text, FindForm()); } // if } // if } // OnSelecting @@ -123,12 +131,12 @@ protected override void OnSelected(TabControlEventArgs e) private void PreviousButton_Click(object sender, EventArgs e) { - this.SelectedIndex = this.SelectedIndex - 1; + SelectedIndex = SelectedIndex - 1; } // PreviousButton_Click private void NextButton_Click(object sender, EventArgs e) { - this.SelectedIndex = this.SelectedIndex + 1; + SelectedIndex = SelectedIndex + 1; } // NextButton_Click public void UpdateWizardButtons() @@ -136,17 +144,17 @@ public void UpdateWizardButtons() bool isAllowed; isAllowed = false; - if (this.SelectedIndex > 0) + if (SelectedIndex > 0) { - var page = TabPages[this.SelectedIndex - 1]; + var page = TabPages[SelectedIndex - 1]; isAllowed = (IsPageAllowed.TryGetValue(page.Name, out isAllowed)) ? isAllowed : false; } // if PreviousButton.Enabled = isAllowed; isAllowed = false; - if ((this.SelectedIndex + 1) < this.TabCount) + if ((SelectedIndex + 1) < TabCount) { - var page = TabPages[this.SelectedIndex + 1]; + var page = TabPages[SelectedIndex + 1]; isAllowed = (IsPageAllowed.TryGetValue(page.Name, out isAllowed)) ? isAllowed : false; } // if diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.Designer.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.Designer.cs index dc26f814..19baf8df 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.Designer.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Tools.FirstTimeConfig { @@ -78,6 +88,7 @@ private void InitializeComponent() resources.ApplyResources(this.buttonNext, "buttonNext"); this.buttonNext.Name = "buttonNext"; this.buttonNext.UseVisualStyleBackColor = true; + this.buttonNext.Click += new System.EventHandler(this.buttonNext_Click); // // buttonCancel // @@ -151,4 +162,4 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox checkAnalytics; private System.Windows.Forms.LinkLabel linkAnalyticsHelp; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.cs b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.cs index 2942f7ac..f7d222f2 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.cs +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.cs @@ -1,15 +1,23 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== -using IpTviewr.Common.Telemetry; using IpTviewr.UiServices.Common.Forms; using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; using System.Windows.Forms; +using IpTviewr.Common.Telemetry; +using IpTviewr.Telemetry; +using IpTviewr.Tools.FirstTimeConfig.Properties; namespace IpTviewr.Tools.FirstTimeConfig { @@ -18,7 +26,7 @@ public partial class WizardWelcomeDialog : Form public WizardWelcomeDialog() { InitializeComponent(); - this.Icon = Properties.Resources.FirstTimeConfigIcon; + Icon = Resources.FirstTimeConfigIcon; #if DEBUG checkAnalytics.Checked = false; checkAnalytics.Enabled = false; @@ -27,8 +35,8 @@ public WizardWelcomeDialog() private void WizardWelcomeDialog_Load(object sender, EventArgs e) { - labelWelcomeTitle.Text = string.Format(labelWelcomeTitle.Text, Properties.Texts.ProductShortName); - labelWelcomeText.Text = string.Format(labelWelcomeText.Text, Properties.Texts.ProductFullName); + labelWelcomeTitle.Text = string.Format(labelWelcomeTitle.Text, Texts.ProductShortName); + labelWelcomeText.Text = string.Format(labelWelcomeText.Text, Texts.ProductFullName); } // WizardWelcomeDialog_Load private void WizardWelcomeDialog_Shown(object sender, EventArgs e) @@ -40,7 +48,38 @@ private void WizardWelcomeDialog_Shown(object sender, EventArgs e) private void linkAnalyticsHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { - HelpDialog.ShowRtfHelp(this, Properties.Texts.GoogleTelemetry, Properties.Texts.TelemetryHelpCaption); + HelpDialog.ShowRtfHelp(this, Texts.AppTelemetryHelp, Texts.TelemetryHelpCaption); } // linkAnalyticsHelp_LinkClicked + + private void buttonNext_Click(object sender, EventArgs e) + { + if (!checkAnalytics.Checked) return; + + // create Google Analytics client ID + if (string.IsNullOrEmpty(Settings.Default.Telemetry_GoogleAnalyticsClientId)) + { + Settings.Default.Telemetry_GoogleAnalyticsClientId = Guid.NewGuid().ToString("D"); + Settings.Default.Save(); + } // if + + var telemetryConfiguration = new TelemetryConfiguration(checkAnalytics.Checked, true, true); + AppTelemetry.Start(new TelemetryFactory(), telemetryConfiguration, new Dictionary> + { + { + "IpTviewr.Telemetry.VsAppCenter", new Dictionary + { + {"AppSecret", Resources.TelemetryAppCenter_AppSecret} + } + + }, + { + "IpTviewr.Telemetry.GoogleAnalytics", new Dictionary + { + {"TrackingId", Resources.TelemetryGoogleAnalytics_TrackingId}, + {"ClientId", Settings.Default.Telemetry_GoogleAnalyticsClientId} + } + } + }); + } // buttonNext_Click } // class WizardWelcomeDialog } // namespace diff --git a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.resx b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.resx index aba57197..e7e10f4e 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.resx +++ b/1.5 'Kruger 60'/FirstTimeConfig/WizardWelcomeDialog.resx @@ -1,392 +1,392 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Top, Bottom, Left - - - - 0, 0 - - - 164, 312 - - - - 0 - - - pictureWelcome - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - False - - - 129, 11 - - - 100, 23 - - - 0 - - - &Back - - - MiddleRight - - - ImageBeforeText - - - buttonBack - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panelButtons - - - 0 - - - 235, 10 - - - 125, 25 - - - 1 - - - &Next - - - MiddleRight - - - ImageBeforeText - - - buttonNext - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panelButtons - - - 1 - - - 382, 10 - - - 100, 25 - - - 2 - - - &Cancel - - - MiddleRight - - - ImageBeforeText - - - buttonCancel - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panelButtons - - - 2 - - - -3, 313 - - - 499, 55 - - - 2 - - - panelButtons - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - Segoe UI, 11.25pt, style=Bold - - - 170, 9 - - - 311, 75 - - - 0 - - - Welcome to {0} First-time Configuration Wizard - - - labelWelcomeTitle - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Segoe UI, 9.75pt - - - 170, 84 - - - 311, 185 - - - 1 - - - This wizard will help you finish the installation of {0}. - -Select 'Next' to continue or 'Cancel' to end the wizard. - - - labelWelcomeText - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - True - - - 170, 272 - - - 197, 17 - - - 3 - - - Send anonymous wizard usage data - - - checkAnalytics - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - True - - - 171, 292 - - - 174, 13 - - - 4 - - - What is this? Why is this important? - - - linkAnalyticsHelp - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 493, 359 - - - CenterScreen - - - First-time Configuration Wizard - - - WizardWelcomeDialog - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Bottom, Left + + + + 0, 0 + + + 164, 312 + + + + 0 + + + pictureWelcome + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + False + + + 129, 11 + + + 100, 23 + + + 0 + + + &Back + + + MiddleRight + + + ImageBeforeText + + + buttonBack + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelButtons + + + 0 + + + 235, 10 + + + 125, 25 + + + 1 + + + &Next + + + MiddleRight + + + ImageBeforeText + + + buttonNext + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelButtons + + + 1 + + + 382, 10 + + + 100, 25 + + + 2 + + + &Cancel + + + MiddleRight + + + ImageBeforeText + + + buttonCancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelButtons + + + 2 + + + -3, 313 + + + 499, 55 + + + 2 + + + panelButtons + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + Segoe UI, 11.25pt, style=Bold + + + 170, 9 + + + 311, 75 + + + 0 + + + Welcome to {0} First-time Configuration Wizard + + + labelWelcomeTitle + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Segoe UI, 9.75pt + + + 170, 84 + + + 311, 185 + + + 1 + + + This wizard will help you finish the installation of {0}. + +Select 'Next' to continue or 'Cancel' to end the wizard. + + + labelWelcomeText + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + True + + + 170, 272 + + + 197, 17 + + + 3 + + + Send anonymous wizard usage data + + + checkAnalytics + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + 171, 292 + + + 174, 13 + + + 4 + + + What is this? Why is this important? + + + linkAnalyticsHelp + + + System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 493, 359 + + + CenterScreen + + + First-time Configuration Wizard + + + WizardWelcomeDialog + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/FirstTimeConfig/app.config b/1.5 'Kruger 60'/FirstTimeConfig/app.config index ff995010..4b34075f 100644 --- a/1.5 'Kruger 60'/FirstTimeConfig/app.config +++ b/1.5 'Kruger 60'/FirstTimeConfig/app.config @@ -1,3 +1,56 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/FirstTimeConfig/licensing.xml b/1.5 'Kruger 60'/FirstTimeConfig/licensing.xml new file mode 100644 index 00000000..8c77ebff --- /dev/null +++ b/1.5 'Kruger 60'/FirstTimeConfig/licensing.xml @@ -0,0 +1,646 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Core + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.MovistarPlus + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Telemetry + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Unknown + + + + + Apache-2.0 + Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + + Apache-2.0 + Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + + + MIT + Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + + + MIT + Microsoft + This package contains functionalities to collect crash reports for your application. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Frank A. Krueger + Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS.NET + Microsoft + Provides common types for Win32-based libraries. + + + MS.NET + Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + + MS.NET + Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + + MS.NET + Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + + MS.NET + Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + + MS.NET + Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + + + MS.NET + Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + + MS.NET + Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + + MS.NET + Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + + MS.NET + Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + + MS.NET + Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + + MS.NET + Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + + + MS.NET + Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + + + MS.NET + Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + + + MS.NET + Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + + MS.NET + Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + + MS.NET + Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + + MS.NET + Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + + MS.NET + Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + + MS.NET + Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + + MS.NET + Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + + MS.NET + Microsoft + Provides custom attribute extension methods for System.Reflection types. + + + MS.NET + Microsoft + Provides common enumerations for reflection-based libraries. + + + MS.NET + Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + + MS.NET + Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + + MS.NET + Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + + MS.NET + Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + + MS.NET + Microsoft + Provides types that support COM interop and platform invoke services. + + + MS.NET + Microsoft + Provides APIs to query about runtime and OS information. + + + MS.NET + Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + + MS.NET + Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + + MS.NET + Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + + MS.NET + Microsoft + Provides common types for the cryptographic libraries. + + + MS.NET + Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + + MS.NET + Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + + MS.NET + Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + + MS.NET + Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + + MS.NET + Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + + MS.NET + Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + + + MS.NET + Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + + MS.NET + Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + + MS.NET + Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/FirstTimeConfig/packages.config b/1.5 'Kruger 60'/FirstTimeConfig/packages.config new file mode 100644 index 00000000..52cb031c --- /dev/null +++ b/1.5 'Kruger 60'/FirstTimeConfig/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools.LICENSE.ES.MD b/1.5 'Kruger 60'/InternalTools.LICENSE.ES.MD new file mode 100644 index 00000000..ef533427 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools.LICENSE.ES.MD @@ -0,0 +1,462 @@ +# Solución VS 'InternalTools.sln' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Los COMPONENTES y/o PROGRAMAS (el “SOFTWARE”), ya sea en forma de código binario o fuente, están **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, salvo que se indique lo contrario. \ +En particular, prevalecerán sobre estos términos de licencia, los especificados expresamente en el correspondiente archivo “LICENSE” de cada proyecto y/o carpeta. \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**El SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +**AVISO IMPORTANTE: El presente software _NO ESTÁ SOPORTADO NI RESPALDADO_ por Movistar ni por Telefónica**. \ +El software puede dejar de funcionar en cualquier momento si movistar+ realiza cambios tecnológicos en su plataforma. + +**NO DEBE LLAMARSE NUNCA al 1002 o al 1004** si desaparecen canales de la lista o no pueden verse o cualquier otra anomalía relaciona con el uso de este software. \ +movistar+ sólo proporciona ayuda y soporte técnico para su decodificador físico y únicamente para los servicios contratados. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +### “Microsoft Reciprocal License” (_Licencia recíproca de Microsoft_) (Ms-RL) + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +[]: + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [BSD 2-Clause “Simplified” License] + * [BSD 3-Clause “Revised” License] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. AlphaCentaury.Licensing.Data +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data.Ui +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. ChannelLogos +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. ChannelLogosEditor +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. ConsoleExperiments +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Etsi.Ts102034 +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. ExceptionMsgBox +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. GuiTools +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. InternalTools.sln +_Solución VS por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. IpTviewr.ToolsUiFramework +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. IpTviewrTools +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 16. Services.EpgDiscovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 17. SourceCodeMaintenance +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 18. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 19. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 20. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 21. UiServices.DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 22. UiServices.Forms +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### BSD 2-Clause “Simplified” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 2-Clause “Simplified” License'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Markdig +_Paquete 'nuget' por Alexandre Mutel_ + +**Copyright (c) 2018-2019, Alexandre Mutel** + +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + +### BSD 3-Clause “Revised” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 3-Clause “Revised” License'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. HtmlRenderer.Core +_Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + + +#### 2. HtmlRenderer.WinForms +_Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. HtmlAgilityPack +_Paquete 'nuget' por ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell_ + +**Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved.** + +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + + +#### 2. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 3. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 4. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/InternalTools.LICENSE.MD b/1.5 'Kruger 60'/InternalTools.LICENSE.MD new file mode 100644 index 00000000..90afa954 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools.LICENSE.MD @@ -0,0 +1,430 @@ +# VS Solution 'InternalTools.sln' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +The COMPONENTS and/or PROGRAMS (“SOFWARE”), either in binary or source code form, are **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_**, unless otherwise stated. \ +In particular, those specified in the corresponding “LICENSE” file of each project and/or folder will prevail over these license terms. \ +All other rights are reserved by the author(s) of the software. + +_**The SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +**IMPORTANT NOTICE: This software is _NOT SUPPORTED NOR ENDORSED_ by Movistar or Telefónica.** \ +This software may stop working at any time if movistar+ makes technological changes to its platform. + +**DO NOT EVER CALL 1002 nor 1004** if channels disappear from the list or cannot be seen or if you experience any other anomaly related to the use of this software. \ +movistar+ only provides help and support for their physical decoder and only for the contracted services. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [BSD 2-Clause “Simplified” License] + * [BSD 3-Clause “Revised” License] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. AlphaCentaury.Licensing.Data +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data.Ui +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. ChannelLogos +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. ChannelLogosEditor +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. ConsoleExperiments +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Etsi.Ts102034 +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. ExceptionMsgBox +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. GuiTools +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. InternalTools.sln +_VS Solution by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. IpTviewr.ToolsUiFramework +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. IpTviewrTools +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 16. Services.EpgDiscovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 17. SourceCodeMaintenance +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 18. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 19. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 20. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 21. UiServices.DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 22. UiServices.Forms +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### BSD 2-Clause “Simplified” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 2-Clause “Simplified” License'** applies to the following **third-party components:** + +#### 1. Markdig +_'nuget' package by Alexandre Mutel_ + +**Copyright (c) 2018-2019, Alexandre Mutel** + +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + +### BSD 3-Clause “Revised” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 3-Clause “Revised” License'** applies to the following **third-party components:** + +#### 1. HtmlRenderer.Core +_'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + + +#### 2. HtmlRenderer.WinForms +_'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. HtmlAgilityPack +_'nuget' package by ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell_ + +**Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved.** + +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + + +#### 2. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 3. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 4. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/InternalTools.licensing.xml b/1.5 'Kruger 60'/InternalTools.licensing.xml new file mode 100644 index 00000000..4f6318d9 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools.licensing.xml @@ -0,0 +1,467 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + AlphaCentaury.Licensing.Data + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + AlphaCentaury.Licensing.Data.Ui + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + SourceCodeMaintenance + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ExceptionMsgBox + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewrTools + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ChannelLogos + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ChannelLogosEditor + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ConsoleExperiments + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + GuiTools + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.ToolsUiFramework + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Forms + Library + + + + + BSD-2-Clause + Alexandre Mutel + Copyright (c) 2018-2019, Alexandre Mutel + A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + BSD-3-Clause + Arthur Teplitzki, José Manuel Menéndez Poo + Copyright (c) 2009, José Manuel Menéndez Poo + Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + + + BSD-3-Clause + Arthur Teplitzki, José Manuel Menéndez Poo + Copyright (c) 2009, José Manuel Menéndez Poo + Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + MIT + ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell + Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved. + This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools.sln b/1.5 'Kruger 60'/InternalTools.sln new file mode 100644 index 00000000..289aa351 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools.sln @@ -0,0 +1,182 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29020.237 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChannelLogos", "InternalTools\ChannelLogos\ChannelLogos.csproj", "{A51CC220-48C4-46F6-BF5D-3178CC317426}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleExperiments", "InternalTools\ConsoleExperiments\ConsoleExperiments.csproj", "{0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GuiTools", "InternalTools\GuiTools\GuiTools.csproj", "{9D077B2F-1E74-4031-B28D-3F6F97829BEC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dependencies", "Dependencies", "{6087F00C-436D-45AC-B792-805A1BBB4F59}" + ProjectSection(SolutionItems) = preProject + AssemblySolutionInfo.cs = AssemblySolutionInfo.cs + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Common", "Assemblies\UiServices.Common\UiServices.Common.csproj", "{76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Config", "Assemblies\UiServices.Config\UiServices.Config.csproj", "{A722DE9D-AE51-479C-825F-A19F4C69BD75}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Winforms.MsgBoxEx", "Assemblies\Winforms.MsgBoxEx\Winforms.MsgBoxEx.csproj", "{448697CF-3D5C-45C3-8775-844BA7129672}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChannelLogosEditor", "InternalTools\ChannelLogosEditor\ChannelLogosEditor.csproj", "{55F119DD-311C-4DA8-B9E7-55E93BA59B4D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTviewr.Common", "Assemblies\Project.Common\IpTviewr.Common.csproj", "{8DA15060-5A78-4F89-A9F1-7AA56B0D622C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaCentaury.Licensing.Data", "Assemblies\AlphaCentaury.Licensing.Data\AlphaCentaury.Licensing.Data.csproj", "{42B71DB3-2E34-43BB-BF87-88F422BCF861}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTviewr.IpTvServices", "Assemblies\Core.IpTvProvider\IpTviewr.IpTvServices.csproj", "{36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceCodeMaintenance", "InternalTools\SourceCodeMaintenance\SourceCodeMaintenance.csproj", "{DE019D79-3699-4D17-8545-74B79C32FEF6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaCentaury.Licensing.Data.Ui", "Assemblies\AlphaCentaury.Licensing.Data.Ui\AlphaCentaury.Licensing.Data.Ui.csproj", "{1293A5C4-478F-4EFD-8E53-D283B35E1A06}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTviewrTools", "InternalTools\IpTviewrTools\IpTviewrTools.csproj", "{5566E7C5-CD21-4210-A836-5EB7902EB417}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToolsUiFramework", "InternalTools\ToolsUiFramework\ToolsUiFramework.csproj", "{63482F69-C5DE-430D-86E7-E2A4EAC59A51}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Defaults", "Defaults", "{61E11124-BF92-4150-8244-63B0FCFA5EE4}" + ProjectSection(SolutionItems) = preProject + .defaults\licensing.defaults.internal.xml = .defaults\licensing.defaults.internal.xml + .defaults\licensing.defaults.solution.xml = .defaults\licensing.defaults.solution.xml + .defaults\licensing.defaults.xml = .defaults\licensing.defaults.xml + .defaults\licensing.pool.licenses.xml = .defaults\licensing.pool.licenses.xml + .defaults\licensing.pool.thirdparty.xml = .defaults\licensing.pool.thirdparty.xml + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etsi.Ts102034", "Assemblies\Etsi.Ts102034\Etsi.Ts102034.csproj", "{B91C438D-0333-4D06-86CD-74CE82DF6F40}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Discovery", "Assemblies\UiServices.Discovery\UiServices.Discovery.csproj", "{7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Forms", "Assemblies\UiServices.Forms\UiServices.Forms.csproj", "{90F750B3-64DB-493F-96A6-E68DE5EA60A1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DvbStpClient", "Assemblies\DvbStpClient\DvbStpClient.csproj", "{8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.DvbStpClient", "Assemblies\UiServices.DvbStpClient\UiServices.DvbStpClient.csproj", "{BA481E42-F570-4D2C-94D4-21C4CCE27762}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.EpgDiscovery", "Assemblies\Services.EpgDiscovery\Services.EpgDiscovery.csproj", "{5A171DBB-855C-452B-93C6-229C7AA6C7A6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTviewr.Native", "Assemblies\Project.Native\IpTviewr.Native.csproj", "{8986CD52-0C65-42D6-9C47-20FF47CF87BB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTViewr.Core", "Core\IpTViewr.Core\IpTViewr.Core.csproj", "{968C6EEB-1E79-446A-96AE-69CB225E1C37}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Any CPU.Build.0 = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Any CPU.Build.0 = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Any CPU.Build.0 = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Any CPU.Build.0 = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Any CPU.Build.0 = Release|Any CPU + {448697CF-3D5C-45C3-8775-844BA7129672}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {448697CF-3D5C-45C3-8775-844BA7129672}.Debug|Any CPU.Build.0 = Debug|Any CPU + {448697CF-3D5C-45C3-8775-844BA7129672}.Release|Any CPU.ActiveCfg = Release|Any CPU + {448697CF-3D5C-45C3-8775-844BA7129672}.Release|Any CPU.Build.0 = Release|Any CPU + {55F119DD-311C-4DA8-B9E7-55E93BA59B4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55F119DD-311C-4DA8-B9E7-55E93BA59B4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55F119DD-311C-4DA8-B9E7-55E93BA59B4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55F119DD-311C-4DA8-B9E7-55E93BA59B4D}.Release|Any CPU.Build.0 = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Any CPU.Build.0 = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release|Any CPU.Build.0 = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Any CPU.Build.0 = Release|Any CPU + {DE019D79-3699-4D17-8545-74B79C32FEF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE019D79-3699-4D17-8545-74B79C32FEF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE019D79-3699-4D17-8545-74B79C32FEF6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE019D79-3699-4D17-8545-74B79C32FEF6}.Release|Any CPU.Build.0 = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release|Any CPU.Build.0 = Release|Any CPU + {5566E7C5-CD21-4210-A836-5EB7902EB417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5566E7C5-CD21-4210-A836-5EB7902EB417}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5566E7C5-CD21-4210-A836-5EB7902EB417}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5566E7C5-CD21-4210-A836-5EB7902EB417}.Release|Any CPU.Build.0 = Release|Any CPU + {63482F69-C5DE-430D-86E7-E2A4EAC59A51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63482F69-C5DE-430D-86E7-E2A4EAC59A51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63482F69-C5DE-430D-86E7-E2A4EAC59A51}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63482F69-C5DE-430D-86E7-E2A4EAC59A51}.Release|Any CPU.Build.0 = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Any CPU.Build.0 = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Any CPU.Build.0 = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Any CPU.Build.0 = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Any CPU.Build.0 = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Any CPU.Build.0 = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|Any CPU.Build.0 = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Any CPU.Build.0 = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release|Any CPU.ActiveCfg = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {A722DE9D-AE51-479C-825F-A19F4C69BD75} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {448697CF-3D5C-45C3-8775-844BA7129672} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {42B71DB3-2E34-43BB-BF87-88F422BCF861} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {1293A5C4-478F-4EFD-8E53-D283B35E1A06} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {B91C438D-0333-4D06-86CD-74CE82DF6F40} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {90F750B3-64DB-493F-96A6-E68DE5EA60A1} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {BA481E42-F570-4D2C-94D4-21C4CCE27762} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {5A171DBB-855C-452B-93C6-229C7AA6C7A6} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {8986CD52-0C65-42D6-9C47-20FF47CF87BB} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + {968C6EEB-1E79-446A-96AE-69CB225E1C37} = {6087F00C-436D-45AC-B792-805A1BBB4F59} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {291C735C-6BD5-4497-9F0C-500489DF7581} + EndGlobalSection +EndGlobal diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/App.config b/1.5 'Kruger 60'/InternalTools/ChannelLogos/App.config index 8d9f9536..d0f8440b 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/App.config +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/App.config @@ -2,5 +2,5 @@ - + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/BaseOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/BaseOutputWriter.cs new file mode 100644 index 00000000..64993ad7 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/BaseOutputWriter.cs @@ -0,0 +1,165 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Text; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + public abstract class BaseOutputWriter + { + private readonly string[] _indents; + private bool _started; + + protected BaseOutputWriter(int indentSize) + { + if (indentSize < 1) throw new ArgumentOutOfRangeException(nameof(indentSize)); + + _indents = new string[9]; + IndentSize = indentSize; + + for (var indent = 0; indent < _indents.Length; indent++) + { + _indents[indent] = new string(' ', indent * indentSize); + } // for indent + } // constructor + + public TimeSpan ElapsedTime => (DateTime.UtcNow - UtcStartTime); + + public DateTime UtcStartTime { get; private set; } + + public int IndentLevel { get; private set; } + + public int IndentSize { get; } + + public bool Started + { + get => _started; + protected set + { + _started = value; + if (_started) UtcStartTime = DateTime.UtcNow; + } + } // Started + + public abstract void WriteLine(string text); + + public void WriteException(Exception ex, string message = null) + { + StringBuilder buffer = null; + var level = IndentLevel; + + while (ex != null) + { + if (buffer == null) buffer = new StringBuilder(); + if (ex is AggregateException aggregateException) + { + ex = aggregateException.Flatten(); + } // if + + buffer.Append(GetIndent()); + buffer.AppendFormat(">>>>> {0} <<<<<", ex.GetType().Name); + buffer.AppendLine(); + if (message != null) + { + buffer.Append(GetIndent()); + buffer.AppendLine(message); + message = null; + } // if + + IncreaseIndent(); + + buffer.Append(GetIndent()); + buffer.AppendLine(ex.Message); + + var trace = ex.StackTrace.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); + foreach (var traceLine in trace) + { + buffer.Append(GetIndent()); + buffer.AppendLine(traceLine); + } // foreach + ex = ex.InnerException; + } // while + + if (buffer != null) + { + IndentLevel = 0; + WriteLine(buffer.ToString()); + } // if + + IndentLevel = level; + } // WriteException + + public bool WriteTimestamps { get; set; } + public bool AbsoluteTimestamps { get; set; } + + public int IncreaseIndent() + { + if (!Started) return 0; + + return (++IndentLevel); + } // IncreaseIndent + + public int DecreaseIndent() + { + if (!Started) return 0; + + IndentLevel--; + if (IndentLevel < 0) IndentLevel = 0; + + return IndentLevel; + } // DecreaseIndent + + protected void Reset() + { + IndentLevel = 0; + } // Reset + + protected string GetTimestamp() + { + if (!WriteTimestamps) return string.Empty; + + if (!AbsoluteTimestamps) return $"[{ElapsedTime:g}]{(IndentLevel != 0 ? "" : " ")}"; + + var now = DateTime.Now; + return $"[{now.ToShortDateString()} {now:HH:mm:ss.ff zz}]{(IndentLevel != 0 ? "" : " ")}"; + } // GetTimestamp + + protected string GetIndent() + { + return (IndentLevel < _indents.Length) ? _indents[IndentLevel] : new string(' ', IndentLevel * IndentSize); + } // GetIndent + + protected void AppendText(StringBuilder buffer, string text) + { + if (!WriteTimestamps) + { + buffer.Append(GetIndent()); + if (text != null) buffer.AppendLine(text); + return; + } // if + + if (AbsoluteTimestamps) + { + var now = DateTime.Now; + buffer.AppendFormat("[{0} {1:HH:mm:ss.ff zz}]{2}{3}", now.ToShortDateString(), now, (IndentLevel != 0) ? "" : " ", GetIndent()); + } + else + { + buffer.AppendFormat("[{0:g}]{1}{2}", ElapsedTime, (IndentLevel != 0) ? "" : " ", GetIndent()); + } // if + + if (text != null) buffer.AppendLine(text); + } // AppendText + } // class BaseOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj index f54d215a..b47df12c 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/ChannelLogos.csproj @@ -5,18 +5,18 @@ Debug AnyCPU {A51CC220-48C4-46F6-BF5D-3178CC317426} - WinExe + Library Properties IpTviewr.Internal.Tools.ChannelLogos ChannelLogos - v4.5.2 + v4.7.2 512 true - x86 + AnyCPU true full false @@ -25,6 +25,7 @@ prompt 4 false + 8 AnyCPU @@ -35,31 +36,36 @@ prompt 4 false + 8 Resources\IPTViewr_Tool.ico + + + - - False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + - - - - + + Properties\AssemblySolutionInfo.cs + + - + + @@ -74,14 +80,20 @@ FormLogos.cs - + Form - - FormStart.cs + + FormSvgLogosExporter.cs - + + + + + + + Component @@ -91,8 +103,8 @@ FormLogos.cs - - FormStart.cs + + FormSvgLogosExporter.cs ResXFileCodeGenerator @@ -104,6 +116,9 @@ Resources.resx True + + + SettingsSingleFileGenerator Settings.Designer.cs @@ -118,50 +133,50 @@ - - {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} - Core.IpTvProvider - - - {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} - DvbStpClient - - - {b91c438d-0333-4d06-86cd-74ce82df6f40} + + {B91C438D-0333-4D06-86CD-74CE82DF6F40} Etsi.Ts102034 - - {e1748f45-dd50-4479-96f6-f7eba6f3e28b} - IpTv.MovistarPlus - - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common - + + {8986CD52-0C65-42D6-9C47-20FF47CF87BB} + IpTviewr.Native + + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} UiServices.Common - + {a722de9d-ae51-479c-825f-a19f4c69bd75} UiServices.Config - - {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C} UiServices.Discovery - - {ba481e42-f570-4d2c-94d4-21c4cce27762} - UiServices.DvbStpClient - - - {90f750b3-64db-493f-96a6-e68de5ea60a1} + + {90F750B3-64DB-493F-96A6-E68DE5EA60A1} UiServices.Forms + + {968c6eeb-1e79-446a-96ae-69cb225e1c37} + IpTViewr.Core + + + {63482f69-c5de-430d-86e7-e2a4eac59a51} + ToolsUiFramework + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - False - - - 17, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + 17, 17 + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.Designer.cs deleted file mode 100644 index fb8eb134..00000000 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.Designer.cs +++ /dev/null @@ -1,114 +0,0 @@ -namespace IpTviewr.Internal.Tools.ChannelLogos -{ - partial class FormStart - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.label1 = new System.Windows.Forms.Label(); - this.radioLogosGrid = new System.Windows.Forms.RadioButton(); - this.radioConsistency = new System.Windows.Forms.RadioButton(); - this.buttonGo = new System.Windows.Forms.Button(); - this.labelLoadingConfiguration = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(12, 9); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(69, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Select a tool:"; - // - // radioLogosGrid - // - this.radioLogosGrid.AutoSize = true; - this.radioLogosGrid.Checked = true; - this.radioLogosGrid.Location = new System.Drawing.Point(12, 34); - this.radioLogosGrid.Name = "radioLogosGrid"; - this.radioLogosGrid.Size = new System.Drawing.Size(74, 17); - this.radioLogosGrid.TabIndex = 1; - this.radioLogosGrid.TabStop = true; - this.radioLogosGrid.Text = "Logos grid"; - this.radioLogosGrid.UseVisualStyleBackColor = true; - // - // radioConsistency - // - this.radioConsistency.AutoSize = true; - this.radioConsistency.Location = new System.Drawing.Point(12, 57); - this.radioConsistency.Name = "radioConsistency"; - this.radioConsistency.Size = new System.Drawing.Size(120, 17); - this.radioConsistency.TabIndex = 2; - this.radioConsistency.Text = "Consistency checks"; - this.radioConsistency.UseVisualStyleBackColor = true; - // - // buttonGo - // - this.buttonGo.Location = new System.Drawing.Point(12, 92); - this.buttonGo.Name = "buttonGo"; - this.buttonGo.Size = new System.Drawing.Size(100, 25); - this.buttonGo.TabIndex = 3; - this.buttonGo.Text = "Go"; - this.buttonGo.UseVisualStyleBackColor = true; - this.buttonGo.Click += new System.EventHandler(this.buttonGo_Click); - // - // labelLoadingConfiguration - // - this.labelLoadingConfiguration.AutoSize = true; - this.labelLoadingConfiguration.Location = new System.Drawing.Point(12, 239); - this.labelLoadingConfiguration.Name = "labelLoadingConfiguration"; - this.labelLoadingConfiguration.Size = new System.Drawing.Size(109, 13); - this.labelLoadingConfiguration.TabIndex = 4; - this.labelLoadingConfiguration.Text = "(Config load progress)"; - this.labelLoadingConfiguration.Visible = false; - // - // FormStart - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(284, 261); - this.Controls.Add(this.labelLoadingConfiguration); - this.Controls.Add(this.buttonGo); - this.Controls.Add(this.radioConsistency); - this.Controls.Add(this.radioLogosGrid); - this.Controls.Add(this.label1); - this.Name = "FormStart"; - this.Text = "Select tool - Channel logos"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label1; - private System.Windows.Forms.RadioButton radioLogosGrid; - private System.Windows.Forms.RadioButton radioConsistency; - private System.Windows.Forms.Button buttonGo; - private System.Windows.Forms.Label labelLoadingConfiguration; - } -} \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.cs deleted file mode 100644 index fba2fba8..00000000 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.cs +++ /dev/null @@ -1,84 +0,0 @@ -using IpTviewr.UiServices.Configuration; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.Internal.Tools.ChannelLogos -{ - public partial class FormStart : Form - { - public FormStart() - { - InitializeComponent(); - Icon = Properties.Resources.IPTViewr_Tool; - } // constructor - - private void buttonGo_Click(object sender, EventArgs e) - { - Form form; - - if (AppUiConfiguration.Current == null) - { - labelLoadingConfiguration.Text = "Loading configuration..."; - labelLoadingConfiguration.Visible = true; - labelLoadingConfiguration.Refresh(); - if (!LoadConfiguration()) return; - - labelLoadingConfiguration.Visible = false; - } // if - - if (radioLogosGrid.Checked) form = new FormLogos(); - else if (radioConsistency.Checked) form = new FormConsistency(); - else form = null; - - if (form == null) return; - - form.Show(); - } // buttonGo_Click - - private bool LoadConfiguration() - { - var result = GetConfiguration(); - if (!result.IsOk) - { - LoadDisplayProgress(result.Message); - Program.HandleException(this, result.Caption, result.Message, result.InnerException); - return false; - }; - - return true; - } // LoadConfiguration - - private InitializationResult GetConfiguration() - { - InitializationResult result; - - try - { - result = AppUiConfiguration.Load(null, LoadDisplayProgress); - if (result.IsError) return result; - - return InitializationResult.Ok; - } - catch (Exception ex) - { - return new InitializationResult() - { - Caption = "Application configuration error", - Message = "An unexpected error has occured while loading the application configuration.", - InnerException = ex - }; - } // try-catch - } // GetConfiguration - private void LoadDisplayProgress(string text) - { - labelLoadingConfiguration.Text = text; - labelLoadingConfiguration.Refresh(); - } // LoadDisplayProgress - } // class FormStart -} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.resx b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.resx deleted file mode 100644 index 5ea0895e..00000000 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormStart.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormSvgLogosExporter.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormSvgLogosExporter.Designer.cs new file mode 100644 index 00000000..15447270 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormSvgLogosExporter.Designer.cs @@ -0,0 +1,444 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + partial class FormSvgLogosExporter + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSvgLogosExporter)); + this.tabControlMain = new System.Windows.Forms.TabControl(); + this.tabPageOptions = new System.Windows.Forms.TabPage(); + this.buttonExecute = new System.Windows.Forms.Button(); + this.textBoxTo = new System.Windows.Forms.TextBox(); + this.labelTo = new System.Windows.Forms.Label(); + this.groupBoxActions = new System.Windows.Forms.GroupBox(); + this.checkBoxExportAll = new System.Windows.Forms.CheckBox(); + this.radioIsProviders = new System.Windows.Forms.RadioButton(); + this.radioIsServices = new System.Windows.Forms.RadioButton(); + this.groupBoxSizes = new System.Windows.Forms.GroupBox(); + this.checkBoxSize256 = new System.Windows.Forms.CheckBox(); + this.checkBoxSize128 = new System.Windows.Forms.CheckBox(); + this.checkBoxSize96 = new System.Windows.Forms.CheckBox(); + this.checkBoxSize64 = new System.Windows.Forms.CheckBox(); + this.checkBoxSize48 = new System.Windows.Forms.CheckBox(); + this.checkBoxSize32 = new System.Windows.Forms.CheckBox(); + this.checkBoxSize24 = new System.Windows.Forms.CheckBox(); + this.checkBoxRebuildAllIcons = new System.Windows.Forms.CheckBox(); + this.checkBoxIcons = new System.Windows.Forms.CheckBox(); + this.checkBoxExport = new System.Windows.Forms.CheckBox(); + this.textBoxFrom = new System.Windows.Forms.TextBox(); + this.labelFrom = new System.Windows.Forms.Label(); + this.textBoxInkscape = new System.Windows.Forms.TextBox(); + this.labelInkscape = new System.Windows.Forms.Label(); + this.tabPageOutput = new System.Windows.Forms.TabPage(); + this.textBoxOutput = new System.Windows.Forms.TextBox(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.timerOuput = new System.Windows.Forms.Timer(this.components); + this.tabControlMain.SuspendLayout(); + this.tabPageOptions.SuspendLayout(); + this.groupBoxActions.SuspendLayout(); + this.groupBoxSizes.SuspendLayout(); + this.tabPageOutput.SuspendLayout(); + this.SuspendLayout(); + // + // tabControlMain + // + this.tabControlMain.Controls.Add(this.tabPageOptions); + this.tabControlMain.Controls.Add(this.tabPageOutput); + this.tabControlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControlMain.Location = new System.Drawing.Point(0, 0); + this.tabControlMain.Name = "tabControlMain"; + this.tabControlMain.SelectedIndex = 0; + this.tabControlMain.Size = new System.Drawing.Size(784, 388); + this.tabControlMain.TabIndex = 0; + // + // tabPageOptions + // + this.tabPageOptions.Controls.Add(this.buttonExecute); + this.tabPageOptions.Controls.Add(this.textBoxTo); + this.tabPageOptions.Controls.Add(this.labelTo); + this.tabPageOptions.Controls.Add(this.groupBoxActions); + this.tabPageOptions.Controls.Add(this.textBoxFrom); + this.tabPageOptions.Controls.Add(this.labelFrom); + this.tabPageOptions.Controls.Add(this.textBoxInkscape); + this.tabPageOptions.Controls.Add(this.labelInkscape); + this.tabPageOptions.Location = new System.Drawing.Point(4, 22); + this.tabPageOptions.Name = "tabPageOptions"; + this.tabPageOptions.Padding = new System.Windows.Forms.Padding(3); + this.tabPageOptions.Size = new System.Drawing.Size(776, 362); + this.tabPageOptions.TabIndex = 0; + this.tabPageOptions.Text = "Options"; + this.tabPageOptions.UseVisualStyleBackColor = true; + // + // buttonExecute + // + this.buttonExecute.Location = new System.Drawing.Point(273, 89); + this.buttonExecute.Name = "buttonExecute"; + this.buttonExecute.Size = new System.Drawing.Size(100, 25); + this.buttonExecute.TabIndex = 7; + this.buttonExecute.Text = "Execute"; + this.buttonExecute.UseVisualStyleBackColor = true; + this.buttonExecute.Click += new System.EventHandler(this.buttonExecute_Click); + // + // textBoxTo + // + this.textBoxTo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxTo.Location = new System.Drawing.Point(115, 58); + this.textBoxTo.Name = "textBoxTo"; + this.textBoxTo.Size = new System.Drawing.Size(655, 20); + this.textBoxTo.TabIndex = 5; + // + // labelTo + // + this.labelTo.AutoSize = true; + this.labelTo.Location = new System.Drawing.Point(8, 61); + this.labelTo.Name = "labelTo"; + this.labelTo.Size = new System.Drawing.Size(101, 13); + this.labelTo.TabIndex = 4; + this.labelTo.Text = "Logos output folder:"; + // + // groupBoxActions + // + this.groupBoxActions.Controls.Add(this.checkBoxExportAll); + this.groupBoxActions.Controls.Add(this.radioIsProviders); + this.groupBoxActions.Controls.Add(this.radioIsServices); + this.groupBoxActions.Controls.Add(this.groupBoxSizes); + this.groupBoxActions.Controls.Add(this.checkBoxRebuildAllIcons); + this.groupBoxActions.Controls.Add(this.checkBoxIcons); + this.groupBoxActions.Controls.Add(this.checkBoxExport); + this.groupBoxActions.Location = new System.Drawing.Point(6, 84); + this.groupBoxActions.MinimumSize = new System.Drawing.Size(244, 233); + this.groupBoxActions.Name = "groupBoxActions"; + this.groupBoxActions.Size = new System.Drawing.Size(261, 262); + this.groupBoxActions.TabIndex = 6; + this.groupBoxActions.TabStop = false; + this.groupBoxActions.Text = "Actions"; + // + // checkBoxExportAll + // + this.checkBoxExportAll.AutoSize = true; + this.checkBoxExportAll.Location = new System.Drawing.Point(26, 180); + this.checkBoxExportAll.Name = "checkBoxExportAll"; + this.checkBoxExportAll.Size = new System.Drawing.Size(90, 17); + this.checkBoxExportAll.TabIndex = 4; + this.checkBoxExportAll.Text = "Export all files"; + this.checkBoxExportAll.UseVisualStyleBackColor = true; + // + // radioIsProviders + // + this.radioIsProviders.AutoSize = true; + this.radioIsProviders.Location = new System.Drawing.Point(113, 19); + this.radioIsProviders.Name = "radioIsProviders"; + this.radioIsProviders.Size = new System.Drawing.Size(69, 17); + this.radioIsProviders.TabIndex = 1; + this.radioIsProviders.Text = "Providers"; + this.radioIsProviders.UseVisualStyleBackColor = true; + // + // radioIsServices + // + this.radioIsServices.AutoSize = true; + this.radioIsServices.Checked = true; + this.radioIsServices.Location = new System.Drawing.Point(15, 19); + this.radioIsServices.Name = "radioIsServices"; + this.radioIsServices.Size = new System.Drawing.Size(66, 17); + this.radioIsServices.TabIndex = 0; + this.radioIsServices.TabStop = true; + this.radioIsServices.Text = "Services"; + this.radioIsServices.UseVisualStyleBackColor = true; + // + // groupBoxSizes + // + this.groupBoxSizes.Controls.Add(this.checkBoxSize256); + this.groupBoxSizes.Controls.Add(this.checkBoxSize128); + this.groupBoxSizes.Controls.Add(this.checkBoxSize96); + this.groupBoxSizes.Controls.Add(this.checkBoxSize64); + this.groupBoxSizes.Controls.Add(this.checkBoxSize48); + this.groupBoxSizes.Controls.Add(this.checkBoxSize32); + this.groupBoxSizes.Controls.Add(this.checkBoxSize24); + this.groupBoxSizes.Location = new System.Drawing.Point(26, 74); + this.groupBoxSizes.Name = "groupBoxSizes"; + this.groupBoxSizes.Size = new System.Drawing.Size(212, 100); + this.groupBoxSizes.TabIndex = 3; + this.groupBoxSizes.TabStop = false; + this.groupBoxSizes.Text = "Export sizes"; + // + // checkBoxSize256 + // + this.checkBoxSize256.AutoSize = true; + this.checkBoxSize256.Checked = true; + this.checkBoxSize256.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxSize256.Location = new System.Drawing.Point(138, 19); + this.checkBoxSize256.Name = "checkBoxSize256"; + this.checkBoxSize256.Size = new System.Drawing.Size(49, 17); + this.checkBoxSize256.TabIndex = 6; + this.checkBoxSize256.Text = "256x"; + this.checkBoxSize256.UseVisualStyleBackColor = true; + // + // checkBoxSize128 + // + this.checkBoxSize128.AutoSize = true; + this.checkBoxSize128.Checked = true; + this.checkBoxSize128.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxSize128.Location = new System.Drawing.Point(75, 68); + this.checkBoxSize128.Name = "checkBoxSize128"; + this.checkBoxSize128.Size = new System.Drawing.Size(49, 17); + this.checkBoxSize128.TabIndex = 5; + this.checkBoxSize128.Text = "128x"; + this.checkBoxSize128.UseVisualStyleBackColor = true; + // + // checkBoxSize96 + // + this.checkBoxSize96.AutoSize = true; + this.checkBoxSize96.Checked = true; + this.checkBoxSize96.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxSize96.Location = new System.Drawing.Point(75, 45); + this.checkBoxSize96.Name = "checkBoxSize96"; + this.checkBoxSize96.Size = new System.Drawing.Size(43, 17); + this.checkBoxSize96.TabIndex = 4; + this.checkBoxSize96.Text = "96x"; + this.checkBoxSize96.UseVisualStyleBackColor = true; + // + // checkBoxSize64 + // + this.checkBoxSize64.AutoSize = true; + this.checkBoxSize64.Checked = true; + this.checkBoxSize64.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxSize64.Location = new System.Drawing.Point(75, 19); + this.checkBoxSize64.Name = "checkBoxSize64"; + this.checkBoxSize64.Size = new System.Drawing.Size(43, 17); + this.checkBoxSize64.TabIndex = 3; + this.checkBoxSize64.Text = "64x"; + this.checkBoxSize64.UseVisualStyleBackColor = true; + // + // checkBoxSize48 + // + this.checkBoxSize48.AutoSize = true; + this.checkBoxSize48.Checked = true; + this.checkBoxSize48.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxSize48.Location = new System.Drawing.Point(12, 68); + this.checkBoxSize48.Name = "checkBoxSize48"; + this.checkBoxSize48.Size = new System.Drawing.Size(43, 17); + this.checkBoxSize48.TabIndex = 2; + this.checkBoxSize48.Text = "48x"; + this.checkBoxSize48.UseVisualStyleBackColor = true; + // + // checkBoxSize32 + // + this.checkBoxSize32.AutoSize = true; + this.checkBoxSize32.Checked = true; + this.checkBoxSize32.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxSize32.Location = new System.Drawing.Point(12, 45); + this.checkBoxSize32.Name = "checkBoxSize32"; + this.checkBoxSize32.Size = new System.Drawing.Size(43, 17); + this.checkBoxSize32.TabIndex = 1; + this.checkBoxSize32.Text = "32x"; + this.checkBoxSize32.UseVisualStyleBackColor = true; + // + // checkBoxSize24 + // + this.checkBoxSize24.AutoSize = true; + this.checkBoxSize24.Checked = true; + this.checkBoxSize24.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxSize24.Location = new System.Drawing.Point(12, 19); + this.checkBoxSize24.Name = "checkBoxSize24"; + this.checkBoxSize24.Size = new System.Drawing.Size(43, 17); + this.checkBoxSize24.TabIndex = 0; + this.checkBoxSize24.Text = "24x"; + this.checkBoxSize24.UseVisualStyleBackColor = true; + // + // checkBoxRebuildAllIcons + // + this.checkBoxRebuildAllIcons.AutoSize = true; + this.checkBoxRebuildAllIcons.Location = new System.Drawing.Point(36, 234); + this.checkBoxRebuildAllIcons.Name = "checkBoxRebuildAllIcons"; + this.checkBoxRebuildAllIcons.Size = new System.Drawing.Size(75, 17); + this.checkBoxRebuildAllIcons.TabIndex = 6; + this.checkBoxRebuildAllIcons.Text = "Rebuild all"; + this.checkBoxRebuildAllIcons.UseVisualStyleBackColor = true; + // + // checkBoxIcons + // + this.checkBoxIcons.AutoSize = true; + this.checkBoxIcons.Checked = true; + this.checkBoxIcons.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxIcons.Location = new System.Drawing.Point(15, 211); + this.checkBoxIcons.Name = "checkBoxIcons"; + this.checkBoxIcons.Size = new System.Drawing.Size(105, 17); + this.checkBoxIcons.TabIndex = 5; + this.checkBoxIcons.Text = "Build logos icons"; + this.checkBoxIcons.UseVisualStyleBackColor = true; + this.checkBoxIcons.CheckedChanged += new System.EventHandler(this.checkBoxIcons_CheckedChanged); + // + // checkBoxExport + // + this.checkBoxExport.AutoSize = true; + this.checkBoxExport.Checked = true; + this.checkBoxExport.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxExport.Location = new System.Drawing.Point(15, 51); + this.checkBoxExport.Name = "checkBoxExport"; + this.checkBoxExport.Size = new System.Drawing.Size(140, 17); + this.checkBoxExport.TabIndex = 2; + this.checkBoxExport.Text = "Export SVG files to PNG"; + this.checkBoxExport.UseVisualStyleBackColor = true; + this.checkBoxExport.CheckedChanged += new System.EventHandler(this.checkBoxExport_CheckedChanged); + // + // textBoxFrom + // + this.textBoxFrom.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxFrom.Location = new System.Drawing.Point(115, 32); + this.textBoxFrom.Name = "textBoxFrom"; + this.textBoxFrom.Size = new System.Drawing.Size(655, 20); + this.textBoxFrom.TabIndex = 3; + // + // labelFrom + // + this.labelFrom.AutoSize = true; + this.labelFrom.Location = new System.Drawing.Point(8, 35); + this.labelFrom.Name = "labelFrom"; + this.labelFrom.Size = new System.Drawing.Size(73, 13); + this.labelFrom.TabIndex = 2; + this.labelFrom.Text = "Source folder:"; + // + // textBoxInkscape + // + this.textBoxInkscape.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxInkscape.Location = new System.Drawing.Point(115, 6); + this.textBoxInkscape.Name = "textBoxInkscape"; + this.textBoxInkscape.Size = new System.Drawing.Size(655, 20); + this.textBoxInkscape.TabIndex = 1; + // + // labelInkscape + // + this.labelInkscape.AutoSize = true; + this.labelInkscape.Location = new System.Drawing.Point(8, 9); + this.labelInkscape.Name = "labelInkscape"; + this.labelInkscape.Size = new System.Drawing.Size(95, 13); + this.labelInkscape.TabIndex = 0; + this.labelInkscape.Text = "Inkscape program:"; + // + // tabPageOutput + // + this.tabPageOutput.Controls.Add(this.textBoxOutput); + this.tabPageOutput.Controls.Add(this.buttonCancel); + this.tabPageOutput.Location = new System.Drawing.Point(4, 22); + this.tabPageOutput.Name = "tabPageOutput"; + this.tabPageOutput.Padding = new System.Windows.Forms.Padding(3); + this.tabPageOutput.Size = new System.Drawing.Size(776, 362); + this.tabPageOutput.TabIndex = 1; + this.tabPageOutput.Text = "Output"; + this.tabPageOutput.UseVisualStyleBackColor = true; + // + // textBoxOutput + // + this.textBoxOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxOutput.BackColor = System.Drawing.SystemColors.Window; + this.textBoxOutput.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBoxOutput.Location = new System.Drawing.Point(6, 37); + this.textBoxOutput.Multiline = true; + this.textBoxOutput.Name = "textBoxOutput"; + this.textBoxOutput.ReadOnly = true; + this.textBoxOutput.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxOutput.Size = new System.Drawing.Size(764, 319); + this.textBoxOutput.TabIndex = 1; + this.textBoxOutput.WordWrap = false; + // + // buttonCancel + // + this.buttonCancel.Enabled = false; + this.buttonCancel.Image = ((System.Drawing.Image)(resources.GetObject("buttonCancel.Image"))); + this.buttonCancel.Location = new System.Drawing.Point(6, 6); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(100, 25); + this.buttonCancel.TabIndex = 0; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonCancel.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // timerOuput + // + this.timerOuput.Interval = 1500; + // + // FormSvgLogosExporter + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 388); + this.Controls.Add(this.tabControlMain); + this.Name = "FormSvgLogosExporter"; + this.Text = "Logos: SVG exporter"; + this.tabControlMain.ResumeLayout(false); + this.tabPageOptions.ResumeLayout(false); + this.tabPageOptions.PerformLayout(); + this.groupBoxActions.ResumeLayout(false); + this.groupBoxActions.PerformLayout(); + this.groupBoxSizes.ResumeLayout(false); + this.groupBoxSizes.PerformLayout(); + this.tabPageOutput.ResumeLayout(false); + this.tabPageOutput.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl tabControlMain; + private System.Windows.Forms.TabPage tabPageOptions; + private System.Windows.Forms.TabPage tabPageOutput; + private System.Windows.Forms.TextBox textBoxOutput; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonExecute; + private System.Windows.Forms.TextBox textBoxTo; + private System.Windows.Forms.Label labelTo; + private System.Windows.Forms.GroupBox groupBoxSizes; + private System.Windows.Forms.CheckBox checkBoxSize256; + private System.Windows.Forms.CheckBox checkBoxSize128; + private System.Windows.Forms.CheckBox checkBoxSize96; + private System.Windows.Forms.CheckBox checkBoxSize64; + private System.Windows.Forms.CheckBox checkBoxSize48; + private System.Windows.Forms.CheckBox checkBoxSize32; + private System.Windows.Forms.CheckBox checkBoxSize24; + private System.Windows.Forms.GroupBox groupBoxActions; + private System.Windows.Forms.CheckBox checkBoxIcons; + private System.Windows.Forms.CheckBox checkBoxExport; + private System.Windows.Forms.TextBox textBoxFrom; + private System.Windows.Forms.Label labelFrom; + private System.Windows.Forms.TextBox textBoxInkscape; + private System.Windows.Forms.Label labelInkscape; + private System.Windows.Forms.CheckBox checkBoxRebuildAllIcons; + private System.Windows.Forms.Timer timerOuput; + private System.Windows.Forms.RadioButton radioIsProviders; + private System.Windows.Forms.RadioButton radioIsServices; + private System.Windows.Forms.CheckBox checkBoxExportAll; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormSvgLogosExporter.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormSvgLogosExporter.cs new file mode 100644 index 00000000..af22e68c --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormSvgLogosExporter.cs @@ -0,0 +1,156 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Native; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + public partial class FormSvgLogosExporter : Form + { + private readonly TextBoxOutputWriter _output; + private CancellationTokenSource _tokenSource; + + public FormSvgLogosExporter() + { + InitializeComponent(); + Icon = Properties.Resources.IPTViewr_Tool; + _output = new TextBoxOutputWriter(textBoxOutput, timerOuput); + } // constructor + + #region Overrides of Form + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) + { + components?.Dispose(); + _tokenSource?.Dispose(); + } //if + base.Dispose(disposing); + } // Dispose + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + textBoxInkscape.Text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Inkscape\Inkscape.com"); + + var baseFolder = Path.GetFullPath(Path.Combine(Application.StartupPath, @"..\..\..\..")); + textBoxFrom.Text = Path.Combine(baseFolder, @"Logos\Sources"); + textBoxTo.Text = Path.Combine(baseFolder, @"Logos"); + } // OnLoad + + #endregion + + private void checkBoxExport_CheckedChanged(object sender, EventArgs e) + { + groupBoxSizes.Enabled = checkBoxExport.Checked; + checkBoxExportAll.Enabled = checkBoxExport.Checked; + } // checkBoxExport_CheckedChanged + + private void checkBoxIcons_CheckedChanged(object sender, EventArgs e) + { + checkBoxRebuildAllIcons.Enabled = checkBoxIcons.Checked; + } // checkBoxIcons_CheckedChanged + + private async void buttonExecute_Click(object sender, EventArgs e) + { + buttonCancel.Enabled = true; + tabControlMain.SelectedTab = tabPageOutput; + tabPageOptions.Enabled = false; + _output.Clear(); + _output.Start(); + + try + { + _tokenSource?.Dispose(); + _tokenSource = new CancellationTokenSource(); + var token = _tokenSource.Token; + if (checkBoxExport.Checked) await Export(token); + if (checkBoxIcons.Checked) await BuildIcons(token); + } + catch (Exception ex) + { + _output.WriteException(ex); + } // try-catch + + _output.Stop(); + buttonCancel.Enabled = false; + tabPageOptions.Enabled = true; + } // buttonExecute_Click + + private void buttonCancel_Click(object sender, EventArgs e) + { + _tokenSource?.Cancel(); + buttonCancel.Enabled = false; + } // buttonCancel_Click + + #region Actions: Export + + private Task Export(CancellationToken token) + { + _output.WriteLine("---------------------------------------------------"); + _output.WriteLine("Exporting logos"); + _output.WriteLine("---------------------------------------------------"); + _output.WriteLine(); + + var sizes = new List(8); + if (checkBoxSize24.Checked) sizes.Add(24); + if (checkBoxSize32.Checked) sizes.Add(32); + if (checkBoxSize48.Checked) sizes.Add(48); + if (checkBoxSize64.Checked) sizes.Add(64); + if (checkBoxSize96.Checked) sizes.Add(96); + if (checkBoxSize128.Checked) sizes.Add(128); + if (checkBoxSize256.Checked) sizes.Add(256); + + var subPath = radioIsServices.Checked ? "Services" : "Providers"; + var source = Path.Combine(textBoxFrom.Text, subPath); + var destination = Path.Combine(textBoxTo.Text, subPath); + var exporter = new LogosSvgExporter(textBoxInkscape.Text, sizes, source, destination, radioIsServices.Checked, checkBoxExportAll.Checked, _output); + return exporter.ExportAsync(Handle, token); + } // Export + + #endregion + + #region Actions: Icons + + private Task BuildIcons(CancellationToken token) + { + _output.WriteLine("---------------------------------------------------"); + _output.WriteLine("Building icons"); + _output.WriteLine("---------------------------------------------------"); + _output.WriteLine(); + + var subPath = radioIsServices.Checked ? "Services" : "Providers"; + var source = Path.Combine(textBoxTo.Text, subPath); + var builder = new LogosIconBuilder(source, radioIsServices.Checked, checkBoxRebuildAllIcons.Checked, _output); + + return builder.BuildAsync(token); + } // BuildIcons + + #endregion + } // partial class FormSvgLogosExporter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormSvgLogosExporter.resx b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormSvgLogosExporter.resx new file mode 100644 index 00000000..cf914a62 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/FormSvgLogosExporter.resx @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAAd0SU1FB94MBQ0BGvpvkaQAAAGqSURBVDhPrZPJS0JRGMX9eywb1NLMNDWnsmFV + qywbtQzJ7JXPgloU0iYICoSSoIHKVVCrFhVBw0qioqBNChXUJmoR1OL0Pq/ZKwRddODw3r33dw93+K7k + XzTeZMdYow2hBiv4egtGHWaM1JrA2Y0IWKvht+gxWFMFn7ESAwYNvHo10lPZ5O2ZKXzGT/FxdpjTxK1P + hODRlrEQCng/2cfb5hJe1yI5TRzxvZVKFkBLf9mN4WkhnLeJ79EoWADt+3kriuQ0B7Go/W2xqE18d4Wc + BdChPUTncMt1pyxWtjaZ+C51KQsICgGJ+TAuPc0ZZ5N4nPhOVQkLoCu7DnpwbJD+slh/x4jvKC9OB9TV + 4ILvx6FRlnE2iceJd5UVsQBOKJiLyQAO6jUpi3W3EU3/MX0zxLcrZSxgWKi2qzCPo2ZTGmN63NtJ9dFX + LOojvk1RyAICNgNuZidx6nLkbeKd8gIWMCTUemJlAed+J+LelpwmjvjWUikL8Jt1WOX9uI8tIrk8m9PE + RXzunwCSz6TNvLI+nQpu4aH0CqVK1Ub3TVfmEg6N9k1L/5kskXwBzPdrLPOykw4AAAAASUVORK5CYII= + + + + 17, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/IToolOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/IToolOutputWriter.cs new file mode 100644 index 00000000..80045ff4 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/IToolOutputWriter.cs @@ -0,0 +1,32 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + public interface IToolOutputWriter + { + void WriteLine(); + void WriteLine(string text); + void WriteLine(string format, params object[] objects); + void WriteException(Exception ex, string message = null); + int IncreaseIndent(); + int DecreaseIndent(); + bool WriteTimestamps { get; set; } + bool AbsoluteTimestamps { get; set; } + TimeSpan ElapsedTime { get; } + DateTime UtcStartTime { get; } + int IndentLevel { get; } + } // IToolOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/LICENSE.ES.MD b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LICENSE.ES.MD new file mode 100644 index 00000000..59258b2a --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LICENSE.ES.MD @@ -0,0 +1,325 @@ +# Biblioteca 'ChannelLogos' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. ChannelLogos +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Etsi.Ts102034 +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTviewr.ToolsUiFramework +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.Forms +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/LICENSE.MD b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LICENSE.MD new file mode 100644 index 00000000..74eb6b19 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LICENSE.MD @@ -0,0 +1,297 @@ +# Library 'ChannelLogos' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. ChannelLogos +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Etsi.Ts102034 +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTviewr.ToolsUiFramework +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.Forms +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/License.txt b/1.5 'Kruger 60'/InternalTools/ChannelLogos/License.txt new file mode 100644 index 00000000..6b58cd26 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/License.txt @@ -0,0 +1,308 @@ +############################################################################## +## +## Library 'ChannelLogos' +## +############################################################################## +## +## Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + * The MIT License (MIT) + * Microsoft® Exception Message Box License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. ChannelLogos +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.IpTvServices +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. IpTviewr.ToolsUiFramework +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. UiServices.DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. UiServices.Forms +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosConsistenceTool.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosConsistenceTool.cs new file mode 100644 index 00000000..5079dc52 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosConsistenceTool.cs @@ -0,0 +1,43 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.ComponentModel.Composition; +using System.Drawing; +using System.Windows.Forms; +using IpTviewr.Internal.Tools.UiFramework; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + [Export(typeof(IGuiTool))] + [Export(typeof(IGuiToolDataProvider))] + [ExportMetadata("Guid", ToolGuid)] + public class LogosConsistenceTool: IGuiTool, IGuiToolDataProvider + { + public const string ToolGuid = "{140E3751-FC92-4A58-BB54-23F9CCD98D43}"; + + #region Implementation of IGuiTool + + public Form CreateForm() => new FormConsistency(); + + #endregion + + #region Implementation of IToolDataProvider + + public string Guid => ToolGuid; + public string Category => "Logos"; + public string Name => "Logos consistency"; + public Image GetLogo(int size) => null; + + #endregion + } // class LogosConsistenceTool +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosIconBuilder.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosIconBuilder.cs new file mode 100644 index 00000000..624c3051 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosIconBuilder.cs @@ -0,0 +1,119 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using IpTviewr.Native; +using JetBrains.Annotations; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + internal class LogosIconBuilder + { + public LogosIconBuilder(string logosFolder, bool isServices, bool rebuildAll, IToolOutputWriter output) + { + LogosFolder = logosFolder ?? throw new ArgumentNullException(nameof(logosFolder)); + Output = output ?? throw new ArgumentNullException(nameof(output)); + IsServices = isServices; + RebuildAll = rebuildAll; + } // constructor + + [NotNull] + private string LogosFolder { get; } + + [NotNull] + private IToolOutputWriter Output { get; } + + private bool IsServices { get; } + + private bool RebuildAll { get; } + + public Task BuildAsync(CancellationToken token) + { + var task = new Task(() => + { + Output.IncreaseIndent(); + + Build(token); + + Output.DecreaseIndent(); + }, token, TaskCreationOptions.LongRunning); + task.Start(); + + return task; + } // BuildAsync + + private void Build(CancellationToken token) + { + foreach (var folder in Directory.EnumerateDirectories(LogosFolder, "*", SearchOption.AllDirectories)) + { + if (token.IsCancellationRequested) return; + + var sizes = Directory.GetFiles(folder, "*.png"); + if (sizes.Length == 0) continue; + + var iconFile = Path.Combine(folder, GetIconName(folder)); + if (SkipIcon(iconFile, sizes)) continue; + + Output.WriteLine(iconFile.Substring(LogosFolder.Length + 1)); + Output.IncreaseIndent(); + BuildIcon(iconFile, sizes); + Output.DecreaseIndent(); + } // foreach + } // Build + + private void BuildIcon(string iconFile, string[] sizes) + { + try + { + using var icon = new WindowsIcon(sizes.Length); + foreach (var size in sizes) + { + var bitmap = (Bitmap)Image.FromFile(size); + icon.AddImage(bitmap, WindowsIcon.SaveAs.Png); + } // foreach + + icon.Save(iconFile); + } + catch (Exception ex) + { + Output.WriteException(ex); + } // try-catch + } // BuildIcon + + private string GetIconName(string folder) + { + if (!IsServices) return Path.GetFileName(folder) + ".ico"; + + var parent = Path.GetFullPath(Path.Combine(folder, "..")); + return Path.GetFileName(parent) + ".ico"; + } // GetIconName + + private bool SkipIcon(string iconFile, string[] sizes) + { + if (RebuildAll) return false; + + var iconInfo = new FileInfo(iconFile); + if (!iconInfo.Exists) return false; + + var last = sizes.Select(size => new FileInfo(size)).Max(info => Math.Max(info.CreationTime.Ticks, info.LastWriteTime.Ticks)); + var iconLast = Math.Max(iconInfo.CreationTime.Ticks, iconInfo.LastWriteTime.Ticks); + + return (iconLast > last); + } // SkipIcon + } // class LogosIconBuilder +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosMaintenanceTool.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosMaintenanceTool.cs new file mode 100644 index 00000000..6ff7f3dc --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosMaintenanceTool.cs @@ -0,0 +1,43 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.ComponentModel.Composition; +using System.Drawing; +using System.Windows.Forms; +using IpTviewr.Internal.Tools.UiFramework; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + [Export(typeof(IGuiTool))] + [Export(typeof(IGuiToolDataProvider))] + [ExportMetadata("Guid", ToolGuid)] + public class LogosMaintenanceTool : IGuiTool, IGuiToolDataProvider + { + public const string ToolGuid = "{6489E249-343F-4C7C-B3AC-6738C5769A27}"; + + #region Implementation of IGuiTool + + public Form CreateForm() => new FormSvgLogosExporter(); + + #endregion + + #region Implementation of IToolDataProvider + + public string Guid => ToolGuid; + public string Category => "Logos"; + public string Name => "SVG exporter"; + public Image GetLogo(int size) => null; + + #endregion + } // class LogosMaintenanceTool +} // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosSvgExporter.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosSvgExporter.cs new file mode 100644 index 00000000..c3c1c6ad --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosSvgExporter.cs @@ -0,0 +1,192 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using IpTviewr.UiServices.Configuration.Logos; +using JetBrains.Annotations; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + internal sealed class LogosSvgExporter + { + public LogosSvgExporter(string inkscapePath, ICollection sizes, string source, string destination, bool isServices, bool exportAll, IToolOutputWriter output) + { + InkscapePath = inkscapePath ?? throw new ArgumentNullException(nameof(inkscapePath)); + Sizes = sizes ?? throw new ArgumentNullException(nameof(sizes)); + Source = source ?? throw new ArgumentNullException(nameof(source)); + Destination = destination ?? throw new ArgumentNullException(nameof(destination)); + Output = output ?? throw new ArgumentNullException(nameof(output)); + IsServices = isServices; + ExportAll = exportAll; + } // constructor + + [NotNull] + private string InkscapePath { get; } + + [NotNull] + private ICollection Sizes { get; } + + [NotNull] + private string Source { get; } + + [NotNull] + private string Destination { get; } + + [NotNull] + private IToolOutputWriter Output { get; } + + private bool IsServices { get; } + + private bool ExportAll { get; } + + public Task ExportAsync(IntPtr ownerHandle, CancellationToken token) + { + if (ownerHandle == IntPtr.Zero) throw new ArgumentException(null, nameof(ownerHandle)); + if (Sizes.Count == 0) return Task.CompletedTask; + + var startInfo = new ProcessStartInfo + { + FileName = Path.GetFileName(InkscapePath), + Arguments = "--shell", + CreateNoWindow = true, + ErrorDialog = true, + ErrorDialogParentHandle = ownerHandle, + RedirectStandardError = true, + RedirectStandardInput = true, + RedirectStandardOutput = true, + UseShellExecute = false, + WorkingDirectory = Source, + }; + + var task = new Task(() => + { + var current = Environment.CurrentDirectory; + Environment.CurrentDirectory = Path.GetDirectoryName(InkscapePath) ?? Path.GetPathRoot(InkscapePath); + Output.IncreaseIndent(); + + Export(startInfo, token); + + Output.DecreaseIndent(); + Environment.CurrentDirectory = current; + }, token, TaskCreationOptions.LongRunning); + task.Start(); + + return task; + } // ExportAsync + + private void Export(ProcessStartInfo startInfo, CancellationToken token) + { + using var inkscapeProcess = new Process + { + StartInfo = startInfo, + }; + inkscapeProcess.OutputDataReceived += OnOutputDataReceived; + inkscapeProcess.ErrorDataReceived += OnErrorDataReceived; + + inkscapeProcess.Start(); + inkscapeProcess.BeginOutputReadLine(); + inkscapeProcess.BeginErrorReadLine(); + + var exports = from svgFile in new DirectoryInfo(Source).EnumerateFiles("*.svg", SearchOption.AllDirectories) + let destination = GetDestinationFolder(svgFile) + let sourceDate = Math.Max(svgFile.CreationTime.Ticks, svgFile.LastWriteTime.Ticks) + from size in Sizes + let output = GetExportFilename(destination, sourceDate, size) + where output != null + select (svgFile, size, output, sourceDate); + + using var input = inkscapeProcess.StandardInput; + var files = new List<(string, long)>(); + foreach (var (svgFile, size, output, sourceDate) in exports) + { + if (token.IsCancellationRequested) break; + + files.Add((output, sourceDate)); + var command = $"--export-png \"{output}\" -C -w {size} \"{svgFile.FullName}\""; + input.WriteLine(command); + } // foreach file + input.WriteLine("quit"); + + inkscapeProcess.WaitForExit(); + + foreach (var (file, sourceDate) in files) + { + var info = new FileInfo(file); + var date = new DateTime(sourceDate); + info.CreationTime = date; + info.LastWriteTime = date; + info.LastAccessTime = date; + } // foreach + } // Export + + private string GetDestinationFolder(FileInfo svgFile) + { + string destFolder; + + var partial = svgFile.DirectoryName.Substring(Source.Length + 1); + var name = Path.GetFileNameWithoutExtension(svgFile.Name); + + if (IsServices) + { + var (subPath, trim) = name.Substring(0, 3) switch + { + "sd_" => (ServiceLogo.QualityStandard, true), + "hd_" => (ServiceLogo.QualityHigh, true), + "4k_" => (ServiceLogo.QualityUltraHigh4K, true), + _ => (ServiceLogo.QualityDefault, false) + }; + + if (trim) name = name.Substring(3); + destFolder = Path.Combine(Destination, partial, name, subPath); + } + else + { + destFolder = Path.Combine(Destination, partial, name); + } // if-else + + Directory.CreateDirectory(destFolder); + + return destFolder; + } // GetDestinationFolder + + private string GetExportFilename(string destinationFolder, long sourceDate, int size) + { + var destFile = new FileInfo(Path.Combine(destinationFolder, $"{size}.png")); + + if (ExportAll) return destinationFolder; + if (!destFile.Exists) return destFile.FullName; + + var destDate = Math.Max(destFile.CreationTime.Ticks, destFile.LastWriteTime.Ticks); + return (sourceDate <= destDate) ? null : destFile.FullName; + } // GetExportFilename + + private void OnOutputDataReceived(object sender, DataReceivedEventArgs e) + { + if (string.IsNullOrEmpty(e.Data)) return; + Output.WriteLine(e.Data); + } // OnOutputDataReceived + + private void OnErrorDataReceived(object sender, DataReceivedEventArgs e) + { + if (string.IsNullOrEmpty(e.Data)) return; + + Output.WriteLine("ERROR: " + e.Data); + } // OnErrorDataReceived + } // class LogosSvgExporter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosTool.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosTool.cs new file mode 100644 index 00000000..6bca39e8 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/LogosTool.cs @@ -0,0 +1,43 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.ComponentModel.Composition; +using System.Drawing; +using System.Windows.Forms; +using IpTviewr.Internal.Tools.UiFramework; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + [Export(typeof(IGuiTool))] + [Export(typeof(IGuiToolDataProvider))] + [ExportMetadata("Guid", ToolGuid)] + public class LogosTool: IGuiTool, IGuiToolDataProvider + { + public const string ToolGuid = "{355504D7-B9F4-467B-9C4C-E73BF537ED3C}"; + + #region Implementation of IGuiTool + + public Form CreateForm() => new FormLogos(); + + #endregion + + #region Implementation of IToolDataProvider + + public string Guid => ToolGuid; + public string Category => "Logos"; + public string Name => "Logos grid"; + public Image GetLogo(int size) => null; + + #endregion + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Program.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Program.cs deleted file mode 100644 index 52180548..00000000 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Program.cs +++ /dev/null @@ -1,89 +0,0 @@ -using Microsoft.SqlServer.MessageBox; -using IpTviewr.Common; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; - -namespace IpTviewr.Internal.Tools.ChannelLogos -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new FormStart()); - } - - internal static void HandleException(IWin32Window owner, string message, Exception ex) - { - HandleException(owner, - null, - message, - MessageBoxIcon.Error, - ex); - } // HandleException - - internal static void HandleException(IWin32Window owner, string caption, string message, Exception ex) - { - HandleException(owner, - caption, - message, - MessageBoxIcon.Error, - ex); - } // HandleException - - internal static void HandleException(IWin32Window owner, string caption, string message, MessageBoxIcon icon, Exception ex) - { - AddExceptionAdvancedInformation(ex); - - var box = new ExceptionMessageBox() - { - Caption = caption ?? "Properties.Texts.MyAppHandleExceptionDefaultCaption", - Text = message ?? "Properties.Texts.MyAppHandleExceptionDefaultMessage", - InnerException = ex, - Beep = true, - Symbol = TranslateIconToSymbol(icon), - }; - box.Show(owner); - } // HandleException - - internal static void HandleException(object sender, HandleExceptionEventArgs e) - { - HandleException(e.OwnerForm, e.Caption, e.Message, e.Exception); - } // HandleException - - private static ExceptionMessageBoxSymbol TranslateIconToSymbol(MessageBoxIcon icon) - { - switch (icon) - { - case MessageBoxIcon.Asterisk: return ExceptionMessageBoxSymbol.Asterisk; - case MessageBoxIcon.Error: return ExceptionMessageBoxSymbol.Error; - case MessageBoxIcon.Exclamation: return ExceptionMessageBoxSymbol.Exclamation; - //case MessageBoxIcon.Hand: return ExceptionMessageBoxSymbol.Hand; - //case MessageBoxIcon.Information: return ExceptionMessageBoxSymbol.Information; - case MessageBoxIcon.Question: return ExceptionMessageBoxSymbol.Question; - //case MessageBoxIcon.Stop: return ExceptionMessageBoxSymbol.Stop; - //case MessageBoxIcon.Warning: return ExceptionMessageBoxSymbol.Warning; - default: - return ExceptionMessageBoxSymbol.None; - } // switch - } // TranslateIconToSymbol - - private static void AddExceptionAdvancedInformation(Exception ex) - { - while (ex != null) - { - ex.Data["AdvancedInformation.Exception.Type"] = ex.GetType().FullName; - ex.Data["AdvancedInformation.Exception.Assembly"] = ex.GetType().Assembly.ToString(); - ex = ex.InnerException; - } // while - } // AddExceptionAdvancedInformation - - } -} diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/AssemblyInfo.cs index 23233960..7defe72f 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/AssemblyInfo.cs @@ -1,36 +1,40 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ChannelLogos")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ChannelLogos")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("a51cc220-48c4-46f6-bf5d-3178cc317426")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IPTV project internal tools: ChannelLogos")] +[assembly: AssemblyDescription("IpTviewr.Internal.Tools.ChannelLogos")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a51cc220-48c4-46f6-bf5d-3178cc317426")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.Designer.cs index 8f50949e..647783c1 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Internal.Tools.ChannelLogos.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.Internal.Tools.ChannelLogos.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.resx b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.resx index 63d8c7ba..1604e909 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.resx +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Resources.resx @@ -1,124 +1,124 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\IPTViewr_Tool.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\IPTViewr_Tool.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Settings.Designer.cs index b44956a1..40156047 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/Properties/Settings.Designer.cs @@ -1,18 +1,21 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Internal.Tools.ChannelLogos.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.1.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/TextBoxOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/TextBoxOutputWriter.cs new file mode 100644 index 00000000..cbd4ca24 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/TextBoxOutputWriter.cs @@ -0,0 +1,150 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.ChannelLogos +{ + public sealed class TextBoxOutputWriter : BaseOutputWriter, IToolOutputWriter + { + private readonly TextBox _textBox; + private readonly Timer _timer; + private readonly StringBuilder _buffer; + + public TextBoxOutputWriter(TextBox textBox, Timer timer = null, int indentSize = 4): base(indentSize) + { + _textBox = textBox ?? throw new ArgumentNullException(nameof(textBox)); + _timer = timer; + _buffer = new StringBuilder(); + } // constructor + + public void Clear() + { + _textBox.Text = null; + Reset(); + } // Clear + + public void Start(bool buffered = true) + { + Buffered = buffered; + if (_timer != null) + { + _timer.Tick += TimerOnTick; + _timer.Start(); + } // if + lock (_buffer) + { + _buffer.Clear(); + } // lock + + Started = true; + } // Start + + public void Stop() + { + EmptyBuffer(); + Started = false; + + if (_timer == null) return; + + _timer.Tick -= TimerOnTick; + _timer.Stop(); + } // Stop + + public bool Buffered { get; private set; } + + private void TimerOnTick(object sender, EventArgs e) + { + EmptyBuffer(); + } // TimerOnTick + + private void EmptyBuffer() + { + lock (_buffer) + { + _textBox.Invoke(new Action(() => + { + _textBox.Text += _buffer.ToString(); + _textBox.SelectionStart = _textBox.Text.Length; + _textBox.SelectionLength = 0; + _textBox.ScrollToCaret(); + })); + + _buffer.Clear(); + } // lock + } // EmptyBuffer + + + #region Implementation of IToolOutputWriter + + public void WriteLine() + { + if (!Started) return; + + if (!Buffered) + { + _textBox.BeginInvoke(new Action(() => + _textBox.Text += Environment.NewLine)); + } + else + { + lock (_buffer) + { + _buffer.AppendLine(); + } // lock + } // if-else + } // WriteLine + + public override void WriteLine(string text) + { + if (!Started) return; + + if (!Buffered) + { + _textBox.BeginInvoke(new Action(() => + _textBox.Text = _textBox.Text + Environment.NewLine + GetTimestamp() + GetIndent() + text)); + } + else + { + lock (_buffer) + { + AppendText(_buffer, text); + } // lock + } // if-else + } // WriteLine + + public void WriteLine(string format, params object[] objects) + { + if (!Started) return; + + if (!Buffered) + { + _textBox.BeginInvoke(new Action(() => + _textBox.Text = $@"{_textBox.Text}{Environment.NewLine}{GetTimestamp()}{GetIndent()}{string.Format(format, objects)}")); + } + else + { + lock (_buffer) + { + AppendText(_buffer, null); + _buffer.AppendFormat(format, objects); + _buffer.AppendLine(); + } // lock + } // if-else + } // WriteLine + + #endregion + } // class TextBoxOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/WebClientEx.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogos/WebClientEx.cs index 42655d58..d13da1f2 100644 --- a/1.5 'Kruger 60'/InternalTools/ChannelLogos/WebClientEx.cs +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/WebClientEx.cs @@ -1,8 +1,18 @@ -using System; -using System.Collections.Generic; -using System.Linq; +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; using System.Net; -using System.Text; namespace IpTviewr.Internal.Tools.ChannelLogos { @@ -10,50 +20,41 @@ public class WebClientEx : WebClient { public WebClientEx(CookieContainer container) { - this.container = container; - } - - public CookieContainer CookieContainer - { - get { return container; } - set { container = value; } - } + CookieContainer = container; + } // constructor - private CookieContainer container; + public CookieContainer CookieContainer { get; set; } protected override WebRequest GetWebRequest(Uri address) { - WebRequest r = base.GetWebRequest(address); - var request = r as HttpWebRequest; - if (request != null) + var r = base.GetWebRequest(address); + if (r is HttpWebRequest request) { - request.CookieContainer = container; + request.CookieContainer = CookieContainer; } return r; - } + } // GetWebRequest protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result) { - WebResponse response = base.GetWebResponse(request, result); + var response = base.GetWebResponse(request, result); ReadCookies(response); return response; - } + } // GetWebResponse protected override WebResponse GetWebResponse(WebRequest request) { - WebResponse response = base.GetWebResponse(request); + var response = base.GetWebResponse(request); ReadCookies(response); return response; - } + } // GetWebResponse private void ReadCookies(WebResponse r) { - var response = r as HttpWebResponse; - if (response != null) - { - CookieCollection cookies = response.Cookies; - container.Add(cookies); - } - } - } -} + if (!(r is HttpWebResponse response)) return; + + var cookies = response.Cookies; + CookieContainer.Add(cookies); + } // ReadCookies + } // class WebClientEx +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/licensing.xml b/1.5 'Kruger 60'/InternalTools/ChannelLogos/licensing.xml new file mode 100644 index 00000000..5ba85a08 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/licensing.xml @@ -0,0 +1,331 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.ToolsUiFramework + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Forms + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogos/packages.config b/1.5 'Kruger 60'/InternalTools/ChannelLogos/packages.config new file mode 100644 index 00000000..b165b00f --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogos/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/App.config b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/App.config new file mode 100644 index 00000000..56efbc7b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ChannelLogosEditor.csproj b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ChannelLogosEditor.csproj new file mode 100644 index 00000000..5e653ea5 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ChannelLogosEditor.csproj @@ -0,0 +1,162 @@ + + + + + Debug + AnyCPU + {55F119DD-311C-4DA8-B9E7-55E93BA59B4D} + WinExe + IpTviewr.Internal.Tools.ChannelLogosEditor + ChannelLogosEditor + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + UserControl + + + ControlCollectionsEditor.cs + + + Form + + + DialogCollectionsEditor.cs + + + Form + + + FormEditor.cs + + + + + True + True + Texts.resx + + + ControlCollectionsEditor.cs + + + DialogCollectionsEditor.cs + + + FormEditor.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + ResXFileCodeGenerator + Texts.Designer.cs + Designer + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common + + + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} + UiServices.Common + + + {a722de9d-ae51-479c-825f-a19f4c69bd75} + UiServices.Config + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ControlCollectionsEditor.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ControlCollectionsEditor.Designer.cs new file mode 100644 index 00000000..256bc80b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ControlCollectionsEditor.Designer.cs @@ -0,0 +1,89 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor +{ + partial class ControlCollectionsEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.groupBoxData.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxData + // + this.groupBoxData.Text = "Collections in XML file"; + // + // buttonAdd + // + this.buttonAdd.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonAdd, "Add new..."); + // + // buttonMoveDown + // + this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonMoveDown, "Move down"); + // + // buttonMoveUp + // + this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonMoveUp, "Move up"); + // + // buttonRemove + // + this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonRemove, "Delete"); + // + // buttonEdit + // + this.buttonEdit.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.toolTip.SetToolTip(this.buttonEdit, "Edit..."); + // + // ControlCollectionsEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Name = "ControlCollectionsEditor"; + this.Load += new System.EventHandler(this.ControlCollectionsEditor_Load); + this.groupBoxData.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ControlCollectionsEditor.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ControlCollectionsEditor.cs new file mode 100644 index 00000000..65e2fb69 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ControlCollectionsEditor.cs @@ -0,0 +1,128 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Linq; +using System.Windows.Forms; +using IpTviewr.Internal.Tools.ChannelLogosEditor.Properties; +using IpTviewr.UiServices.Common.Controls; +using IpTviewr.UiServices.Configuration.Schema2014.Logos; + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor +{ + public partial class ControlCollectionsEditor : ListEditor + { + private readonly ListItemsManager _manager; + + public ControlCollectionsEditor() + { + InitializeComponent(); + _manager = new ListItemsManager(listItems, buttonRemove, buttonMoveUp, buttonMoveDown); + } // constructor + + public override bool IsReadOnly + { + get => _manager.IsReadOnly; + set => _manager.IsReadOnly = value; + } // IsReadOnly + + public ServiceCollection[] Collections + { + get + { + var arguments = new ServiceCollection[listItems.Items.Count]; + for (var index = 0; index < arguments.Length; index++) + { + arguments[index] = listItems.Items[index] as ServiceCollection; + } // for + + return arguments; + } + set + { + listItems.Items.Clear(); + if (value == null) return; + + var q = from collection in value + select (object)collection.ShallowClone(); + + listItems.Items.AddRange(q.ToArray()); + } // set + } // Collections + + public ServiceCollection SelectedCollection => listItems.SelectedItem as ServiceCollection; + + private void ControlCollectionsEditor_Load(object sender, EventArgs e) + { + listItems.DisplayMember = "Name"; + listItems.ValueMember = "Package"; + } // ControlCollectionsEditor_Load + + protected override void ButtonEdit_Click(object sender, EventArgs e) + { + /* + using (var dialog = GetArgumentEditorDialog()) + { + dialog.Parameter = listItems.SelectedItem.ToString(); + if (dialog.ShowDialog(this) != DialogResult.OK) + { + return; + } // if + + var index = listItems.SelectedIndex; + listItems.Items[index] = dialog.Parameter; + IsDataChanged = true; + } // using + */ + } // ButtonEdit_Click + + protected override void ButtonRemove_Click(object sender, EventArgs e) + { + var text = string.Format((SelectedCollection.Domains.Length == 0) ? Texts.RemoveEmptyCollection : Texts.RemoveNonEmptyCollection, SelectedCollection.Domains.Length); + if (MessageBox.Show(this, text, Texts.RemoveCollectionCaption, + MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) != DialogResult.Yes) return; + + _manager.RemoveSelection(); + IsDataChanged = true; + } // ButtonRemove_Click + + protected override void ButtonAdd_Click(object sender, EventArgs e) + { + /* + using (var dialog = GetArgumentEditorDialog()) + { + dialog.Parameter = null; + if (dialog.ShowDialog(this) != DialogResult.OK) + { + return; + } // if + + listItems.SelectedIndex = listItems.Items.Add(dialog.Parameter); + IsDataChanged = true; + } // using + */ + } // ButtonAdd_Click + + protected override void ButtonMoveUp_Click(object sender, EventArgs e) + { + _manager.MoveSelectionUp(); + IsDataChanged = true; + } // ButtonMoveUp_Click + + protected override void ButtonMoveDown_Click(object sender, EventArgs e) + { + _manager.MoveSelectionDown(); + IsDataChanged = true; + } // ButtonMoveDown_Click + } // class ControlCollectionsEditor +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ControlCollectionsEditor.resx b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ControlCollectionsEditor.resx new file mode 100644 index 00000000..8766f298 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/ControlCollectionsEditor.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/DialogCollectionsEditor.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/DialogCollectionsEditor.Designer.cs new file mode 100644 index 00000000..c13eb180 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/DialogCollectionsEditor.Designer.cs @@ -0,0 +1,117 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor +{ + partial class DialogCollectionsEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.editor = new IpTviewr.Internal.Tools.ChannelLogosEditor.ControlCollectionsEditor(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // editor + // + this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.editor.Collections = new IpTviewr.UiServices.Configuration.Schema2014.Logos.ServiceCollection[0]; + this.editor.Location = new System.Drawing.Point(12, 12); + this.editor.Name = "editor"; + this.editor.Size = new System.Drawing.Size(280, 226); + this.editor.TabIndex = 0; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Cancel_16x16; + this.buttonCancel.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.buttonCancel.Location = new System.Drawing.Point(192, 244); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(100, 25); + this.buttonCancel.TabIndex = 10; + this.buttonCancel.Text = "&Cancel"; + this.buttonCancel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonCancel.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Ok_16x16; + this.buttonOk.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.buttonOk.Location = new System.Drawing.Point(86, 244); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(100, 25); + this.buttonOk.TabIndex = 9; + this.buttonOk.Text = "&Ok"; + this.buttonOk.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonOk.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonOk.UseVisualStyleBackColor = true; + // + // DialogCollectionsEditor + // + this.AcceptButton = this.buttonOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.ClientSize = new System.Drawing.Size(304, 281); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.editor); + this.DoubleBuffered = true; + this.MinimizeBox = false; + this.Name = "DialogCollectionsEditor"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Service mappings collections"; + this.ResumeLayout(false); + + } + + #endregion + + private ControlCollectionsEditor editor; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/DialogCollectionsEditor.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/DialogCollectionsEditor.cs new file mode 100644 index 00000000..48e1d9c5 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/DialogCollectionsEditor.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; +using IpTviewr.UiServices.Configuration.Schema2014.Logos; + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor +{ + public partial class DialogCollectionsEditor : Form + { + public DialogCollectionsEditor() + { + InitializeComponent(); + } // constructor + + public bool IsReadOnly + { + get => editor.IsReadOnly; + set => editor.IsReadOnly = value; + } // IsReadOnly + + public ServiceCollection[] Collections + { + get => editor.Collections; + set => editor.Collections = value; + } // Collections + + public ServiceCollection SelectedCollection => editor.SelectedCollection; + } // class DialogCollectionsEditor +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/DialogCollectionsEditor.resx b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/DialogCollectionsEditor.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/DialogCollectionsEditor.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/FormEditor.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/FormEditor.Designer.cs new file mode 100644 index 00000000..666e79bb --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/FormEditor.Designer.cs @@ -0,0 +1,341 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor +{ + partial class FormEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.statusStripMain = new System.Windows.Forms.StatusStrip(); + this.labelStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.listView2 = new System.Windows.Forms.ListView(); + this.listView1 = new System.Windows.Forms.ListView(); + this.menuStripMain = new System.Windows.Forms.MenuStrip(); + this.menuItemEditor = new System.Windows.Forms.ToolStripMenuItem(); + this.menuItemEditorOpen = new System.Windows.Forms.ToolStripMenuItem(); + this.menuItemEditorSave = new System.Windows.Forms.ToolStripMenuItem(); + this.menuItemEditorClose = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.menuItemEditorExit = new System.Windows.Forms.ToolStripMenuItem(); + this.menuItemCollection = new System.Windows.Forms.ToolStripMenuItem(); + this.menuItemCollectionEditor = new System.Windows.Forms.ToolStripMenuItem(); + this.menuItemCollectionSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.menuItemCollectionCurrent = new System.Windows.Forms.ToolStripMenuItem(); + this.collectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.selectCurrentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addNewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteCurrentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuItemCollectionSelect = new System.Windows.Forms.ToolStripMenuItem(); + this.statusStripMain.SuspendLayout(); + this.toolStripContainer1.ContentPanel.SuspendLayout(); + this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); + this.toolStripContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.menuStripMain.SuspendLayout(); + this.SuspendLayout(); + // + // statusStripMain + // + this.statusStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.labelStatus}); + this.statusStripMain.Location = new System.Drawing.Point(0, 539); + this.statusStripMain.Name = "statusStripMain"; + this.statusStripMain.Size = new System.Drawing.Size(784, 22); + this.statusStripMain.TabIndex = 0; + this.statusStripMain.Text = "statusStrip1"; + // + // labelStatus + // + this.labelStatus.Name = "labelStatus"; + this.labelStatus.Size = new System.Drawing.Size(769, 17); + this.labelStatus.Spring = true; + this.labelStatus.Text = "Ready"; + this.labelStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // toolStripContainer1 + // + // + // toolStripContainer1.ContentPanel + // + this.toolStripContainer1.ContentPanel.Controls.Add(this.splitContainer1); + this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(784, 515); + this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.toolStripContainer1.Location = new System.Drawing.Point(0, 0); + this.toolStripContainer1.Name = "toolStripContainer1"; + this.toolStripContainer1.Size = new System.Drawing.Size(784, 539); + this.toolStripContainer1.TabIndex = 1; + this.toolStripContainer1.Text = "toolStripContainer1"; + // + // toolStripContainer1.TopToolStripPanel + // + this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.menuStripMain); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.listView2); + this.splitContainer1.Panel1.Controls.Add(this.listView1); + this.splitContainer1.Size = new System.Drawing.Size(784, 515); + this.splitContainer1.SplitterDistance = 375; + this.splitContainer1.TabIndex = 0; + // + // listView2 + // + this.listView2.Dock = System.Windows.Forms.DockStyle.Bottom; + this.listView2.HideSelection = false; + this.listView2.Location = new System.Drawing.Point(0, 418); + this.listView2.Name = "listView2"; + this.listView2.Size = new System.Drawing.Size(375, 97); + this.listView2.TabIndex = 1; + this.listView2.UseCompatibleStateImageBehavior = false; + this.listView2.View = System.Windows.Forms.View.Details; + // + // listView1 + // + this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.listView1.HideSelection = false; + this.listView1.Location = new System.Drawing.Point(0, 0); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(375, 515); + this.listView1.TabIndex = 0; + this.listView1.UseCompatibleStateImageBehavior = false; + // + // menuStripMain + // + this.menuStripMain.Dock = System.Windows.Forms.DockStyle.None; + this.menuStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuItemEditor, + this.menuItemCollection}); + this.menuStripMain.Location = new System.Drawing.Point(0, 0); + this.menuStripMain.Name = "menuStripMain"; + this.menuStripMain.Size = new System.Drawing.Size(784, 24); + this.menuStripMain.TabIndex = 0; + this.menuStripMain.Text = "menuStrip1"; + // + // menuItemEditor + // + this.menuItemEditor.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuItemEditorOpen, + this.menuItemEditorSave, + this.menuItemEditorClose, + this.toolStripSeparator1, + this.menuItemEditorExit}); + this.menuItemEditor.Name = "menuItemEditor"; + this.menuItemEditor.Size = new System.Drawing.Size(50, 20); + this.menuItemEditor.Text = "&Editor"; + // + // menuItemEditorOpen + // + this.menuItemEditorOpen.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Import_16x16; + this.menuItemEditorOpen.Name = "menuItemEditorOpen"; + this.menuItemEditorOpen.Size = new System.Drawing.Size(103, 22); + this.menuItemEditorOpen.Text = "&Open"; + this.menuItemEditorOpen.Click += new System.EventHandler(this.MenuItemEditorOpen_Click); + // + // menuItemEditorSave + // + this.menuItemEditorSave.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Save_16x16; + this.menuItemEditorSave.Name = "menuItemEditorSave"; + this.menuItemEditorSave.Size = new System.Drawing.Size(103, 22); + this.menuItemEditorSave.Text = "&Save"; + this.menuItemEditorSave.Click += new System.EventHandler(this.MenuItemEditorSave_Click); + // + // menuItemEditorClose + // + this.menuItemEditorClose.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Cancel_16x16; + this.menuItemEditorClose.Name = "menuItemEditorClose"; + this.menuItemEditorClose.Size = new System.Drawing.Size(103, 22); + this.menuItemEditorClose.Text = "C&lose"; + this.menuItemEditorClose.Click += new System.EventHandler(this.MenuItemEditorClose_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(100, 6); + // + // menuItemEditorExit + // + this.menuItemEditorExit.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Close_16x16; + this.menuItemEditorExit.Name = "menuItemEditorExit"; + this.menuItemEditorExit.Size = new System.Drawing.Size(103, 22); + this.menuItemEditorExit.Text = "&Exit"; + this.menuItemEditorExit.Click += new System.EventHandler(this.MenuItemEditorExit_Click); + // + // menuItemCollection + // + this.menuItemCollection.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuItemCollectionSelect, + this.menuItemCollectionEditor, + this.menuItemCollectionSeparator1, + this.menuItemCollectionCurrent}); + this.menuItemCollection.Name = "menuItemCollection"; + this.menuItemCollection.Size = new System.Drawing.Size(73, 20); + this.menuItemCollection.Text = "&Collection"; + // + // menuItemCollectionEditor + // + this.menuItemCollectionEditor.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Edit_16x16; + this.menuItemCollectionEditor.Name = "menuItemCollectionEditor"; + this.menuItemCollectionEditor.Size = new System.Drawing.Size(180, 22); + this.menuItemCollectionEditor.Text = "Editor..."; + this.menuItemCollectionEditor.Click += new System.EventHandler(this.MenuItemCollectionEditor_Click); + // + // menuItemCollectionSeparator1 + // + this.menuItemCollectionSeparator1.Name = "menuItemCollectionSeparator1"; + this.menuItemCollectionSeparator1.Size = new System.Drawing.Size(177, 6); + // + // menuItemCollectionCurrent + // + this.menuItemCollectionCurrent.Name = "menuItemCollectionCurrent"; + this.menuItemCollectionCurrent.Size = new System.Drawing.Size(180, 22); + this.menuItemCollectionCurrent.Text = "(Current collection)"; + // + // collectionToolStripMenuItem + // + this.collectionToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.selectCurrentToolStripMenuItem, + this.addNewToolStripMenuItem, + this.editToolStripMenuItem, + this.deleteCurrentToolStripMenuItem}); + this.collectionToolStripMenuItem.Name = "collectionToolStripMenuItem"; + this.collectionToolStripMenuItem.Size = new System.Drawing.Size(32, 19); + this.collectionToolStripMenuItem.Text = "&Collection"; + // + // selectCurrentToolStripMenuItem + // + this.selectCurrentToolStripMenuItem.Name = "selectCurrentToolStripMenuItem"; + this.selectCurrentToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.selectCurrentToolStripMenuItem.Text = "&Select..."; + // + // addNewToolStripMenuItem + // + this.addNewToolStripMenuItem.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Add_16xM; + this.addNewToolStripMenuItem.Name = "addNewToolStripMenuItem"; + this.addNewToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.addNewToolStripMenuItem.Text = "Add new..."; + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Properties_16x16; + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.editToolStripMenuItem.Text = "&Edit"; + // + // deleteCurrentToolStripMenuItem + // + this.deleteCurrentToolStripMenuItem.Image = global::IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources.Action_Delete_16x16; + this.deleteCurrentToolStripMenuItem.Name = "deleteCurrentToolStripMenuItem"; + this.deleteCurrentToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.deleteCurrentToolStripMenuItem.Text = "&Delete"; + // + // menuItemCollectionSelect + // + this.menuItemCollectionSelect.Name = "menuItemCollectionSelect"; + this.menuItemCollectionSelect.Size = new System.Drawing.Size(180, 22); + this.menuItemCollectionSelect.Text = "Select..."; + this.menuItemCollectionSelect.Click += new System.EventHandler(this.MenuItemCollectionSelect_Click); + // + // FormEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 561); + this.Controls.Add(this.toolStripContainer1); + this.Controls.Add(this.statusStripMain); + this.MainMenuStrip = this.menuStripMain; + this.Name = "FormEditor"; + this.Text = "Channel logos editor - IPTViewr"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormEditor_FormClosing); + this.Load += new System.EventHandler(this.FormEditor_Load); + this.statusStripMain.ResumeLayout(false); + this.statusStripMain.PerformLayout(); + this.toolStripContainer1.ContentPanel.ResumeLayout(false); + this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false); + this.toolStripContainer1.TopToolStripPanel.PerformLayout(); + this.toolStripContainer1.ResumeLayout(false); + this.toolStripContainer1.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.menuStripMain.ResumeLayout(false); + this.menuStripMain.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.StatusStrip statusStripMain; + private System.Windows.Forms.ToolStripContainer toolStripContainer1; + private System.Windows.Forms.MenuStrip menuStripMain; + private System.Windows.Forms.ToolStripMenuItem menuItemEditor; + private System.Windows.Forms.ToolStripMenuItem menuItemEditorOpen; + private System.Windows.Forms.ToolStripMenuItem menuItemEditorSave; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem menuItemEditorExit; + private System.Windows.Forms.ToolStripMenuItem menuItemEditorClose; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.ListView listView2; + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.ToolStripMenuItem menuItemCollection; + private System.Windows.Forms.ToolStripMenuItem menuItemCollectionEditor; + private System.Windows.Forms.ToolStripSeparator menuItemCollectionSeparator1; + private System.Windows.Forms.ToolStripMenuItem menuItemCollectionCurrent; + private System.Windows.Forms.ToolStripMenuItem collectionToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem selectCurrentToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addNewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteCurrentToolStripMenuItem; + private System.Windows.Forms.ToolStripStatusLabel labelStatus; + private System.Windows.Forms.ToolStripMenuItem menuItemCollectionSelect; + } +} + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/FormEditor.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/FormEditor.cs new file mode 100644 index 00000000..bd1631fc --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/FormEditor.cs @@ -0,0 +1,214 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; +using IpTviewr.Common.Configuration; +using IpTviewr.Internal.Tools.ChannelLogosEditor.Properties; +using IpTviewr.UiServices.Common.Forms; +using IpTviewr.UiServices.Configuration; +using IpTviewr.UiServices.Configuration.Schema2014.Logos; + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor +{ + public partial class FormEditor : CommonBaseForm + { + private bool _isConfigLoaded; + private bool _isDirty; + private bool _isOpen; + private ServiceCollection _currentCollection; + private ServiceMappingsXml _serviceMappingsXml; + + public FormEditor() + { + InitializeComponent(); + } // constructor + + private bool IsDirty + { + get => _isDirty; + set + { + _isDirty = value; + menuItemEditorSave.Enabled = _isDirty; + } // set + } // IsDirty + + private bool IsOpen + { + get => _isOpen; + set + { + _isOpen = value; + IsDirty = false; + CurrentCollection = null; + menuItemEditorOpen.Enabled = !_isOpen; + menuItemCollectionEditor.Enabled = _isOpen; + menuItemEditorClose.Enabled = _isOpen; + labelStatus.Text = _isOpen ? "Editor is ready" : "Editor closed"; + } + } // IsOpen + + private ServiceCollection CurrentCollection + { + get => _currentCollection; + set + { + _currentCollection = value; + menuItemCollectionSeparator1.Visible = value != null; + menuItemCollectionCurrent.Visible = value != null; + menuItemCollectionCurrent.Text = value?.Name; + } // set + } // CurrentCollection + + private void FormEditor_Load(object sender, EventArgs e) + { + IsOpen = false; + } // FormEditor_Load + + private void FormEditor_FormClosing(object sender, FormClosingEventArgs e) + { + SafeCall(FormEditor_FormClosingImplementation, sender, e); + } // FormEditor_FormClosing + + private void FormEditor_FormClosingImplementation(object sender, FormClosingEventArgs e) + { + if (!IsDirty) return; + + var result = MessageBox.Show(this, Texts.SaveChanges, Text, + MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); + + switch (result) + { + case DialogResult.Yes: + Save(); + break; + case DialogResult.No: + return; + default: + e.Cancel = true; + break; + } // switch + } // Internal_FormEditor_FormClosing_Implementation + + private void MenuItemEditorOpen_Click(object sender, EventArgs e) + { + SafeCall(Open); + } // MenuItemEditorOpen_Click + + private void MenuItemEditorSave_Click(object sender, EventArgs e) + { + SafeCall(Save); + } // MenuItemEditorSave_Click + + private void MenuItemEditorClose_Click(object sender, EventArgs e) + { + SafeCall(MenuItemEditorClose_ClickImplementation, sender, e); + } // MenuItemEditorClose_Click + + private void MenuItemEditorClose_ClickImplementation(object sender, EventArgs e) + { + var closing = new FormClosingEventArgs(CloseReason.None, false); + FormEditor_FormClosingImplementation(sender, closing); + + if (closing.Cancel) return; + IsOpen = false; + } // MenuItemEditorClose_ClickImplementation + + private void MenuItemEditorExit_Click(object sender, EventArgs e) + { + Close(); + } // MenuItemEditorExit_Click + + private void MenuItemCollectionSelect_Click(object sender, EventArgs e) + { + using (var dialog = new DialogCollectionsEditor()) + { + dialog.IsReadOnly = true; + dialog.Text = "Select collection"; + dialog.Collections = _serviceMappingsXml.Collections; + if (dialog.ShowDialog(this) != DialogResult.OK) return; + CurrentCollection = dialog.SelectedCollection; + } // using + } // MenuItemCollectionSelect_Click + + private void MenuItemCollectionEditor_Click(object sender, EventArgs e) + { + using (var dialog = new DialogCollectionsEditor()) + { + dialog.Collections = _serviceMappingsXml.Collections; + if (dialog.ShowDialog(this) != DialogResult.OK) return; + _serviceMappingsXml.Collections = dialog.Collections; + } // using + } // MenuItemCollectionEditor_Click + + private void Open() + { + if (IsOpen) return; + + if (!LoadConfiguration()) return; + _serviceMappingsXml = LogosCommon.ParseServiceMappingsXml(AppConfig.Current.Folders.Logos.FileServiceMappings); + + IsOpen = true; + } // Open + + private void Save() + { + if (!IsDirty) return; + + IsDirty = false; + } // Save + + #region Configuration loader + + private bool LoadConfiguration() + { + if (_isConfigLoaded) return true; + + var result = GetConfiguration(); + _isConfigLoaded = (result.IsOk); + if (_isConfigLoaded) return true; + + LoadConfigurationDisplayProgress(result.Message); + Program.HandleException(this, result.Caption, result.Message, result.InnerException); + + return false; + } // LoadConfiguration + + private InitializationResult GetConfiguration() + { + try + { + var result = AppConfig.Load(null, LoadConfigurationDisplayProgress); + return result.IsError ? result : InitializationResult.Ok; + } + catch (Exception ex) + { + return new InitializationResult() + { + Caption = "Application configuration error", + Message = "An unexpected error has occured while loading the application configuration.", + InnerException = ex + }; + } // try-catch + } // GetConfiguration + + private void LoadConfigurationDisplayProgress(string text) + { + labelStatus.Text = text; + statusStripMain.Refresh(); + } // LoadDisplayProgress + + #endregion + } // class FormEditor +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/FormEditor.resx b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/FormEditor.resx new file mode 100644 index 00000000..87be7e00 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/FormEditor.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 153, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/LICENSE.ES.MD b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/LICENSE.ES.MD new file mode 100644 index 00000000..7f87346e --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/LICENSE.ES.MD @@ -0,0 +1,192 @@ +# Programa 'ChannelLogosEditor' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este PROGRAMA (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios, incluyendo, en su caso, al Grupo Teléfonica. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. ChannelLogosEditor +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Etsi.Ts102034 +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/LICENSE.MD b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/LICENSE.MD new file mode 100644 index 00000000..ee9704ec --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/LICENSE.MD @@ -0,0 +1,164 @@ +# Program 'ChannelLogosEditor' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. ChannelLogosEditor +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Etsi.Ts102034 +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Program.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Program.cs new file mode 100644 index 00000000..52763256 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Program.cs @@ -0,0 +1,33 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; +using IpTviewr.Common; + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor +{ + internal class Program: BaseProgram + { + /// + /// The main entry point for the application. + /// + [STAThread] + private static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FormEditor()); + } // Main + } // class Program +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..f423085d --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IPTV project internal tools: ChannelLogosEditor")] +[assembly: AssemblyDescription("IpTviewr.Internal.Tools.ChannelLogosEditor")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("55f119dd-311c-4da8-b9e7-55e93ba59b4d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Resources.Designer.cs new file mode 100644 index 00000000..90e114b1 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Resources.Designer.cs @@ -0,0 +1,156 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Add_16xM { + get { + object obj = ResourceManager.GetObject("Action_Add_16xM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Close_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Close_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Delete_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Edit_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Edit_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Import_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Import_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Properties_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Save_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Save_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Resources.resx b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Resources.resx new file mode 100644 index 00000000..8a1e7cad --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Resources.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Action_Close_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Edit_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Import_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Save_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Add_16xM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Properties_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Settings.Designer.cs new file mode 100644 index 00000000..a09ed7ad --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Settings.Designer.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.1.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.settings b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Settings.settings similarity index 100% rename from 1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.settings rename to 1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Settings.settings diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Texts.Designer.cs new file mode 100644 index 00000000..0238d30b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Texts.Designer.cs @@ -0,0 +1,104 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.ChannelLogosEditor.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Internal.Tools.ChannelLogosEditor.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Confirm removal. + /// + internal static string RemoveCollectionCaption { + get { + return ResourceManager.GetString("RemoveCollectionCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Collection is empty. Remove it?. + /// + internal static string RemoveEmptyCollection { + get { + return ResourceManager.GetString("RemoveEmptyCollection", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Warning! Collection is not empty and contains {0:N0} domains. + /// + ///Remove it?. + /// + internal static string RemoveNonEmptyCollection { + get { + return ResourceManager.GetString("RemoveNonEmptyCollection", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do you want to save changes made to list?. + /// + internal static string SaveChanges { + get { + return ResourceManager.GetString("SaveChanges", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Texts.resx b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Texts.resx new file mode 100644 index 00000000..15013173 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Properties/Texts.resx @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirm removal + + + Collection is empty. Remove it? + + + Warning! Collection is not empty and contains {0:N0} domains. + +Remove it? + + + Do you want to save changes made to list? + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Add_16xM.png b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Add_16xM.png new file mode 100644 index 00000000..7139c070 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Add_16xM.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Cancel_16x16.png b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Cancel_16x16.png new file mode 100644 index 00000000..5fcec020 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Cancel_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Close_16x16.png b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Close_16x16.png new file mode 100644 index 00000000..097f527c Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Close_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Delete_16x16.png b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Delete_16x16.png new file mode 100644 index 00000000..0e36ba6e Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Delete_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Edit_16x16.png b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Edit_16x16.png new file mode 100644 index 00000000..041e23f4 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Edit_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Import_16x16.png b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Import_16x16.png new file mode 100644 index 00000000..fe8528a3 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Import_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Ok_16x16.png b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Ok_16x16.png new file mode 100644 index 00000000..caac04de Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Ok_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Properties_16x16.png b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Properties_16x16.png new file mode 100644 index 00000000..837342fb Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Properties_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Save_16x16.png b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Save_16x16.png new file mode 100644 index 00000000..5ca4d106 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/Resources/Action_Save_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/license.txt b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/license.txt new file mode 100644 index 00000000..cc74b67e --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/license.txt @@ -0,0 +1,175 @@ +############################################################################## +## +## Program 'ChannelLogosEditor' +## +############################################################################## +## +## Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + * Microsoft® Exception Message Box License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. ChannelLogosEditor +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. Etsi.Ts102034 +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.IpTvServices +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + diff --git a/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/licensing.xml b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/licensing.xml new file mode 100644 index 00000000..f9fdd995 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ChannelLogosEditor/licensing.xml @@ -0,0 +1,203 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/ConsoleEPGLoader.csproj b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/ConsoleEPGLoader.csproj deleted file mode 100644 index cd53f234..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/ConsoleEPGLoader.csproj +++ /dev/null @@ -1,128 +0,0 @@ - - - - - Debug - AnyCPU - {3935C593-1E31-42EC-8C9F-23F8D548C112} - Exe - Properties - Project.IpTv.Internal.ConsoleEPGLoader - ConsoleEPGLoader - v3.5 - 512 - SAK - SAK - SAK - SAK - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - Resources\ConsoleEpgLoader.ico - - - - False - ..\..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - False - ..\..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - True - True - Resources.resx - - - True - True - Texts.resx - - - - - - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - ResXFileCodeGenerator - Texts.Designer.cs - - - - - {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} - DvbStpClient - - - {b91c438d-0333-4d06-86cd-74ce82df6f40} - Etsi.Ts102034 - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {3a053f34-4edf-4071-b966-923255a0ae14} - Services.SqlServerCE - - - {ba481e42-f570-4d2c-94d4-21c4cce27762} - UiServices.DvbStpClient - - - - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/DvbStpClient.cs b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/DvbStpClient.cs deleted file mode 100644 index 4c283c11..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/DvbStpClient.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public class DvbStpClient : DvbStpBaseClient - { - private byte? ExpectedPayloadId; - private SegmentDataStorage Storage; - private int SegmentsCompleted; - - public delegate void DatagramReceivedCallback(DvbStpClient client, byte payloadId, byte segmentIdNetworkHi, byte segmentIdNetworkLo, byte segmentVersion, bool filtered); - public delegate void SectionReceivedCallback(DvbStpClient client, DvbStpHeader header, byte[] datagramRawData); - public delegate void SegmentDataDownloadedCallback(DvbStpClient client, SegmentAssembler segmentData); - public delegate void SegmentReceivedCallback(DvbStpClient client, DvbStpSegmentIdentity segmentIdentity, int round); - - public event DatagramReceivedCallback DatagramReceived; - public event SectionReceivedCallback SectionReceived; - public event SegmentDataDownloadedCallback SegmentDataDownloaded; - public event SegmentReceivedCallback SegmentReceived; - - public DvbStpClient(IPAddress ip, int port) - : base(ip, port) - { - // no op - } // constructor - - public void DownloadSegments(byte? payloadId) - { - ExpectedPayloadId = payloadId; - - Storage = new SegmentDataStorage(); - // hook-up events - Storage.SegmentNew += Storage_SegmentNew; - Storage.SegmentVersionChanged += Storage_SegmentVersionChanged; - Storage.SegmentDataDownloaded += Storage_SegmentDataComplete; - Storage.SegmentReceived += Storage_SegmentReceived; - - ReceiveData(); - } // DownloadSegments - - protected override bool FilterSection() - { - bool filter = (ExpectedPayloadId == null)? false : (Header.PayloadId != ExpectedPayloadId); - - if (DatagramReceived != null) DatagramReceived(this, Header.PayloadId, Header.SegmentIdNetworkHi, Header.SegmentIdNetworkLo, Header.SegmentVersion, filter); - - return filter; - } // FilterSection - - protected override void ProcessReceivedData() - { - if (SectionReceived != null) SectionReceived(this, Header, DatagramData); - - Storage.AddSectionData(Header, DatagramData, true); - } // ProcessReceivedData - - private void Storage_SegmentNew(DvbStpSegmentIdentity segmentIdentity) - { - } // Storage_SegmentNew - - private void Storage_SegmentVersionChanged(byte oldVersion, DvbStpSegmentIdentity newVersion, bool wasComplete) - { - if (wasComplete) - { - SegmentsCompleted--; - } // if - } // Storage_SegmentVersionChanged - - private void Storage_SegmentDataComplete(SegmentAssembler segmentData) - { - SegmentsCompleted++; - if (SegmentDataDownloaded != null) - { - SegmentDataDownloaded(this, segmentData); - } // if - } // Storage_SegmentDataComplete - - void Storage_SegmentReceived(DvbStpSegmentIdentity segmentIdentity, int round) - { - if (SegmentReceived != null) SegmentReceived(this, segmentIdentity, round); - - if (round >= 2) EndReceptionLoop = true; - } // Storage_SegmentReceived - } // class DvbStpClient -} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/License.txt b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/License.txt deleted file mode 100644 index 8475e840..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/MyApplication.cs b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/MyApplication.cs deleted file mode 100644 index b976b148..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/MyApplication.cs +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.SqlServer.MessageBox; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace Project.IpTv.Internal.ConsoleEPGLoader -{ - public static class MyApplication - { - public static void HandleException(IWin32Window owner, Exception ex) - { - AddExceptionAdvancedInformation(ex); - var box = new Microsoft.SqlServer.MessageBox.ExceptionMessageBox() - { - Caption = Properties.Texts.MyAppHandleExceptionDefaultCaption, - Message = ex, - Beep = true, - Symbol = ExceptionMessageBoxSymbol.Error, - }; - box.Show(owner); - } // HandleException - - public static void HandleException(IWin32Window owner, string message, Exception ex) - { - HandleException(owner, - null, - message, - MessageBoxIcon.Error, - ex); - } // HandleException - - public static void HandleException(IWin32Window owner, string caption, string message, Exception ex) - { - HandleException(owner, - caption, - message, - MessageBoxIcon.Error, - ex); - } // HandleException - - public static void HandleException(IWin32Window owner, string caption, string message, MessageBoxIcon icon, Exception ex) - { - AddExceptionAdvancedInformation(ex); - var box = new ExceptionMessageBox() - { - Caption = caption ?? Properties.Texts.MyAppHandleExceptionDefaultCaption, - Text = message, - InnerException = ex, - Beep = true, - Symbol = TranslateIconToSymbol(icon), - }; - box.Show(owner); - } // HandleException - - private static ExceptionMessageBoxSymbol TranslateIconToSymbol(MessageBoxIcon icon) - { - switch (icon) - { - case MessageBoxIcon.Asterisk: return ExceptionMessageBoxSymbol.Asterisk; - case MessageBoxIcon.Error: return ExceptionMessageBoxSymbol.Error; - case MessageBoxIcon.Exclamation: return ExceptionMessageBoxSymbol.Exclamation; - //case MessageBoxIcon.Hand: return ExceptionMessageBoxSymbol.Hand; - //case MessageBoxIcon.Information: return ExceptionMessageBoxSymbol.Information; - case MessageBoxIcon.Question: return ExceptionMessageBoxSymbol.Question; - //case MessageBoxIcon.Stop: return ExceptionMessageBoxSymbol.Stop; - //case MessageBoxIcon.Warning: return ExceptionMessageBoxSymbol.Warning; - default: - return ExceptionMessageBoxSymbol.None; - } // switch - } // TranslateIconToSymbol - - private static void AddExceptionAdvancedInformation(Exception ex) - { - while (ex != null) - { - ex.Data["AdvancedInformation.Exception.Type"] = ex.GetType().FullName; - ex.Data["AdvancedInformation.Exception.Assembly"] = ex.GetType().Assembly.ToString(); - ex = ex.InnerException; - } // while - } // AddExceptionAdvancedInformation - - private const string ForceUiCultureArgument = "/forceuiculture:"; - - internal static void ForceUiCulture(string[] arguments, string settingsCulture) - { - var culture = (string)null; - - // Command line culture has preference over settings culture (allows to override user setting) - if ((arguments != null) && (arguments.Length != 0)) - { - foreach (var argument in arguments) - { - if (!argument.ToLowerInvariant().StartsWith(ForceUiCultureArgument)) continue; - culture = argument.Substring(ForceUiCultureArgument.Length); - break; - } // foreach - } // if - - // If no culture is specified in command line arguments, use settings culture - if (culture == null) - { - culture = settingsCulture; - } // if - - ForceUiCulture(culture); - } // ForceUiCulture - - private static void ForceUiCulture(string culture) - { - if (culture == null) return; - culture = culture.Trim(); - if (culture == string.Empty) return; - - try - { - Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture); - } - catch (Exception ex) - { - MyApplication.HandleException(null, ex); - } // try-catch - } // ForceUiCulture - } // static class MyApplication -} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Program.cs b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Program.cs deleted file mode 100644 index be51bd8d..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Program.cs +++ /dev/null @@ -1,485 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Project.IpTv.Common; -using Project.IpTv.Common.Serialization; -using Project.IpTv.DvbStp.Client; -using Project.IpTv.Services.EPG; -using Project.IpTv.Services.EPG.Serialization; -using Project.IpTv.Services.EPG.TvAnytime; -using Project.IpTv.Services.SqlServerCE; -using System; -using System.Collections.Generic; -using System.Data.SqlServerCe; -using System.IO; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Globalization; -using Project.IpTv.UiServices.DvbStpClient; -using Etsi.Ts102034.v010501.XmlSerialization.ContentGuideDiscovery; -using Etsi.Ts102034.v010501.XmlSerialization; - -namespace Project.IpTv.Internal.ConsoleEPGLoader -{ - class Program - { - internal static AutoResetEvent MainEvent; - internal static string DbFile; - internal static string XmlFilesPath; - internal static Exception Exception; - - private static IPEndPoint DiscoveryEndpoint; - - static int Main(string[] args) - { - try - { - var StartTime = DateTime.Now; - - // Set console icon - using (var icon = Properties.Resources.ConsoleEpgLoader) - { - UnsafeNativeMethods.SetConsoleIcon(icon.Handle); - } // using icon - - Console.Title = "TV-Anytime EPG loader utility"; - - if (!ProcessArguments(args)) - { - return 1; - } // if - - DisplayLogo(); - - var downloader = new UiDvbStpSimpleDownloader() - { - Request = new UiDvbStpSimpleDownloadRequest() - { - NoDataTimeout = 180000, - PayloadId = 0x06, - SegmentId = null, // accept any segment - MulticastAddress = DiscoveryEndpoint.Address, - MulticastPort = DiscoveryEndpoint.Port, - Description = "Downloading list of EPG servers...", - DescriptionParsing = "Processing list of EPG servers...", - PayloadDataType = typeof(BroadcastContentGuideDiscoveryRoot), - AllowXmlExtraWhitespace = false, - XmlNamespaceReplacer = NamespaceUnification.Replacer, - }, - }; - Console.Write("Downloading list of EPG servers..."); - downloader.Download(null); - if (!downloader.IsOk) - { - Console.WriteLine(" failed"); - return -1; - } // if - Console.WriteLine(" ok"); - - var bcgDiscovery = downloader.Response.DeserializedPayloadData as BroadcastContentGuideDiscoveryRoot; - - if ((bcgDiscovery == null) || (bcgDiscovery.Offering == null) || (bcgDiscovery.Offering.Length < 1) || (bcgDiscovery.Offering[0].ContentGuides == null)) - { - throw new ApplicationException("List is EPG servers is empty!"); - } // if - - var serversList = new List(); - foreach(var item in bcgDiscovery.Offering[0].ContentGuides) - { - if ((item.Id == "p_f") || (item.TransportMode == null) || (item.TransportMode.Push == null)) continue; - foreach (var pushServer in item.TransportMode.Push) - { - serversList.Add(new IPEndPoint(IPAddress.Parse(pushServer.Address), pushServer.Port)); - } // foreach - } // if - if (serversList.Count == 0) - { - throw new ApplicationException("List is push EPG servers is empty!"); - } // if - - PrepareDatabase(); - CompactDatabase(); - - ProcessEpgSource(serversList); - - Log("Main thread {0} waiting for processing threads to end...", Thread.CurrentThread.ManagedThreadId); - MainEvent = new AutoResetEvent(false); - MainEvent.WaitOne(); - - UpdateDbStatus(0); - CompactDatabase(); - - Console.WriteLine(); - Console.WriteLine("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"); - Console.WriteLine("Ellapsed time: {0}", FormatString.TimeSpanTotalMinutes(DateTime.Now - StartTime, FormatString.Format.Extended)); - Console.WriteLine(); - - return 0; - } - catch (Exception ex) - { - Exception = ex; - } // try-catch - - if (Exception != null) - { - try - { - UpdateDbStatus(-1); - } - catch - { - // ignore - } // try-catch - - Console.WriteLine(); - Console.WriteLine("UNEXPECTED EXCEPTION!"); - Console.WriteLine(Exception.GetType().FullName); - Console.WriteLine(Exception.Message); - Console.WriteLine(); - MyApplication.HandleException(null, Exception); - - return -1; - } // if - - return 0; - } // Main - - static void DisplayLogo() - { - string copyright; - - // get copyright text - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); - if (attributes.Length == 0) - { - copyright = "Copyright (C) http://movistartv.codeplex.com"; - } - copyright = ((AssemblyCopyrightAttribute)attributes[0]).Copyright; - - Console.WriteLine(Properties.Texts.StartLogo, Assembly.GetEntryAssembly().GetName().Version, copyright); - Console.WriteLine(); - } // DisplayLogo - - static bool ProcessArguments(string[] args) - { - if ((args == null) || (args.Length == 0)) - { - DisplayLogo(); - Console.WriteLine("ERROR: No arguments have been specified."); - return false; - } // if - - var parser = new CommandLineArguments() - { - SpecialHelpArgument = true - }; - - var arguments = parser.Parse(args); - if (!parser.IsOk) - { - DisplayLogo(); - Console.WriteLine("ERROR: Invalid argument format."); - return false; - } // if - - return ProcessArguments(arguments); - } // ProcessArguments - - static bool ProcessArguments(IDictionary arguments) - { - string value; - - if (arguments.TryGetValue("Database", out value)) - { - if (!File.Exists(value)) - { - Console.WriteLine("Database file not found: {0}", value); - return false; - } // if - - DbFile = value; -#if DEBUG - XmlFilesPath = System.IO.Path.GetDirectoryName(DbFile) + "\\EPG"; - System.IO.Directory.CreateDirectory(XmlFilesPath); -#else - XmlFilesPath = null; -#endif - } - else - { - DisplayLogo(); - Console.WriteLine("ERROR: 'Database' argument has not been specified."); - return false; - } // if-else - - if (arguments.TryGetValue("Discovery", out value)) - { - IPAddress ipAddress; - int port; - - var parts = value.Split(':'); - if (parts.Length != 2) - { - Console.WriteLine("ERROR: Bad 'Discovery' argument."); - return false; - } // if - - if (!IPAddress.TryParse(parts[0], out ipAddress)) - { - Console.WriteLine("ERROR: Bad 'Discovery' argument: invalid IP address"); - return false; - } // if - - if (!int.TryParse(parts[1], NumberStyles.None, NumberFormatInfo.InvariantInfo, out port)) - { - Console.WriteLine("ERROR: Bad 'Discovery' argument: invalid port number"); - return false; - } // if - if ((port < 1) || (port > UInt16.MaxValue)) - { - Console.WriteLine("ERROR: Bad 'Discovery' argument: invalid port number"); - return false; - } // if - - DiscoveryEndpoint = new IPEndPoint(ipAddress, port); - } - else - { - DisplayLogo(); - Console.WriteLine("ERROR: 'Discovery' argument has not been specified."); - return false; - } // if-else - - if (arguments.TryGetValue("ForceUiCulture", out value)) - { - ForceUiCulture(value); - } // if - - return true; - } // ProcessArguments - - private static void ForceUiCulture(string culture) - { - if (culture == null) return; - culture = culture.Trim(); - if (culture == string.Empty) return; - - try - { - Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture); - } - catch (Exception ex) - { - MyApplication.HandleException(null, string.Format("Invalid argument value for /ForceUiCulture:{0}", culture), ex); - } // try-catch - } // ForceUiCulture - - static void PrepareDatabase() - { - Console.Write("Conecting to database..."); - UpdateDbStatus(1); - Console.WriteLine(" ok"); - - Console.Write("Deleting old EPG data..."); - EpgDbSerialization.DeleteAllEvents(DbFile, null, DateTime.Now - new TimeSpan(6, 0, 0)); - Console.WriteLine(" ok"); - - if (XmlFilesPath != null) - { - Console.Write("Deleting old EPG XML data..."); - foreach (var file in Directory.GetFiles(XmlFilesPath, "*.xml")) - { - try - { - File.Delete(file); - } - catch - { - // ignore - } - } // foreach - Console.WriteLine(" ok"); - } // if - } // PrepareDatabase - - static void CompactDatabase() - { - Console.Write("Compacting EPG database..."); - - try - { - using (var engine = new SqlCeEngine()) - { - engine.LocalConnectionString = "Data source=\"" + DbFile + "\";Password=\"movistartv.codeplex.com\""; - engine.Compact("Data source=;Password=\"movistartv.codeplex.com\""); - } // using engine - } - catch (Exception ex) - { - Console.WriteLine(" error"); - Console.WriteLine(ex.Message); - } // try-catch - - Console.WriteLine(" ok"); - } // CompactDatabase - - private static void ProcessEpgSource(IList addresses) - { - var list = addresses; - - ThreadPool.QueueUserWorkItem(delegate(object state) { ProcessEpgSourceAsync(list); }); - } // ProcessEpgSource - - private static void ProcessEpgSourceAsync(IList list) - { - var events = new AutoResetEvent[list.Count]; - - for (int index = 0; index < list.Count; index++) - { - var myIndex = index; - var endpoint = list[myIndex]; - events[myIndex] = new AutoResetEvent(false); - - ThreadPool.QueueUserWorkItem(delegate(object o) - { - try - { - Log("=== Loading EPG data from {0}:{1} ===", endpoint.Address, endpoint.Port); - - var client = new DvbStp.Client.DvbStpClient(endpoint.Address, endpoint.Port); - client.NoDataTimeout = -1; - client.ReceiveDatagramTimeout = 30000; // 30 seconds - client.OperationTimeout = (60 * 60) * 1000; // 60 minutes - client.DatagramReceived += Client_DatagramReceived; - client.SegmentDataDownloaded += Client_SegmentDataDownloaded; - client.SegmentReceived += Client_SegmentReceived; - - client.DownloadSegments(null); - - Log("=== EPG data from {0}:{1} downloaded ===", endpoint.Address, endpoint.Port); - } - catch (Exception ex) - { - Console.WriteLine(); - Console.WriteLine("UNEXPECTED EXCEPTION!"); - Console.WriteLine(ex.GetType().FullName); - Console.WriteLine(ex.Message); - Console.WriteLine(); - //MyApplication.HandleException(null, "Unexpected error while downloading EPG data", ex); - Exception = ex; - } // try-catch - events[myIndex].Set(); - }); - } // foreach - - foreach (var autoEvent in events) - { - autoEvent.WaitOne(); - } // foreach - - MainEvent.Set(); - } // ProcessEpgSourceAsync - - static int progressCount; - - static void Client_DatagramReceived(DvbStpClient client, byte payloadId, byte segmentIdNetworkHi, byte segmentIdNetworkLo, byte segmentVersion, bool filtered) - { - progressCount = (progressCount + 1) % 25; - Console.Title = string.Format("TV-Anytime EPG loader utility - Receiving EPG data {0}", new string('#', progressCount)); - } // Client_DatagramReceived - - static void Client_SegmentDataDownloaded(DvbStpClient client, SegmentAssembler segmentData) - { - Log("[{0}] Received {1}: {2:N0} bytes", client.MulticastIpAddress, segmentData.SegmentIdentity, segmentData.ReceivedBytes); - ThreadPool.QueueUserWorkItem(delegate(object state) { ProcessEpgPayload(client.MulticastIpAddress, segmentData, DbFile); }); - } // Client_SegmentDataDownloaded - - static void Client_SegmentReceived(DvbStpClient client, DvbStpSegmentIdentity segmentIdentity, int round) - { - Console.WriteLine("[{0}] {1} round {2}", client.MulticastIpAddress, segmentIdentity, round); - } // Client_SegmentReceived - - static void ProcessEpgPayload(IPAddress ipAddress, SegmentAssembler segmentData, string dbFile) - { - try - { - var data = segmentData.GetPayload(); - - if (XmlFilesPath != null) - { - var file = string.Format("{0}_{1}.xml", ipAddress.ToString().Replace('.', '-'), segmentData.SegmentIdentity); - System.IO.File.WriteAllBytes(System.IO.Path.Combine(XmlFilesPath, file), data); - } // if - - using (var cn = DbServices.GetConnection(dbFile)) - { - ProcessEpgPayload(data, cn); - cn.Close(); - } // using cn - } - catch (Exception ex) - { - Console.WriteLine(ex.ToString()); - } // try-catch - } // ProcessEpgPayload - - static void ProcessEpgPayload(byte[] data, SqlCeConnection cn) - { - var tvaMain = XmlSerialization.Deserialize(data, true); - if ((tvaMain == null) || - (tvaMain.ProgramDescription == null) || - (tvaMain.ProgramDescription.LocationTable == null) || - (tvaMain.ProgramDescription.LocationTable.Schedule == null)) - { - Console.WriteLine("Empty or invalid data!"); - // there's nothing to process - return; - } // if - var tvaSchedule = tvaMain.ProgramDescription.LocationTable.Schedule; - - var epgService = EpgService.FromItem(tvaSchedule); - epgService.GetDatabaseId(cn); - - Log(">> Service {0} (db {1}): {2} events (t{3})", epgService.ServiceId, epgService.ServiceDatabaseId, epgService.Events.Length, Thread.CurrentThread.ManagedThreadId); - - // TODO: Provide fallback mechanism for deleting events pertaining to this service - if (epgService.Events.Length == 0) return; - - var startTime = epgService.Events[0].StartTime; - var today = new DateTime(startTime.Year, startTime.Month, startTime.Day, 0, 0, 0).ToUniversalTime(); - var tomorrow = today + new TimeSpan(1, 0, 0, 0); - EpgDbSerialization.DeleteEvents(cn, epgService.ServiceDatabaseId, today, tomorrow); - - epgService.Save(cn); - } // ProcessFile - - static void Log(string text) - { - lock (DbFile) - { - Console.WriteLine(text); - } // lock - } // Log - - static void Log(string text, params object[] args) - { - Log(string.Format(text, args)); - } // Log - - static void UpdateDbStatus(int status) - { - using (var cmd = new SqlCeCommand()) - { - cmd.CommandText = "INSERT INTO [Status] ([Status], [Timestamp]) VALUES (?, ?)"; - cmd.Parameters.Add("@Status", System.Data.SqlDbType.Int).Value = status; - cmd.Parameters.Add("@Timestamp", System.Data.SqlDbType.DateTime).Value = DateTime.UtcNow; - DbServices.Execute(DbFile, cmd); - } // using cmd - } // UpdateDbStatus - - } // class Program -} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/AssemblyInfo.cs deleted file mode 100644 index 1f554799..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute parameters to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TV-Anytime EPG loader utility")] -[assembly: AssemblyDescription("Project.IpTv.Internal.ConsoleEPGLoader")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f5de3d7e-d0da-43fb-87d3-d7d85ab42e6e")] - -// Version information for an assembly consists of the following four parameters: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Resources.Designer.cs deleted file mode 100644 index 45f71f48..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Resources.Designer.cs +++ /dev/null @@ -1,73 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Internal.ConsoleEPGLoader.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Internal.ConsoleEPGLoader.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon ConsoleEpgLoader { - get { - object obj = ResourceManager.GetObject("ConsoleEpgLoader", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Resources.resx b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Resources.resx deleted file mode 100644 index 98a2dacf..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Resources.resx +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\ConsoleEpgLoader.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Texts.Designer.cs deleted file mode 100644 index c3e472c6..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Texts.Designer.cs +++ /dev/null @@ -1,83 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18444 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.IpTv.Internal.ConsoleEPGLoader.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.IpTv.Internal.ConsoleEPGLoader.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to An error has occurred while processing your request. - /// - internal static string MyAppHandleExceptionDefaultCaption { - get { - return ResourceManager.GetString("MyAppHandleExceptionDefaultCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to TV-Anytime EPG download & update utility - ///Version {0} - ///{1}. All rights reserved.. - /// - internal static string StartLogo { - get { - return ResourceManager.GetString("StartLogo", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Texts.es.resx b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Texts.es.resx deleted file mode 100644 index faeb9310..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Texts.es.resx +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Utilidad de descarga y actualización de EPG TV-Anytime -Versión {0} -{1}. Todos los derechos reservados. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Texts.resx b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Texts.resx deleted file mode 100644 index e13226bc..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Properties/Texts.resx +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - An error has occurred while processing your request - - - TV-Anytime EPG download & update utility -Version {0} -{1}. All rights reserved. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Resources/ConsoleEpgLoader.ico b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Resources/ConsoleEpgLoader.ico deleted file mode 100644 index 256f54b8..00000000 Binary files a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/Resources/ConsoleEpgLoader.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/SegmentDataStorage.SegmentInfo.cs b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/SegmentDataStorage.SegmentInfo.cs deleted file mode 100644 index 24533059..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/SegmentDataStorage.SegmentInfo.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - partial class SegmentDataStorage - { - private class SegmentInfo - { - private BitArray IsSectionReceived; - private SegmentAssembler SegmentData; - - public event SegmentDataDownloadedCallback SegmentDataDownloaded; - public event SegmentReceivedCallback SegmentReceived; - - public DvbStpSegmentIdentity SegmentIdentity - { - get; - private set; - } // SegmentIdentity - - public int TotalSectionsCount - { - get; - private set; - } // TotalSectionsCount - - public int RemainingSections - { - get; - private set; - } // RemainingSections - - public int Round - { - get; - private set; - } // Round - - public SegmentInfo(DvbStpHeader header) - { - Reset(header); - } // constructor - - public void AddSectionData(DvbStpHeader header, byte[] data, bool isRawData) - { - // section received? - if (IsSectionReceived[header.SectionNumber]) return; - - // store data - if (SegmentData != null) - { - if (isRawData) - { - SegmentData.AddSectionData(header.SectionNumber, data, header.PayloadOffset, header.PayloadSize); - } - else - { - SegmentData.AddSectionData(header.SectionNumber, data, 0, data.Length); - } // if-else - } // if - - IsSectionReceived[header.SectionNumber] = true; - RemainingSections--; - - CheckSegmentComplete(); - } // AddSectionData - - public bool IsSegmentComplete - { - get { return (RemainingSections <= 0); } - } // IsSegmentComplete - - public void Reset(DvbStpHeader header) - { - TotalSectionsCount = header.LastSectionNumber + 1; - RemainingSections = TotalSectionsCount; - IsSectionReceived = new BitArray(TotalSectionsCount); - - SegmentIdentity = new DvbStpSegmentIdentity(header); - SegmentData = new SegmentAssembler(new DvbStpSegmentIdentity(header), header.LastSectionNumber); - - Round = 0; - } // Reset - - public void AdjustRound(int minusValue) - { - Round -= minusValue; - if (Round < 0) Round = 0; - } // AdjustRound - - private void CheckSegmentComplete() - { - if (!IsSegmentComplete) return; - - if (SegmentData != null) - { - if (SegmentDataDownloaded != null) SegmentDataDownloaded(SegmentData); - SegmentData = null; - } // if - - if (SegmentReceived != null) - { - SegmentReceived(SegmentIdentity, Round); - } // if - - IsSectionReceived.SetAll(false); - RemainingSections = TotalSectionsCount; - Round++; - } // CheckSegmentComplete - } // class SegmentInfo - } // partial class SegmentDataStorage -} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/SegmentDataStorage.cs b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/SegmentDataStorage.cs deleted file mode 100644 index c09f9efb..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/SegmentDataStorage.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.DvbStp.Client -{ - public partial class SegmentDataStorage - { - private Dictionary Segments; - - public delegate void SegmentNewCallback(DvbStpSegmentIdentity segmentIdentity); - public delegate void SegmentDataDownloadedCallback(SegmentAssembler segmentData); - public delegate void SegmentVersionChangedCallback(byte oldVersion, DvbStpSegmentIdentity newVersion, bool wasComplete); - public delegate void SegmentReceivedCallback(DvbStpSegmentIdentity segmentIdentity, int round); - - public event SegmentNewCallback SegmentNew; - public event SegmentDataDownloadedCallback SegmentDataDownloaded; - public event SegmentVersionChangedCallback SegmentVersionChanged; - public event SegmentReceivedCallback SegmentReceived; - - public SegmentDataStorage() - { - Segments = new Dictionary(); - } // constructor - - public int SegmentsCount - { - get { return Segments.Count; } - } // SegmentsCount - - public void AddSectionData(DvbStpHeader header, byte[] data, bool isRawData) - { - SegmentInfo info; - - var p = (int)header.PayloadId; - var s = (int)header.SegmentId; - var key = ((p << 16) | s); - - if (!Segments.TryGetValue(key, out info)) - { - info = NewSegmentInfo(header); - Segments[key] = info; - } // if - - DetectVersionChange(header, info); - info.AddSectionData(header, data, isRawData); - } // AddSectionData - - private SegmentInfo NewSegmentInfo(DvbStpHeader header) - { - var info = new SegmentInfo(header); - - // hook-up events - info.SegmentDataDownloaded += Info_SegmentDataComplete; - info.SegmentReceived += Info_SegmentReceived; - - if (SegmentNew != null) SegmentNew(info.SegmentIdentity); - - return info; - } // NewSegmentInfo - - private void DetectVersionChange(DvbStpHeader header, SegmentInfo info) - { - if (header.SegmentVersion == info.SegmentIdentity.Version) return; - - foreach (var segment in Segments.Values) - { - segment.AdjustRound(-1); - } // foreach - - var oldVersion = info.SegmentIdentity.Version; - var wasComplete = (info.Round > 0); - info.Reset(header); - if (SegmentVersionChanged != null) - { - SegmentVersionChanged(oldVersion, info.SegmentIdentity, wasComplete); - } // if - } // DetectVersionChange - - private void Info_SegmentDataComplete(SegmentAssembler segmentData) - { - if (SegmentDataDownloaded != null) SegmentDataDownloaded(segmentData); - } // Info_SegmentDataComplete - - void Info_SegmentReceived(DvbStpSegmentIdentity segmentIdentity, int round) - { - if (SegmentReceived != null) SegmentReceived(segmentIdentity, round); - } // Info_SegmentReceived - } // public class SegmentDataStorage -} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/UnsafeNativeMethods.cs b/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/UnsafeNativeMethods.cs deleted file mode 100644 index c68d1f2d..00000000 --- a/1.5 'Kruger 60'/InternalTools/ConsoleEPGLoader/UnsafeNativeMethods.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; - -namespace Project.IpTv.Internal.ConsoleEPGLoader -{ - internal partial class UnsafeNativeMethods - { - [DllImport("kernel32.dll", SetLastError = true)] - public static extern bool SetConsoleIcon(IntPtr hIcon); - } // class UnsafeNativeMethods -} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj index 6b4f7111..eea59403 100644 --- a/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj +++ b/1.5 'Kruger 60'/InternalTools/ConsoleExperiments/ConsoleExperiments.csproj @@ -9,16 +9,31 @@ Properties IpTviewr.Internal.Tools.ConsoleExperiments ConsoleExperiments - v4.5.2 + v4.7.2 512 SAK SAK SAK SAK + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true - x86 + AnyCPU true full false @@ -27,6 +42,7 @@ prompt 4 false + 8 AnyCPU @@ -37,21 +53,17 @@ prompt 4 false + 8 - + False - ..\..\Third-party\Json70r1\Bin\Net35\Newtonsoft.Json.dll + ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - False - ..\..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - + - - @@ -59,48 +71,47 @@ Properties\AssemblySolutionInfo.cs + - + - - + - - {b91c438d-0333-4d06-86cd-74ce82df6f40} - Etsi.Ts102034 - - - {e1748f45-dd50-4479-96f6-f7eba6f3e28b} - IpTv.MovistarPlus - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C} + IpTviewr.Common - - {5a171dbb-855c-452b-93c6-229c7aa6c7a6} - Services.EPG.Serialization - - - {3a053f34-4edf-4071-b966-923255a0ae14} - Services.SqlServerCE - - - {a722de9d-ae51-479c-825f-a19f4c69bd75} + + {A722DE9D-AE51-479C-825F-A19F4C69BD75} UiServices.Config - - {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} - UiServices.Discovery + + {448697cf-3d5c-45c3-8775-844ba7129672} + Winforms.MsgBoxEx + + + + + + + False + Microsoft .NET Framework 4.5.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ExceptionMsgBox + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.Designer.cs deleted file mode 100644 index 481185a5..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.Designer.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.Services.EPG.EpgDownloader -{ - partial class EpgDownloadForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Text = "Form1"; - } - - #endregion - } -} // namespace - diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.cs deleted file mode 100644 index c0a9c7a2..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloadForm.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.Services.EPG.EpgDownloader -{ - public partial class EpgDownloadForm : Form - { - public EpgDownloadForm() - { - InitializeComponent(); - } - } -} diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloader.csproj b/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloader.csproj deleted file mode 100644 index d3d12b9e..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/EpgDownloader.csproj +++ /dev/null @@ -1,106 +0,0 @@ - - - - - Debug - AnyCPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25} - WinExe - Properties - Project.DvbIpTv.Services.EPG.EpgDownloader - EpgDownloader - v4.5.2 - 512 - SAK - SAK - SAK - SAK - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - Resources\EpgDownload.ico - - - - False - ..\..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll - - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - Form - - - EpgDownloadForm.cs - - - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/License.txt b/1.5 'Kruger 60'/InternalTools/EpgDownloader/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Program.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Program.cs deleted file mode 100644 index 5a7a1ea0..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Program.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; - -namespace IpTviewr.Services.EPG.EpgDownloader -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new EpgDownloadForm()); - } // Main - } // static class Program -} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/AssemblyInfo.cs deleted file mode 100644 index 32d19736..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute parameters to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DVB-STP TV-Anytime EPG downloader utility")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d83c27b7-ba5e-4d95-a162-286de43d107b")] - -// Version information for an assembly consists of the following four parameters: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs deleted file mode 100644 index 598379b1..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.Designer.cs +++ /dev/null @@ -1,73 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.DvbIpTv.Services.EPG.EpgDownloader.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.DvbIpTv.Services.EPG.EpgDownloader.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon EpgDownload { - get { - object obj = ResourceManager.GetObject("EpgDownload", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.resx b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.resx deleted file mode 100644 index 458f9e5b..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Resources.resx +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\resources\epgdownload.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs deleted file mode 100644 index cc947eb8..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Properties/Settings.Designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Project.DvbIpTv.Services.EPG.EpgDownloader.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Resources/EpgDownload.ico b/1.5 'Kruger 60'/InternalTools/EpgDownloader/Resources/EpgDownload.ico deleted file mode 100644 index 2263aca7..00000000 Binary files a/1.5 'Kruger 60'/InternalTools/EpgDownloader/Resources/EpgDownload.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/InternalTools/EpgDownloader/app.config b/1.5 'Kruger 60'/InternalTools/EpgDownloader/app.config deleted file mode 100644 index ff995010..00000000 --- a/1.5 'Kruger 60'/InternalTools/EpgDownloader/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/BinaryEditorForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/BinaryEditorForm.Designer.cs new file mode 100644 index 00000000..bf74b148 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/BinaryEditorForm.Designer.cs @@ -0,0 +1,156 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.GuiTools +{ + partial class BinaryEditorForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.textFile = new System.Windows.Forms.TextBox(); + this.labelFile = new System.Windows.Forms.Label(); + this.buttonStart = new System.Windows.Forms.Button(); + this.labelChunkSize = new System.Windows.Forms.Label(); + this.comboChunkSize = new System.Windows.Forms.ComboBox(); + this.textBinary = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // textFile + // + this.textFile.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textFile.Location = new System.Drawing.Point(44, 15); + this.textFile.Name = "textFile"; + this.textFile.Size = new System.Drawing.Size(234, 20); + this.textFile.TabIndex = 1; + // + // labelFile + // + this.labelFile.AutoSize = true; + this.labelFile.Location = new System.Drawing.Point(12, 18); + this.labelFile.Name = "labelFile"; + this.labelFile.Size = new System.Drawing.Size(26, 13); + this.labelFile.TabIndex = 0; + this.labelFile.Text = "File:"; + // + // buttonStart + // + this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonStart.Image = global::IpTviewr.Internal.Tools.GuiTools.Properties.Resources.Action_Play_LG_16x16; + this.buttonStart.Location = new System.Drawing.Point(372, 12); + this.buttonStart.Name = "buttonStart"; + this.buttonStart.Size = new System.Drawing.Size(100, 25); + this.buttonStart.TabIndex = 4; + this.buttonStart.Text = "Load file"; + this.buttonStart.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.buttonStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; + this.buttonStart.UseVisualStyleBackColor = true; + this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); + // + // labelChunkSize + // + this.labelChunkSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelChunkSize.AutoSize = true; + this.labelChunkSize.Location = new System.Drawing.Point(284, 18); + this.labelChunkSize.Name = "labelChunkSize"; + this.labelChunkSize.Size = new System.Drawing.Size(41, 13); + this.labelChunkSize.TabIndex = 2; + this.labelChunkSize.Text = "Chunk:"; + // + // comboChunkSize + // + this.comboChunkSize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.comboChunkSize.FormattingEnabled = true; + this.comboChunkSize.Items.AddRange(new object[] { + "8", + "16", + "24", + "32"}); + this.comboChunkSize.Location = new System.Drawing.Point(331, 15); + this.comboChunkSize.Name = "comboChunkSize"; + this.comboChunkSize.Size = new System.Drawing.Size(35, 21); + this.comboChunkSize.TabIndex = 3; + this.comboChunkSize.Text = "24"; + // + // textBinary + // + this.textBinary.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBinary.BackColor = System.Drawing.SystemColors.Window; + this.textBinary.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBinary.Location = new System.Drawing.Point(12, 43); + this.textBinary.Multiline = true; + this.textBinary.Name = "textBinary"; + this.textBinary.ReadOnly = true; + this.textBinary.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBinary.Size = new System.Drawing.Size(460, 306); + this.textBinary.TabIndex = 5; + this.textBinary.WordWrap = false; + this.textBinary.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBinary_KeyPress); + // + // BinaryEditorForm + // + this.AllowDrop = true; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(484, 361); + this.Controls.Add(this.textBinary); + this.Controls.Add(this.comboChunkSize); + this.Controls.Add(this.labelChunkSize); + this.Controls.Add(this.textFile); + this.Controls.Add(this.labelFile); + this.Controls.Add(this.buttonStart); + this.Name = "BinaryEditorForm"; + this.Text = "Binary editor"; + this.DragDrop += new System.Windows.Forms.DragEventHandler(this.BinaryEditorForm_DragDrop); + this.DragEnter += new System.Windows.Forms.DragEventHandler(this.BinaryEditorForm_DragEnter); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textFile; + private System.Windows.Forms.Label labelFile; + private System.Windows.Forms.Button buttonStart; + private System.Windows.Forms.Label labelChunkSize; + private System.Windows.Forms.ComboBox comboChunkSize; + private System.Windows.Forms.TextBox textBinary; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/BinaryEditorForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/BinaryEditorForm.cs new file mode 100644 index 00000000..4e5aaac7 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/BinaryEditorForm.cs @@ -0,0 +1,153 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.UiServices.Common.Forms; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + public partial class BinaryEditorForm : CommonBaseForm + { + private int ChunkSize; + private byte[] Data; + private System.Collections.BitArray HasBreak; + private List LineStart; + private List LineTextStarts; + private int DataStartOffset; + private string HexData; + private string TextData; + + public BinaryEditorForm() + { + InitializeComponent(); + this.Icon = Properties.Resources.GuiTools; + } // constructor + + private void buttonStart_Click(object sender, EventArgs e) + { + SafeCall(LoadFile); + } // buttonStart_Click + + private void textBinary_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar != '\r') return; + + var line = LineTextStarts.BinarySearch(textBinary.SelectionStart); + if (line < 0) + { + line = (~line) - 1; + } // if + var start = LineTextStarts[line]; + var column = (textBinary.SelectionStart - start) - DataStartOffset; + var index = LineStart[line] + column; + HasBreak[index] = true; + + var caret = textBinary.SelectionStart; + textBinary.Text = GetDisplayData(); + textBinary.SelectionLength = 0; + textBinary.SelectionStart = caret; + textBinary.ScrollToCaret(); + } // textBinary_KeyPress + + private void LoadFile() + { + Data = null; + HexData = null; + TextData = null; + textBinary.Text = null; + HasBreak = null; + LineStart = null; + LineTextStarts = null; + + Data = File.ReadAllBytes(textFile.Text); + ChunkSize = int.Parse(comboChunkSize.Text); + HasBreak = new System.Collections.BitArray(Data.Length); + + var hexData = new StringBuilder(Data.Length * 3); + var textData = new StringBuilder(Data.Length); + foreach (var b in Data) + { + hexData.AppendFormat("{0:X2} ", b); + var c = (char)b; + if (char.IsControl(c)) textData.Append('·'); + else if (char.IsWhiteSpace(c)) textData.Append(' '); + else textData.Append(c); + } // foreach + + HexData = hexData.ToString(); + TextData = textData.ToString(); + textBinary.Text = GetDisplayData(); + } // LoadFile + + private string GetDisplayData() + { + int offset; + + LineStart = new List(((Data.Length / ChunkSize) * 110) / 100); + LineTextStarts = new List(LineStart.Capacity); + + var buffer = new StringBuilder(Data.Length * 5); + DataStartOffset = 4 + 2 + (3 * ChunkSize) + (int)Math.Floor(((double)ChunkSize - 1) / 8) + 1; + + for (var start = 0; start < Data.Length; ) + { + LineStart.Add(start); + + var lineStart = buffer.Length; + LineTextStarts.Add(lineStart); + + buffer.AppendFormat("{0:x4} ", start); + for (offset = 0; offset < ChunkSize; offset++) + { + var index = start + offset; + if (index >= Data.Length) break; + if ((offset > 0) && (HasBreak[index])) break; + + if ((offset > 0) && ((offset % 8) == 0)) buffer.Append(" "); + buffer.Append(HexData.Substring(index * 3, 3)); + } // for index + var padding = DataStartOffset - (buffer.Length - lineStart); + buffer.Append(new string(' ', padding)); + + for (offset = 0; offset < ChunkSize; offset++) + { + var index = start + offset; + if (index >= Data.Length) break; + if ((offset > 0) && (HasBreak[index])) break; + buffer.Append(TextData[index]); + } // for offset + buffer.AppendLine(); + start += offset; + } // for + + return buffer.ToString(); + } // GetDisplayData + + private void BinaryEditorForm_DragEnter(object sender, DragEventArgs e) + { + var isFile = e.Data.GetDataPresent(DataFormats.FileDrop, true); + e.Effect = isFile ? DragDropEffects.Link : DragDropEffects.None; + } // BinaryEditorForm_DragEnter + + private void BinaryEditorForm_DragDrop(object sender, DragEventArgs e) + { + var files = e.Data.GetData(DataFormats.FileDrop) as string[]; + textFile.Text = files[0]; + SafeCall(LoadFile); + } // BinaryEditorForm_DragDrop + } // class BinaryEditorForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/BinaryEditorForm.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/BinaryEditorForm.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/BinaryEditorForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .Designer.cs index 10c58ccd..42f26bf4 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Internal.Tools.GuiTools { @@ -437,4 +447,4 @@ private void InitializeComponent() private System.Windows.Forms.ColumnHeader columnHeaderDatagramSize; private System.Windows.Forms.ColumnHeader columnHasCRC; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs index 0bfb0113..344d99b9 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/DvbStpStreamExplorerForm .cs @@ -1,17 +1,24 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.DvbStp.Client; using System; -using System.Collections.Generic; using System.ComponentModel; -using System.Data; using System.Drawing; using System.IO; -using System.Linq; using System.Net; -using System.Net.Sockets; using System.Text; +using System.Threading; using System.Windows.Forms; namespace IpTviewr.Internal.Tools.GuiTools @@ -28,6 +35,7 @@ public partial class DvbStpStreamExplorerForm : Form private string DumpFolderSections; private string DumpFolderSegments; private DateTime StartTime; + private CancellationTokenSource CancellationTokenSource; public DvbStpStreamExplorerForm() { @@ -117,7 +125,8 @@ private void buttonStart_Click(object sender, EventArgs e) listViewSections.Items.Clear(); listViewRuns.Items.Clear(); - Explorer = new DvbStpExplorer(MulticastIpAddress, MulticastPort); + CancellationTokenSource = new CancellationTokenSource(); + Explorer = new DvbStpExplorer(MulticastIpAddress, MulticastPort, CancellationTokenSource.Token); statusLabelReceiving.Text = "Trying to connect..."; Worker = new BackgroundWorker() @@ -136,7 +145,7 @@ private void buttonStop_Click(object sender, EventArgs e) buttonStop.Enabled = false; buttonStop.Text = "Cancelling"; buttonStop.Image = Properties.Resources.Status_Wait_16x16; - Explorer.CancelRequest(); + CancellationTokenSource.Cancel(); } // buttonStop_Click #endregion @@ -153,20 +162,23 @@ private void EnableDumpFolder() #region Worker events - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { + Worker.Dispose(); + Worker = null; + + CancellationTokenSource.Dispose(); + CancellationTokenSource = null; + buttonStart.Enabled = true; buttonStop.Text = "Stop"; buttonStop.Image = Properties.Resources.Action_Cancel_Red_16x16; statusLabelDataReception.Text = null; statusLabelReceiving.Text = null; checkDumpSections.Enabled = true; - - Worker.Dispose(); - Worker = null; } // Worker_RunWorkerCompleted - void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) + private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { switch (e.ProgressPercentage) { @@ -200,7 +212,7 @@ private void ProgressSectionReceived(DvbStpExplorer.SectionReceivedEventArgs sec DatagramCount++; DatagramByteCount += section.BytesReceived; - int length = (DatagramCount % 10) + 1; + var length = (DatagramCount % 10) + 1; statusLabelDataReception.Text = new string('l', length); statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); @@ -210,7 +222,7 @@ private void ProgressSectionReceived(DvbStpExplorer.SectionReceivedEventArgs sec { string.Format("p{0:X2}s{1:X4}v{2:X2}", section.Header.PayloadId, section.Header.SegmentId, section.Header.SegmentVersion), string.Format("{0,7:N0}", section.BytesReceived), - string.Format(section.Header.HasCRC? "yes" : "no"), + string.Format(section.Header.HasCrc? "yes" : "no"), string.Format("{0,7:N0}", section.Payload.Length), string.Format("{0,7:N0}", section.Header.SectionNumber), string.Format("{0,7:N0}", section.Header.LastSectionNumber), @@ -273,7 +285,7 @@ private void ProgressSegmentReceived(PayloadStorage.SegmentPayloadReceivedEventA #region Worker implementation - void Worker_DoWork(object sender, DoWorkEventArgs e) + private void Worker_DoWork(object sender, DoWorkEventArgs e) { StartTime = DateTime.Now; try @@ -318,8 +330,8 @@ private string GetFirstBytes(byte[] data, int count) { if (count > data.Length) count = data.Length; - StringBuilder buffer = new StringBuilder(count); - for (int index = 0; index < count; index++) + var buffer = new StringBuilder(count); + for (var index = 0; index < count; index++) { var b = data[index]; buffer.Append((b <32 )? '·' : (char) b); diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj b/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj index 99799d71..7d892294 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/GuiTools.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.Internal.Tools.GuiTools GuiTools - v4.5.2 + v4.7.2 512 SAK SAK @@ -42,6 +42,12 @@ Resources\GuiTools.ico + + ..\..\Assemblies\Third-party\ComponentFactory\Krypton\v4.6.0.0\ComponentFactory.Krypton.Ribbon.dll + + + ..\..\Assemblies\Third-party\ComponentFactory\Krypton\v4.6.0.0\ComponentFactory.Krypton.Toolkit.dll + False ..\..\..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\90\SDK\Assemblies\Microsoft.ExceptionMessageBox.dll @@ -60,12 +66,24 @@ Properties\AssemblySolutionInfo.cs + + Form + + + BinaryEditorForm.cs + Form DvbStpStreamExplorerForm .cs + + Form + + + IconBuilder.cs + Form @@ -87,15 +105,39 @@ + + Form + + + RibbonForm.cs + + + True + True + RibbonResources.resx + + + Form + + + RtfViewer.cs + Form SimpleDvbStpDownloadForm.cs + + + BinaryEditorForm.cs + DvbStpStreamExplorerForm .cs + + IconBuilder.cs + OpchExplorerForm.cs @@ -115,10 +157,22 @@ Resources.resx True + + ResXFileCodeGenerator + RibbonResources.Designer.cs + + + RibbonForm.cs + + + RtfViewer.cs + SimpleDvbStpDownloadForm.cs + + SettingsSingleFileGenerator Settings.Designer.cs @@ -133,16 +187,24 @@ - - {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} + + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3} DvbStpClient - + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common + + + {8986CD52-0C65-42D6-9C47-20FF47CF87BB} + IpTviewr.Native + + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} UiServices.Common - - {ba481e42-f570-4d2c-94d4-21c4cce27762} + + {BA481E42-F570-4D2C-94D4-21C4CCE27762} UiServices.DvbStpClient @@ -157,7 +219,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/LICENSE.ES.MD b/1.5 'Kruger 60'/InternalTools/GuiTools/LICENSE.ES.MD new file mode 100644 index 00000000..bdac73ec --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/LICENSE.ES.MD @@ -0,0 +1,164 @@ +# Programa 'GuiTools' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este PROGRAMA (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios, incluyendo, en su caso, al Grupo Teléfonica. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. GuiTools +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/LICENSE.MD b/1.5 'Kruger 60'/InternalTools/GuiTools/LICENSE.MD new file mode 100644 index 00000000..842a09aa --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/LICENSE.MD @@ -0,0 +1,136 @@ +# Program 'GuiTools' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. GuiTools +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs index 48fe8cd8..e4a3bcbe 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Internal.Tools.GuiTools { @@ -32,20 +42,28 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.groupBoxTools = new System.Windows.Forms.GroupBox(); + this.radioIconBuilder = new System.Windows.Forms.RadioButton(); + this.radioBinaryEditor = new System.Windows.Forms.RadioButton(); this.radioDvbStpExplorer = new System.Windows.Forms.RadioButton(); this.radioOpchExplorer = new System.Windows.Forms.RadioButton(); this.radioMulticastExplorer = new System.Windows.Forms.RadioButton(); this.radioSimpleDownload = new System.Windows.Forms.RadioButton(); + this.radioRibbon = new System.Windows.Forms.RadioButton(); this.buttonExecute = new System.Windows.Forms.Button(); + this.radioRtf = new System.Windows.Forms.RadioButton(); this.groupBoxTools.SuspendLayout(); this.SuspendLayout(); // // groupBoxTools // + this.groupBoxTools.Controls.Add(this.radioRtf); + this.groupBoxTools.Controls.Add(this.radioIconBuilder); + this.groupBoxTools.Controls.Add(this.radioBinaryEditor); this.groupBoxTools.Controls.Add(this.radioDvbStpExplorer); this.groupBoxTools.Controls.Add(this.radioOpchExplorer); this.groupBoxTools.Controls.Add(this.radioMulticastExplorer); this.groupBoxTools.Controls.Add(this.radioSimpleDownload); + this.groupBoxTools.Controls.Add(this.radioRibbon); this.groupBoxTools.Location = new System.Drawing.Point(12, 12); this.groupBoxTools.Name = "groupBoxTools"; this.groupBoxTools.Size = new System.Drawing.Size(393, 207); @@ -53,6 +71,29 @@ private void InitializeComponent() this.groupBoxTools.TabStop = false; this.groupBoxTools.Text = "Select tool"; // + // radioIconBuilder + // + this.radioIconBuilder.AutoSize = true; + this.radioIconBuilder.Location = new System.Drawing.Point(6, 135); + this.radioIconBuilder.Name = "radioIconBuilder"; + this.radioIconBuilder.Size = new System.Drawing.Size(80, 17); + this.radioIconBuilder.TabIndex = 5; + this.radioIconBuilder.TabStop = true; + this.radioIconBuilder.Text = "Icon builder"; + this.radioIconBuilder.UseVisualStyleBackColor = true; + // + // radioBinaryEditor + // + this.radioBinaryEditor.AutoSize = true; + this.radioBinaryEditor.Location = new System.Drawing.Point(6, 112); + this.radioBinaryEditor.Name = "radioBinaryEditor"; + this.radioBinaryEditor.Size = new System.Drawing.Size(83, 17); + this.radioBinaryEditor.TabIndex = 4; + this.radioBinaryEditor.TabStop = true; + this.radioBinaryEditor.Text = "Binary editor"; + this.radioBinaryEditor.UseVisualStyleBackColor = true; + this.radioBinaryEditor.CheckedChanged += new System.EventHandler(this.radioOption_CheckedChanged); + // // radioDvbStpExplorer // this.radioDvbStpExplorer.AutoSize = true; @@ -63,6 +104,7 @@ private void InitializeComponent() this.radioDvbStpExplorer.TabStop = true; this.radioDvbStpExplorer.Text = "DVB-STP Stream Explorer"; this.radioDvbStpExplorer.UseVisualStyleBackColor = true; + this.radioDvbStpExplorer.CheckedChanged += new System.EventHandler(this.radioOption_CheckedChanged); // // radioOpchExplorer // @@ -74,6 +116,7 @@ private void InitializeComponent() this.radioOpchExplorer.TabStop = true; this.radioOpchExplorer.Text = "OPCH Stream Explorer"; this.radioOpchExplorer.UseVisualStyleBackColor = true; + this.radioOpchExplorer.CheckedChanged += new System.EventHandler(this.radioOption_CheckedChanged); // // radioMulticastExplorer // @@ -85,6 +128,7 @@ private void InitializeComponent() this.radioMulticastExplorer.TabStop = true; this.radioMulticastExplorer.Text = "Multicast Stream Explorer"; this.radioMulticastExplorer.UseVisualStyleBackColor = true; + this.radioMulticastExplorer.CheckedChanged += new System.EventHandler(this.radioOption_CheckedChanged); // // radioSimpleDownload // @@ -96,6 +140,18 @@ private void InitializeComponent() this.radioSimpleDownload.TabStop = true; this.radioSimpleDownload.Text = "Simple DVB-STP Payload downloader"; this.radioSimpleDownload.UseVisualStyleBackColor = true; + this.radioSimpleDownload.CheckedChanged += new System.EventHandler(this.radioOption_CheckedChanged); + // + // radioRibbon + // + this.radioRibbon.AutoSize = true; + this.radioRibbon.Location = new System.Drawing.Point(6, 184); + this.radioRibbon.Name = "radioRibbon"; + this.radioRibbon.Size = new System.Drawing.Size(106, 17); + this.radioRibbon.TabIndex = 7; + this.radioRibbon.TabStop = true; + this.radioRibbon.Text = "Ribbon prototype"; + this.radioRibbon.UseVisualStyleBackColor = true; // // buttonExecute // @@ -107,6 +163,17 @@ private void InitializeComponent() this.buttonExecute.UseVisualStyleBackColor = true; this.buttonExecute.Click += new System.EventHandler(this.buttonExecute_Click); // + // radioRtf + // + this.radioRtf.AutoSize = true; + this.radioRtf.Location = new System.Drawing.Point(6, 158); + this.radioRtf.Name = "radioRtf"; + this.radioRtf.Size = new System.Drawing.Size(80, 17); + this.radioRtf.TabIndex = 6; + this.radioRtf.TabStop = true; + this.radioRtf.Text = "RTF viewer"; + this.radioRtf.UseVisualStyleBackColor = true; + // // LaunchForm // this.AcceptButton = this.buttonExecute; @@ -132,5 +199,9 @@ private void InitializeComponent() private System.Windows.Forms.RadioButton radioMulticastExplorer; private System.Windows.Forms.RadioButton radioOpchExplorer; private System.Windows.Forms.RadioButton radioDvbStpExplorer; + private System.Windows.Forms.RadioButton radioBinaryEditor; + private System.Windows.Forms.RadioButton radioIconBuilder; + private System.Windows.Forms.RadioButton radioRibbon; + private System.Windows.Forms.RadioButton radioRtf; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs index 4eff949f..e16e9db2 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/LaunchForm.cs @@ -1,38 +1,63 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; using System.Windows.Forms; namespace IpTviewr.Internal.Tools.GuiTools { public partial class LaunchForm : Form { + private Type SelectedForm; + public LaunchForm() { InitializeComponent(); - this.Icon = Properties.Resources.GuiTools; + Icon = Properties.Resources.GuiTools; } // constructor private void buttonExecute_Click(object sender, EventArgs e) { - Form form = null; - - if (radioSimpleDownload.Checked) form = new SimpleDvbStpDownloadForm(); - else if (radioDvbStpExplorer.Checked) form = new DvbStpStreamExplorerForm(); - else if (radioMulticastExplorer.Checked) form = new MulticastStreamExplorerForm(); - else if (radioOpchExplorer.Checked) form = new OpchExplorerForm(); + if (!(Activator.CreateInstance(SelectedForm) is Form form)) return; - if (form != null) - { - form.Show(); - } // if + form.Show(); + form.FormClosed += FormOnFormClosed; } // buttonExecute_Click + + private void FormOnFormClosed(object sender, FormClosedEventArgs e) + { + var form = (Form) sender; + form.FormClosed -= FormOnFormClosed; + form.Dispose(); + } // FormOnFormClosed + + private void radioOption_CheckedChanged(object sender, EventArgs e) + { + SelectedForm = GetSelectedForm(); + buttonExecute.Enabled = SelectedForm != null; + } // radioOption_CheckedChanged + + private Type GetSelectedForm() + { + if (radioSimpleDownload.Checked) return typeof(SimpleDvbStpDownloadForm); + if (radioDvbStpExplorer.Checked) return typeof(DvbStpStreamExplorerForm); + if (radioMulticastExplorer.Checked) return typeof(MulticastStreamExplorerForm); + if (radioOpchExplorer.Checked) return typeof(OpchExplorerForm); + if (radioBinaryEditor.Checked) return typeof(BinaryEditorForm); + if (radioIconBuilder.Checked) return typeof(IconBuilder); + if (radioRtf.Checked) return typeof(RtfViewer); + if (radioRibbon.Checked) return typeof(RibbonForm); + return null; + } // GetSelectedForm } // class LaunchForm } // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/License.txt b/1.5 'Kruger 60'/InternalTools/GuiTools/License.txt index 564d5dfc..5a4e8085 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/License.txt +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/License.txt @@ -1,43 +1,153 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions +############################################################################## +## +## Program 'GuiTools' +## +############################################################################## +## +## Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® Exception Message Box License Terms + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. GuiTools +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. UiServices.DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs index ce79ad4c..ac037754 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Internal.Tools.GuiTools { @@ -276,4 +286,4 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripStatusLabel statusLabelDatagramCount; private System.Windows.Forms.ToolStripStatusLabel statusLabelByteCount; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs index 80cbd261..94c184ce 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MulticastStreamExplorerForm.cs @@ -1,13 +1,19 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.ComponentModel; -using System.Data; -using System.Drawing; using System.IO; -using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; @@ -112,7 +118,7 @@ private void buttonStop_Click(object sender, EventArgs e) Worker.CancelAsync(); } // buttonStop_Click - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { buttonStart.Enabled = true; buttonStop.Text = "Stop"; @@ -124,7 +130,7 @@ void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) Worker = null; } // Worker_RunWorkerCompleted - void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) + private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { var data = e.UserState as byte[]; @@ -149,14 +155,14 @@ void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) DatagramCount++; DatagramByteCount += data.Length; - int length = (DatagramCount % 10) + 1; + var length = (DatagramCount % 10) + 1; statusLabelDataReception.Text = new string('l', length); statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); statusLabelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); } // Worker_ProgressChanged - void Worker_DoWork(object sender, DoWorkEventArgs e) + private void Worker_DoWork(object sender, DoWorkEventArgs e) { UdpClient client; IPEndPoint endPoint; @@ -191,8 +197,8 @@ private string GetFirstBytes(byte[] data, int count) { if (count > data.Length) count = data.Length; - StringBuilder buffer = new StringBuilder(count); - for (int index = 0; index < count; index++) + var buffer = new StringBuilder(count); + for (var index = 0; index < count; index++) { var b = data[index]; buffer.Append((b <32 )? '·' : (char) b); diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/MyApplication.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/MyApplication.cs index b9b1f8c3..4b19c876 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/MyApplication.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/MyApplication.cs @@ -1,13 +1,18 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using Microsoft.SqlServer.MessageBox; using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; using System.Threading; using System.Windows.Forms; diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs index 41381358..c7feb4e1 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Internal.Tools.GuiTools { @@ -36,7 +46,7 @@ private void InitializeComponent() System.Windows.Forms.ColumnHeader columnHeaderSize; System.Windows.Forms.ColumnHeader columnHeaderSuffix; System.Windows.Forms.ColumnHeader columnHeaderCount; - System.Windows.Forms.ColumnHeader columnHeaderPrefix; + System.Windows.Forms.ColumnHeader columnHeaderType; this.buttonStart = new System.Windows.Forms.Button(); this.buttonStop = new System.Windows.Forms.Button(); this.textPort = new System.Windows.Forms.TextBox(); @@ -52,12 +62,16 @@ private void InitializeComponent() this.statusLabelDataReception = new System.Windows.Forms.ToolStripStatusLabel(); this.statusLabelDatagramCount = new System.Windows.Forms.ToolStripStatusLabel(); this.statusLabelByteCount = new System.Windows.Forms.ToolStripStatusLabel(); + this.checkReassemble = new System.Windows.Forms.CheckBox(); + this.radioOnTheFly = new System.Windows.Forms.RadioButton(); + this.radioAfterStop = new System.Windows.Forms.RadioButton(); + this.checkDeleteFragments = new System.Windows.Forms.CheckBox(); columnHeaderFilename = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeaderFragment = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeaderSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeaderSuffix = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); columnHeaderCount = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - columnHeaderPrefix = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + columnHeaderType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.statusStripMain.SuspendLayout(); this.SuspendLayout(); // @@ -73,7 +87,8 @@ private void InitializeComponent() // // columnHeaderSize // - columnHeaderSize.Text = "Size"; + columnHeaderSize.Text = "Data size"; + columnHeaderSize.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; columnHeaderSize.Width = 75; // // columnHeaderSuffix @@ -86,10 +101,10 @@ private void InitializeComponent() columnHeaderCount.Text = "Count"; columnHeaderCount.Width = 75; // - // columnHeaderPrefix + // columnHeaderType // - columnHeaderPrefix.Text = "Prefix"; - columnHeaderPrefix.Width = 100; + columnHeaderType.Text = "File type"; + columnHeaderType.Width = 100; // // buttonStart // @@ -124,7 +139,7 @@ private void InitializeComponent() this.textPort.Location = new System.Drawing.Point(213, 15); this.textPort.Name = "textPort"; this.textPort.Size = new System.Drawing.Size(50, 20); - this.textPort.TabIndex = 19; + this.textPort.TabIndex = 5; this.textPort.Text = "22222"; // // labelPort @@ -133,7 +148,7 @@ private void InitializeComponent() this.labelPort.Location = new System.Drawing.Point(181, 18); this.labelPort.Name = "labelPort"; this.labelPort.Size = new System.Drawing.Size(26, 13); - this.labelPort.TabIndex = 18; + this.labelPort.TabIndex = 4; this.labelPort.Text = "Port"; // // textIpAddress @@ -141,7 +156,7 @@ private void InitializeComponent() this.textIpAddress.Location = new System.Drawing.Point(75, 15); this.textIpAddress.Name = "textIpAddress"; this.textIpAddress.Size = new System.Drawing.Size(100, 20); - this.textIpAddress.TabIndex = 17; + this.textIpAddress.TabIndex = 3; this.textIpAddress.Text = "239.0.2.30"; // // labelIpAddress @@ -150,35 +165,35 @@ private void InitializeComponent() this.labelIpAddress.Location = new System.Drawing.Point(12, 18); this.labelIpAddress.Name = "labelIpAddress"; this.labelIpAddress.Size = new System.Drawing.Size(57, 13); - this.labelIpAddress.TabIndex = 16; + this.labelIpAddress.TabIndex = 2; this.labelIpAddress.Text = "IP address"; // // textBaseDumpFolder // this.textBaseDumpFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.textBaseDumpFolder.Location = new System.Drawing.Point(237, 43); + this.textBaseDumpFolder.Location = new System.Drawing.Point(258, 66); this.textBaseDumpFolder.Name = "textBaseDumpFolder"; - this.textBaseDumpFolder.Size = new System.Drawing.Size(435, 20); - this.textBaseDumpFolder.TabIndex = 22; + this.textBaseDumpFolder.Size = new System.Drawing.Size(414, 20); + this.textBaseDumpFolder.TabIndex = 11; // // labelBaseDumpFolder // this.labelBaseDumpFolder.AutoSize = true; - this.labelBaseDumpFolder.Location = new System.Drawing.Point(124, 46); + this.labelBaseDumpFolder.Location = new System.Drawing.Point(125, 69); this.labelBaseDumpFolder.Name = "labelBaseDumpFolder"; - this.labelBaseDumpFolder.Size = new System.Drawing.Size(107, 13); - this.labelBaseDumpFolder.TabIndex = 21; - this.labelBaseDumpFolder.Text = "Base folder for dump:"; + this.labelBaseDumpFolder.Size = new System.Drawing.Size(127, 13); + this.labelBaseDumpFolder.TabIndex = 10; + this.labelBaseDumpFolder.Text = "Base folder for fragments:"; // // checkDumpDatagrams // this.checkDumpDatagrams.AutoSize = true; this.checkDumpDatagrams.Location = new System.Drawing.Point(12, 45); this.checkDumpDatagrams.Name = "checkDumpDatagrams"; - this.checkDumpDatagrams.Size = new System.Drawing.Size(106, 17); - this.checkDumpDatagrams.TabIndex = 20; - this.checkDumpDatagrams.Text = "Dump datagrams"; + this.checkDumpDatagrams.Size = new System.Drawing.Size(100, 17); + this.checkDumpDatagrams.TabIndex = 6; + this.checkDumpDatagrams.Text = "Save fragments"; this.checkDumpDatagrams.UseVisualStyleBackColor = true; this.checkDumpDatagrams.CheckedChanged += new System.EventHandler(this.checkDumpPayloads_CheckedChanged); // @@ -190,22 +205,23 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Right))); this.listViewFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { columnHeaderFilename, - columnHeaderCount, columnHeaderFragment, + columnHeaderCount, columnHeaderSize, - columnHeaderPrefix, + columnHeaderType, columnHeaderSuffix}); this.listViewFiles.FullRowSelect = true; this.listViewFiles.GridLines = true; this.listViewFiles.HeaderCustomFont = null; this.listViewFiles.HeaderCustomForeColor = System.Drawing.Color.Empty; this.listViewFiles.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewFiles.HideSelection = false; this.listViewFiles.IsDoubleBuffered = true; - this.listViewFiles.Location = new System.Drawing.Point(12, 69); + this.listViewFiles.Location = new System.Drawing.Point(12, 92); this.listViewFiles.MultiSelect = false; this.listViewFiles.Name = "listViewFiles"; - this.listViewFiles.Size = new System.Drawing.Size(660, 318); - this.listViewFiles.TabIndex = 33; + this.listViewFiles.Size = new System.Drawing.Size(660, 295); + this.listViewFiles.TabIndex = 12; this.listViewFiles.UseCompatibleStateImageBehavior = false; this.listViewFiles.View = System.Windows.Forms.View.Details; // @@ -219,7 +235,7 @@ private void InitializeComponent() this.statusStripMain.Location = new System.Drawing.Point(0, 390); this.statusStripMain.Name = "statusStripMain"; this.statusStripMain.Size = new System.Drawing.Size(684, 22); - this.statusStripMain.TabIndex = 36; + this.statusStripMain.TabIndex = 13; this.statusStripMain.Text = "statusStrip1"; // // statusLabelReceiving @@ -228,6 +244,7 @@ private void InitializeComponent() this.statusLabelReceiving.Name = "statusLabelReceiving"; this.statusLabelReceiving.Size = new System.Drawing.Size(175, 17); this.statusLabelReceiving.Text = "Data reception is in progress"; + this.statusLabelReceiving.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // statusLabelDataReception // @@ -253,11 +270,62 @@ private void InitializeComponent() this.statusLabelByteCount.Text = "Total received bytes"; this.statusLabelByteCount.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // + // checkReassemble + // + this.checkReassemble.AutoSize = true; + this.checkReassemble.Checked = true; + this.checkReassemble.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkReassemble.Location = new System.Drawing.Point(128, 45); + this.checkReassemble.Name = "checkReassemble"; + this.checkReassemble.Size = new System.Drawing.Size(108, 17); + this.checkReassemble.TabIndex = 7; + this.checkReassemble.Text = "Reassemble files:"; + this.checkReassemble.UseVisualStyleBackColor = true; + this.checkReassemble.CheckedChanged += new System.EventHandler(this.checkReassemble_CheckedChanged); + // + // radioOnTheFly + // + this.radioOnTheFly.AutoSize = true; + this.radioOnTheFly.Location = new System.Drawing.Point(258, 43); + this.radioOnTheFly.Name = "radioOnTheFly"; + this.radioOnTheFly.Size = new System.Drawing.Size(70, 17); + this.radioOnTheFly.TabIndex = 8; + this.radioOnTheFly.Text = "On-the-fly"; + this.radioOnTheFly.UseVisualStyleBackColor = true; + // + // radioAfterStop + // + this.radioAfterStop.AutoSize = true; + this.radioAfterStop.Checked = true; + this.radioAfterStop.Location = new System.Drawing.Point(334, 45); + this.radioAfterStop.Name = "radioAfterStop"; + this.radioAfterStop.Size = new System.Drawing.Size(70, 17); + this.radioAfterStop.TabIndex = 9; + this.radioAfterStop.TabStop = true; + this.radioAfterStop.Text = "After stop"; + this.radioAfterStop.UseVisualStyleBackColor = true; + // + // checkDeleteFragments + // + this.checkDeleteFragments.AutoSize = true; + this.checkDeleteFragments.Checked = true; + this.checkDeleteFragments.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkDeleteFragments.Location = new System.Drawing.Point(426, 45); + this.checkDeleteFragments.Name = "checkDeleteFragments"; + this.checkDeleteFragments.Size = new System.Drawing.Size(185, 17); + this.checkDeleteFragments.TabIndex = 14; + this.checkDeleteFragments.Text = "Delete fragments after reassambly"; + this.checkDeleteFragments.UseVisualStyleBackColor = true; + // // OpchExplorerForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(684, 412); + this.Controls.Add(this.checkDeleteFragments); + this.Controls.Add(this.radioAfterStop); + this.Controls.Add(this.radioOnTheFly); + this.Controls.Add(this.checkReassemble); this.Controls.Add(this.statusStripMain); this.Controls.Add(this.listViewFiles); this.Controls.Add(this.textBaseDumpFolder); @@ -297,5 +365,9 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripStatusLabel statusLabelDataReception; private System.Windows.Forms.ToolStripStatusLabel statusLabelDatagramCount; private System.Windows.Forms.ToolStripStatusLabel statusLabelByteCount; + private System.Windows.Forms.CheckBox checkReassemble; + private System.Windows.Forms.RadioButton radioOnTheFly; + private System.Windows.Forms.RadioButton radioAfterStop; + private System.Windows.Forms.CheckBox checkDeleteFragments; } // class OpchExplorerForm -} // namespace \ No newline at end of file +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs index 7914781c..15d59e54 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.cs @@ -1,28 +1,103 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; +using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; +using System.Threading; +using System.Threading.Tasks; using System.Windows.Forms; namespace IpTviewr.Internal.Tools.GuiTools { public partial class OpchExplorerForm : Form { - private BackgroundWorker Worker; - private IPAddress MulticastIpAddress; - private int MulticastPort; - private int DatagramCount; - private long DatagramByteCount; - private string DumpFolder; + private IPAddress _multicastIpAddress; + private int _multicastPort; + private int _datagramCount; + private long _datagramByteCount; + private string _dumpFolder; + private TasksQueue _queue; + private CancellationTokenSource _cancellationSource; + private CancellationToken _cancellationToken; + private static bool EnableOnTheFly = false; + private byte[] _buffer; + + private sealed class OpchDatagram + { + public OpchDatagram(byte[] data) + { + RawData = data; + var l = data.Length; + + FileType = $"{data[0]:X2}{data[1]:X2}{data[2]:X2}{data[3]:X2}"; + Fragment = $"{data[4]:X2}{data[5]:X2}{data[6]:X2}{data[7]:X2}"; + FragmentNumber = int.Parse(Fragment, NumberStyles.HexNumber); + FragmentCount = $"{data[8]:X2}{data[9]:X2}{data[10]:X2}{data[11]:X2}"; + FragmentCountNumber = int.Parse(FragmentCount, NumberStyles.HexNumber); + FileName = Encoding.UTF8.GetString(data, 12, 32); + FragmentSize = l - 44 - 4; + Suffix = $"{data[l - 4]:X2}{data[l - 3]:X2}{data[l - 2]:X2}{data[l - 1]:X2}"; + + var index = FileName.IndexOf('\0'); + if (index > 0) + { + FileName = FileName.Substring(0, index); + } // if + } // constructor + + public byte[] RawData { get; } + public string FileType { get; } + public string Fragment { get; } + public int FragmentNumber { get; } + public string FragmentCount { get; } + public int FragmentCountNumber { get; } + public string FileName { get; } + public int FragmentSize { get; } + public string Suffix { get; } + } // class OpchDatagram + + private sealed class OpchTask: TasksQueue.Task + { + private readonly byte[] _payload; + private readonly OpchExplorerForm _form; + + public OpchTask(byte[] payload, OpchExplorerForm form) + { + _payload = payload; + _form = form; + } // constructor + + public override void Execute() + { + var datagram = new OpchDatagram(_payload); + _form.BeginInvoke(new Action(_form.Worker_ProgressChanged), datagram); + + if (_form._dumpFolder == null) return; + + var folder = Path.Combine(_form._dumpFolder, datagram.FileName); + Directory.CreateDirectory(folder); + var path = Path.Combine(folder, $"{datagram.FileType}-{datagram.FragmentNumber:D10}.bin"); + using (var output = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None)) + { + output.Write(_payload, 44, datagram.FragmentSize); + } // using output + } // Execute + } // class OpchTask public OpchExplorerForm() { @@ -43,14 +118,36 @@ private void OpchExplorerForm_Load(object sender, EventArgs e) statusLabelByteCount.Text = null; buttonStop.Enabled = false; + OnCheckDumpPayloads_CheckedChanged(); } // OpchExplorerForm_Load private void checkDumpPayloads_CheckedChanged(object sender, EventArgs e) { - labelBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; - textBaseDumpFolder.Enabled = checkDumpDatagrams.Checked; + OnCheckDumpPayloads_CheckedChanged(); } // checkDumpPayloads_CheckedChanged + private void OnCheckDumpPayloads_CheckedChanged() + { + var enabled = checkDumpDatagrams.Checked; + checkReassemble.Enabled = enabled; + OnCheckReassemble_CheckedChanged(); + labelBaseDumpFolder.Enabled = enabled; + textBaseDumpFolder.Enabled = enabled; + } // OnCheckDumpPayloads_CheckedChanged + + private void checkReassemble_CheckedChanged(object sender, EventArgs e) + { + OnCheckReassemble_CheckedChanged(); + } // checkBoxReassemble_CheckedChanged + + private void OnCheckReassemble_CheckedChanged() + { + var enabled = checkDumpDatagrams.Checked && checkReassemble.Checked; + radioOnTheFly.Enabled = (enabled && EnableOnTheFly); + radioAfterStop.Enabled = enabled; + checkDeleteFragments.Enabled = enabled; + } // OnCheckReassemble_CheckedChanged + private void buttonStart_Click(object sender, EventArgs e) { string context = null; @@ -59,20 +156,21 @@ private void buttonStart_Click(object sender, EventArgs e) { context = "IP Address"; var input = textIpAddress.Text.Trim(); - MulticastIpAddress = IPAddress.Parse(input); + _multicastIpAddress = IPAddress.Parse(input); context = "Port"; - MulticastPort = Program.ParseNumber(textPort.Text); + _multicastPort = Program.ParseNumber(textPort.Text); context = "Dump folder"; if (checkDumpDatagrams.Checked) { - DumpFolder = Path.Combine(textBaseDumpFolder.Text, string.Format("OpchStream\\{0}~{1}\\{2:yyyy-MM-dd HH-mm-ss}", MulticastIpAddress, MulticastPort, DateTime.Now)); - Directory.CreateDirectory(DumpFolder); + _dumpFolder = Path.Combine(textBaseDumpFolder.Text, + $"OpchStream\\{_multicastIpAddress}~{_multicastPort}\\{DateTime.Now:yyyy-MM-dd HH-mm-ss}"); + Directory.CreateDirectory(_dumpFolder); } else { - DumpFolder = null; + _dumpFolder = null; } // if-else } catch (Exception ex) @@ -83,124 +181,185 @@ private void buttonStart_Click(object sender, EventArgs e) buttonStart.Enabled = false; buttonStop.Enabled = true; - - DatagramCount = 0; - DatagramByteCount = 0; checkDumpDatagrams.Enabled = false; - - statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); - statusLabelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); listViewFiles.Items.Clear(); + statusLabelDatagramCount.Text = null; + statusLabelByteCount.Text = null; - Worker = new BackgroundWorker() - { - WorkerReportsProgress = true, - WorkerSupportsCancellation = true - }; - Worker.DoWork += Worker_DoWork; - Worker.ProgressChanged += Worker_ProgressChanged; - Worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - Worker.RunWorkerAsync(); + _datagramCount = 0; + _datagramByteCount = 0; + + _cancellationSource = new CancellationTokenSource(); + _cancellationToken = _cancellationSource.Token; + _queue = new TasksQueue(_cancellationToken); + _queue.Completed += Worker_RunWorkerCompleted; + + Task.Run(Worker_DoWork, _cancellationToken); } // buttonStart_Click private void buttonStop_Click(object sender, EventArgs e) { buttonStop.Enabled = false; - buttonStop.Text = "Cancelling"; + buttonStop.Text = "Cancelling..."; buttonStop.Image = Properties.Resources.Status_Wait_16x16; - Worker.CancelAsync(); + _cancellationSource.Cancel(); } // buttonStop_Click - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + private async void Worker_RunWorkerCompleted(object sender, EventArgs e) { + if (InvokeRequired) + { + BeginInvoke(new Action(Worker_RunWorkerCompleted), sender, e); + return; + } // if + + _queue.Dispose(); + _cancellationSource.Dispose(); + + if ((_dumpFolder != null) && checkReassemble.Checked && radioAfterStop.Checked) + { + buttonStop.Text = "Working"; + statusLabelReceiving.Text = "Assembling files..."; + await Task.Run(ReassembleFiles); + } // if + _dumpFolder = null; + buttonStart.Enabled = true; buttonStop.Text = "Stop"; buttonStop.Image = Properties.Resources.Action_Cancel_Red_16x16; + checkDumpDatagrams.Enabled = true; statusLabelDataReception.Text = null; statusLabelReceiving.Text = null; - - Worker.Dispose(); - Worker = null; } // Worker_RunWorkerCompleted - void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) + private void Worker_ProgressChanged(OpchDatagram datagram) { - var data = e.UserState as byte[]; - var file = Encoding.UTF8.GetString(data, 12, 32); - var l = data.Length; - if (statusLabelDataReception.Text == null) { - statusLabelDataReception.Text = "l"; statusLabelReceiving.Text = "Receiving data"; } // if - var index = file.IndexOf('\0'); - if (index > 0) - { - file = file.Substring(0, index); - } // if - - if (DumpFolder != null) + var item = new ListViewItem { - var path = Path.Combine(DumpFolder, string.Format("{4} ~ 0x{0:X2}{1:X2}{2:X2}{3:X2}.bin", data[4], data[5], data[6], data[7], file)); - using (var output = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None)) - { - output.Write(data, 44, l - 44 - 4); - } // using output - } // if - - var item = new ListViewItem(); - item.Text = file; - item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[8], data[9], data[10], data[11])); // fragment count - item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[4], data[5], data[6], data[7])); // fragment # - item.SubItems.Add(string.Format("{0:N0}", l - 44 - 4)); - item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[0], data[1], data[2], data[3])); // prefix? - item.SubItems.Add(string.Format("0x{0:X2}{1:X2}{2:X2}{3:X2}", data[l-4], data[l-3], data[l-2], data[l-1])); // global data CRC? + Text = datagram.FileName + }; + item.SubItems.Add($"0x{datagram.Fragment}"); + item.SubItems.Add($"0x{datagram.FragmentCount}"); + item.SubItems.Add($"{datagram.FragmentSize:N0}"); + item.SubItems.Add($"0x{datagram.FileType}"); + item.SubItems.Add($"0x{datagram.Suffix}"); // global data CRC? listViewFiles.BeginUpdate(); listViewFiles.Items.Add(item); item.EnsureVisible(); listViewFiles.EndUpdate(); - DatagramCount++; - DatagramByteCount += data.Length; + _datagramCount++; + _datagramByteCount += datagram.RawData.Length; - int length = (DatagramCount % 10) + 1; + var length = (_datagramCount % 10) + 1; statusLabelDataReception.Text = new string('l', length); - statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", DatagramCount); - statusLabelByteCount.Text = string.Format("{0:N0} bytes received", DatagramByteCount); + statusLabelDatagramCount.Text = string.Format("{0:N0} datagrams received", _datagramCount); + statusLabelByteCount.Text = string.Format("{0:N0} bytes received", _datagramByteCount); } // Worker_ProgressChanged - void Worker_DoWork(object sender, DoWorkEventArgs e) + private void Worker_DoWork() { - UdpClient client; - IPEndPoint endPoint; - - client = null; + UdpClient client = null; try { - client = new UdpClient(MulticastPort); - client.JoinMulticastGroup(MulticastIpAddress); + client = new UdpClient(_multicastPort); + client.JoinMulticastGroup(_multicastIpAddress); statusLabelReceiving.Text = "Trying to connect..."; - endPoint = null; - while (!Worker.CancellationPending) + IPEndPoint endPoint = null; + while (!_cancellationToken.IsCancellationRequested) { var data = client.Receive(ref endPoint); - Worker.ReportProgress(0, data); + var task = new OpchTask(data, this); + _queue.AddTask(task); } // while } finally { if (client != null) { - client.DropMulticastGroup(MulticastIpAddress); + client.DropMulticastGroup(_multicastIpAddress); client.Close(); } // if } // finally } // Worker_DoWork + + private void ReassembleFiles() + { + _buffer = new byte[4096]; + + foreach (var folder in Directory.EnumerateDirectories(_dumpFolder)) + { + var name = Path.GetFileName(folder); + ReassembleFile(folder, name); + var fileCount = Directory.EnumerateFiles(folder).Count(); + if (fileCount == 0) + { + Directory.Delete(folder); + } // if + } // foreach folder + + _buffer = null; + } // ReassembleFiles + + private void ReassembleFile(string folder, string name) + { + string lastType = null; + var lastFragment = 1; + FileStream output = null; + + try + { + statusLabelReceiving.Text = name; + foreach (var fragment in Directory.EnumerateFiles(folder)) + { + var id = Path.GetFileNameWithoutExtension(fragment).Split('-'); + var type = id[0]; + var number = int.Parse(id[1]); + + if (lastType != type) + { + lastType = type; + lastFragment = 1; + output?.Close(); + output = new FileStream(Path.Combine(folder, $"..\\{name}~{type}.bin"), FileMode.Create, FileAccess.Write, FileShare.Read); + } // if + + // add missing fragments + for (var index = lastFragment; (index + 1) < number; index++) + { + var text = Encoding.UTF8.GetBytes($"\r\n---------- MISSING FRAGMENT ---------- {index:X8} ----------\r\n"); + output.Write(text, 0, text.Length); + } // for index + lastFragment = number; + + using (var input = new FileStream(fragment, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + int read; + while ((read = input.Read(_buffer, 0, _buffer.Length)) != 0) + { + output.Write(_buffer, 0, read); + } // while + } // using input + + if (checkDeleteFragments.Checked) + { + File.Delete(fragment); + } // if + } // foreach file + } + finally + { + output?.Close(); + } // try-finally + } // ReassembleFile } // class OpchExplorerForm } // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.resx index 9d193487..1c6eb4e2 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.resx +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/OpchExplorerForm.resx @@ -132,7 +132,7 @@ False - + False diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Program.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Program.cs index b72e29d0..853de84d 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Program.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Program.cs @@ -1,21 +1,29 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.Globalization; -using System.Linq; using System.Windows.Forms; namespace IpTviewr.Internal.Tools.GuiTools { - static class Program + internal static class Program { /// /// The main entry point for the application. /// [STAThread] - static void Main() + private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/AssemblyInfo.cs index a55589eb..5c643edc 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/AssemblyInfo.cs @@ -1,8 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs index 971aef0e..9367638c 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Resources.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Internal.Tools.GuiTools.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.Internal.Tools.GuiTools.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs index 19c2a46e..95de6b58 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Properties/Settings.Designer.cs @@ -1,18 +1,21 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Internal.Tools.GuiTools.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp.svg b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp.svg new file mode 100644 index 00000000..664a89d9 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@16.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@16.png new file mode 100644 index 00000000..e7d52738 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@24.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@24.png new file mode 100644 index 00000000..d880ffcd Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@24.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@32.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@32.png new file mode 100644 index 00000000..f71db502 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@32.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@48.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@48.png new file mode 100644 index 00000000..47b7ff47 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@48.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@64.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@64.png new file mode 100644 index 00000000..0f145b4b Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/CloseApp@64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@32.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/DvbProvider@32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@32.png rename to 1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/DvbProvider@32.png diff --git a/1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@48.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/DvbProvider@48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@48.png rename to 1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/DvbProvider@48.png diff --git a/1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@64.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/DvbProvider@64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@64.png rename to 1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/DvbProvider@64.png diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property.svg b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property.svg new file mode 100644 index 00000000..19338a18 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property.svg @@ -0,0 +1,63 @@ + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@16.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@16.png new file mode 100644 index 00000000..0b1409f5 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@24.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@24.png new file mode 100644 index 00000000..c26fb89c Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@24.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@32.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@32.png new file mode 100644 index 00000000..9b75b628 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@32.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@48.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@48.png new file mode 100644 index 00000000..566cc6d6 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@48.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@64.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@64.png new file mode 100644 index 00000000..e6e9a494 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Property@64.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/PropertyGrey.svg b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/PropertyGrey.svg new file mode 100644 index 00000000..6b5b18a0 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/PropertyGrey.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh.svg b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh.svg new file mode 100644 index 00000000..9067a5b5 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@16.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@16.png new file mode 100644 index 00000000..3b2922d0 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@24.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@24.png new file mode 100644 index 00000000..7972333b Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@24.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@32.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@32.png new file mode 100644 index 00000000..ef7e2d5f Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@32.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@48.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@48.png new file mode 100644 index 00000000..5eeca45c Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@48.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@64.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@64.png new file mode 100644 index 00000000..9f5f55b2 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/Refresh@64.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList.svg b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList.svg new file mode 100644 index 00000000..bce0c7af --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@16.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@16.png new file mode 100644 index 00000000..16822da0 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@24.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@24.png new file mode 100644 index 00000000..e1c6455a Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@24.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@32.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@32.png new file mode 100644 index 00000000..c0a82392 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@32.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@48.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@48.png new file mode 100644 index 00000000..3eda8657 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@48.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@64.png b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@64.png new file mode 100644 index 00000000..f2289d4c Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/GuiTools/Resources/Ribbon/SelectList@64.png differ diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonForm.Designer.cs new file mode 100644 index 00000000..1cf89bb6 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonForm.Designer.cs @@ -0,0 +1,159 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.GuiTools +{ + partial class RibbonForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ribbonMain = new ComponentFactory.Krypton.Ribbon.KryptonRibbon(); + this.menuIpTviewr_Provider = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem(); + this.menuIpTviewr_ProviderItems = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItems(); + this.menuIpTviewr_ProviderSelect = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem(); + this.menuIpTviewr_ProviderRefresh = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem(); + this.menuIpTviewr_ProviderSeparator1 = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuSeparator(); + this.menuIpTviewr_ProviderProperties = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem(); + this.buttonSpecAppExit = new ComponentFactory.Krypton.Ribbon.ButtonSpecAppMenu(); + this.ribbonTabChannels = new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab(); + this.ribbonTabEpg = new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab(); + this.ribbonTabRecordings = new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab(); + ((System.ComponentModel.ISupportInitialize)(this.ribbonMain)).BeginInit(); + this.SuspendLayout(); + // + // ribbonMain + // + this.ribbonMain.InDesignHelperMode = true; + this.ribbonMain.Name = "ribbonMain"; + this.ribbonMain.RibbonAppButton.AppButtonMenuItems.AddRange(new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.menuIpTviewr_Provider}); + this.ribbonMain.RibbonAppButton.AppButtonShowRecentDocs = false; + this.ribbonMain.RibbonAppButton.AppButtonSpecs.AddRange(new ComponentFactory.Krypton.Ribbon.ButtonSpecAppMenu[] { + this.buttonSpecAppExit}); + this.ribbonMain.RibbonAppButton.AppButtonText = "IPTViewr"; + this.ribbonMain.RibbonAppButton.AppButtonToolTipStyle = ComponentFactory.Krypton.Toolkit.LabelStyle.SuperTip; + this.ribbonMain.RibbonTabs.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab[] { + this.ribbonTabChannels, + this.ribbonTabEpg, + this.ribbonTabRecordings}); + this.ribbonMain.SelectedTab = this.ribbonTabEpg; + this.ribbonMain.Size = new System.Drawing.Size(800, 143); + this.ribbonMain.TabIndex = 0; + // + // menuIpTviewr_Provider + // + this.menuIpTviewr_Provider.Items.AddRange(new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.menuIpTviewr_ProviderItems}); + this.menuIpTviewr_Provider.Image = global::IpTviewr.Internal.Tools.GuiTools.RibbonResources.DvbProvider_32; + this.menuIpTviewr_Provider.Text = "(Provider)"; + // + // menuIpTviewr_ProviderItems + // + this.menuIpTviewr_ProviderItems.Items.AddRange(new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.menuIpTviewr_ProviderSelect, + this.menuIpTviewr_ProviderRefresh, + this.menuIpTviewr_ProviderSeparator1, + this.menuIpTviewr_ProviderProperties}); + // + // menuIpTviewr_ProviderSelect + // + this.menuIpTviewr_ProviderSelect.Image = global::IpTviewr.Internal.Tools.GuiTools.RibbonResources.SelectList_24; + this.menuIpTviewr_ProviderSelect.Text = "(Select)"; + // + // menuIpTviewr_ProviderRefresh + // + this.menuIpTviewr_ProviderRefresh.Image = global::IpTviewr.Internal.Tools.GuiTools.RibbonResources.Refresh_24; + this.menuIpTviewr_ProviderRefresh.Text = "Refresh list"; + // + // menuIpTviewr_ProviderProperties + // + this.menuIpTviewr_ProviderProperties.Image = global::IpTviewr.Internal.Tools.GuiTools.RibbonResources.Property_24; + this.menuIpTviewr_ProviderProperties.Text = "(Properties)"; + // + // buttonSpecAppExit + // + this.buttonSpecAppExit.Image = global::IpTviewr.Internal.Tools.GuiTools.RibbonResources.CloseApp_24; + this.buttonSpecAppExit.Style = ComponentFactory.Krypton.Toolkit.PaletteButtonStyle.Inherit; + this.buttonSpecAppExit.Text = "E&xit"; + this.buttonSpecAppExit.ToolTipStyle = ComponentFactory.Krypton.Toolkit.LabelStyle.ToolTip; + this.buttonSpecAppExit.Type = ComponentFactory.Krypton.Toolkit.PaletteButtonSpecStyle.Generic; + this.buttonSpecAppExit.UniqueName = "FC8A67E2C92D4F7BC4BC9FB201750E6E"; + // + // ribbonTabChannels + // + this.ribbonTabChannels.KeyTip = "C"; + this.ribbonTabChannels.Text = "Channels"; + // + // ribbonTabEpg + // + this.ribbonTabEpg.KeyTip = "E"; + this.ribbonTabEpg.Text = "EPG"; + // + // ribbonTabRecordings + // + this.ribbonTabRecordings.KeyTip = "R"; + this.ribbonTabRecordings.Text = "Recordings"; + // + // RibbonForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.ribbonMain); + this.Name = "RibbonForm"; + this.Text = "RibbonForm"; + ((System.ComponentModel.ISupportInitialize)(this.ribbonMain)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private ComponentFactory.Krypton.Ribbon.KryptonRibbon ribbonMain; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem menuIpTviewr_Provider; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonTab ribbonTabChannels; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonTab ribbonTabEpg; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonTab ribbonTabRecordings; + private ComponentFactory.Krypton.Ribbon.ButtonSpecAppMenu buttonSpecAppExit; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuItems menuIpTviewr_ProviderItems; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem menuIpTviewr_ProviderSelect; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem menuIpTviewr_ProviderRefresh; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuSeparator menuIpTviewr_ProviderSeparator1; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem menuIpTviewr_ProviderProperties; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonForm.cs new file mode 100644 index 00000000..0c42af4b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonForm.cs @@ -0,0 +1,25 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + public partial class RibbonForm : Form + { + public RibbonForm() + { + InitializeComponent(); + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonForm.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonForm.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonResources.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonResources.Designer.cs new file mode 100644 index 00000000..95be64d0 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonResources.Designer.cs @@ -0,0 +1,176 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.GuiTools { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class RibbonResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal RibbonResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Internal.Tools.GuiTools.RibbonResources", typeof(RibbonResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CloseApp_24 { + get { + object obj = ResourceManager.GetObject("CloseApp_24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CloseApp_32 { + get { + object obj = ResourceManager.GetObject("CloseApp_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap DvbProvider_32 { + get { + object obj = ResourceManager.GetObject("DvbProvider_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Property_16 { + get { + object obj = ResourceManager.GetObject("Property_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Property_24 { + get { + object obj = ResourceManager.GetObject("Property_24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Property_32 { + get { + object obj = ResourceManager.GetObject("Property_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Refresh_16 { + get { + object obj = ResourceManager.GetObject("Refresh_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Refresh_24 { + get { + object obj = ResourceManager.GetObject("Refresh_24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Refresh_32 { + get { + object obj = ResourceManager.GetObject("Refresh_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SelectList_24 { + get { + object obj = ResourceManager.GetObject("SelectList_24", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap SelectList_32 { + get { + object obj = ResourceManager.GetObject("SelectList_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonResources.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonResources.resx new file mode 100644 index 00000000..8909ee3f --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/RibbonResources.resx @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + resources\ribbon\closeapp@24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\closeapp@32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\dvbprovider@32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\property@16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\property@24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\property@32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\refresh@16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\refresh@24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\refresh@32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\selectlist@24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + resources\ribbon\selectlist@32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/RtfViewer.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/RtfViewer.Designer.cs new file mode 100644 index 00000000..533ab6ea --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/RtfViewer.Designer.cs @@ -0,0 +1,79 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.GuiTools +{ + partial class RtfViewer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.richTextBox1.Location = new System.Drawing.Point(12, 12); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ReadOnly = true; + this.richTextBox1.Size = new System.Drawing.Size(710, 387); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = "(Drop a file from explorer to view it)"; + this.richTextBox1.WordWrap = false; + // + // RtfViewer + // + this.AllowDrop = true; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(734, 411); + this.Controls.Add(this.richTextBox1); + this.Name = "RtfViewer"; + this.Text = "RTF viewer"; + this.DragDrop += new System.Windows.Forms.DragEventHandler(this.RtfViewer_DragDrop); + this.DragEnter += new System.Windows.Forms.DragEventHandler(this.RtfViewer_DragEnter); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/RtfViewer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/RtfViewer.cs new file mode 100644 index 00000000..17cc40c2 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/RtfViewer.cs @@ -0,0 +1,54 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + public partial class RtfViewer : Form + { + public RtfViewer() + { + InitializeComponent(); + } + + private void RtfViewer_DragEnter(object sender, DragEventArgs e) + { + e.Effect = e.Data.GetDataPresent("FileDrop", true) ? DragDropEffects.Copy : DragDropEffects.None; + } + + private void RtfViewer_DragDrop(object sender, DragEventArgs e) + { + var data = e.Data.GetData("FileDrop", true); + if ((data is string[] files) && (files.Length > 0)) + { + var rtf = File.ReadAllText(files[0], Encoding.ASCII); + if (rtf.StartsWith(@"{\rtf")) + { + richTextBox1.Rtf = rtf; + return; + } // if + } // if + e.Effect = DragDropEffects.None; + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/RtfViewer.resx b/1.5 'Kruger 60'/InternalTools/GuiTools/RtfViewer.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/RtfViewer.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs index c62c00ea..1ee9428c 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.Designer.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.Internal.Tools.GuiTools { @@ -205,4 +215,4 @@ private void InitializeComponent() private System.Windows.Forms.RadioButton radioFormatXml; private System.Windows.Forms.RadioButton radioFormatBinary; } -} \ No newline at end of file +} diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs index 6c4214cc..6a0a1fe5 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/SimpleDvbStpDownloadForm.cs @@ -1,15 +1,19 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.UiServices.DvbStpClient; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Globalization; using System.IO; -using System.Linq; using System.Net; using System.Text; using System.Windows.Forms; @@ -87,7 +91,7 @@ private string GetPayloadText(byte[] data) { var count = data.Length; var buffer = new StringBuilder(count); - for (int index = 0; index < count; index++) + for (var index = 0; index < count; index++) { var b = data[index]; buffer.Append((b < 32) ? '·' : (char)b); diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/TasksQueue.cs b/1.5 'Kruger 60'/InternalTools/GuiTools/TasksQueue.cs new file mode 100644 index 00000000..8acf7d0e --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/TasksQueue.cs @@ -0,0 +1,131 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Concurrent; +using System.Threading; + +namespace IpTviewr.Internal.Tools.GuiTools +{ + internal sealed class TasksQueue: IDisposable + { + private CancellationToken _cancellationToken; + private ConcurrentQueue _queue; + private AutoResetEvent _queuedTask; + private AutoResetEvent _ended; + + public event EventHandler Completed; + + public abstract class Task + { + public abstract void Execute(); + } // Task + + public TasksQueue(): this(CancellationToken.None) + { + // no-op + } // constructor + + public TasksQueue(CancellationToken cancellationToken) + { + _cancellationToken = cancellationToken; + _queue = new ConcurrentQueue(); + _queuedTask = new AutoResetEvent(false); + _ended = new AutoResetEvent(false); + + var worker = new Thread(ProcessTasks); + worker.Start(); + } // constructor + + public bool AbortOnError { get; set; } + + public bool IsAborted { get; private set; } + + public int PendingTasks + { + get + { + if (_queue == null) throw new ObjectDisposedException(nameof(TasksQueue)); + + return _queue.Count; + } // get + } // PendingTasks + + public void AddTask(Task task) + { + if (_queue == null) throw new ObjectDisposedException(nameof(TasksQueue)); + if (task == null) throw new ArgumentNullException(nameof(task)); + _queue.Enqueue(task); + _queuedTask.Set(); + } // AddTask + + public void WaitCompletion() + { + if (_queue == null) throw new ObjectDisposedException(nameof(TasksQueue)); + if (IsAborted) return; + + _queue.Enqueue(null); + _queuedTask.Set(); + _ended.WaitOne(); + } // WaitCompletion + + public void Dispose() + { + if (_queue == null) return; + + _queue = null; + _queuedTask.Dispose(); + _queuedTask = null; + _ended.Dispose(); + _ended = null; + } // Dispose + + private void ProcessTasks() + { + Task task; + + while ((task = GetNextTask()) != null) + { + try + { + task.Execute(); + } + catch + { + if (AbortOnError) + { + IsAborted = true; + break; + }; + } // try-catch + } // while + + _ended.Set(); + Completed?.Invoke(this, EventArgs.Empty); + } // ProcessTasks + + private Task GetNextTask() + { + while (true) + { + if (_cancellationToken.IsCancellationRequested) return null; + if (_queue.TryDequeue(out var task)) + { + return task; + } // if + + _queuedTask.WaitOne(); + } // while + } // GetNextTask + } // class TasksQueue +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/app.config b/1.5 'Kruger 60'/InternalTools/GuiTools/app.config index ff995010..312bb3f2 100644 --- a/1.5 'Kruger 60'/InternalTools/GuiTools/app.config +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/app.config @@ -1,3 +1,3 @@ - + diff --git a/1.5 'Kruger 60'/InternalTools/GuiTools/licensing.xml b/1.5 'Kruger 60'/InternalTools/GuiTools/licensing.xml new file mode 100644 index 00000000..8e1e1f93 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/GuiTools/licensing.xml @@ -0,0 +1,177 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Library + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/App.config b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/App.config new file mode 100644 index 00000000..56efbc7b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Form1.Designer.cs b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Form1.Designer.cs new file mode 100644 index 00000000..93795179 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Form1.Designer.cs @@ -0,0 +1,196 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.panel1 = new System.Windows.Forms.Panel(); + this.kryptonRibbon1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbon(); + this.kryptonRibbonTab1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab(); + this.kryptonRibbonGroup1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupLines1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupLines(); + this.kryptonRibbonGroupButton1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton2 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonTab2 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab(); + this.kryptonRibbonGroup2 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupGallery1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupGallery(); + this.kryptonRibbonTab3 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab(); + this.kryptonRibbonGroup3 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupSeparator1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupSeparator(); + this.kryptonRibbonGroupTriple1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton3 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton4 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton5 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroup4 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupLines2 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupLines(); + this.kryptonRibbonGroupButton6 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton7 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon1)).BeginInit(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.kryptonRibbon1); + this.panel1.Location = new System.Drawing.Point(12, 12); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(400, 150); + this.panel1.TabIndex = 1; + this.panel1.Visible = false; + // + // kryptonRibbon1 + // + this.kryptonRibbon1.InDesignHelperMode = true; + this.kryptonRibbon1.Name = "kryptonRibbon1"; + this.kryptonRibbon1.RibbonTabs.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab[] { + this.kryptonRibbonTab1, + this.kryptonRibbonTab2, + this.kryptonRibbonTab3}); + this.kryptonRibbon1.SelectedContext = null; + this.kryptonRibbon1.SelectedTab = this.kryptonRibbonTab3; + this.kryptonRibbon1.Size = new System.Drawing.Size(400, 143); + this.kryptonRibbon1.TabIndex = 1; + // + // kryptonRibbonTab1 + // + this.kryptonRibbonTab1.ContextName = "Test"; + this.kryptonRibbonTab1.Groups.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup[] { + this.kryptonRibbonGroup1}); + this.kryptonRibbonTab1.Text = "Tab 1"; + // + // kryptonRibbonGroup1 + // + this.kryptonRibbonGroup1.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupLines1}); + // + // kryptonRibbonGroupLines1 + // + this.kryptonRibbonGroupLines1.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton1, + this.kryptonRibbonGroupButton2}); + // + // kryptonRibbonTab2 + // + this.kryptonRibbonTab2.Groups.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup[] { + this.kryptonRibbonGroup2}); + this.kryptonRibbonTab2.Text = "Tab 2"; + // + // kryptonRibbonGroup2 + // + this.kryptonRibbonGroup2.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupGallery1}); + // + // kryptonRibbonGroupGallery1 + // + this.kryptonRibbonGroupGallery1.ImageList = null; + // + // kryptonRibbonTab3 + // + this.kryptonRibbonTab3.Groups.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup[] { + this.kryptonRibbonGroup3, + this.kryptonRibbonGroup4}); + this.kryptonRibbonTab3.Text = "Tab 3"; + // + // kryptonRibbonGroup3 + // + this.kryptonRibbonGroup3.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupSeparator1, + this.kryptonRibbonGroupTriple1}); + // + // kryptonRibbonGroupTriple1 + // + this.kryptonRibbonGroupTriple1.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton3, + this.kryptonRibbonGroupButton4, + this.kryptonRibbonGroupButton5}); + // + // kryptonRibbonGroup4 + // + this.kryptonRibbonGroup4.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupLines2}); + // + // kryptonRibbonGroupLines2 + // + this.kryptonRibbonGroupLines2.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton6, + this.kryptonRibbonGroupButton7}); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Form1"; + this.Text = "Form1"; + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbon kryptonRibbon1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonTab kryptonRibbonTab1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupLines kryptonRibbonGroupLines1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton2; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonTab kryptonRibbonTab2; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup2; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupGallery kryptonRibbonGroupGallery1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonTab kryptonRibbonTab3; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup3; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupSeparator kryptonRibbonGroupSeparator1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton3; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton4; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton5; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup4; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupLines kryptonRibbonGroupLines2; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton6; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton7; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Form1.cs b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Form1.cs new file mode 100644 index 00000000..98f808b4 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Form1.cs @@ -0,0 +1,74 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using ComponentFactory.Krypton.Toolkit; +using IpTviewr.Internal.Tools.UiFramework; +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools +{ + public partial class Form1 : KryptonForm, IRibbonMdiChild + { + private readonly bool _random; + + public Form1() + { + InitializeComponent(); + TypeGuid = Guid.Parse("{E01C14D8-CF0B-411D-AF4C-8E84B39D72FD}"); + _random = (new Random().Next() % 2) == 0; + } // constructor + + #region Implementation of IRibbonMdiChild + + public IRibbonMdiForm RibbonMdiForm { private get; set; } + + public bool IsActiveChild + { + set + { + Text = value ? "I'm the active MDI Child!" : "Inactive"; + if (value) RibbonMdiForm.SetActiveContexts(this, _random ? "Test" : "2"); + } + } + + public Form Form => this; + + public Guid TypeGuid { get; private set; } + + public MdiRibbonContext[] GetChildContexts() + { + return new[] + { + new MdiRibbonContext + { + Color = Color.Aqua, + Name = "Test", + Title = "Form1", + Tabs = new[] {kryptonRibbonTab1, kryptonRibbonTab2} + }, + + new MdiRibbonContext + { + Color = Color.BurlyWood, + Name = "2", + Title = "F-2", + Tabs = new[] {kryptonRibbonTab3} + } + }; + } // CreateContexts + + #endregion + } +} diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Form1.resx b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Form1.resx new file mode 100644 index 00000000..ba280ffb --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Form1.resx @@ -0,0 +1,1198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAQE + BAABAQEAAwMDAAkJCQAJCQkACgoKAAoKCgAICAgACAgIAAoKCgAKCgoABwcHAAcHBwAICAgABgYGAAEB + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB + AQABAQEAAwMDAAcHBwAHBwcACgoKAAsLCwAcHBwAyMjIV/7+/pr///+e////nv39/Zq9vb1NFRUVAAsL + CwAKCgoABwcHAAcHBwABAQEAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAQEBAAEBAQAFBQUABwcHAAoKCgAODg4ADQ0NAA8PDwB1dXUX/v7+8r6+vv+rq6v/q6ur/8fH + x//+/v7nXV1dCw8PDwAQEBAADAwMAAgICAAHBwcAAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAQEBAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAABgYGAAcHBwAXFxcAXFxcCTY2NgIQEBAAEhISABQUFACioqI9+vr6/To6 + Ov8eHh7/Hh4e/0tLS//9/f37jIyMKRQUFAASEhIAERERADY2NgJcXFwJEhISAAUFBQADAwMAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQADAwMABQUFACIiIgHc3Nxs/v7+5/n5+bOHh4cgGxsbABgY + GADNzc1m7e3t/iQkJP8eHh7/Hh4e/y0tLf/19fX+vLy8VBgYGAAcHBwAj4+PJPv7+7f+/v7n1dXVYh4e + HgAHBwcAAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAABAQEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAEBAQAHBwcAIiIiAd3d3W76+vr5o6Oj/93d + 3f7+/v7o0dHRWqGhoTL5+fm90tLS/h4eHv8eHh7/Hh4e/yAgIP/f39/+9vb2sZubmyvW1tZg/v7+6tnZ + 2f6mpqb/+/v799XV1WMeHh4ABQUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAMDAwAUFBQA3d3dbPr6 + +vmJiYn/Hx8f/yoqKv+qqqr++/v7+/39/fnf39/+eHh4/x0dHf8dHR3/HR0d/x0dHf+FhYX/5eXl/v39 + /fj6+vr8pKSk/ygoKP8fHx//kpKS//v7+/fV1dVhDg4OAAMDAwABAQEAAAAAAAAAAAAAAAAAAAAAAAEB + AQAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAAcH + BwBbW1sJ/v7+6J+fn/8fHx//Hh4e/x4eHv8fHx//YmJi/2VlZf8hISH/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/JCQk/3Fxcf9eXl7/Hh4e/x4eHv8eHh7/Hx8f/6mpqf/+/v7fUFBQBQUFBQABAQEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB + AQAEBAQABwcHAAgICAA3NzcD+/v7vNjY2P4oKCj/Hh4e/x4eHv8dHR3/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x4eHv8eHh7/LCws/97e3v75+fmwLS0tAQwM + DAAFBQUAAQEBAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAEBAQAGBgYABwcHAA4ODgAQEBAAjY2NJv7+/uulpaX+Hh4e/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/HR0d/x0dHf8dHR3/HR0d/x0dHf8fHx//sbGx/v7+ + /uR/f38fDw8PAAwMDAAHBwcAAQEBAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAICAgACgoKAA0NDQASEhIAGxsbAM/Pz1z7+/v8YmJi/x0d + Hf8dHR3/HR0d/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x0dHf8dHR3/HR0d/x0d + Hf9wcHD//Pz8+sTExFAYGBgAEBAQAA0NDQAKCgoABQUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAJCQkACwsLAA8PDwAUFBQAGBgYAKCg + oDX9/f36Y2Nj/x0dHf8dHR3/Hh4e/x4eHv8eHh7/MjIy/5CQkP/Dw8P/wsLC/42Njf8uLi7/Hh4e/x4e + Hv8eHh7/HR0d/x0dHf95eXn//v7+9YuLiyIWFhYAExMTAA0NDQAJCQkAAwMDAAEBAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBgAHBwcAHh4eAHFx + cROgoKA4zs7OZPv7+8Dd3d3+ISEh/x0dHf8dHR3/Hh4e/x4eHv9TU1P/6+vr/v7+/ub8/Pyo/Pz8qf7+ + /uno6Oj+TU1N/x4eHv8eHh7/HR0d/x0dHf8nJyf/6urq/vf397LMzMxinp6eNm9vbxMaGhoABwcHAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYG + BgAKCgoAxMTEV/7+/u/6+vr97u7u/tPT0/51dXX/HR0d/x0dHf8eHh7/Hh4e/zIyMv/r6+v+9vb2r4WF + hRQ0NDQANjY2AIeHhxf6+vq05ubm/iwsLP8eHh7/Hh4e/x0dHf8dHR3/iIiI/9XV1f7v7+/++/v7/P7+ + /vDLy8tdBAQEAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAYGBgAKCgoA+vr6msHBwf8+Pj7/JSUl/x4eHv8dHR3/HR0d/x0dHf8eHh7/Hh4e/42N + jf/+/v7og4ODFSgoKAAnJycAJycnACcnJwCMjIwb/v7+7oCAgP8eHh7/HR0d/x0dHf8dHR3/HR0d/x4e + Hv8mJib/QEBA/8HBwf/8/PyhCQkJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAABAQEAAAAAAAAAAAAAAAAAAAAAAAMDAwAMDAwA////nqurq/8eHh7/Hh4e/x4eHv8dHR3/HR0d/x0d + Hf8eHh7/Hh4e/7+/v//8/PysNTU1ACcnJwAnJycAJycnACcnJwA7OzsA////trW1tf8eHh7/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/6qqqv////+lCwsLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAMDAwA////nqurq/8eHh7/Hh4e/x4e + Hv8dHR3/HR0d/x0dHf8eHh7/Hh4e/729vf/9/f2xOjo6ACcnJwAnJycAJycnACgoKABAQEAA/v7+u7Ky + sv8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/6qqqv////+lCwsLAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAAAAYGBgAKCgoA+fn5msXF + xf9ISEj/LCws/yAgIP8dHR3/HR0d/x0dHf8eHh7/Hh4e/4SEhP/+/v7tj4+PHicnJwAnJycAKCgoACgo + KACbm5sk/v7+8nh4eP8dHR3/HR0d/x0dHf8dHR3/HR0d/yAgIP8tLS3/SkpK/8bGxv76+vqgCAgIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAQEBAAYG + BgAICAgAwcHBU/7+/uv8/Pz79fX1/uHh4f6FhYX/HR0d/x0dHf8eHh7/Hh4e/ysrK//j4+P++/v7vpub + myNKSkoATU1NAKCgoCb9/f3G3t7e/icnJ/8dHR3/HR0d/x0dHf8dHR3/mZmZ/+Pj4/729vb9/f39+v7+ + /ufAwMBPAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAMDAwAHBwcAGxsbAGhoaA6SkpIsvr6+VPf397Li4uL+IyMj/x0dHf8dHR3/Hh4e/x4e + Hv9FRUX/4ODg/v39/fL+/v7B/v7+w/39/fTd3d3+Pz8//x0dHf8dHR3/HR0d/x0dHf8qKir/7+/v/vLy + 8qS4uLhPioqKJ11dXQsNDQ0AAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAHBwcADg4OABISEgAUFBQAGBgYAJubmy/9/f35bGxs/x0d + Hf8dHR3/HR0d/x4eHv8eHh7/KCgo/3R0dP+srKz/qqqq/3BwcP8mJib/HR0d/x0dHf8dHR3/HR0d/x0d + Hf+FhYX//v7+84ODgx0PDw8ADAwMAAkJCQAGBgYAAgICAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAICAgADAwMABAQEAAREREAGxsbANXV + 1Wb5+fn9WVlZ/x0dHf8dHR3/HR0d/x4eHv8eHh7/Hh4e/x4eHv8eHh7/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/HR0d/x0dHf9jY2P/+/v7+8zMzFoQEBAACwsLABAQEABAQEABFxcXAAICAgAAAAAAAQEBACAg + IAA4ODgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQADAwMACwsLAAwM + DAAREREAkJCQKf7+/u2dnZ3/Hh4e/x0dHf8dHR3/HR0d/x0dHf8dHR3/Hh4e/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/qqqq/v7+/uiWlpYjkpKSLfHx8ZD+/v7U7+/vhiMj + IwEFBQUASEhIC/n5+ar+/v7S5OTkgHx8fCISEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB + AQABAQEABQUFAAwMDAAzMzMD/Pz8vdbW1v4nJyf/Hh4e/x4eHv8dHR3/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/xwcHP8cHBz/KCgo/97e3v7+/v7l/f39+OLi + 4v6tra3//Pz8+re3t0sSEhIA4+PjfvHx8f6ioqL/6Ojo/v39/fPg4OBxBwcHAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAABgYGAAUFBQBMTEwI/v7+5Kurq/4gICD/Hh4e/x4eHv8gICD/c3Nz/3x8 + fP8pKSn/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/LCws/4mJif9wcHD/HR0d/xwcHP8cHBz/ICAg/7i4 + uP/+/v7/kJCQ/yIiIv8eHh7/t7e3/v7+/tzc3Nxj/f398oeHh/8dHR3/Jycn/7W1tf/////KMTExAQMD + AwABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAAAAMDAwAREREAzs7OWPz8/PWdnZ3/ICAg/y8v + L/+2trb+/f39+f39/fTs7Oz+jIyM/x0dHf8dHR3/HR0d/x0dHf+ZmZn/8PDw/v39/fH8/Pz5srKy/ioq + Kv8gICD/qKio/v39/fP+/v7tmJiY/xwcHP8cHBz/NDQ0/+Tk5P7t7e3+z8/P/iMjI/8dHR3/HR0d/8bG + xv75+fmkEBAQAAUFBQADAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAFBQUAGRkZAM3N + zVj8/Pz1srKy/uLi4v7+/v7hxcXFS4iIiCD29vau2NjY/h8fH/8dHR3/HR0d/yAgIP/i4uL+8fHxooCA + gBvJyclP/v7+4+Hh4f66urr//f398s/Pz077+/uhzc3N/xwcHP8cHBz/HBwc/yIiIv8iIiL/IiIi/x0d + Hf8dHR3/JiYm/+7u7v7T09NtISEhAFVVVQhubm4UGxsbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAwMABwcHABkZGQDMzMxV/v7+1fn5+aZ8fHwaFxcXABgYGADFxcVg7+/v/iYmJv8dHR3/HR0d/y8v + L//29vb+tbW1ThEREQAQEBAAkZGRHv7+/uD+/v7//v7+6/z8/J/+/v7mwsLC/x4eHv8cHBz/HBwc/xwc + HP8cHBz/HBwc/x0dHf8dHR3/Kioq/9zc3P79/f3S/f39sv7+/uT+/v7z4eHhdAsLCwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAABAQEAAwMDAAUFBQAQEBAAQ0NDAikpKQAREREAEhISABMTEwCdnZ04+/v7/Tw8 + PP8dHR3/HR0d/05OTv/9/f36hYWFJgwMDAAMDAwAiIiIJ/39/faYmJj/m5ub/83Nzf/CwsL/JSUl/xwc + HP8cHBz/HBwc/xwcHP8dHR3/HBwc/x0dHf8dHR3/HR0d/zU1Nf/Pz8//urq6/4ODg/+jo6P//v7+6F1d + XREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAADAwMABQUFAAoKCgAMDAwADQ0NAA8P + DwBvb28U/v7+78fHx/+2trb/tra2/87Ozv/+/v7kVVVVCQoKCgANDQ0A6enpiOXl5f4lJSX/HBwc/xwc + HP8eHh7/HBwc/xwcHP8cHBz/HR0d/zIyMv9HR0f/LS0t/x0dHf8dHR3/HR0d/x0dHf8eHh7/HR0d/x0d + Hf80NDT/8/Pz/svLy2YBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGAAUF + BQAFBQUACgoKAAkJCQAYGBgAwMDAUfn5+ZT5+fmY+fn5mPj4+JOzs7NIDAwMAAcHBwAnJycB////y7Cw + sP8eHh7/HBwc/xwcHP8cHBz/HBwc/xwcHP8mJib/sLCw/vf39/39/f378/Pz/Zubm/8gICD/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8lJSX/0NDQ/v///6gBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAABAQEAAAAAAAEBAQADAwMAAwMDAAUFBQAFBQUABgYGAAYGBgAEBAQABQUFAAICAgADAwMAAgICAAMD + AwAODg4A6+vrg/v7+/q3t7f+Nzc3/xwcHP8cHBz/HBwc/x0dHf+rq6v//v7+6tXV1WCVlZUn4ODgcv39 + /fSKior/HR0d/x0dHf8dHR3/HR0d/1JSUv/V1dX+/f398crKylcDAwMAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQABAQEAAAAAAAAAAAABAQEAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + OP8dHR3/Hh4e/6+vr/////+6IiIiAAUFBQADAwMAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAD8/PwX+/v7fv7+//0ZGRv8iIiL/xcXF/v39 + /cujo6Ml/v7+17m5uf4iIiL/U1NT/83Nzf7////CKysrAAMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsLCwDLy8tY/v7+1fr6 + +vzZ2dn+/Pz896enpzwJCQkAt7e3Svv7+/re3t7++/v7+/7+/sioqKg6AwMDAAEBAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAQ0NDB6+vr0n6+vqX09PTXxwcHAAICAgAIiIiAczMzFvo6OiEoKCgOzU1NQMBAQEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAEBAQABAQEABAQEAAEBAQADAwMAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQABAQEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA//////// + AAD//A////8AAP/8D////wAA//nn////AAD+GeYf//8AAPwB4A///wAA+MPgx///AAD5///n//8AAPn/ + /+f//wAA+P//z///AAD8///P//8AAPz+H8///wAA8PwPw///AADB+MfA//8AAM/x4/z//wAAz/Pz/P// + AADP8/P8//8AAM/x5/z//wAAwPjHwP//AADw/A/D//8AAPz/P4///wAA/P//z///AAD4///Acf8AAPn/ + /+AgfwAA+f/74wZ/AAD4weDDjn8AAPwB4AP+fwAA/jnmA/4HAAD/+eYH/wcAAP/8Dn//8wAA//wOfwfz + AAD///4+A+MAAP///x5zxwAA////nnPPAAD///8ec8cAAP///j8H4wAA///+f4/zAAD///5///MAAP// + /wf/BwAA////A/4HAAD////z/n8AAP////OOfwAA////8wZ/AAD////wIH8AAP////xx/wAA//////// + AAD///////8AACgAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODg4Au7u7UP// + /5T///+Z////m////5r///+W5+fnfEtLSw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAnJycM/7+/vb4+Pj+9PT0//T09P/09PT/9fX1//7+/v7w8PCHBwcHAAEBAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAICAgAEBAQABgYGANDQ0Gz+/v7+dnZ2/ysrK/8rKyv/Kysr/zc3N//y8vL/////xTIy + MgEGBgYABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAJiYmA319fR1hYWEPBAQEAAUFBQAICAgACwsLAA8PDwD39/eW/f39/khISP8dHR3/HR0d/x0d + Hf8fHx//2tra/////+heXl4LCwsLAAkJCQAGBgYABAQEACwsLAJ7e3seXV1dEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAODg4CfPz86T////2////4M3NzVQwMDABDg4OABAQEAA0NDQB////wPT0 + 9P8tLS3/Hh4e/x0dHf8eHh7/Hh4e/7i4uP/+/v76jo6OKBMTEwAPDw8AEBAQAIWFhR76+vqv////9/// + /9+YmJg0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3CvT09Kj+/v792dnZ//Pz8/7+/v759/f3m3Nz + cxInJycAmpqaHP///+bg4OD/ICAg/x0dHf8dHR3/HR0d/x0dHf+Ojo7//v7+/tnZ2WJDQ0MCODg4AtDQ + 0FX////k/Pz8/tXV1f/4+Pj+/v7+5ZmZmTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODg4CfT09Kj+/v79xMTE/yoq + Kv9KSkr/19fX//39/f7////W+vr6nf7+/uz+/v7+wsLC/x0dHf8dHR3/HR0d/x0dHf8dHR3/YmJi//39 + /f7+/v74/v7+vPv7+6b+/v769fX1/oeHh/8jIyP/dnZ2//j4+P7+/v7lmJiYNAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJiYmA/T0 + 9KX+/v79xMTE/yoqKv8dHR3/HR0d/ygoKP+hoaH/+fn5//39/f/j4+P/mZmZ/0FBQf8eHh7/HR0d/x4e + Hv8dHR3/HR0d/ycnJ/96enr/zs7O//r6+v/9/f3/19fX/0lJSf8dHR3/HR0d/x0dHf91dXX/+Pj4/v7+ + /uWLi4srAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHl5eR7////31dXV/yoqKv8dHR3/HR0d/x0dHf8dHR3/HR0d/1xcXP93d3f/JSUl/x4e + Hv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv9RUVH/jo6O/ygoKP8dHR3/HR0d/x0d + Hf8dHR3/HR0d/4ODg//+/v7+5+fnfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlZWUS////5vDw8P5CQkL/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/yAgIP+6urr//v7+/dLS0mMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgoKANHR0WL+/v770tLS/yYm + Jv8dHR3/HR0d/x0dHf8dHR3/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x0dHf8eHh7/Hh4e/x4e + Hv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x0dHf8dHR3/HR0d/x0dHf9+fn7//f39/vz8/L5CQkIJAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUF + BQAyMjID9/f3pP39/f6cnJz/HR0d/x0dHf8dHR3/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4e + Hv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/HR0d/x0dHf9GRkb/8vLy/v7+ + /uiKiookCAgIAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAICAgAICAgADg4OAG5ubhT////X+Pj4/lxcXP8dHR3/Hh4e/x4eHv8eHh7/Hh4e/x0d + Hf8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/HR0d/x4eHv8eHh7/Hh4e/x4e + Hv8oKCj/2dnZ//7+/vrQ0NBZFBQUAAsLCwAFBQUAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQACwsLABAQEAApKSkA+/v7ov39/f50dHT/Hh4e/x4e + Hv8eHh7/HR0d/x0dHf8eHh7/Hh4e/x4eHv86Ojr/eHh4/5iYmP+Li4v/VFRU/yMjI/8eHh7/Hh4e/x4e + Hv8dHR3/Hh4e/x4eHv8eHh7/MTEx/+/v7//////rfn5+ExISEgANDQ0ABwcHAAEBAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGAA8PDwA1NTUAoKCgH/// + /+7h4eH/JCQk/x4eHv8eHh7/Hh4e/x0dHf8eHh7/Hh4e/ywsLP+vr6//9/f3/v7+/v7+/v79/v7+/f39 + /f7b29v/VVVV/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv+enp7//v7+/tzc3GdKSkoCHBwcAAoK + CgAFBQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAk5OTLM7O + zmT19fWQ////vf///+b+/v7+lJSU/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/ywsLP/T09P//v7+/v// + /9Pm5uZ0tLS0Qc/Pz1j7+/up/v7+9/X19f5jY2P/Hh4e/x4eHv8dHR3/Hh4e/x4eHv8eHh7/QUFB//n5 + +f7////y////zfv7+6Pi4uJ3tLS0TFhYWA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + VxL29vaT////y////+r+/v75/v7+/f39/f52dnb/Hh4e/x4eHv8eHh7/HR0d/x4eHv8eHh7/SkpK//Hx + 8f7+/v718fHxipubmyRmZmYGgYGBEtHR0VX////V/f39/qOjo/8fHx//HR0d/x0dHf8dHR3/HR0d/x0d + Hf8vLy//8/Pz//7+/v7+/v77////8f///9b+/v6trq6uQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAADAwMADo6OgJjY2MNk5OTKNnZ2WP+/v75ysrK/x4eHv8eHh7/Hh4e/x4e + Hv8dHR3/Hh4e/x4eHv9WVlb/5eXl//39/f7////3////4P///+3+/v79+fn5/qGhof8jIyP/Hh4e/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/d3d3//7+/v709PSgnJycM3FxcRQ/Pz8EFBQUAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAGBgYACwsLABEREQBISEgD/v7+wvn5 + +f5MTEz/Hh4e/x4eHv8eHh7/HR0d/x0dHf8eHh7/Hh4e/y0tLf+Hh4f/ycnJ/97e3v/W1tb/qqqq/0pK + Sv8eHh7/Hh4e/x0dHf8dHR3/HR0d/x0dHf8dHR3/IyMj/9vb2//+/v70lpaWKAsLCwAGBgYAAQEBAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAkJ + CQAPDw8AOTk5A/v7+639/f3+h4eH/x0dHf8eHh7/Hh4e/x4eHv8dHR3/HR0d/x4eHv8eHh7/Hh4e/x4e + Hv8fHx//Hh4e/x4eHv8eHh7/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/zY2Nv/x8fH//v7+75SU + lCYJCQkABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAGBgYADw8PANLS0l3+/v761NTU/yYmJv8dHR3/Hh4e/x4eHv8eHh7/Hh4e/x0d + Hf8dHR3/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/f39///39/f77+/u6QEBABwICAgAAAAAAHh4eAXV1dRt/f38fFRUVAQAAAAAAAAAAAAAAAAAA + AABVVVUOhYWFKFVVVQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAIeHhyT+/v7o8vLy/kRERP8dHR3/HR0d/x0d + Hf8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/yAgIP/AwMD//v7+/eLi4ndTU1MJuLi4Tf39/bT////0////9+Xl + 5X0ODg4AAAAAAAAAAAB0dHQg////1/////r////i7e3tioiIiCkREREBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwX7+/u3/Pz8/n9/ + f/8dHR3/HR0d/x0dHf8dHR3/HR0d/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8dHR3/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/xwcHP8cHBz/MzMz/+rq6v/+/v7z////2P7+ + /vz7+/v+0tLS/+fn5//+/v70oaGhNQICAgArKysC+Pj4qv39/f7Dw8P/6urq//39/f7+/v718fHxlisr + KwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAB7e3sd////99XV1f8iIiL/HR0d/x0dHf8dHR3/HR0d/x0dHf8pKSn/MjIy/x4eHv8eHh7/Hh4e/x4e + Hv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x0dHf8dHR3/JCQk/z09Pf8dHR3/HBwc/xwcHP8cHBz/HBwc/xwc + HP98fHz//v7+//z8/P+ysrL/TU1N/x8fH/9gYGD/+/v7/v39/clbW1sLxcXFUv7+/vrOzs7/IyMj/yoq + Kv9zc3P/3Nzc//7+/vuYmJg1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAUlJSDP///9f5+fn+goKC/x4eHv8dHR3/HR0d/x0dHf9MTEz/3Nzc//Dw + 8P+ioqL/RUVF/yAgIP8eHh7/Hh4e/x4eHv8eHh7/HR0d/x0dHf8yMjL/fHx8/9zc3P/29vb/j4+P/yIi + Iv8cHBz/HBwc/xwcHP88PDz/4+Pj//7+/v/6+vr/ODg4/xwcHP8cHBz/HR0d/7Ozs//+/v79////z/// + /+r29vb+SEhI/x0dHf8dHR3/HR0d/6urq//+/v78lpaWNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGhoYq/v7+3fn5+f6Dg4P/Hh4e/yIi + Iv+IiIj/9fX1/v7+/vn////o/v7+/fr6+v6rq6v/HR0d/x0dHf8dHR3/HR0d/x0dHf9PT0//8/Pz//39 + /f7+/v70/v7+6P39/f7Jycn/NjY2/xwcHP88PDz/5OTk//7+/vr////O/v7+/mtra/8cHBz/HBwc/xwc + HP8yMjL/39/f/+Xl5f/o6Oj/l5eX/x0dHf8dHR3/HR0d/yAgIP/c3Nz/////6ltbWw4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiI + iCr////d+fn5/pOTk//Dw8P//f39/v///+TQ0NBSd3d3ENra2mL////w2tra/x4eHv8dHR3/HR0d/x0d + Hf8dHR3/gICA//7+/v7z8/OdlJSUJ4iIiBv6+vqw/v7+/Ozs7P+AgID/5OTk//7+/vnd3d10u7u7P/7+ + /vynp6f/HBwc/xwcHP8cHBz/HBwc/yEhIf8fHx//ISEh/x4eHv8cHBz/HBwc/x0dHf80NDT/9vb2//7+ + /r0lJSUBAwMDAAoKCgAmJiYACAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAhoaGKv7+/t3+/v7+/v7+/Pz8/LSHh4cfExMTABISEgBBQUEC////yu/v + 7/8nJyf/HR0d/x0dHf8dHR3/HR0d/6qqqv/+/v78m5ubMwsLCwAICAgAPT09BeDg4G7+/v7x/v7+//7+ + /v7////Jvb29Pd/f33D+/v780tLS/x0dHf8cHBz/HBwc/xwcHP8dHR3/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8cHBz/WFhY//39/f/+/v7Ur6+vPM7OzmT6+vqf////xfHx8Y8xMTEIAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2dnYg19fXb8XFxVU8PDwGBwcHAAsL + CwANDQ0AGhoaAPz8/KT7+/v/Pz8//x0dHf8dHR3/HR0d/x0dHf/Pz8//////8WhoaBMFBQUAAwMDAAEB + AQBJSUkG////z/39/f/7+/v//v7+/v7+/vz+/v786Ojo/0dHR/8cHBz/HBwc/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/yAgIP+ampr//Pz8/v7+/vz+/v7+/Pz8/vT09P/+/v792dnZbQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAQEBAAICAgAEBAQABwcHAAkJCQDg4OB6/v7+/mFhYf8dHR3/HR0d/x0dHf8lJSX/6+vr//// + /9Q6OjoDAAAAAAAAAAAAAAAAsLCwRf7+/vy6urr/QEBA/29vb/+np6f/z8/P/0lJSf8cHBz/HBwc/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/Hh4e/5ubm/+2trb/fn5+/0pK + Sv9CQkL/8/Pz/v///9E8PDwHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAEBAQAs7OzTf7+/v3Ozs7/qKio/6io + qP+oqKj/sLCw//z8/P79/f2oCQkJAAAAAAAAAAAAFRUVAPz8/Kr8/Pz+VVVV/xwcHP8cHBz/HBwc/xwc + HP8cHBz/HBwc/x0dHf8dHR3/HR0d/x0dHf8fHx//KCgo/yQkJP8dHR3/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/7Ozs//+/v78r6+vRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZG + Rgv6+vq0////8v////T////1////9P////P////hqqqqPAAAAAAAAAAAAAAAAGdnZxT////v2tra/yEh + If8cHBz/HBwc/xwcHP8cHBz/HBwc/x0dHf8dHR3/HR0d/yEhIf98fHz/2dnZ//Hx8f/t7e3/v7+//0pK + Sv8dHR3/HR0d/x0dHf8dHR3/HR0d/xwcHP8dHR3/HR0d/x0dHf9UVFT//Pz8/v39/Z8AAAAAAAAAAAAA + AAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKysrA2xsbBJubm4VbW1tF2xsbBZra2sTT09PCgAAAAAAAAAAAAAAAAAA + AABubm4Y////8+bm5v9cXFz/HR0d/xwcHP8cHBz/HBwc/x0dHf8dHR3/HR0d/yEhIf+zs7P//f39/v7+ + /vL////D////1f7+/vvz8/P+YGBg/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8zMzP/sbGx//39 + /f77+/ufAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAERERAeLi4nz+/v71+/v7/ra2tv83Nzf/HBwc/xwcHP8dHR3/HR0d/x0d + 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 + Hf8iIiL/UFBQ/3p6ev9ubm7/ODg4/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0d + Hf+MjIz//v7+/tra2m4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2NjYbf7+/v6QkJD/HR0d/x8fH/80NDT/Xl5e/yUl + Jf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/0tL + S/9iYmL/MzMz/x8fH/8lJSX/4eHh/////+1sbGwZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdnZxX////r6enp/6ur + q//c3Nz/9/f3//39/f+zs7P/IiIi/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/HR0d/0hISP/s7Oz//f39//b29v/b29v/wMDA//39/f719fWaBgYGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAwMA5OTkev7+/vr+/v78////6////73////O/f39/re3t/8eHh7/HR0d/x0dHf8dHR3/HR0d/x0d + Hf8dHR3/HR0d/x0dHf8dHR3/HR0d/z4+Pv/s7Oz//v7+9/39/Zz///++////6/////r////ijIyMKwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZGQKXl5cymZmZNWFhYQ4sLCwAlJSUJv////fQ0ND/Hh4e/xwc + HP8cHBz/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HBwc/x0dHf85OTn/+fn5/////74wMDABKioqAGJi + Yg6GhoYjZGRkEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAKWl + pUL+/v79oKCg/x0dHf8dHR3/HR0d/x4eHv97e3v/ioqK/5CQkP9YWFj/HR0d/x0dHf8dHR3/IiIi/+Li + 4v/////kU1NTCQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADc3Nx6/v7+/mhoaP8dHR3/HR0d/x0dHf9dXV3/+/v7/v7+/v3+/v795ubm/y4u + Lv8dHR3/HR0d/x0dHf+2trb//v7++oiIiCoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////mfz8/P9nZ2f/ICAg/x0dHf8pKSn/3d3d//7+ + /vbQ0NBa7Ozsjf7+/v6mpqb/HR0d/x0dHf8rKyv/r6+v//7+/v2goKA7AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANfX12P+/v76+vr6/tPT + 0/94eHj/m5ub//7+/v7w8PCRHx8fAFZWVg3////S+Pj4/nBwcP+fn5//6+vr//39/f7+/v7aYWFhEwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAZGRkCtra2Sfv7+7H+/v71/f39/v39/f7////eZ2dnFAICAgACAgIAtra2Rf7+/vb9/f3+/v7+/f// + /+Hp6emGbW1tHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFxcBhISEJujo6H79/f2WkJCQLgAAAAAAAAAAAAAAAA8P + DwC3t7dH5eXlfsXFxVpUVFQOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////////////////////////gP////////8Af////////z5/////////Pn///////w8+OD/////+B + j4wH/////xgPwGP////+PB/h8f////5///vx/////n////H////+P///8/////8f///j/////5///8f/ + ////n/z/z/////8f4D/H////8B/AH+B////gP4+P4D///+f/n8f/P///5/+fx/8f///n/x/n/x///+f/ + H+f/H///5/+fx/8////gf4+P8D////A/wg/gP////h/gH+P/////n/B/x/////+P///H/////x///+f/ + v//+P///4g8H//5////wBgP//n////jkcf/+Pj/x8eDx//4YD8Dh8PP//wCPgAD/8///gc+OAP/wH//n + z58B//AP///PnjP/+c///8Aef///x///4B5/8P/n/////n/Af8f////+H8Y/j/////8Pjz8f/////8+f + Hz//////j58fH/////8Pjj8P/////j/AP8f////+f+B/5/////5////H/////j///8//////Af/4D/// + //8A//AP/////5j/87//////+Pnz///////58PH///////ngcf//////+EZD///////8Dgf///////8P + H/////////////////////////////////+JUE5HDQoaCgAAAA1JSERSAAAAgAAAAIAIBgAAAMM+YcsA + AAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAB7AAAAewAERLra3AAAAB3RJTUUH4AgVCywV1Z496gAAJBBJ + REFUeF7tnQu8V1Pax9PVpXKqd1zHPaQxZnKLiKYRXUkUCaMauonySkoMU0gXMTFj0khUFKERJikqSXQZ + ZUqji+h+T3U61em/3+e73rW257/O/l9OZ6Y67N/n86vz33tdnvU8a6+9Ls9au0SMGDFixIgRI0aMGDFi + xNgX3HTTTccuXLjwd7t27eqybNmyNq1atfofeysjbrzxxqN79+5dU3hRz549z65SpUoZeyvGwYxjjz22 + 3NChQ2tv27ZtaCKRWBMEwV5hgv/l95dizGo2aErMnj37Fgn7ncTZY5m7d+/e6Z988snN9erVq2yDxTiY + 0KRJk8qfffbZbWK4T8VgeUKM7kNuJ2ZWrVr1CButAIYPH365hNtOWBPjB/A7X+IvW7NmTb9evXqdcYjA + RotxoHDyyScftnbt2ofFMCvFQO5pN5BrgTy5we7du83fFvn//ve/77HRk1C9evXyEu4TCWMCExequA5c + 2J6bmzvy1ltvPcFGj7G/Ubp06ZLS1P9ZjJFvjWKAwfbs2RP861//Ch544IHg+uuvD77//nt714Rb3aNH + jzNsMiG++eabHnKPtEwaU6dODZo3bx6MHz/exI+oDAm5Nuuaa645yiYRY3+ia9eup4sRjGUxDAbaunVr + 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 + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/IpTviewrTools.csproj b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/IpTviewrTools.csproj new file mode 100644 index 00000000..fd988b66 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/IpTviewrTools.csproj @@ -0,0 +1,143 @@ + + + + + Debug + AnyCPU + {5566E7C5-CD21-4210-A836-5EB7902EB417} + WinExe + IpTviewr.Internal.Tools + IpTviewrTools + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + 8 + On + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + 8 + + + Resources\IpTViewrGuiTools.ico + + + + ..\..\Assemblies\Third-party\ComponentFactory\Krypton\v4.6.0.0\ComponentFactory.Krypton.Ribbon.dll + + + ..\..\Assemblies\Third-party\ComponentFactory\Krypton\v4.6.0.0\ComponentFactory.Krypton.Toolkit.dll + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + Form + + + Form1.cs + + + Form + + + MainForm.cs + + + + + + Form1.cs + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common + + + {a722de9d-ae51-479c-825f-a19f4c69bd75} + UiServices.Config + + + {968c6eeb-1e79-446a-96ae-69cb225e1c37} + IpTViewr.Core + + + {a51cc220-48c4-46f6-bf5d-3178cc317426} + ChannelLogos + + + {63482f69-c5de-430d-86e7-e2a4eac59a51} + ToolsUiFramework + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/LICENSE.ES.MD b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/LICENSE.ES.MD new file mode 100644 index 00000000..fde4ad5c --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/LICENSE.ES.MD @@ -0,0 +1,334 @@ +# Programa 'IpTviewrTools' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este PROGRAMA (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios, incluyendo, en su caso, al Grupo Teléfonica. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. ChannelLogos +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Etsi.Ts102034 +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTviewr.ToolsUiFramework +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. IpTviewrTools +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.Common +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.Discovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. UiServices.Forms +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/LICENSE.MD b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/LICENSE.MD new file mode 100644 index 00000000..f1cf8b85 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/LICENSE.MD @@ -0,0 +1,306 @@ +# Program 'IpTviewrTools' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. ChannelLogos +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Etsi.Ts102034 +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.IpTvServices +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IpTviewr.ToolsUiFramework +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. IpTviewrTools +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.Common +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.Discovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. UiServices.DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. UiServices.Forms +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/MainForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/MainForm.Designer.cs new file mode 100644 index 00000000..ada21e1f --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/MainForm.Designer.cs @@ -0,0 +1,66 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // kryptonManager1 + // + this.kryptonManager1.GlobalPaletteMode = ComponentFactory.Krypton.Toolkit.PaletteModeManager.Office2010Silver; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1008, 729); + this.CustomCaptionArea = new System.Drawing.Rectangle(167, 0, 793, 26); + this.Location = new System.Drawing.Point(0, 0); + this.Name = "MainForm"; + this.Text = "IpTViewr internal tools"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + } +} diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/MainForm.cs b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/MainForm.cs new file mode 100644 index 00000000..b5d7e654 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/MainForm.cs @@ -0,0 +1,57 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; +using ComponentFactory.Krypton.Toolkit; +using IpTviewr.Internal.Tools.Properties; +using IpTviewr.Internal.Tools.UiFramework; + +namespace IpTviewr.Internal.Tools +{ + public partial class MainForm : MdiRibbonForm + { + public MainForm() + { + InitializeComponent(); + Icon = Resources.IpTViewrGuiTools; + RibbonAppButtonImage = Resources.IpTViewrGuiTools_32x; + } + + #region Overrides of MdiRibbonForm + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + if (!CreateNewToolWindow()) + { + Close(); + } // if + } // OnShown + + protected override Form CreateNewMdiChild() + { + using var dlg = new SelectToolDialog + { + OkButtonImage = Resources.Action_Ok_16x16, + CancelButtonImage = Resources.Action_Cancel_16x16, + }; + + if (dlg.ShowDialog(this) != DialogResult.OK) return null; + + return dlg.SelectedGuiTool?.Value.CreateForm(); + } // CreateNewMdiChild + + #endregion + } +} diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/MainForm.resx b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/MainForm.resx new file mode 100644 index 00000000..d5348372 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 126, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Program.cs b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Program.cs new file mode 100644 index 00000000..cbfa7914 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Program.cs @@ -0,0 +1,34 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; +using IpTviewr.Internal.Tools.UiFramework; + +namespace IpTviewr.Internal.Tools +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + _ = ToolsContainer.Current; + Application.Run(new MainForm()); + } // Main + } // class Program +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ef365a71 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IpTviewr.Internal.Tools")] +[assembly: AssemblyDescription("IpTviewr internal tools")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5566e7c5-cd21-4210-a836-5eb7902eb417")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Resources.Designer.cs new file mode 100644 index 00000000..60254db3 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Resources.Designer.cs @@ -0,0 +1,146 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Internal.Tools.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Internal.Tools.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon IpTViewrGuiTools { + get { + object obj = ResourceManager.GetObject("IpTViewrGuiTools", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IpTViewrGuiTools_16x { + get { + object obj = ResourceManager.GetObject("IpTViewrGuiTools_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IpTViewrGuiTools_24x { + get { + object obj = ResourceManager.GetObject("IpTViewrGuiTools_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IpTViewrGuiTools_32x { + get { + object obj = ResourceManager.GetObject("IpTViewrGuiTools_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap IpTViewrGuiTools_48x { + get { + object obj = ResourceManager.GetObject("IpTViewrGuiTools_48x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Resources.resx b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Resources.resx new file mode 100644 index 00000000..a87deb9a --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Resources.resx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\resources\action_cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\iptviewrguitools.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\iptviewrguitools_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\iptviewrguitools_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\iptviewrguitools_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\iptviewrguitools_48x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Settings.Designer.cs new file mode 100644 index 00000000..7b6f26e8 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Settings.Designer.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Internal.Tools.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Settings.settings b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/Action_Cancel_16x16.png b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/Action_Cancel_16x16.png new file mode 100644 index 00000000..5fcec020 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/Action_Cancel_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/Action_Ok_16x16.png b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/Action_Ok_16x16.png new file mode 100644 index 00000000..caac04de Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/Action_Ok_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools.ico b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools.ico new file mode 100644 index 00000000..2667a733 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools.ico differ diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_16x.png b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_16x.png new file mode 100644 index 00000000..cadea6cb Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_24x.png b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_24x.png new file mode 100644 index 00000000..2dbca992 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_32x.png b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_32x.png new file mode 100644 index 00000000..04249869 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_48x.png b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_48x.png new file mode 100644 index 00000000..fb7e0a48 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/IpTViewrGuiTools_48x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/buttonSpecHelp.Image.png b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/buttonSpecHelp.Image.png new file mode 100644 index 00000000..1469e6c1 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/buttonSpecHelp.Image.png differ diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/kryptonContextMenuItem1.Image.png b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/kryptonContextMenuItem1.Image.png new file mode 100644 index 00000000..823f7a4a Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/Resources/kryptonContextMenuItem1.Image.png differ diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/TestTool.cs b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/TestTool.cs new file mode 100644 index 00000000..272a7669 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/TestTool.cs @@ -0,0 +1,52 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel.Composition; +using System.Drawing; +using System.Windows.Forms; +using IpTviewr.Internal.Tools.Properties; +using IpTviewr.Internal.Tools.UiFramework; + +namespace IpTviewr.Internal.Tools +{ + [Export(typeof(IGuiTool))] + [Export(typeof(IGuiToolDataProvider))] + [ExportMetadata("Guid", "{CB5FCBE7-3FB9-4280-B29E-9E995B2E0283}")] + + internal class TestTool: IGuiTool, IGuiToolDataProvider + { + #region Implementation of IGuiTool + + public Form CreateForm() => new Form1(); + + #endregion + + #region Implementation of IToolDataProvider + + public string Guid => "{CB5FCBE7-3FB9-4280-B29E-9E995B2E0283}"; + public string Category => "Dummy"; + public string Name => "Dummy tool"; + + public Image GetLogo(int size) + { + if (size <= 16) return Resources.IpTViewrGuiTools_16x; + if (size <= 24) return Resources.IpTViewrGuiTools_24x; + if (size <= 32) return Resources.IpTViewrGuiTools_32x; + + return Resources.IpTViewrGuiTools_48x; + } + + #endregion + } +} diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/license.txt b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/license.txt new file mode 100644 index 00000000..0dbe96d8 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/license.txt @@ -0,0 +1,316 @@ +############################################################################## +## +## Program 'IpTviewrTools' +## +############################################################################## +## +## Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. ChannelLogos +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. Etsi.Ts102034 +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.IpTvServices +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. IpTviewr.ToolsUiFramework +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. IpTviewrTools +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. UiServices.Common +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. UiServices.Discovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. UiServices.DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. UiServices.Forms +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/InternalTools/IpTviewrTools/licensing.xml b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/licensing.xml new file mode 100644 index 00000000..c509a195 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/IpTviewrTools/licensing.xml @@ -0,0 +1,344 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ChannelLogos + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.ToolsUiFramework + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Forms + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/App.config b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/App.config new file mode 100644 index 00000000..b50c74f3 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ArgumentsListEditor.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ArgumentsListEditor.Designer.cs new file mode 100644 index 00000000..8859bcf9 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ArgumentsListEditor.Designer.cs @@ -0,0 +1,144 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Batch +{ + partial class ArgumentsListEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.textBoxArgument = new System.Windows.Forms.TextBox(); + this.buttonSelectFile = new System.Windows.Forms.Button(); + this.groupBoxData.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxData + // + this.groupBoxData.Controls.Add(this.buttonSelectFile); + this.groupBoxData.Controls.Add(this.textBoxArgument); + this.groupBoxData.Location = new System.Drawing.Point(0, 3); + this.groupBoxData.Size = new System.Drawing.Size(275, 264); + this.groupBoxData.Text = "Tool execution arguments"; + this.groupBoxData.Controls.SetChildIndex(this.buttonEdit, 0); + this.groupBoxData.Controls.SetChildIndex(this.listItems, 0); + this.groupBoxData.Controls.SetChildIndex(this.buttonRemove, 0); + this.groupBoxData.Controls.SetChildIndex(this.buttonMoveUp, 0); + this.groupBoxData.Controls.SetChildIndex(this.buttonMoveDown, 0); + this.groupBoxData.Controls.SetChildIndex(this.buttonAdd, 0); + this.groupBoxData.Controls.SetChildIndex(this.textBoxArgument, 0); + this.groupBoxData.Controls.SetChildIndex(this.buttonSelectFile, 0); + // + // buttonAdd + // + this.buttonAdd.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonAdd.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Add_16xM; + this.buttonAdd.Location = new System.Drawing.Point(213, 19); + this.toolTip.SetToolTip(this.buttonAdd, "Add new..."); + // + // buttonMoveDown + // + this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonMoveDown.Location = new System.Drawing.Point(244, 233); + this.toolTip.SetToolTip(this.buttonMoveDown, "Move down"); + // + // buttonMoveUp + // + this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonMoveUp.Location = new System.Drawing.Point(244, 205); + this.toolTip.SetToolTip(this.buttonMoveUp, "Move up"); + // + // buttonRemove + // + this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonRemove.Location = new System.Drawing.Point(244, 78); + this.toolTip.SetToolTip(this.buttonRemove, "Delete"); + // + // listItems + // + this.listItems.DisplayMember = ""; + this.listItems.Location = new System.Drawing.Point(6, 50); + this.listItems.Size = new System.Drawing.Size(232, 208); + this.listItems.ValueMember = ""; + // + // buttonEdit + // + this.buttonEdit.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; + this.buttonEdit.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Edit_16x16; + this.buttonEdit.Location = new System.Drawing.Point(244, 50); + this.toolTip.SetToolTip(this.buttonEdit, "Edit selected argument"); + // + // textBoxArgument + // + this.textBoxArgument.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxArgument.Location = new System.Drawing.Point(6, 22); + this.textBoxArgument.Name = "textBoxArgument"; + this.textBoxArgument.Size = new System.Drawing.Size(170, 20); + this.textBoxArgument.TabIndex = 6; + // + // buttonSelectFile + // + this.buttonSelectFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonSelectFile.FlatAppearance.BorderSize = 0; + this.buttonSelectFile.Location = new System.Drawing.Point(182, 19); + this.buttonSelectFile.Name = "buttonSelectFile"; + this.buttonSelectFile.Size = new System.Drawing.Size(25, 25); + this.buttonSelectFile.TabIndex = 7; + this.buttonSelectFile.UseVisualStyleBackColor = true; + this.buttonSelectFile.Click += new System.EventHandler(this.buttonSelectFile_Click); + // + // ArgumentsListEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Items = new string[0]; + this.ListName = "Tool execution arguments"; + this.Name = "ArgumentsListEditor"; + this.Size = new System.Drawing.Size(275, 270); + this.Load += new System.EventHandler(this.ArgumentsListEditor_Load); + this.groupBoxData.ResumeLayout(false); + this.groupBoxData.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button buttonSelectFile; + private System.Windows.Forms.TextBox textBoxArgument; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ArgumentsListEditor.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ArgumentsListEditor.cs new file mode 100644 index 00000000..4337f18f --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ArgumentsListEditor.cs @@ -0,0 +1,81 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using IpTviewr.UiServices.Common.Controls; +using JetBrains.Annotations; +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Batch +{ + public partial class ArgumentsListEditor : StringListEditor + { + private Action _selectFileAction; + + public ArgumentsListEditor() + { + InitializeComponent(); + } // ArgumentsListEditor + + [PublicAPI] + public Image SelectFileButtonImage + { + get => buttonSelectFile.Image; + set => buttonSelectFile.Image = value; + } // SelectFileButtonImage + + [PublicAPI] + public Action SelectFileAction + { + get => _selectFileAction; + set + { + _selectFileAction = value; + buttonSelectFile.Enabled = (value != null); + } // set + } // SelectFileAction + + private void ArgumentsListEditor_Load(object sender, EventArgs e) + { + if (SelectFileAction == null) + { + buttonSelectFile.Visible = false; + textBoxArgument.Width = buttonSelectFile.Right - textBoxArgument.Left; + } // if + } // ArgumentsListEditor_Load + + private void buttonSelectFile_Click(object sender, EventArgs e) + { + SelectFileAction?.Invoke(textBoxArgument); + } // buttonSelectFile_Click + + #region Overrides of StringListEditor + + protected override bool GetNewItem(out string newItem) + { + newItem = textBoxArgument.Text.Trim(); + if (newItem.Length == 0) + { + MessageBox.Show(this, BatchResources.ArgumentsNotOptional, BatchResources.ArgumentsNotOptionalCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + return false; + } // if + + textBoxArgument.Text = null; + return true; + } // GetNewItem + + #endregion + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ArgumentsListEditor.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ArgumentsListEditor.resx new file mode 100644 index 00000000..4909af12 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ArgumentsListEditor.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 17, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchDialog.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchDialog.Designer.cs new file mode 100644 index 00000000..76354ce7 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchDialog.Designer.cs @@ -0,0 +1,405 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Batch +{ + partial class BatchDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BatchDialog)); + this.label1 = new System.Windows.Forms.Label(); + this.comboBoxTools = new System.Windows.Forms.ComboBox(); + this.listBatch = new System.Windows.Forms.ListView(); + this.columnHeaderTool = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.columnHeaderArguments = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.textBoxResults = new System.Windows.Forms.TextBox(); + this.toolStripForm = new System.Windows.Forms.ToolStrip(); + this.newToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.openToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.saveToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator(); + this.executeStripButton = new System.Windows.Forms.ToolStripButton(); + this.copyStripButton = new System.Windows.Forms.ToolStripButton(); + this.cutToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.closeStripButton = new System.Windows.Forms.ToolStripButton(); + this.openBatchDialog = new System.Windows.Forms.OpenFileDialog(); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.saveBatchDialog = new System.Windows.Forms.SaveFileDialog(); + this.buttonEdit = new System.Windows.Forms.Button(); + this.buttonUsage = new System.Windows.Forms.Button(); + this.buttonMoveDown = new System.Windows.Forms.Button(); + this.buttonMoveUp = new System.Windows.Forms.Button(); + this.buttonRemove = new System.Windows.Forms.Button(); + this.buttonAdd = new System.Windows.Forms.Button(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.timerRefreshOutput = new System.Windows.Forms.Timer(this.components); + this.groupBox1.SuspendLayout(); + this.toolStripForm.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 34); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(31, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Tool:"; + // + // comboBoxTools + // + this.comboBoxTools.DisplayMember = "Name"; + this.comboBoxTools.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxTools.FormattingEnabled = true; + this.comboBoxTools.Location = new System.Drawing.Point(49, 31); + this.comboBoxTools.Name = "comboBoxTools"; + this.comboBoxTools.Size = new System.Drawing.Size(320, 21); + this.comboBoxTools.TabIndex = 1; + this.comboBoxTools.SelectedIndexChanged += new System.EventHandler(this.comboBoxTools_SelectedIndexChanged); + // + // listBatch + // + this.listBatch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listBatch.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderTool, + this.columnHeaderArguments}); + this.listBatch.FullRowSelect = true; + this.listBatch.GridLines = true; + this.listBatch.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listBatch.HideSelection = false; + this.listBatch.Location = new System.Drawing.Point(12, 59); + this.listBatch.MultiSelect = false; + this.listBatch.Name = "listBatch"; + this.listBatch.ShowItemToolTips = true; + this.listBatch.Size = new System.Drawing.Size(494, 172); + this.listBatch.TabIndex = 8; + this.listBatch.UseCompatibleStateImageBehavior = false; + this.listBatch.View = System.Windows.Forms.View.Details; + this.listBatch.SelectedIndexChanged += new System.EventHandler(this.listBatch_SelectedIndexChanged); + this.listBatch.DoubleClick += new System.EventHandler(this.listBatch_DoubleClick); + // + // columnHeaderTool + // + this.columnHeaderTool.Text = "Tool"; + this.columnHeaderTool.Width = 150; + // + // columnHeaderArguments + // + this.columnHeaderArguments.Text = "Arguments"; + this.columnHeaderArguments.Width = 310; + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.textBoxResults); + this.groupBox1.Location = new System.Drawing.Point(12, 237); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(600, 192); + this.groupBox1.TabIndex = 13; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Execution result"; + // + // textBoxResults + // + this.textBoxResults.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxResults.BackColor = System.Drawing.SystemColors.Window; + this.textBoxResults.Location = new System.Drawing.Point(6, 19); + this.textBoxResults.Multiline = true; + this.textBoxResults.Name = "textBoxResults"; + this.textBoxResults.ReadOnly = true; + this.textBoxResults.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxResults.Size = new System.Drawing.Size(588, 167); + this.textBoxResults.TabIndex = 0; + this.textBoxResults.WordWrap = false; + // + // toolStripForm + // + this.toolStripForm.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripButton, + this.openToolStripButton, + this.saveToolStripButton, + this.toolStripSeparator, + this.executeStripButton, + this.copyStripButton, + this.cutToolStripButton, + this.toolStripSeparator1, + this.closeStripButton}); + this.toolStripForm.Location = new System.Drawing.Point(0, 0); + this.toolStripForm.Name = "toolStripForm"; + this.toolStripForm.Size = new System.Drawing.Size(624, 25); + this.toolStripForm.TabIndex = 14; + this.toolStripForm.Text = "toolStrip1"; + // + // newToolStripButton + // + this.newToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripButton.Image"))); + this.newToolStripButton.Name = "newToolStripButton"; + this.newToolStripButton.Size = new System.Drawing.Size(51, 22); + this.newToolStripButton.Text = "&New"; + this.newToolStripButton.ToolTipText = "Create new batch (Ctrl+N)"; + this.newToolStripButton.Click += new System.EventHandler(this.newToolStripButton_Click); + // + // openToolStripButton + // + this.openToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripButton.Image"))); + this.openToolStripButton.Name = "openToolStripButton"; + this.openToolStripButton.Size = new System.Drawing.Size(56, 22); + this.openToolStripButton.Text = "&Open"; + this.openToolStripButton.ToolTipText = "Open batch file (Ctrl+O)"; + this.openToolStripButton.Click += new System.EventHandler(this.openToolStripButton_Click); + // + // saveToolStripButton + // + this.saveToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripButton.Image"))); + this.saveToolStripButton.Name = "saveToolStripButton"; + this.saveToolStripButton.Size = new System.Drawing.Size(51, 22); + this.saveToolStripButton.Text = "&Save"; + this.saveToolStripButton.ToolTipText = "Save batch to file (Ctrl+S)"; + this.saveToolStripButton.Click += new System.EventHandler(this.saveToolStripButton_Click); + // + // toolStripSeparator + // + this.toolStripSeparator.Name = "toolStripSeparator"; + this.toolStripSeparator.Size = new System.Drawing.Size(6, 25); + // + // executeStripButton + // + this.executeStripButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Go_16x16; + this.executeStripButton.Name = "executeStripButton"; + this.executeStripButton.Size = new System.Drawing.Size(91, 22); + this.executeStripButton.Text = "E&xecute (F5)"; + this.executeStripButton.ToolTipText = "Execute batch (F5)"; + this.executeStripButton.Click += new System.EventHandler(this.executeStripButton_Click); + // + // copyStripButton + // + this.copyStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.copyStripButton.Image = ((System.Drawing.Image)(resources.GetObject("copyStripButton.Image"))); + this.copyStripButton.Name = "copyStripButton"; + this.copyStripButton.Size = new System.Drawing.Size(23, 22); + this.copyStripButton.Text = "Copy"; + this.copyStripButton.ToolTipText = "Copy execution results"; + this.copyStripButton.Click += new System.EventHandler(this.copyStripButton_Click); + // + // cutToolStripButton + // + this.cutToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.cutToolStripButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Delete_16x16; + this.cutToolStripButton.Name = "cutToolStripButton"; + this.cutToolStripButton.Size = new System.Drawing.Size(23, 22); + this.cutToolStripButton.Text = "Cle&ar"; + this.cutToolStripButton.ToolTipText = "Clear execution result"; + this.cutToolStripButton.Click += new System.EventHandler(this.cutToolStripButton_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // closeStripButton + // + this.closeStripButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Close_16x16; + this.closeStripButton.Name = "closeStripButton"; + this.closeStripButton.Size = new System.Drawing.Size(72, 22); + this.closeStripButton.Text = "CANCEL"; + this.closeStripButton.ToolTipText = "Cancels current execution"; + // + // openBatchDialog + // + this.openBatchDialog.Filter = "Batch files (*.batch)|*.batch"; + this.openBatchDialog.RestoreDirectory = true; + // + // openFileDialog + // + this.openFileDialog.RestoreDirectory = true; + // + // saveBatchDialog + // + this.saveBatchDialog.Filter = "Batch files (*.batch)|*.batch"; + this.saveBatchDialog.RestoreDirectory = true; + // + // buttonEdit + // + this.buttonEdit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEdit.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Edit_16x16; + this.buttonEdit.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonEdit.Location = new System.Drawing.Point(512, 59); + this.buttonEdit.Name = "buttonEdit"; + this.buttonEdit.Size = new System.Drawing.Size(100, 25); + this.buttonEdit.TabIndex = 9; + this.buttonEdit.Text = "&Edit"; + this.buttonEdit.UseVisualStyleBackColor = true; + this.buttonEdit.Click += new System.EventHandler(this.buttonEdit_Click); + // + // buttonUsage + // + this.buttonUsage.FlatAppearance.BorderSize = 0; + this.buttonUsage.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Status_Unknown_16x616; + this.buttonUsage.Location = new System.Drawing.Point(375, 28); + this.buttonUsage.Name = "buttonUsage"; + this.buttonUsage.Size = new System.Drawing.Size(25, 25); + this.buttonUsage.TabIndex = 2; + this.buttonUsage.UseVisualStyleBackColor = true; + this.buttonUsage.Click += new System.EventHandler(this.buttonUsage_Click); + // + // buttonMoveDown + // + this.buttonMoveDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonMoveDown.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_GoNextDown_16x16; + this.buttonMoveDown.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonMoveDown.Location = new System.Drawing.Point(512, 206); + this.buttonMoveDown.Name = "buttonMoveDown"; + this.buttonMoveDown.Size = new System.Drawing.Size(100, 25); + this.buttonMoveDown.TabIndex = 12; + this.buttonMoveDown.Text = "Move &down"; + this.buttonMoveDown.UseVisualStyleBackColor = true; + this.buttonMoveDown.Click += new System.EventHandler(this.buttonMoveDown_Click); + // + // buttonMoveUp + // + this.buttonMoveUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonMoveUp.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_GoPreviousUp_16x16; + this.buttonMoveUp.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonMoveUp.Location = new System.Drawing.Point(512, 175); + this.buttonMoveUp.Name = "buttonMoveUp"; + this.buttonMoveUp.Size = new System.Drawing.Size(100, 25); + this.buttonMoveUp.TabIndex = 11; + this.buttonMoveUp.Text = "Move &up"; + this.buttonMoveUp.UseVisualStyleBackColor = true; + this.buttonMoveUp.Click += new System.EventHandler(this.buttonMoveUp_Click); + // + // buttonRemove + // + this.buttonRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRemove.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Delete_16x16; + this.buttonRemove.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonRemove.Location = new System.Drawing.Point(512, 90); + this.buttonRemove.Name = "buttonRemove"; + this.buttonRemove.Size = new System.Drawing.Size(100, 25); + this.buttonRemove.TabIndex = 10; + this.buttonRemove.Text = "&Remove"; + this.buttonRemove.UseVisualStyleBackColor = true; + this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); + // + // buttonAdd + // + this.buttonAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonAdd.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Add_16xM; + this.buttonAdd.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonAdd.Location = new System.Drawing.Point(406, 28); + this.buttonAdd.Name = "buttonAdd"; + this.buttonAdd.Size = new System.Drawing.Size(100, 25); + this.buttonAdd.TabIndex = 7; + this.buttonAdd.Text = "&Add"; + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); + // + // timerRefreshOutput + // + this.timerRefreshOutput.Interval = 1500; + // + // BatchDialog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 441); + this.Controls.Add(this.buttonEdit); + this.Controls.Add(this.buttonUsage); + this.Controls.Add(this.toolStripForm); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.buttonMoveDown); + this.Controls.Add(this.buttonMoveUp); + this.Controls.Add(this.buttonRemove); + this.Controls.Add(this.listBatch); + this.Controls.Add(this.buttonAdd); + this.Controls.Add(this.comboBoxTools); + this.Controls.Add(this.label1); + this.KeyPreview = true; + this.Name = "BatchDialog"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Batch creation and execution"; + this.Load += new System.EventHandler(this.BatchDialog_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.toolStripForm.ResumeLayout(false); + this.toolStripForm.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox comboBoxTools; + private System.Windows.Forms.Button buttonAdd; + private System.Windows.Forms.ListView listBatch; + private System.Windows.Forms.Button buttonRemove; + private System.Windows.Forms.Button buttonMoveUp; + private System.Windows.Forms.Button buttonMoveDown; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox textBoxResults; + private System.Windows.Forms.ToolStrip toolStripForm; + private System.Windows.Forms.ToolStripButton newToolStripButton; + private System.Windows.Forms.ToolStripButton openToolStripButton; + private System.Windows.Forms.ToolStripButton saveToolStripButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator; + private System.Windows.Forms.ToolStripButton executeStripButton; + private System.Windows.Forms.ToolStripButton copyStripButton; + private System.Windows.Forms.ToolStripButton cutToolStripButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripButton closeStripButton; + private System.Windows.Forms.ColumnHeader columnHeaderTool; + private System.Windows.Forms.ColumnHeader columnHeaderArguments; + private System.Windows.Forms.Button buttonUsage; + private System.Windows.Forms.OpenFileDialog openBatchDialog; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.SaveFileDialog saveBatchDialog; + private System.Windows.Forms.Button buttonEdit; + private System.Windows.Forms.ToolTip toolTip; + private System.Windows.Forms.Timer timerRefreshOutput; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchDialog.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchDialog.cs new file mode 100644 index 00000000..00e9701b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchDialog.cs @@ -0,0 +1,465 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Tools.SourceCodeMaintenance.Batch.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Helpers; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using IpTviewr.Common.Serialization; +using IpTviewr.UiServices.Common.Forms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Batch +{ + public sealed partial class BatchDialog : CommonBaseForm + { + private readonly Helpers.AsyncHelper _asyncHelper; + private bool _isDirty; + private bool _hasResults; + private bool _hasLines; + private Lazy _selectedTool; + private readonly Helpers.TextBoxOutputWriter _outputWriter; + + public BatchDialog() + { + InitializeComponent(); + _outputWriter = new TextBoxOutputWriter(textBoxResults, timerRefreshOutput, 4); + _asyncHelper = new AsyncHelper(this, toolStripForm, closeStripButton); + } // constructor + + private bool IsDirty + { + get => _isDirty; + set + { + _isDirty = value; + saveToolStripButton.Enabled = _isDirty; + } // set + } // IsDirty + + private bool HasResults + { + get => _hasResults; + set + { + _hasResults = value; + copyStripButton.Enabled = value; + cutToolStripButton.Enabled = value; + groupBox1.Enabled = value; + textBoxResults.Enabled = value; + if (!value) textBoxResults.Text = null; + } // set + } // HasResults + + private bool HasLines + { + get => _hasLines; + set + { + _hasLines = value; + executeStripButton.Enabled = value; + listBatch.Enabled = value; + if (value) return; + + buttonEdit.Enabled = false; + buttonRemove.Enabled = false; + buttonMoveUp.Enabled = false; + buttonMoveDown.Enabled = false; + } // set + } // HasLines + + private Lazy SelectedTool + { + get => _selectedTool; + set + { + _selectedTool = value; + var enable = (value != null); + var hasArguments = enable && value.Metadata.HasParameters; + buttonUsage.Enabled = enable && value.Metadata.HasUsage; + buttonAdd.Enabled = hasArguments; + } // set; + } // SelectedTools + + #region Overrides of Form + + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + switch (keyData) + { + case Keys.Control | Keys.N: + SafeCall(NewBatch); + return true; // if + case Keys.Control | Keys.O: + SafeCall(OpenBatch); + return true; // if + case Keys.Control | Keys.S: + if (saveToolStripButton.Enabled) SafeCall(() => SaveBatch()); + return true; + case Keys.F5: + if (executeStripButton.Enabled) executeStripButton.PerformClick(); + return true; // if + default: + return base.ProcessCmdKey(ref msg, keyData); + } // switch + } // ProcessCmdKey + + #endregion + + private void BatchDialog_Load(object sender, EventArgs e) + { + IsDirty = false; + HasResults = false; + HasLines = false; + if (Program.ToolsCliNames.Count > 0) + { + comboBoxTools.DataSource = Program.ToolsCliNames; + comboBoxTools.SelectedIndex = 0; + } + else + { + SelectedTool = null; + } // if-else + } // BatchDialog_Load + + private void newToolStripButton_Click(object sender, EventArgs e) + { + SafeCall(NewBatch); + } // // newToolStripButton_Click + + private void openToolStripButton_Click(object sender, EventArgs e) + { + SafeCall(OpenBatch); + } // newToolStripButton_Click + + private void saveToolStripButton_Click(object sender, EventArgs e) + { + SafeCall(() => SaveBatch()); + } // saveToolStripButton_Click + + private void executeStripButton_Click(object sender, EventArgs e) + { + ExecuteBatchAsync(); + } // executeStripButton_Click + + private void copyStripButton_Click(object sender, EventArgs e) + { + SafeCall(CopyResults); + } // copyStripButton_Click + + private void cutToolStripButton_Click(object sender, EventArgs e) + { + SafeCall(ClearResults); + } // cutToolStripButton_Click + + private void comboBoxTools_SelectedIndexChanged(object sender, EventArgs e) + { + SelectedTool = (comboBoxTools.SelectedIndex >= 0) ? Program.ToolsCli[comboBoxTools.SelectedIndex] : null; + } // comboBoxTools_SelectedIndexChanged + + private void buttonUsage_Click(object sender, EventArgs e) + { + var writer = new Helpers.TextBoxOutputWriter(textBoxResults, null, 4); + writer.Start(); + SelectedTool.Value.ShowUsage(writer); + writer.Stop(); + HasResults = true; + } //buttonUsage_Click + + private void listBatch_SelectedIndexChanged(object sender, EventArgs e) + { + var index = (listBatch.SelectedIndices.Count > 0) ? listBatch.SelectedIndices[0] : -1; + buttonEdit.Enabled = (index >= 0); + buttonRemove.Enabled = (index >= 0); + buttonMoveUp.Enabled = (index > 0); + buttonMoveDown.Enabled = (index < (listBatch.Items.Count - 1)); + } // listBatch_SelectedIndexChanged + + private void listBatch_DoubleClick(object sender, EventArgs e) + { + if (listBatch.SelectedItems.Count == 0) return; + + buttonEdit.PerformClick(); + } // listBatch_DoubleClick + + private void buttonAdd_Click(object sender, EventArgs e) + { + List arguments; + + if (SelectedTool.Metadata.HasParameters) + { + using var dialog = new ToolArgumentsDialog + { + SelectFileButtonImage = openToolStripButton.Image, + SelectFileAction = SelectedTool.Metadata.HasFileParameters ? SelectFile : (Action) null + + }; + + if (dialog.ShowDialog(this) != DialogResult.OK) return; + arguments = new List(dialog.Arguments); + } + else + { + arguments = null; + } // if-else + + AddToBatch(SelectedTool, arguments); + } // buttonAdd_Click + + private void buttonEdit_Click(object sender, EventArgs e) + { + if (!(listBatch.SelectedItems[0].Tag is BatchExecute line)) return; + + using var dialog = new ToolArgumentsDialog + { + SelectFileButtonImage = openToolStripButton.Image, + Arguments = line.Arguments.ToArray(), + SelectFileAction = SelectedTool.Metadata.HasFileParameters ? SelectFile : (Action)null + }; + if (dialog.ShowDialog(this) != DialogResult.OK) return; + + line.Arguments.Clear(); + line.Arguments.AddRange(dialog.Arguments); + listBatch.SelectedItems[0].SubItems[1].Text = GetArgumentsForDisplay(line.Arguments); + IsDirty = true; + } // buttonEdit_Click + + private void buttonRemove_Click(object sender, EventArgs e) + { + listBatch.SelectedItems[0].Remove(); + IsDirty = true; + } // buttonRemove_Click + + private void buttonMoveUp_Click(object sender, EventArgs e) + { + var item = listBatch.SelectedItems[0]; + + var index = item.Index; + listBatch.BeginUpdate(); + item.Remove(); + listBatch.Items.Insert(index - 1, item); + listBatch.EndUpdate(); + IsDirty = true; + } // buttonMoveUp_Click + + private void buttonMoveDown_Click(object sender, EventArgs e) + { + var item = listBatch.SelectedItems[0]; + + var index = item.Index; + listBatch.BeginUpdate(); + item.Remove(); + listBatch.Items.Insert(index + 1, item); + listBatch.EndUpdate(); + IsDirty = true; + } // buttonMoveDown_Click + + private void NewBatch() + { + if (!SaveIfDirty(BatchResources.NewBatchSaveExplanation)) return; + IsDirty = false; + listBatch.Items.Clear(); + HasLines = false; + HasResults = false; + } // NewBatch + + private void OpenBatch() + { + if (!SaveIfDirty(BatchResources.OpenBatchSaveExplanation)) return; + IsDirty = false; + NewBatch(); + + openBatchDialog.Filter = BatchResources.SelectFileFilter; + if (openBatchDialog.ShowDialog(this) != DialogResult.OK) return; + SafeCall(() => + { + var batch = XmlSerialization.Deserialize(openBatchDialog.FileName); + listBatch.BeginUpdate(); + foreach (var item in batch.Lines) + { + AddToBatch(item); + } // foreach + listBatch.EndUpdate(); + + HasLines = listBatch.Items.Count > 0; + }); + + IsDirty = false; + } // OpenBatch + + private bool SaveIfDirty(string explanation) + { + if (!IsDirty) return true; + var result = MessageBox.Show(string.Format(BatchResources.SaveIfDirty, BatchResources.SaveBatchChanges, explanation), BatchResources.SaveBatchChangesCaption, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); + if (result == DialogResult.Yes && !SaveBatch()) return false; + + return (result == DialogResult.No); + } // SaveIfDirty + + private bool SaveBatch() + { + if (!IsDirty) return true; + saveBatchDialog.Filter = BatchResources.SelectFileFilter; + if (saveBatchDialog.ShowDialog(this) != DialogResult.OK) return false; + + var batch = GetBatch(); + XmlSerialization.Serialize(saveBatchDialog.FileName, batch); + + IsDirty = false; + return true; + } // SaveBatch + + private void ExecuteBatchAsync() + { + HasResults = false; + var batch = GetBatch(); + _asyncHelper.ExecuteAsync(_outputWriter, (token) => BatchExecution.ExecuteBatchAsync(batch, _outputWriter, token)); + HasResults = true; + } // ExecuteBatch + + private void AddToBatch(Lazy tool, List arguments) + { + AddToBatch(new BatchExecute + { + Guid = Guid.Parse(tool.Metadata.Guid), + Arguments = arguments + }); + } // AddToBatch + + private void AddToBatch(BatchExecute line) + { + var tool = Program.GetTool(line.Guid); + line.Name = tool.Metadata.CliName; // update tool CLI name, just in case it has changed + + var item = new ListViewItem(tool.Metadata.Name); + item.SubItems.Add(GetArgumentsForDisplay(line.Arguments)); + item.Tag = line; + item.Selected = true; + + listBatch.SelectedItems.Clear(); + listBatch.Items.Add(item); + + HasLines = true; + IsDirty = true; + } // AddToBatch + + private void CopyResults() + { + if (!textBoxResults.Enabled) return; + + Clipboard.Clear(); + Clipboard.SetText(textBoxResults.Text); + } // CopyResults + + private void ClearResults() + { + if (!textBoxResults.Enabled) return; + + textBoxResults.Text = null; + HasResults = false; + } // ClearResults + + private void SelectFile(TextBox textBox) + { + var toolFilter = SelectedTool.Value.SelectFileFilter; + var filter = (toolFilter != null) ? string.Join("|", toolFilter, BatchResources.SelectAllFilesFilter) : BatchResources.SelectAllFilesFilter; + openFileDialog.Filter = filter; + if (openFileDialog.ShowDialog(this) != DialogResult.OK) return; + + var file = openFileDialog.FileName; + var text = textBox.Text; + var start = textBox.SelectionStart; + var end = start + textBox.SelectionLength; + if (end >= text.Length) end = text.Length - 1; + textBox.Text = text.Substring(0, start) + file + text.Substring(end + 1); + } // SelectFile + + private Serialization.Batch GetBatch() + { + return new Serialization.Batch + { + Lines = (from item in listBatch.Items.Cast() + let line = item.Tag as BatchExecute + where line != null + select line).ToList() + }; + } // GetBatch + + public static List SplitArguments(string arguments) + { + var result = new List(); + + var startIndex = 0; + while (startIndex < arguments.Length) + { + var indexSpace = arguments.IndexOf(' ', startIndex); + var indexQuote = arguments.IndexOf('"', startIndex); + + if ((indexSpace >= indexQuote) && (indexQuote != -1)) + { + // ignore space + // look for ending quotes + var indexEnd = arguments.IndexOf('"', indexQuote + 1) + 1; + if (indexEnd >= 0) + { + AddArgument(startIndex, indexEnd); + startIndex = indexEnd + 1; + } + else + { + AddArgument(startIndex, arguments.Length); + startIndex = arguments.Length; + } // if-else + } + else + { + if (indexSpace >= 0) + { + AddArgument(startIndex, indexSpace); + startIndex = indexSpace + 1; + } + else + { + break; + } // if-else + } // if + + if (indexQuote >= 0) + { + } + } // while + + if (startIndex < arguments.Length) + { + AddArgument(startIndex, arguments.Length); + } // if + + return result; + + void AddArgument(int start, int end) + { + var argument = arguments.Substring(start, end - start).Trim(); + if (argument.Length > 0) result.Add(argument); + } // AddArgument + } // SplitArguments + + private string GetArgumentsForDisplay(IList arguments) + { + if ((arguments == null) || (arguments.Count == 0)) return "(No arguments)"; + return arguments.Count == 1 ? arguments[0] : $"({arguments.Count} arguments)"; + } // GetArgumentsForDisplay + } // class BatchDialog +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchDialog.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchDialog.resx new file mode 100644 index 00000000..85b2b050 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchDialog.resx @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAARFJREFUOE+tkNtKAlEYheel7B3qNeyNJC8ivCgjRFAwKFTSKIM8IaITdkJGS9Hx + XNN4GGfJHn9xxpk2c+EHi32x1/oufmFvxB5q2E0kVUUoXkLwOoviSwNUdYYN/uMsfI+Do2O+JJoWqW7n + JBhH4qm6loiSsyScLFPdju/81hhvQhMrVzcFqttZaEtDshHRxMpF7JnqVnRdh6LO0ekrhsBz6HUWBCKP + NLEym2sYjFVI7TFfcBpK0WSLttQxUWZoyb94kwZ8gf8yQbMt6nQBefiH+vcIlXeZL2CfZtjhRj9TNDsT + 1Op95MW2e4H5cB/NIcqvXWRKX+4F5sOJnz1kKy3c5SR3AvbywhWwTzehyT4QhBXYzPbDF6Dr9QAAAABJ + RU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAkdJREFUOE/FkF1I02EUxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgL + c360qenm5ubUlS5rm66p00ozCvuQCkUi1NSRZmpWFJViZqjk16+/LtShhHcdeHjhcJ7fec4rLLeUBjuX + 1FYyjQ7+tpZfETKjmylVhM284bJ8hE99b6m06Repo+XpPzeFxGYTFJ2DMDPc1WZhbKhiVr8H7Uz0m3FY + s+lofbYk5EiMjqAoAwHSPISKYh2jg6Vu5qmvBUw44yi9qaakMANzfiqmnBSuaeXkqeLdoWUWDaPfLXPm + adFMlxyc0iW1CHCrSMWvL6Y5c22lZlYPHVnU2FXcLcnAYU7DblJiNV7mhiGJQp0coybBBSsxZTD8IXc2 + dm+9gqpSHVO9SuhLd9d7sdeTCJ0yeBNLa3kotut6BLMxjZ/daviopbosm8ZHWtfQwuivw6EphMkGf8Ye + +/GuWIJMGuw6pcig4EeHkr6GZKrsWqZ7FNAe5TK2RorG40w2BjJWd4DhB3sYqNyGMtpHPEfuAhTokhlo + S+C2TUPzCzFJZ5wIOA3NYUy/DGb8+SFGavcyWLWdb2W+NF1ZzQl/7/mPNGbJaa9L4Y4tC7pToEWM++oo + 4/UBjDzxY6hmJ/0OCZ8tW3FqPVFIt3A2+uQ8IDczngqrGue9GJr0wpwatSuoU63kfuoqypPWYY734uqF + zYQt3D5T+vSL6BVnyEyIIPHcMc5HBnIqdD+HD+5i324JOyQ++Hp7sWnjWtav8WCDp4c74D+XIPwBF8be + aT1+/VgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAjJJREFUOE+tkt9Lk1EYx99/oftugi66rakxnIvV4C3XUJYNw4qwH2+kWZou00TF + yjRq/oJshUsnrVaTcFKRP8AUKRFlKlmauaIlDjXFJoLB1/OcvXlcRRfRF56bl/fzOed5ziP9lzx/FgaV + r3UJLd5FPHTPo6kxhLuOadTVfoH9VgDXyydRWjKOwoK3yMsdwflzfqi4JBHY1QnU1qzgb1leWYUptQuH + Up/yUnFJ8j5Z4ILKim/qr7+H4ND8MnZZXkCjUWA96BEC94M5Ligt+ar+Hp2f8MfgAmLMPhRcmsIBS7MQ + OBtmuOCi7YOKiGyEhydC2CZ7kZM9huQkpxDU3w5yQdbZERWL5Fe4zx/EZoMbijIAs9khBDXVn7lAOTWg + on+GO/s/YVN8Iw4feYXExDohuFE5hY52sKcEjh1/A+vRXj5tGhj1TNemkyNwN1KsLyHLdiG4UjaBNh/Y + DgDNrh/s3b+j/NosHyoNjHrOzPCvw/uTW2E0VgjB5cIxeB4B952rbHHCMKVlR5Ul3Ya0M0UROInB+zww + GMqEwJY3ymCguirMTyaIfUaMTsbg+xmMTs5Cyb2KPaYWDut2u6DXFwkBraXjDtavTQKCT+ffxLvAHALT + i7hQbEeswcXgJsQm3IMuPl8IMjOGWN9LHN5q9GDLDhmP23rga+9DR3c/el8PYq/ZCo2+AXEM3q6th1ab + IwSUkyd6+HrShtGS0DvTU9G0aWDUM51KRfDOuKxowb9FktYATrQ4xbl82G8AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAjFJREFUOE/F0l9IU1EcwPGrVhD9fQtKCgx6iCKjonoxDJUoa2AkamQYZVqJxbLU + 1JGlkKmbZEUKTs0ttfxDlj2UJZkjSCuoBYIoiX/m/t07Tc2nb2dzPoyN3qIfnJfL+XzPuXCkfzY9HcV0 + tRTSrs+hu7tb4/0ceNwbnjVoWVz6spPIFgO/LNWMmEu5lhqDtkjN/ZJcKoqy/INuNKc8Zd7VzJxspP6h + mhl7HWU3M/jRm03epViyU3Zj6TmNvTOMzORjeOnCuANuPO9q5EHxKb6YSlFG7zFhzmXIdIbnVSrOJ0Vg + yA+lXyuRnnjEN9BcV7YQUJ5Qkp+MRp1AbkY819PjUKequJwSS1pSFLrMzZ5AwuEI34CxpoTfShOztlpm + RrVMD97A9e0cyqfjyO8P4Hy9FUfHOqwty7E0BhO1P9w3UP+omFmrnpkxncB5TH1PQ+k7gdwTKfA27B3r + sbWsYLIxhHGDxL4dW3wDNZWFTI9UMD2kEfgCrr545A8Hcb7ZjuPFBnHySiabQpgwSow+DhCoKi9AGbjF + lPkirv4E5N5onF3hOF6GYmtdJfASxr34Z12Qf6DyTg6Or1dxfU5ENsUIvBNH50Zsbas9eMIYtIDrgxjW + h/gHdLezsH4U/206hPPtLoE3YW9bg7V5qefaYw0SIwIPCTxYEyBwV3PF80Cc7/bgfBWGrX2twMuwiJMX + 8XBtsAcPVAcIuJ9mecFZ8cJUpMRFczRyr2fT35aX/veRpD/cOafm3Xfv3QAAAABJRU5ErkJggg== + + + + 122, 17 + + + 262, 17 + + + 402, 17 + + + 543, 17 + + + 633, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchExecution.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchExecution.cs new file mode 100644 index 00000000..6f96c6be --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/BatchExecution.cs @@ -0,0 +1,133 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using IpTviewr.Common.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Batch +{ + [Export(typeof(IMaintenanceTool))] + [ExportMetadata("Name", "Batch execution")] + [ExportMetadata("Guid", "{6F08CBEF-417F-49EA-8704-1686B1BBF5A9}")] + [ExportMetadata("HasParameters", true)] + [ExportMetadata("HasFileParameters", true)] + [ExportMetadata("HasUi", true)] + [ExportMetadata("CliName", "Batch")] + public sealed class BatchExecution : IMaintenanceTool + { + #region Implementation of IMaintenanceTool + + public void Execute([NotNull] IReadOnlyList arguments, [NotNull] IToolOutputWriter writer, CancellationToken token) + { + if (arguments.Count == 0) + { + ShowUsage(writer); + return; + } // if + + foreach (var argument in arguments) + { + writer.WriteLine("**********************************************************************"); + writer.WriteLine($"Executing '{argument}'"); + writer.WriteLine("**********************************************************************"); + writer.WriteLine(); + + var batch = XmlSerialization.Deserialize(argument); + if (batch == null) throw new System.IO.InvalidDataException(); + + DoExecute(batch, writer, token); + } // foreach + } // Execute + + [PublicAPI] + public void Execute(Serialization.Batch batch, IToolOutputWriter writer, CancellationToken token) + { + if (batch == null) throw new ArgumentNullException(nameof(batch)); + if (writer == null) throw new ArgumentNullException(nameof(writer)); + + DoExecute(batch, writer, token); + } // Execute + + public void ShowUsage(IToolOutputWriter writer) + { + throw new NotImplementedException(); + } // ShowUsage + + public Form GetUi() => new BatchDialog(); + + string IMaintenanceTool.SelectFileFilter => BatchResources.SelectFileFilter; + + #endregion + + public static Task ExecuteBatchAsync(Serialization.Batch batch, IToolOutputWriter writer, CancellationToken token) + { + if (batch == null) throw new ArgumentNullException(nameof(batch)); + if (writer == null) throw new ArgumentNullException(nameof(writer)); + + var task = new Task(() => DoExecute(batch, writer, token), token, TaskCreationOptions.LongRunning); + task.Start(); + + return task; + } // ExecuteBatchAsync + + private static void DoExecute([NotNull] Serialization.Batch batch, [NotNull] IToolOutputWriter writer, CancellationToken token) + { + if ((batch.Lines == null) || (batch.Lines.Count == 0)) + { + writer.WriteLine("Info: batch is empty. Nothing to execute"); + return; + } // if + + foreach (var line in batch.Lines) + { + var tool = Program.GetTool(line.Guid); + if (tool == null) + { + writer.WriteLine("ERROR: tool {0:B} ({1}) not found", line.Guid, line.Name); + continue; + } // if + + writer.WriteLine("======================================================================"); + writer.WriteLine($"Executing {tool.Metadata.CliName}"); + writer.IncreaseIndent(); + foreach (var argument in line.Arguments) + { + writer.WriteLine(argument); + } // foreach + writer.DecreaseIndent(); + writer.WriteLine(); + + try + { + tool.Value.Execute(line.Arguments, writer, token); + } + catch (Exception e) + { + writer.WriteException(e); + } // catch + + writer.WriteLine($"Execution ended: {writer.ElapsedTime}"); + writer.WriteLine("======================================================================"); + writer.WriteLine(); + } // foreach + } // DoExecute + } // class BatchExecution +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/Serialization/Batch.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/Serialization/Batch.cs new file mode 100644 index 00000000..5447259e --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/Serialization/Batch.cs @@ -0,0 +1,27 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Batch.Serialization +{ + [Serializable] + [XmlRoot("Batch")] + public class Batch + { + [XmlArrayItem("Execute")] + public List Lines { get; set; } + } // class Batch +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/Serialization/BatchExecute.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/Serialization/BatchExecute.cs new file mode 100644 index 00000000..50b04dcb --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/Serialization/BatchExecute.cs @@ -0,0 +1,31 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Batch.Serialization +{ + [Serializable] + public class BatchExecute + { + [XmlAttribute("tool")] + public Guid Guid { get; set; } + + [XmlAttribute("name")] + public string Name { get; set; } + + [XmlArrayItem("Argument")] public List Arguments { get; set; } + } // BatchExecute +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ToolArgumentsDialog.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ToolArgumentsDialog.Designer.cs new file mode 100644 index 00000000..39b28d03 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ToolArgumentsDialog.Designer.cs @@ -0,0 +1,117 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Batch +{ + partial class ToolArgumentsDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.argumentsListEditor = new AlphaCentaury.Tools.SourceCodeMaintenance.Batch.ArgumentsListEditor(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // argumentsListEditor + // + this.argumentsListEditor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.argumentsListEditor.IsReadOnly = false; + this.argumentsListEditor.Items = new string[0]; + this.argumentsListEditor.ListName = "Tool execution arguments"; + this.argumentsListEditor.Location = new System.Drawing.Point(12, 12); + this.argumentsListEditor.Name = "argumentsListEditor"; + this.argumentsListEditor.SelectFileAction = null; + this.argumentsListEditor.SelectFileButtonImage = null; + this.argumentsListEditor.Size = new System.Drawing.Size(360, 280); + this.argumentsListEditor.TabIndex = 3; + this.argumentsListEditor.DataChanged += new System.EventHandler(this.argumentsListEditor_DataChanged); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Ok_16x16; + this.buttonOk.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonOk.Location = new System.Drawing.Point(166, 299); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(100, 25); + this.buttonOk.TabIndex = 1; + this.buttonOk.Text = "&OK"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Cancel_16x16; + this.buttonCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonCancel.Location = new System.Drawing.Point(272, 299); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(100, 25); + this.buttonCancel.TabIndex = 2; + this.buttonCancel.Text = "&Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // ToolArgumentsDialog + // + this.AcceptButton = this.buttonOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.ClientSize = new System.Drawing.Size(384, 336); + this.Controls.Add(this.argumentsListEditor); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(300, 300); + this.Name = "ToolArgumentsDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Tool arguments"; + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Button buttonCancel; + private Batch.ArgumentsListEditor argumentsListEditor; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ToolArgumentsDialog.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ToolArgumentsDialog.cs new file mode 100644 index 00000000..bff32045 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ToolArgumentsDialog.cs @@ -0,0 +1,59 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; +using System.Windows.Forms; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Batch +{ + public partial class ToolArgumentsDialog : Form + { + public ToolArgumentsDialog() + { + InitializeComponent(); + buttonOk.Enabled = false; + } // constructor + + [PublicAPI] + public Image SelectFileButtonImage + { + get => argumentsListEditor.SelectFileButtonImage; + set => argumentsListEditor.SelectFileButtonImage = value; + } // SelectFileButtonImage + + [PublicAPI] + public string[] Arguments + { + get => argumentsListEditor.Items; + set + { + argumentsListEditor.Items = value; + buttonOk.Enabled = (argumentsListEditor.ItemsCount > 0); + } // set + } // Arguments + + [PublicAPI] + public Action SelectFileAction + { + get => argumentsListEditor.SelectFileAction; + set => argumentsListEditor.SelectFileAction = value; + } // SelectFileAction + + private void argumentsListEditor_DataChanged(object sender, EventArgs e) + { + buttonOk.Enabled = (argumentsListEditor.ItemsCount > 0); + } // argumentsListEditor_DataChanged + } // ToolArgumentsDialog +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ToolArgumentsDialog.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ToolArgumentsDialog.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Batch/ToolArgumentsDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/CopyrightNotices/UpdateCopyrightNotices.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/CopyrightNotices/UpdateCopyrightNotices.cs new file mode 100644 index 00000000..aa43a454 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/CopyrightNotices/UpdateCopyrightNotices.cs @@ -0,0 +1,372 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using IpTviewr.Common; +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.CopyrightNotices +{ + [Export(typeof(IMaintenanceTool))] + [ExportMetadata("Name", "Update Copyright notices")] + [ExportMetadata("Guid", "{BA624943-EAAB-49CC-A9CD-FD9CEA6EC3CE}")] + [ExportMetadata("HasParameters", true)] + [ExportMetadata("HasFileParameters", true)] + [ExportMetadata("CliName", "UpdateCopyright")] + + public class UpdateCopyrightNotices : IMaintenanceTool + { + private readonly string[] CopyrightHeaderLines = SolutionVersion.CopyrightHeaderLines; + private string[] ExcludedPaths; + private IList FileHeaderLines; + private IToolOutputWriter Writer; + private string CurrentLine; + + public string SelectFileFilter => ""; + + public void Execute([NotNull] IReadOnlyList args, [NotNull] IToolOutputWriter writer, CancellationToken token) + { + Writer = writer; + + Writer.WriteLine("Update/add copyright notices to project code"); + Writer.WriteLine(SolutionVersion.DefaultCopyright); + Writer.WriteLine(SolutionVersion.AssemblyCompany); + Writer.WriteLine(); + + if (args.Count == 0) + { + Writer.WriteLine("Error: arguments not specified"); + return; + } // if + + var arguments = new CommandLineArguments(); + arguments.Parse(args); + if (!arguments.IsOk) + { + Writer.WriteLine("Error: unable to parse arguments"); + return; + } // Writer.WriteLine + + if (arguments.Switches.ContainsKey("exclude")) + { + ExcludedPaths = arguments.Switches["exclude"].Split(Path.PathSeparator); + } // if + + var searchOptions = arguments.Switches.ContainsKey("r") ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; + + ProcessPaths(arguments, searchOptions); + + ExcludedPaths = null; + FileHeaderLines = null; + Writer = null; + CurrentLine = null; + } // Execute + + public Form GetUi() => throw new NotSupportedException(); + + public void ShowUsage(IToolOutputWriter writer) => throw new NotSupportedException(); + + #region Implementation + + private void ProcessPaths(CommandLineArguments arguments, SearchOption searchOptions) + { + foreach (var path in arguments.Arguments) + { + if (!Directory.Exists(path)) + { + Writer.WriteLine($"Path not found: {path}"); + continue; + } // if + + if (IsPathExcluded(path)) continue; + + ProcessPath(searchOptions, path); + } // foreach + } // ProcessPaths + + private void ProcessPath(SearchOption searchOptions, string path) + { + var lastPath = (string)null; + Writer.IncreaseIndent(); + foreach (var filename in Directory.EnumerateFiles(path, "*", searchOptions)) + { + // is path excluded? + var currentPath = Path.GetDirectoryName(filename); + if (IsPathExcluded(currentPath)) continue; + if (filename == null) continue; + + var extension = Path.GetExtension(filename).ToLowerInvariant(); + + var (locateFunc, writeAction) = GetFromExtension(extension); + if (locateFunc == null) continue; + + // new path? + if (currentPath != lastPath) + { + Writer.DecreaseIndent(); + Writer.WriteLine(currentPath); + Writer.IncreaseIndent(); + lastPath = currentPath; + } // if + + // Process file + ProcessFile(filename, locateFunc, writeAction); + } // foreach file + Writer.DecreaseIndent(); + } // ProcessPath + + private (Func LocateFunc, Action WriteAction) GetFromExtension(string extension) + { + Func locateFunc; + Action writeAction; + + switch (extension) + { + case ".cs": + locateFunc = LocateCsharpCopyrightHeader; + writeAction = WriteCsharpCopyrightHeader; + break; + + case ".xml": + case ".wxs": + case ".wxl": + case ".wxi": + locateFunc = LocateXmlCopyrightHeader; + writeAction = WriteXmlCopyrightHeader; + break; + + default: + return (null, null); + } // switch + + return (locateFunc, writeAction); + } // GetFromExtension + + private bool IsPathExcluded(string path) + { + if (ExcludedPaths == null) return false; + + if (!ExcludedPaths.Any(path.StartsWith)) return false; + + Writer.WriteLine($"(Excluded) {path}"); + return true; + } // IsPathExcluded + + private void ProcessFile([NotNull] string filename, [NotNull] Func locateFunc, [NotNull] Action writeAction) + { + try + { + var result = UpdateHeaders(filename, locateFunc, writeAction); + if (result) + { + Writer.WriteLine($"{Path.GetFileName(filename)}: Updated headers"); + } // if + } + catch (Exception ex) + { + Writer.WriteException(ex, filename); + } // tryHeader + } // ProcessFile + + private bool UpdateHeaders([NotNull] string filename, [NotNull] Func locateFunc, [NotNull] Action writeAction) + { + var tempFilename = (string)null; + + using (var reader = new StreamReader(filename, XmlSerialization.Utf8NoBomEncoding.Value, true, short.MaxValue)) + { + FileHeaderLines = null; + + if (!locateFunc(reader)) + { + tempFilename = Path.GetTempFileName(); + using var writer = new StreamWriter(tempFilename, false, XmlSerialization.Utf8NoBomEncoding.Value, short.MaxValue); + if (FileHeaderLines != null) + { + foreach (var line in FileHeaderLines) + { + writer.WriteLine(line); + } // foreach + } // if + + writeAction(writer); + CopyContents(reader, writer); + } // if + } // using reader + + if (tempFilename == null) return false; + + CopyBack(tempFilename, filename); + + return true; + } // UpdateHeaders + + private void CopyContents(TextReader reader, TextWriter writer) + { + if (CurrentLine != null) writer.WriteLine(CurrentLine); + + while ((CurrentLine = reader.ReadLine()) != null) + { + writer.WriteLine(CurrentLine); + } // while + } // CopyContents + + private static void CopyBack(string tempFilename, string filename) + { + var buffer = new byte[4096 * 16]; + + using (var writer = new FileStream(filename, FileMode.Truncate, FileAccess.Write)) + { + using var reader = new FileStream(tempFilename, FileMode.Open, FileAccess.Read); + int readBytes; + + while ((readBytes = reader.Read(buffer, 0, buffer.Length)) != 0) + { + writer.Write(buffer, 0, readBytes); + } // while + } // using + + File.Delete(tempFilename); + } // CopyBack + + private void AddFileHeaderLine(string line) + { + if (FileHeaderLines == null) FileHeaderLines = new List(); + + FileHeaderLines.Add(line); + } // AddFileHeaderLine + + #endregion + + #region C# files + + private bool LocateCsharpCopyrightHeader(TextReader reader) + { + var index = 0; + while ((CurrentLine = reader.ReadLine()) != null) + { + if (index >= CopyrightHeaderLines.Length) return true; + + if (!CurrentLine.StartsWith("// ")) return false; + + var line = CurrentLine.Substring(3).TrimEnd(); + if (line != CopyrightHeaderLines[index++]) break; + } // while + + SkipWrongCsharpCopyrightHeader(reader); + + return false; + } // LocateCsharpCopyrightHeader + + private void SkipWrongCsharpCopyrightHeader(TextReader reader) + { + while ((CurrentLine = reader.ReadLine()) != null) + { + var line = CurrentLine.Trim(); + if (line.Length == 0) continue; + if (line.StartsWith("//")) continue; + + break; + } // while + } // SkipWrongCsharpCopyrightHeader + + private void WriteCsharpCopyrightHeader(TextWriter writer) + { + foreach (var line in CopyrightHeaderLines) + { + writer.Write("// "); + writer.WriteLine(line); + } // foreach line + writer.WriteLine(); + } // WriteCsharpCopyrightHeader + + #endregion + + #region XML files + + private bool LocateXmlCopyrightHeader(TextReader reader) + { + var index = 0; + var isHeader = false; + + while ((CurrentLine = reader.ReadLine()) != null) + { + if (index >= CopyrightHeaderLines.Length) return true; + + var line = CurrentLine.TrimEnd(); + if (!isHeader) + { + if (line.Length == 0) continue; + + if (line.StartsWith("")) // one line comment + { + AddFileHeaderLine(CurrentLine); + return false; + } // if + + isHeader = true; + } + else + { + if (line == CopyrightHeaderLines[index++]) continue; + if (line.EndsWith("-->")) return false; + break; + } // if-else + } // while + + SkipWrongXmlCopyrightHeader(reader); + + return false; + } // LocateXmlCopyrightHeader + + private void SkipWrongXmlCopyrightHeader(TextReader reader) + { + while ((CurrentLine = reader.ReadLine()) != null) + { + var line = CurrentLine.Trim(); + if (line.Length == 0) continue; + if (line.StartsWith("<")) break; + if (!line.EndsWith("-->")) continue; + CurrentLine = null; + break; + } // while + } // SkipWrongXmlCopyrightHeader + + private void WriteXmlCopyrightHeader(TextWriter writer) + { + writer.WriteLine(""); + } // WriteXmlCopyrightHeader + + #endregion + } // UpdateCopyrightNotices +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Execute.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Execute.cs new file mode 100644 index 00000000..d17e7d8c --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Execute.cs @@ -0,0 +1,38 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Threading; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance +{ + public class Execute + { + public static void ExecuteTool(IMaintenanceTool tool, string[] arguments, IToolOutputWriter writer, CancellationToken token) + { + if (tool == null) throw new ArgumentNullException(nameof(tool)); + if (arguments == null) throw new ArgumentNullException(nameof(arguments)); + if (writer == null) throw new ArgumentNullException(nameof(writer)); + + try + { + tool.Execute(arguments, writer, token); + } + catch (Exception e) + { + writer.WriteException(e); + } // catch + } // Execute + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/AsyncHelper.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/AsyncHelper.cs new file mode 100644 index 00000000..70ec4cb8 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/AsyncHelper.cs @@ -0,0 +1,140 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Helpers +{ + public sealed class AsyncHelper: IDisposable + { + private readonly Form _form; + private readonly ToolStrip _toolStrip; + private readonly List _toolStripItemsEnabled; + private readonly ToolStripButton _cancelButton; + private CancellationTokenSource _cancellationTokenSource; + + public AsyncHelper(Form form, ToolStrip toolStrip, ToolStripButton cancelButton, bool autoCancel = true) + { + _form = form ?? throw new ArgumentNullException(nameof(form)); + _toolStrip = toolStrip ?? throw new ArgumentNullException(nameof(form)); + _cancelButton = cancelButton ?? throw new ArgumentNullException(nameof(cancelButton)); + + _toolStripItemsEnabled = new List(_toolStrip.Items.Count); + _cancelButton.Enabled = false; + if (autoCancel) _cancelButton.Click += CancelButtonOnClick; + } // constructor + + public bool IsToolStripEnabled + { + get => _toolStripItemsEnabled.Count == 0; + set + { + if (value && IsToolStripEnabled) return; + if (value) + { + // restore controls enabled state + for (var index = 0; index < _toolStripItemsEnabled.Count; index++) + { + _toolStrip.Items[index].Enabled = _toolStripItemsEnabled[index]; + } // for index + _toolStripItemsEnabled.Clear(); + } + else + { + // saved controls enabled state + foreach (var item in _toolStrip.Items.Cast()) + { + _toolStripItemsEnabled.Add(item.Enabled); + item.Enabled = false; + } // foreach + } // if-else + + _cancelButton.Enabled = !value; + } // set + } // IsToolStripEnabled + + public void BeginAsyncOperation() + { + IsToolStripEnabled = false; + _form.UseWaitCursor = true; + _toolStrip.UseWaitCursor = false; + _toolStrip.Cursor = Cursors.Arrow; + _cancellationTokenSource = new CancellationTokenSource(); + } // BeginAsyncOperation + + public CancellationToken GetCancellationToken() + { + if (_cancellationTokenSource == null) throw new NotSupportedException(); + return _cancellationTokenSource.Token; + } // GetCancellationToken + + public void CancelAsyncOperation() + { + _cancellationTokenSource?.Cancel(); + } // CancelAsyncOperation + + public void EndAsyncOperation() + { + _cancellationTokenSource.Dispose(); + _cancellationTokenSource = null; + _form.UseWaitCursor = false; + _toolStrip.Cursor = Cursors.Default; + Cursor.Current = Cursors.Default; + IsToolStripEnabled = true; + } // EndAsyncOperation + + public async void ExecuteAsync(TextBoxOutputWriter writer, Func asyncAction) + { + try + { + writer.Clear(); + writer.Start(); + BeginAsyncOperation(); + + await asyncAction(GetCancellationToken()); + } + catch (OperationCanceledException) + { + // ignore + } // catch + catch (Exception ex) + { + writer.WriteException(ex); + } // try-catch + + EndAsyncOperation(); + writer.Stop(); + } // ExecuteAsync + + private void CancelButtonOnClick(object sender, EventArgs e) + { + _cancelButton.Enabled = false; + CancelAsyncOperation(); + } // CancelButtonOnClick + + #region Implementation of IDisposable + + public void Dispose() + { + _cancellationTokenSource?.Dispose(); + _cancelButton.Click -= CancelButtonOnClick; + } // Dispose + + #endregion + } // class AsyncHelper +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/BaseOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/BaseOutputWriter.cs new file mode 100644 index 00000000..0e0d0e0d --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/BaseOutputWriter.cs @@ -0,0 +1,165 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Text; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Helpers +{ + public abstract class BaseOutputWriter + { + private readonly string[] _indents; + private bool _started; + + protected BaseOutputWriter(int indentSize) + { + if (indentSize < 1) throw new ArgumentOutOfRangeException(nameof(indentSize)); + + _indents = new string[9]; + IndentSize = indentSize; + + for (var indent = 0; indent < _indents.Length; indent++) + { + _indents[indent] = new string(' ', indent * indentSize); + } // for indent + } // constructor + + public TimeSpan ElapsedTime => (DateTime.UtcNow - UtcStartTime); + + public DateTime UtcStartTime { get; private set; } + + public int IndentLevel { get; private set; } + + public int IndentSize { get; } + + public bool Started + { + get => _started; + protected set + { + _started = value; + if (_started) UtcStartTime = DateTime.UtcNow; + } + } // Started + + public abstract void WriteLine(string text); + + public void WriteException(Exception ex, string message = null) + { + StringBuilder buffer = null; + var level = IndentLevel; + + while (ex != null) + { + if (buffer == null) buffer = new StringBuilder(); + if (ex is AggregateException aggregateException) + { + ex = aggregateException.Flatten(); + } // if + + buffer.Append(GetIndent()); + buffer.AppendFormat(">>>>> {0} <<<<<", ex.GetType().Name); + buffer.AppendLine(); + if (message != null) + { + buffer.Append(GetIndent()); + buffer.AppendLine(message); + message = null; + } // if + + IncreaseIndent(); + + buffer.Append(GetIndent()); + buffer.AppendLine(ex.Message); + + var trace = ex.StackTrace.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); + foreach (var traceLine in trace) + { + buffer.Append(GetIndent()); + buffer.AppendLine(traceLine); + } // foreach + ex = ex.InnerException; + } // while + + if (buffer != null) + { + IndentLevel = 0; + WriteLine(buffer.ToString()); + } // if + + IndentLevel = level; + } // WriteException + + public bool WriteTimestamps { get; set; } + public bool AbsoluteTimestamps { get; set; } + + public int IncreaseIndent() + { + if (!Started) return 0; + + return (++IndentLevel); + } // IncreaseIndent + + public int DecreaseIndent() + { + if (!Started) return 0; + + IndentLevel--; + if (IndentLevel < 0) IndentLevel = 0; + + return IndentLevel; + } // DecreaseIndent + + protected void Reset() + { + IndentLevel = 0; + } // Reset + + protected string GetTimestamp() + { + if (!WriteTimestamps) return string.Empty; + + if (!AbsoluteTimestamps) return $"[{ElapsedTime:g}]{(IndentLevel != 0 ? "" : " ")}"; + + var now = DateTime.Now; + return $"[{now.ToShortDateString()} {now:HH:mm:ss.ff zz}]{(IndentLevel != 0 ? "" : " ")}"; + } // GetTimestamp + + protected string GetIndent() + { + return (IndentLevel < _indents.Length) ? _indents[IndentLevel] : new string(' ', IndentLevel * IndentSize); + } // GetIndent + + protected void AppendText(StringBuilder buffer, string text) + { + if (!WriteTimestamps) + { + buffer.Append(GetIndent()); + if (text != null) buffer.AppendLine(text); + return; + } // if + + if (AbsoluteTimestamps) + { + var now = DateTime.Now; + buffer.AppendFormat("[{0} {1:HH:mm:ss.ff zz}]{2}{3}", now.ToShortDateString(), now, (IndentLevel != 0) ? "" : " ", GetIndent()); + } + else + { + buffer.AppendFormat("[{0:g}]{1}{2}", ElapsedTime, (IndentLevel != 0) ? "" : " ", GetIndent()); + } // if + + if (text != null) buffer.AppendLine(text); + } // AppendText + } // class BaseOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/ConsoleOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/ConsoleOutputWriter.cs new file mode 100644 index 00000000..043ec2fb --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/ConsoleOutputWriter.cs @@ -0,0 +1,45 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Helpers +{ + public class ConsoleOutputWriter : BaseOutputWriter, Interfaces.IToolOutputWriter + { + public ConsoleOutputWriter(int indentSize) : base(indentSize) + { + } // constructor + + public new void Reset() + { + base.Reset(); + } // Reset + + public void WriteLine() + { + Console.WriteLine(); + } // WriteLine + + public override void WriteLine(string text) + { + Console.WriteLine(@"{0}{1}{2}", GetTimestamp(), GetIndent(), text); + } // WriteLine + + public void WriteLine(string format, params object[] objects) + { + Console.Write(@"{0}{1}", GetTimestamp(), GetIndent()); + Console.WriteLine(format, objects); + } // WriteLine + } // class ConsoleOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/TextBoxOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/TextBoxOutputWriter.cs new file mode 100644 index 00000000..ac8ae18d --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Helpers/TextBoxOutputWriter.cs @@ -0,0 +1,150 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Text; +using System.Windows.Forms; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Helpers +{ + public sealed class TextBoxOutputWriter : BaseOutputWriter, Interfaces.IToolOutputWriter + { + private readonly TextBox _textBox; + private readonly Timer _timer; + private readonly StringBuilder _buffer; + + public TextBoxOutputWriter(TextBox textBox, Timer timer = null, int indentSize = 4): base(indentSize) + { + _textBox = textBox ?? throw new ArgumentNullException(nameof(textBox)); + _timer = timer; + _buffer = new StringBuilder(); + } // constructor + + public void Clear() + { + _textBox.Text = null; + Reset(); + } // Clear + + public void Start(bool buffered = true) + { + Buffered = buffered; + if (_timer != null) + { + _timer.Tick += TimerOnTick; + _timer.Start(); + } // if + lock (_buffer) + { + _buffer.Clear(); + } // lock + + Started = true; + } // Start + + public void Stop() + { + EmptyBuffer(); + Started = false; + + if (_timer == null) return; + + _timer.Tick -= TimerOnTick; + _timer.Stop(); + } // Stop + + public bool Buffered { get; private set; } + + private void TimerOnTick(object sender, EventArgs e) + { + EmptyBuffer(); + } // TimerOnTick + + private void EmptyBuffer() + { + lock (_buffer) + { + _textBox.Invoke(new Action(() => + { + _textBox.Text += _buffer.ToString(); + _textBox.SelectionStart = _textBox.Text.Length; + _textBox.SelectionLength = 0; + _textBox.ScrollToCaret(); + })); + + _buffer.Clear(); + } // lock + } // EmptyBuffer + + + #region Implementation of IToolOutputWriter + + public void WriteLine() + { + if (!Started) return; + + if (!Buffered) + { + _textBox.BeginInvoke(new Action(() => + _textBox.Text += Environment.NewLine)); + } + else + { + lock (_buffer) + { + _buffer.AppendLine(); + } // lock + } // if-else + } // WriteLine + + public override void WriteLine(string text) + { + if (!Started) return; + + if (!Buffered) + { + _textBox.BeginInvoke(new Action(() => + _textBox.Text = _textBox.Text + Environment.NewLine + GetTimestamp() + GetIndent() + text)); + } + else + { + lock (_buffer) + { + AppendText(_buffer, text); + } // lock + } // if-else + } // WriteLine + + public void WriteLine(string format, params object[] objects) + { + if (!Started) return; + + if (!Buffered) + { + _textBox.BeginInvoke(new Action(() => + _textBox.Text = $@"{_textBox.Text}{Environment.NewLine}{GetTimestamp()}{GetIndent()}{string.Format(format, objects)}")); + } + else + { + lock (_buffer) + { + AppendText(_buffer, null); + _buffer.AppendFormat(format, objects); + _buffer.AppendLine(); + } // lock + } // if-else + } // WriteLine + + #endregion + } // class TextBoxOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Interfaces/IMaintenanceTool.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Interfaces/IMaintenanceTool.cs new file mode 100644 index 00000000..6679a989 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Interfaces/IMaintenanceTool.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; +using System.Threading; +using System.Windows.Forms; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces +{ + [PublicAPI] + public interface IMaintenanceTool + { + void Execute([NotNull] IReadOnlyList arguments, [NotNull] IToolOutputWriter writer, CancellationToken token); + void ShowUsage([NotNull] IToolOutputWriter writer); + Form GetUi(); + string SelectFileFilter { get; } + } // interface IMaintenanceTool +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Interfaces/IMaintenanceToolMetadata.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Interfaces/IMaintenanceToolMetadata.cs new file mode 100644 index 00000000..dc5d49b3 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Interfaces/IMaintenanceToolMetadata.cs @@ -0,0 +1,41 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.ComponentModel; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces +{ + [PublicAPI] + public interface IMaintenanceToolMetadata + { + string Guid { get; } + + string Name { get; } + + [DefaultValue(null)] + string CliName { get; } + + [DefaultValue(false)] + bool HasParameters { get; } + + [DefaultValue(false)] + bool HasFileParameters { get; } + + [DefaultValue(false)] + bool HasUi { get; } + + [DefaultValue(false)] + bool HasUsage { get; } + } // interface IMaintenanceToolMetadata +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Interfaces/IToolOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Interfaces/IToolOutputWriter.cs new file mode 100644 index 00000000..25f5dc04 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Interfaces/IToolOutputWriter.cs @@ -0,0 +1,34 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces +{ + [PublicAPI] + public interface IToolOutputWriter + { + void WriteLine(); + void WriteLine(string text); + void WriteLine(string format, params object[] objects); + void WriteException(Exception ex, string message = null); + int IncreaseIndent(); + int DecreaseIndent(); + bool WriteTimestamps { get; set; } + bool AbsoluteTimestamps { get; set; } + TimeSpan ElapsedTime { get; } + DateTime UtcStartTime { get; } + int IndentLevel { get; } + } // IToolOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/LICENSE.ES.MD b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/LICENSE.ES.MD new file mode 100644 index 00000000..972465ab --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/LICENSE.ES.MD @@ -0,0 +1,235 @@ +# Programa 'SourceCodeMaintenance' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este PROGRAMA (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios, incluyendo, en su caso, al Grupo Teléfonica. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + * [BSD 3-Clause “Revised” License] + * [BSD 2-Clause “Simplified” License] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. AlphaCentaury.Licensing.Data +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data.Ui +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. SourceCodeMaintenance +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. HtmlAgilityPack +_Paquete 'nuget' por ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell_ + +**Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved.** + +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + + +#### 2. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### BSD 3-Clause “Revised” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 3-Clause “Revised” License'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. HtmlRenderer.Core +_Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + + +#### 2. HtmlRenderer.WinForms +_Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +### BSD 2-Clause “Simplified” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 2-Clause “Simplified” License'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Markdig +_Paquete 'nuget' por Alexandre Mutel_ + +**Copyright (c) 2018-2019, Alexandre Mutel** + +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/LICENSE.MD b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/LICENSE.MD new file mode 100644 index 00000000..58e74abf --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/LICENSE.MD @@ -0,0 +1,207 @@ +# Program 'SourceCodeMaintenance' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + * [BSD 3-Clause “Revised” License] + * [BSD 2-Clause “Simplified” License] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. AlphaCentaury.Licensing.Data +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data.Ui +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. SourceCodeMaintenance +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. HtmlAgilityPack +_'nuget' package by ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell_ + +**Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved.** + +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + + +#### 2. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +### BSD 3-Clause “Revised” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 3-Clause “Revised” License'** applies to the following **third-party components:** + +#### 1. HtmlRenderer.Core +_'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + + +#### 2. HtmlRenderer.WinForms +_'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +### BSD 2-Clause “Simplified” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 2-Clause “Simplified” License'** applies to the following **third-party components:** + +#### 1. Markdig +_'nuget' package by Alexandre Mutel_ + +**Copyright (c) 2018-2019, Alexandre Mutel** + +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/Checker.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/Checker.cs new file mode 100644 index 00000000..d4542186 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/Checker.cs @@ -0,0 +1,613 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using AlphaCentaury.Licensing.Data; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + internal sealed class Checker : ProjectAction + { + private readonly LicensingDefaultsPool Defaults; + private readonly IReadOnlyDictionary LicensesPool; + private readonly LicensingThirdPartyPool ThirdPartyPool; + private readonly CheckerOptions _options; + private readonly HashSet _usedLicenses; + private LicensingData _data; + private VsProject _project; + private LicensingDefaults _projectDefaults; + private LicensedItem _projectLicensedDefaults; + private bool _changed; + + public Checker(VsSolution solution, IToolOutputWriter writer, string defaultsPath, CheckerOptions options, CancellationToken token) : base(solution, writer, token) + { + _options = options; + _usedLicenses = new HashSet(StringComparer.InvariantCultureIgnoreCase); + writer.WriteLine("Reading licensing defaults..."); + Defaults = LicensingMaintenance.Helper.ReadLicensingDefaultsPool(defaultsPath, writer); + writer.WriteLine("Reading licenses pool..."); + LicensesPool = LicensingMaintenance.Helper.ReadLicensesPool(defaultsPath); + writer.WriteLine("Reading third-party pool..."); + ThirdPartyPool = LicensingMaintenance.Helper.ReadThirdPartyPool(defaultsPath); + } // constructor + + public override void Init() + { + base.Init(); + _usedLicenses.Clear(); + CheckDefaults(); + CheckLicensesPool(); + + void CheckDefaults() + { + if (Defaults.Pool.Count == 0) + { + Writer.WriteLine("WARNING: no licensing defaults have been specified"); + } // if + + foreach (var defaults in Defaults.Pool.Values) + { + if ((defaults.ForLibraries == null) || (defaults.ForPrograms == null)) + { + Writer.WriteLine("WARNING: missing data for defaults '{0}'", defaults.AppliesTo ?? ""); + } // if + } // foreach + } // local CheckDefaults + + void CheckLicensesPool() + { + if (LicensesPool.Count == 0) + { + Writer.WriteLine("WARNING: the licenses pool is empty -or- pool file not found"); + } // if + + foreach (var license in LicensesPool.Values) + { + if (string.IsNullOrWhiteSpace(license.Id) || string.IsNullOrWhiteSpace(license.Name) || string.IsNullOrWhiteSpace(license.Text)) + { + Writer.WriteLine("WARNING: missing data for license '{0}' in licenses pool", license.Id ?? ""); + } // if + } // foreach + } // local CheckLicensesPool + } // Init + + public override void Do(VsProject project, bool standalone) + { + Token.ThrowIfCancellationRequested(); + Writer.WriteLine("Project '{0}'", project.Name); + Writer.IncreaseIndent(); + try + { + Check(project, standalone); + } + finally + { + Writer.DecreaseIndent(); + } // try-finally + } // Do + + private void Check(VsProject project, bool standalone) + { + _changed = false; + var filename = LicensingMaintenance.Helper.GetLicensingFilename(project, standalone); + if (!File.Exists(filename)) + { + Writer.WriteLine("ERROR: file '{0}' not found", Path.GetFileName(filename)); + return; + } // if + + _data = XmlSerialization.Deserialize(filename); + _project = project; + + // check licensed + if (!CheckProjectLicensedItem()) return; // unable to continue + OverrideLicensed(); + CheckLicensed(); + + // check third-party + CheckNuGetPackages(); + CheckThirdParty(_data.Dependencies?.ThirdParty, ""); + + // check licenses + _data.Dependencies?.Libraries?.ForEach(library => SetLicenseUsed(library.LicenseId)); + var ids = CheckDuplicatedLicenses(); + CheckLicensesReferences(ids); + CheckLicensesText(); + CheckUnusedLicenses(); + + if (!_changed) return; + + Writer.WriteLine("Info: saving changes to '{0}'", filename); + XmlSerialization.Serialize(filename, _data); + } // Check + + #region Licensed item + + private bool CheckProjectLicensedItem() + { + var licensed = _data.Licensed; + _projectDefaults = Creator.GetLicensingDefaults(Defaults, _project, false); + if (_projectDefaults == null) + { + Writer.WriteLine("ERROR: licensing defaults key '{0}' not found", _project.LicensingDefaultsKey ?? ""); + return false; + } // if + + switch (_data.Licensed) + { + case LicensedSolution _: + _projectLicensedDefaults = _projectDefaults.ForLibraries; + return true; + + case LicensedLibrary library: + if (!_project.IsLibrary) + { + Writer.WriteLine("WARNING: licensed item is marked as '{0}', but the project is not a library", licensed.Type); + _data.Licensed = library.MorphToProgram(_project.IsGui); + _changed = true; + _projectLicensedDefaults = _projectDefaults.ForPrograms; + } + else + { + _projectLicensedDefaults = _projectDefaults.ForLibraries; + } // if-else + + return true; + + case LicensedInstaller _: + _projectLicensedDefaults = _projectDefaults.ForLibraries; + + return true; + + case LicensedProgram program: + if (_project.IsLibrary) + { + Writer.WriteLine("WARNING: licensed item is marked as '{0}', but the project is a library", licensed.Type); + _data.Licensed = program.MorphToLibrary(); + _changed = true; + _projectLicensedDefaults = _projectDefaults.ForLibraries; + } + else + { + _projectLicensedDefaults = _projectDefaults.ForPrograms; + if (program.IsGuiApp != _project.IsGui) + { + Writer.WriteLine($"Info: replacing wrong IsGuiApp '{program.IsGuiApp}' with '{_project.IsGui}'"); + program.IsGuiApp = _project.IsGui; + _changed = true; + } // if + } // if-else + + return true; + + default: + Writer.WriteLine("ERROR: licensed item type '{0}' is not supported", licensed.Type); + return false; + } // switch + } // CheckProjectLicensedItem + + private void CheckLicensed() + { + var licensed = _data.Licensed; + + if (licensed.Assembly != _project.AssemblyName) + { + Writer.WriteLine("Info: replacing wrong Assembly '{0}' with '{1}'", licensed.Assembly ?? "", _project.AssemblyName); + licensed.Assembly = _project.AssemblyName; + _changed = true; + } // if + + if (licensed.Name != _project.Namespace) + { + Writer.WriteLine("Info: replacing wrong Namespace '{0}' with '{1}'", licensed.Name ?? "", _project.Namespace); + licensed.Name = _project.Namespace; + _changed = true; + } // if + + var oldLicenseId = licensed.LicenseId; + licensed.Product = Validate(licensed.Product, _projectLicensedDefaults.Product, nameof(licensed.Product)); + licensed.Authors = Validate(licensed.Authors, _projectLicensedDefaults.Authors, nameof(licensed.Authors)); + licensed.Copyright = Validate(licensed.Copyright, _projectLicensedDefaults.Copyright, nameof(licensed.Copyright)); + licensed.Remarks = Validate(licensed.Remarks, _projectLicensedDefaults.Remarks, nameof(licensed.Remarks), false); + licensed.LicenseId = Validate(licensed.LicenseId, _projectLicensedDefaults.LicenseId, nameof(licensed.LicenseId)); + licensed.TermsConditions = ValidateTerms(licensed.TermsConditions, _projectLicensedDefaults.TermsConditions, nameof(licensed.TermsConditions), licensed); + + if (string.IsNullOrWhiteSpace(licensed.Authors) && string.IsNullOrWhiteSpace(licensed.Copyright)) + { + Writer.WriteLine("ERROR: {0} '{1}' has no authors or no copyright", licensed.Type, licensed.Name ?? ""); + } // if + + if (oldLicenseId != licensed.LicenseId) + { + // add missing license + var newId = licensed.LicenseId; + if (_data.Licenses.All(license => license.Id != newId)) + { + var license = _projectDefaults.Licenses.FirstOrDefault(lic => lic.Id == newId); + if (license == null) + { + Writer.WriteLine("ERROR: license id '{0}' not found in defaults for '{1}", newId, _project.LicensingDefaultsKey ?? ""); + } + else + { + _data.Licenses.Add(license); + _changed = true; + } // if-else + } // if + } // if + + SetLicenseUsed(licensed.LicenseId); + + T Validate(T value, T defaultValue, string name, bool warning = true) where T : class, IEquatable + { + if (value != null) return value; + + if (defaultValue == null) + { + if (warning) Writer.WriteLine("WARNING: <{0}><{1}> is ", licensed.Type, name); + return null; + } // if + + Writer.WriteLine("Info: <{0}><{1}> is . Replacing with '{2}'", licensed.Type, name, defaultValue); + _changed = true; + return defaultValue; + } // local Validate + } // CheckLicensed + + private List ValidateTerms(List terms, List defaultTerms, string nameof, LicensedItem licensed) + { + if ((terms == null) || (terms.Count == 0)) + { + Writer.WriteLine("WARNING: <{0}><{1}> is or empty", licensed.Type, nameof); + if ((defaultTerms != null) && (defaultTerms.Count > 0)) return defaultTerms; + Writer.WriteLine("WARNING: default {0} is also or empty", nameof); + return null; + } // if + + terms.ForEach(term => + { + if (!string.IsNullOrWhiteSpace(term.Text)) return; + + Writer.WriteLine("WARNING: <{0}><{1} lang='{2}'> is or empty", licensed.Type, nameof, term.Language ?? ""); + var replacement = defaultTerms.FirstOrDefault(def => string.Equals(def.Language, term.Language, StringComparison.InvariantCultureIgnoreCase)); + if (replacement is null) + { + Writer.WriteLine("WARNING: can't find a replacement for <{0}><{1} lang='{2}'> in defaults", licensed.Type, nameof, term.Language ?? ""); + } + else + { + replacement.CopyTo(term); + _changed = true; + } // if-else + }); + + // add missing languages + defaultTerms?.ForEach(defaultTerm => + { + if (!(terms.FirstOrDefault(term => string.Equals(term.Language, defaultTerm.Language, StringComparison.InvariantCultureIgnoreCase)) is null)) return; + + terms.Add(defaultTerm); + _changed = true; + }); + + return terms; + } // ValidateTerms + + private void OverrideLicensed() + { + var licensed = _data.Licensed; + + licensed.Product = Override(_options.OverrideProduct, licensed.Product, _projectLicensedDefaults.Product, nameof(licensed.Product)); + licensed.Authors = Override(_options.OverrideAuthors, licensed.Authors, _projectLicensedDefaults.Authors, nameof(licensed.Authors)); + licensed.Copyright = Override(_options.OverrideCopyright, licensed.Copyright, _projectLicensedDefaults.Copyright, nameof(licensed.Copyright)); + licensed.LicenseId = Override(_options.OverrideLicense, licensed.LicenseId, _projectLicensedDefaults.LicenseId, nameof(licensed.LicenseId)); + licensed.TermsConditions = OverrideList(_options.OverrideTerms, licensed.TermsConditions, _projectLicensedDefaults.TermsConditions, nameof(licensed.TermsConditions)); + licensed.Remarks = OverrideText(_options.OverrideRemarks, licensed.Remarks, _projectLicensedDefaults.Remarks, nameof(licensed.Remarks)); + licensed.Notes = OverrideText(_options.OverrideNotes, licensed.Notes, _projectLicensedDefaults.Notes, nameof(licensed.Notes)); + + T Override(bool @override, T value, T newValue, string item) where T : IEquatable + { + if (!@override) return value; + if (value.Equals(newValue)) return value; + + Writer.WriteLine("Info: overriding <{0}><{1}>", licensed.Type, item); + _changed = true; + return newValue; + } // local Override + + List OverrideList(bool @override, List value, List newValue, string item) + { + if (!@override) return value; + if (ReferenceEquals(value, newValue)) return value; // both null? + + Writer.WriteLine("Info: overriding <{0}><{1}>", licensed.Type, item); + _changed = true; + return newValue; + } // local OverrideList + + FormattedMultilineText OverrideText(bool @override, FormattedMultilineText value, FormattedMultilineText newValue, string item) + { + if (!@override) return value; + if (ReferenceEquals(value, newValue)) return value; // both null? + + Writer.WriteLine("Info: overriding <{0}><{1}>", licensed.Type, item); + _changed = true; + return newValue; + } // OverrideText + } // OverrideLicensed + + #endregion + + #region Third-party + + private void CheckThirdParty(IList thirdParty, string listName) + { + if ((thirdParty == null) || (thirdParty.Count == 0)) return; + + for (var index = 0; index < thirdParty.Count; index++) + { + var component = thirdParty[index]; + + // check if component is in third-party components pool + var pool = ThirdPartyPool[component]; + if (pool != null) + { + var dependencyType = component.DependencyType; + component.DependencyType = pool.DependencyType; + if (!component.Equals(pool)) + { + Writer.WriteLine("Info: replacing third-party {0}: '{1}' from data from pool", component.Type, component.Name); + component = pool.Clone(); + _changed = true; + thirdParty[index] = component; + } // if + + component.DependencyType = dependencyType; + } // if + + if (string.IsNullOrWhiteSpace(component.Name)) + { + Writer.WriteLine("ERROR: a component in {0} has no name", listName); + } // if + + if (!Enum.IsDefined(typeof(ThirdPartyDependencyType), component.Type)) + { + Writer.WriteLine("ERROR: invalid type {0} for {1} '{2}'", component.Type, listName, component.Name ?? ""); + } // if + + if (string.IsNullOrWhiteSpace(component.Description)) + { + Writer.WriteLine("Info: component {0} '{1}' has no description", listName, component.Name ?? ""); + } // if + + if (string.IsNullOrWhiteSpace(component.LicenseId)) + { + Writer.WriteLine("ERROR: component {0} '{1}' has no license", listName, component.Name ?? ""); + } // if + + if (string.IsNullOrWhiteSpace(component.Authors) && string.IsNullOrWhiteSpace(component.Copyright)) + { + Writer.WriteLine("ERROR: component {0} '{1}' has no authors or no copyright", listName, component.Name ?? ""); + } // if + + SetLicenseUsed(component.LicenseId); + } // for index + } // CheckThirdParty + + private void CheckNuGetPackages() + { + if (string.IsNullOrEmpty(_project.Filename)) return; + + var configFile = Path.Combine(Path.GetDirectoryName(_project.Filename) ?? Path.GetPathRoot(_project.Filename), "packages.config"); + if (!File.Exists(configFile)) return; + + var config = XmlSerialization.Deserialize(configFile); + if (!config.PackagesSpecified) return; + + var thirdParty = _data.Dependencies?.ThirdParty; + thirdParty ??= new List(); + + var q = from component in thirdParty + where component.Type == ThirdPartyDependencyType.NugetPackage + where component.DependencyType == LicensedDependencyType.Direct + select component; + var third = q.ToDictionary(component => component.Name, StringComparer.InvariantCultureIgnoreCase); + + // check missing packages + + foreach (var package in config.Packages) + { + if (!third.TryGetValue(package.Id, out var component)) + { + Writer.WriteLine("WARNING: nuget package '{0}' is missing in third party dependencies", package.Id); + Writer.WriteLine("Adding incomplete dependency"); + thirdParty.Add(new ThirdPartyDependency + { + Name = package.Id, + Type = ThirdPartyDependencyType.NugetPackage, + DependencyType = LicensedDependencyType.Direct, + Version = package.Version + }); + _changed = true; + } + else + { + if (string.Equals(component.Version, package.Version, StringComparison.InvariantCultureIgnoreCase)) continue; + + if (string.IsNullOrEmpty(component.Version)) + { + Writer.WriteLine("Info: adding missing version '{0}' to nuget dependency '{1}'", package.Version, component.Name); + component.Version = package.Version; + _changed = true; + } + else + { + Writer.WriteLine("WARNING: version mismatch ('{0}' vs '{1}') in nuget dependency '{2}'", package.Version, component.Version, component.Name); + } // if-else + } // if-else + } // foreach package + + // check extra packages + var nuget = new HashSet(StringComparer.InvariantCultureIgnoreCase); + foreach (var package in config.Packages) + { + nuget.Add(package.Id); + } // foreach + + var extra = from component in third.Values + where !nuget.Contains(component.Name) + select component; + foreach (var component in extra) + { + Writer.WriteLine("Info: removing extra nuget dependency '{0}", component.Name); + thirdParty.Remove(component); + _changed = true; + } // foreach + + if (thirdParty.Count == 0) thirdParty = null; + if (thirdParty != null) + { + _data.Dependencies ??= new LicensingDependencies(); + _data.Dependencies.ThirdParty = thirdParty; + } + else if (_data.Dependencies != null) + { + _data.Dependencies.ThirdParty = null; + } // if-else + } // CheckNuGetPackages + + #endregion + + #region Licenses + + private HashSet CheckDuplicatedLicenses() + { + if (!_data.LicensesSpecified) + { + Writer.WriteLine("WARNING: is null or empty"); + return new HashSet(); + } // if + + var ids = new HashSet(StringComparer.InvariantCultureIgnoreCase); + var licenses = new List(_data.Licenses.Count); + var duplicated = false; + foreach (var license in _data.Licenses) + { + if (ids.Contains(license.Id)) + { + Writer.WriteLine("ERROR: duplicated license id: '{0}'", license.Id); + duplicated = true; + } + else + { + ids.Add(license.Id); + licenses.Add(license); + } // if-else + } // foreach license + + if (duplicated) + { + Writer.WriteLine("Removing duplicated licenses..."); + _data.Licenses.Clear(); + _data.Licenses.AddRange(licenses); + _changed = true; + } // if + + return ids; + } // CheckDuplicatedLicenses + + private void CheckLicensesReferences(HashSet allIds) + { + CheckLicenseId(_data.Licensed.LicenseId, $"<{_data.Licensed.Type} name='{_data.Licensed.Name}'>"); + + if ((_data.Dependencies == null) || !_data.Dependencies.ThirdPartySpecified) return; + + foreach (var component in _data.Dependencies.ThirdParty) + { + CheckLicenseId(component.LicenseId, $""); + } // foreach + + void CheckLicenseId(string id, string from) + { + if (allIds.Contains(id)) return; + + Writer.WriteLine("WARNING: license id '{0}' referenced in {1} not found", id ?? "", @from); + if ((id != null) && (LicensesPool.TryGetValue(id, out var license))) + { + Writer.WriteLine("INFO: adding license '{0}' ({1}) from pool to ", id, license.Name); + _data.Licenses.Add(license); + allIds.Add(id); + _changed = true; + } + else + { + Writer.WriteLine("ERROR: license id '{0}' not found in licenses pool", id ?? ""); + } // if + } // CheckLicenseId + } // CheckLicensesReferences + + private void CheckLicensesText() + { + if ((_data.Licenses == null) || _data.Licenses.Count == 0) return; + + for (var index = 0; index < _data.Licenses.Count; index++) + { + var license = _data.Licenses[index]; + if (LicensesPool.TryGetValue(license.Id, out var poolLicense)) + { + if (string.Equals(license.Format, poolLicense.Format, StringComparison.InvariantCultureIgnoreCase) && + string.Equals(license.Name, poolLicense.Name, StringComparison.InvariantCulture) && + string.Equals(license.Text, poolLicense.Text, StringComparison.InvariantCulture)) continue; + + Writer.WriteLine("Info: updating license '{0}' text with license from the pool", license.Id); + _data.Licenses[index] = poolLicense; + _changed = true; + } + else + { + Writer.WriteLine("WARNING: license '{0}' ({1}) not found in licenses pool", license.Id, license.Name); + } // if-else + } // foreach + } // CheckLicensesText + + private void CheckUnusedLicenses() + { + if (_usedLicenses.Count == _data.Licenses.Count) return; + + for (var index = _data.Licenses.Count - 1; index >= 0; index--) + { + var licenseId = _data.Licenses[index].Id; + if (_usedLicenses.Contains(licenseId)) continue; + Writer.WriteLine("Info: license '{0}' is never used. Removing from list", licenseId); + _data.Licenses.RemoveAt(index); + _changed = true; + } // for + } // CheckUnusedLicenses + + private void SetLicenseUsed(string licenseId) + { + if (_usedLicenses.Contains(licenseId)) return; + _usedLicenses.Add(licenseId); + } // SetLicenseUsed + + #endregion + } // class Checker +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/CheckerOptions.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/CheckerOptions.cs new file mode 100644 index 00000000..a17f0a99 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/CheckerOptions.cs @@ -0,0 +1,31 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + [Serializable] + public class CheckerOptions + { + public bool OverrideProduct { get; set; } + public bool OverrideAuthors { get; set; } + public bool OverrideCopyright { get; set; } + public bool OverrideTerms { get; set; } + public bool OverrideLicense { get; set; } + public bool OverrideRemarks { get; set; } + public bool OverrideNotes { get; set; } + + public CheckerOptions Clone() => (CheckerOptions) MemberwiseClone(); + } // CheckerOptions +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/Creator.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/Creator.cs new file mode 100644 index 00000000..e8dde546 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/Creator.cs @@ -0,0 +1,71 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + internal sealed class Creator : ProjectAction + { + public Creator(VsSolution solution, IToolOutputWriter writer, string defaultsPath, CancellationToken token) : base(solution, writer, token) + { + writer.WriteLine("Reading licensing defaults..."); + Defaults = LicensingMaintenance.Helper.ReadLicensingDefaultsPool(defaultsPath, writer); + } // constructor + + public LicensingDefaultsPool Defaults { get; } + + public override void Do(VsProject project, bool standalone) + { + Token.ThrowIfCancellationRequested(); + + Writer.WriteLine("Project '{0}'", project.Name); + var filename = LicensingMaintenance.Helper.GetLicensingFilename(project, standalone); + + Writer.IncreaseIndent(); + if (File.Exists(filename)) + { + // Writer.WriteLine(Verbose, "File '{0}' not needed", Path.GetFileName(filename)); + } + else + { + Writer.WriteLine("Info: Creating '{0}'...", Path.GetFileName(filename)); + var licensingData = GetLicensingData(project); + licensingData.FilePath = filename; + XmlSerialization.Serialize(filename, licensingData); + } // if-else + Writer.DecreaseIndent(); + } // ForProject + + public LicensingData GetLicensingData(VsProject project) + { + return project.GetLicensingData(GetLicensingDefaults(Defaults, project, true)); + } // GetLicensingData + + public static LicensingDefaults GetLicensingDefaults(LicensingDefaultsPool defaultsPool, VsProject project, bool getDefault) + { + var isSolution = VsSolutionProject.IsSolutionProject(project); + var defaults = defaultsPool[project.LicensingDefaultsKey] ?? (isSolution ? defaultsPool["#solution#"] : null); + if (getDefault) defaults ??= defaultsPool[null]; + + return defaults; + } // GetLicensingDefaults + } // class Creator +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.Html.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.Html.cs new file mode 100644 index 00000000..e2bf2c01 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.Html.cs @@ -0,0 +1,111 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Globalization; +using System.IO; +using System.Linq; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + internal sealed partial class LicensesWriter + { + private void WriteHtml(LicensingUsage usageData, string language, string licenseFilenameHtml) + { + Writer.WriteLine("Writing '{0}'...", Path.GetFileName(licenseFilenameHtml)); + + using var writer = new StreamWriter(licenseFilenameHtml, false, XmlSerialization.Utf8NoBomEncoding.Value); + WriteHtml(writer, usageData, language, true); + } // WriteHtml + + private void WriteHtml(TextWriter output, LicensingUsage usageData, string language, bool withLinks) + { + using var mdOutput = new StringWriter(CultureInfo.CurrentCulture); + WriteMarkdown(mdOutput, usageData, language, true); + var html = ChangeTextFormat(mdOutput.ToString(), "MD", "HTML"); + + output.WriteLine(LicensingResources.WriteHtmlHead); + output.WriteLine(LicensingResources.WriteHtmlTitle, GetLicensedItemType(usageData.Licensed.Type), usageData.Licensed.Assembly); + output.WriteLine(""); + output.WriteLine(""); + output.WriteLine(html); + output.WriteLine(""); + } // WriteHtml + + private void WriteHtmlLicensingData(LicensingData data, string filename) + { + TransformLicensingDataText(data, filename, "HTML", (text, format) => ChangeTextFormat(text, format, "HTML")); + } // WriteHtmlLicensingData + + private void TransformLicensingDataText(LicensingData data, string filename, string format, Func converter) + { + data = XmlSerialization.Clone(data); + + Writer.WriteLine("Writing '{0}'...", Path.GetFileName(filename)); + foreach (var terms in data.Licensed.TermsConditions) + { + terms.Text = converter(terms.Text, terms.Format); + terms.Format = format; + } // foreach + + if (!(data.Licensed.Remarks is null)) + { + data.Licensed.Remarks = converter(data.Licensed.Remarks, data.Licensed.Remarks.Format); + data.Licensed.Remarks.Format = format; + } // if + + if (!(data.Licensed.Notes is null)) + { + data.Licensed.Notes = converter(data.Licensed.Notes, data.Licensed.Notes.Format); + data.Licensed.Notes.Format = format; + } // if + + if (data.Dependencies != null) + { + if (data.Dependencies.LibrariesSpecified) + { + foreach (var library in data.Dependencies.Libraries.Where(lib => !(lib.Remarks is null))) + { + library.Remarks.Text = converter(library.Remarks.Text, library.Remarks.Format); + library.Remarks.Format = format; + } // foreach + } // if + + if (data.Dependencies.ThirdPartySpecified) + { + foreach (var component in data.Dependencies.ThirdParty.Where(c => !(c.Remarks is null))) + { + component.Remarks.Text = converter(component.Remarks.Text, component.Remarks.Format); + component.Remarks.Format = format; + } // foreach + } // if + } // if + + if (data.LicensesSpecified) + { + foreach (var license in data.Licenses) + { + license.Text = converter(license.Text, license.Format); + license.Format = format; + } // foreach + } // if + + XmlSerialization.Serialize(filename, data); + } // TransformLicensingDataText + } // partial class LicensesWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.Markdown.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.Markdown.cs new file mode 100644 index 00000000..9a134f48 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.Markdown.cs @@ -0,0 +1,215 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.IO; +using System.Linq; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + internal sealed partial class LicensesWriter + { + private void WriteMarkdown(LicensingUsage data, string filename, string language) + { + if (data.Licensed == null) throw new ArgumentException(); + + Writer.WriteLine("Writing '{0}'...", Path.GetFileName(filename)); + + using var output = new StreamWriter(filename, false, XmlSerialization.Utf8NoBomEncoding.Value, 1024); + WriteMarkdown(output, data, language, true); + } // WriteMarkdown + + private void WriteMarkdown(TextWriter output, LicensingUsage data, string language, bool withLinks) + { + // Header + WriteMarkdownHeader(output, data); + + // Terms and conditions + output.WriteLine("## {0}", LicensingResources.WriteTermsAndCondition); + output.WriteLine(); + var terms = data.Licensed.TermsConditions.First(t => string.Equals(t.Language, language, StringComparison.InvariantCulture)); + output.WriteLine(ChangeTextFormat(terms.Text, terms.Format, "MD")); + output.WriteLine(); + + // List of licenses + output.WriteLine("## {0}", LicensingResources.WriteListLicenses); + output.WriteLine(); + foreach (var usage in data.Usage.Where(usage => usage.AppliesTo != null)) + { + var format = withLinks ? " * [{0}]" : " * {0}"; + output.WriteLine(format, usage.License.Name); + } // foreach + + output.WriteLine(); + + // Licenses + foreach (var usage in data.Usage.Where(usage => usage.AppliesTo != null)) + { + output.WriteLine("### {0}", usage.License.Name); + output.WriteLine(); + output.WriteLine(ChangeTextFormat(usage.License.Text, usage.License.Format, "MD")); + output.WriteLine(); + output.WriteLine(); + + // Third-party components + int index; + + if (usage.AppliesTo.ThirdPartySpecified) + { + output.WriteLine(LicensingResources.WriteAppliesToThirdPartyFormatMd, usage.License.Name); + output.WriteLine(); + + index = 0; + foreach (var thirdParty in usage.AppliesTo.ThirdParty.OrderBy(comp => comp.Name + ":")) + { + WriteComponentDependencyMarkdown(output, thirdParty, ++index); + output.WriteLine(); + } // foreach + + output.WriteLine(); + } // if + + // Libraries + if (!usage.AppliesTo.LibrariesSpecified) continue; + + output.WriteLine(LicensingResources.WriteAppliesToLibrariesFormatMd, usage.License.Name); + output.WriteLine(); + index = 0; + foreach (var library in usage.AppliesTo.Libraries.OrderBy(lib => lib.Assembly)) + { + WriteLibraryDependencyMarkdown(output, library, ++index); + output.WriteLine(); + } // foreach + + output.WriteLine(); + } // foreach var usage + } // WriteMarkdown + + private void WriteMarkdownHeader(TextWriter output, LicensingUsage data) + { + output.WriteLine(LicensingResources.WriteLicensedFormatMd, GetLicensedItemType(data.Licensed.Type), data.Licensed.Assembly); + if (data.Licensed.Product != null) + { + output.WriteLine("{0}\\", data.Licensed.Product); + } // if + + if (data.Licensed.Authors != null) + { + output.WriteLine(LicensingResources.WriteAuthorsFormatMd, data.Licensed.Authors); + output.WriteLine(); + } // if + + if (data.Licensed.Copyright != null) + { + output.WriteLine("**{0}**", data.Licensed.Copyright); + output.WriteLine(); + } // if + + if (data.Licensed.Remarks?.Text != null) + { + output.WriteLine(ChangeTextFormat(data.Licensed.Remarks.Text, data.Licensed.Remarks.Format, "MD")); + output.WriteLine(); + } // if + + if (data.Licensed.Notes?.Text != null) + { + output.WriteLine("_" + ChangeTextFormat(data.Licensed.Notes.Text, data.Licensed.Notes.Format, "MD") + "_"); + output.WriteLine(); + } // if + } // WriteMarkdownHeader + + private void WriteLibraryDependencyMarkdown(TextWriter output, LibraryDependency dependency, int index) + { + output.WriteLine("#### {0}. {1}", index, dependency.Assembly); + + if (dependency.Authors != null) + { + var type = GetLicensedItemType(dependency.Type); + if (type.Length == 0) + { + output.WriteLine(LicensingResources.WriteAuthorsFormatMd, dependency.Authors); + } + else + { + output.WriteLine(LicensingResources.WriteTypeDependencyAuthorsFormatMd, type, dependency.Authors); + } // if-else + + output.WriteLine(); + } + else + { + output.WriteLine("_{0}_", GetLicensedItemType(dependency.Type)); + output.WriteLine(); + } // if-else + + if (dependency.Copyright != null) + { + output.WriteLine("**{0}**", dependency.Copyright); + output.WriteLine(); + } // if + + if (dependency.Remarks?.Text == null) return; + + var md = ChangeTextFormat(dependency.Remarks.Text, dependency.Remarks.Format, "MD"); + WriteIndented(output, md, " "); + output.WriteLine(); + } // WriteLibraryDependencyMarkdown + + private void WriteComponentDependencyMarkdown(TextWriter output, ThirdPartyDependency dependency, int index) + { + output.WriteLine("#### {0}. {1}", index, dependency.Name); + + if (dependency.Authors != null) + { + var type = GetDependencyType(dependency); + if (type.Length == 0) + { + output.WriteLine(LicensingResources.WriteAuthorsFormatMd, dependency.Authors); + } + else + { + output.WriteLine(LicensingResources.WriteTypeDependencyAuthorsFormatMd, type, dependency.Authors); + } // if-else + + output.WriteLine(); + } + else + { + output.WriteLine("_{0}_", GetDependencyType(dependency)); + output.WriteLine(); + } // if-else + + if (dependency.Copyright != null) + { + output.WriteLine("**{0}**", dependency.Copyright); + output.WriteLine(); + } // if + + if (dependency.Remarks?.Text != null) + { + var md = ChangeTextFormat(dependency.Remarks.Text, dependency.Remarks.Format, "MD"); + WriteIndented(output, md, " "); + output.WriteLine(); + } // if + + if (dependency.Description != null) + { + output.WriteLine(dependency.Description); + output.WriteLine(); + } // if + } // WriteComponentDependencyMarkdown + } // partial class LicensesWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.PlainText.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.PlainText.cs new file mode 100644 index 00000000..545d527b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.PlainText.cs @@ -0,0 +1,210 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.IO; +using System.Linq; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + internal sealed partial class LicensesWriter + { + private void WritePlainText(LicensingUsage data, string filename, string language) + { + if (data.Licensed == null) throw new ArgumentException(); + + Writer.WriteLine("Writing '{0}'...", Path.GetFileName(filename)); + using var output = new StreamWriter(filename, false, XmlSerialization.Utf8NoBomEncoding.Value, 1024); + + // Header + WritePlainTextHeader(output, data); + + // Terms and conditions + output.WriteLine("A.- {0}", LicensingResources.WriteTermsAndCondition); + output.WriteLine("=============================================================================="); + output.WriteLine(); + var terms = data.Licensed.TermsConditions.First(t => string.Equals(t.Language, language, StringComparison.InvariantCulture)); + output.WriteLine(ChangeTextFormat(terms.Text, terms.Format, null)); + output.WriteLine(); + output.WriteLine(); + + // List of licenses + output.WriteLine("B.- {0}", LicensingResources.WriteListLicenses); + output.WriteLine("=============================================================================="); + output.WriteLine(); + foreach (var usage in data.Usage.Where(usage => usage.AppliesTo != null)) + { + output.WriteLine(" * {0}", usage.License.Name); + } // foreach + + // Licenses + foreach (var usage in data.Usage.Where(usage => usage.AppliesTo != null)) + { + output.WriteLine(); + output.WriteLine(); + output.WriteLine("////////////////////////////////////////////////////////////"); + output.WriteLine("//"); + output.WriteLine("// {0}", usage.License.Name); + output.WriteLine("//"); + output.WriteLine("////////////////////////////////////////////////////////////"); + output.WriteLine(); + output.WriteLine(ChangeTextFormat(usage.License.Text, usage.License.Format, null)); + output.WriteLine(); + output.WriteLine("////////////////////////////////////////////////////////////"); + output.WriteLine(); + + // Third-party components + int index; + + if (usage.AppliesTo.ThirdPartySpecified) + { + output.WriteLine(LicensingResources.WriteAppliesToThirdPartyFormat, usage.License.Name); + output.WriteLine(); + + index = 0; + foreach (var thirdParty in usage.AppliesTo.ThirdParty.OrderBy(comp => comp.Name + ":")) + { + WriteComponentDependencyText(output, thirdParty, ++index); + output.WriteLine(); + } // foreach + } // if + + // Libraries + if (!usage.AppliesTo.LibrariesSpecified) continue; + + output.WriteLine(LicensingResources.WriteAppliesToLibrariesFormat, usage.License.Name); + output.WriteLine(); + index = 0; + foreach (var library in usage.AppliesTo.Libraries.OrderBy(lib => lib.Assembly)) + { + WriteLibraryDependencyText(output, library, ++index); + output.WriteLine(); + } // foreach + } // foreach var usage + } // WritePlainText + + private void WritePlainTextHeader(TextWriter output, LicensingUsage data) + { + output.WriteLine("##############################################################################"); + output.WriteLine("##"); + output.WriteLine(LicensingResources.WriteLicensedFormat, GetLicensedItemType(data.Licensed.Type), data.Licensed.Assembly); + output.WriteLine("##"); + output.WriteLine("##############################################################################"); + output.WriteLine("##"); + + if (data.Licensed.Product != null) + { + output.WriteLine("## {0}", data.Licensed.Product); + } // if + + if (data.Licensed.Authors != null) + { + output.WriteLine(LicensingResources.WriteAuthorsFormat, data.Licensed.Authors); + } // if + + if ((data.Licensed.Product != null) && (data.Licensed.Authors != null)) + { + output.WriteLine("##"); + } // if + + if (data.Licensed.Copyright != null) + { + output.WriteLine("## {0}", data.Licensed.Copyright); + } // if + + if (data.Licensed.Remarks?.Text != null) + { + output.WriteLine("##"); + WriteIndented(output, ChangeTextFormat(data.Licensed.Remarks.Text, data.Licensed.Remarks.Format, null), "## "); + } // if + + if (data.Licensed.Notes?.Text != null) + { + output.WriteLine("##"); + WriteIndented(output, ChangeTextFormat(data.Licensed.Notes.Text, data.Licensed.Notes.Format, null), "## "); + } // if + + output.WriteLine("##"); + output.WriteLine("##############################################################################"); + output.WriteLine(); + } // WritePlainTextHeader + + private void WriteLibraryDependencyText(TextWriter output, LibraryDependency dependency, int index) + { + output.WriteLine("{0}. {2}{1}", index, dependency.Assembly, dependency.Authors is null ? $"{GetLicensedItemType(dependency.Type)} " : ""); + output.WriteLine("------------------------------"); + + if (dependency.Authors != null) + { + var type = GetLicensedItemType(dependency.Type); + if (type.Length == 0) + { + output.WriteLine(LicensingResources.WriteDependencyAuthorsFormat, dependency.Authors); + } + else + { + output.WriteLine(LicensingResources.WriteTypeDependencyAuthorsFormat, type, dependency.Authors); + } // if-else + } // if + + if (dependency.Copyright != null) + { + output.WriteLine(dependency.Copyright); + } // if + + if (dependency.Remarks?.Text != null) + { + var md = ChangeTextFormat(dependency.Remarks.Text, dependency.Remarks.Format, null); + WriteIndented(output, md, " "); + } // if + } // WriteLibraryDependencyText + + private void WriteComponentDependencyText(TextWriter output, ThirdPartyDependency dependency, int index) + { + output.WriteLine("{0}. {2}{1}", index, dependency.Name, dependency.Authors is null ? $"{GetDependencyType(dependency)} " : ""); + output.WriteLine("------------------------------"); + + if (dependency.Authors != null) + { + var type = GetDependencyType(dependency); + if (type.Length == 0) + { + output.WriteLine(LicensingResources.WriteDependencyAuthorsFormat, dependency.Authors); + } + else + { + output.WriteLine(LicensingResources.WriteTypeDependencyAuthorsFormat, type, dependency.Authors); + } // if-else + } // if + + if (dependency.Copyright != null) + { + output.WriteLine(dependency.Copyright); + } // if + + if (dependency.Remarks?.Text != null) + { + var md = ChangeTextFormat(dependency.Remarks.Text, dependency.Remarks.Format, null); + WriteIndented(output, md, " "); + } // if + + if (dependency.Description != null) + { + output.WriteLine(" {0}", dependency.Description); + } // if + } // WriteComponentDependencyText + } // partial class LicensesWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.Rtf.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.Rtf.cs new file mode 100644 index 00000000..b82e2822 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.Rtf.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Globalization; +using System.IO; +using System.Text; +using AlphaCentaury.Licensing.Data.Serialization; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + internal partial class LicensesWriter + { + private void WriteRtf(LicensingUsage usageData, string language, string licenseFilenameRtf) + { + Writer.WriteLine("Writing '{0}'...", Path.GetFileName(licenseFilenameRtf)); + + using var writer = new StreamWriter(licenseFilenameRtf, false, Encoding.ASCII); + WriteRtf(writer, usageData, language); + + } // WriteRtf + + private void WriteRtf(TextWriter output, LicensingUsage usageData, string language) + { + using var mdOutput = new StringWriter(CultureInfo.CurrentCulture); + WriteMarkdown(mdOutput, usageData, language, false); + var rtf = ChangeTextFormat(mdOutput.ToString(), "MD", "RTF"); + + output.Write(rtf); + } // WriteRtf + + private void WriteRtfLicensingData(LicensingData data, string filename) + { + TransformLicensingDataText(data, filename, "RTF", (text, format) => ChangeTextFormat(text, format, "RTF")); + } // WriteRtfLicensingData + } // partial class LicensesWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.cs new file mode 100644 index 00000000..95901225 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensesWriter.cs @@ -0,0 +1,268 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Licensing.Data; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.TextConverters; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using IpTviewr.Common.Serialization; +using System; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Threading; +using File = System.IO.File; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + internal sealed partial class LicensesWriter : ProjectAction + { + private readonly WriterOptions _writerOptions; + private readonly WriterOptions _solutionOptions; + private readonly ITextFormatConverter _plainTextConverter; + private readonly ITextFormatConverter _markdownConverter; + private readonly ITextFormatConverter _htmlConverter; + private readonly ITextFormatConverter _rtfConverter; + private WriterOptions _options; + + public LicensesWriter(VsSolution solution, IToolOutputWriter writer, WriterOptions options, WriterOptions solutionOptions, CancellationToken token) : base(solution, writer, token) + { + MarkdownConverter mdConverter; + + _options = options; + _writerOptions = options; + _solutionOptions = solutionOptions; + _plainTextConverter = new PlainTextConverter(writer); + _markdownConverter = mdConverter = new MarkdownConverter(writer); + _htmlConverter = new HtmlConverter(writer, mdConverter.Pipeline); + _rtfConverter = new RtfConverter(writer, mdConverter.Pipeline, token); + } // constructor + + public override void Do(VsProject project, bool standalone) + { + Token.ThrowIfCancellationRequested(); + + _options = VsSolutionProject.IsSolutionProject(project) ? _solutionOptions : _writerOptions; + + Writer.WriteLine("Project '{0}'", project.Name); + Writer.IncreaseIndent(); + try + { + if (_options.DeleteOldFiles) + { + DeleteOldFiles(project, standalone); + } // if + + var data = LoadLicensingData(project, standalone, out var baseFilename); + if (data == null) return; + + if (_options.LicensingHtml) + { + var licensingHtml = baseFilename + ".html.xml"; + WriteHtmlLicensingData(data, licensingHtml); + } // if + + if (_options.LicensingRtf) + { + var licensingRtf = baseFilename + ".rtf.xml"; + WriteRtfLicensingData(data, licensingRtf); + } // if + + // save current culture settings + var currentCulture = CultureInfo.CurrentCulture; + var currentUiCulture = CultureInfo.CurrentUICulture; + + WriteLanguageLicenseFiles(project, standalone, data); + + // restore culture settings + CultureInfo.CurrentCulture = currentCulture; + CultureInfo.CurrentUICulture = currentUiCulture; + } + finally + { + Writer.DecreaseIndent(); + } // finally + } // Do + + public override void End() + { + _plainTextConverter.Dispose(); + _markdownConverter.Dispose(); + _htmlConverter.Dispose(); + _rtfConverter.Dispose(); + } // End + + private LicensingData LoadLicensingData(VsProject project, bool standalone, out string baseFilename) + { + var filename = LicensingMaintenance.Helper.GetLicensingFilename(project, standalone); + if (!File.Exists(filename)) + { + Writer.WriteLine("ERROR: file '{0}' not found", Path.GetFileName(filename)); + baseFilename = null; + return null; + } // if + + var folder = Path.GetDirectoryName(filename) ?? Path.GetPathRoot(filename); + baseFilename = Path.Combine(folder, Path.GetFileNameWithoutExtension(filename)); + + Writer.WriteLine("Loading '{0}'", Path.GetFileName(filename)); + var data = XmlSerialization.Deserialize(filename); + data.FilePath = filename; + + // check if data seems valid enough + if ((data.Licensed != null) && + data.Licensed.TermsConditionsSpecified && + data.LicensesSpecified) return data; + + Writer.WriteLine("ERROR: Invalid licensing data"); + return null; + } // LoadLicensingData + + private void WriteLanguageLicenseFiles(VsProject project, bool standalone, LicensingData data) + { + var usage = data.GetUsage(); + + foreach (var language in data.Licensed.TermsConditions.Select(terms => terms.Language)) + { + if ((language != null) && !_options.Translated) continue; + + CultureInfo.CurrentCulture = (language is null) ? CultureInfo.InvariantCulture : new CultureInfo(language); + CultureInfo.CurrentUICulture = (language is null) ? CultureInfo.InvariantCulture : new CultureInfo(language); + + var path = LicensingMaintenance.Helper.GetLicenseFilename(project, standalone, "LICENSE") + (language != null ? "." : "") + language; + var folder = Path.GetDirectoryName(path) ?? Path.GetPathRoot(path); + var licenseFilename = Path.GetFileName(path); + + if (_options.PlainText && ((language == null) || _options.TranslatedPlainText)) + { + var plainTextFile = Path.Combine(folder, (licenseFilename + ".txt").ToLowerInvariant()); + WritePlainText(usage, plainTextFile, language); + } // if + + if (_options.Markdown && ((language == null) || _options.TranslatedMarkdown)) + { + var mdFile = Path.Combine(folder, licenseFilename + ".MD"); + WriteMarkdown(usage, mdFile, language); + } // if + + if (_options.Html && ((language == null) || _options.TranslatedHtml)) + { + var htmlFile = Path.Combine(folder, (licenseFilename + ".htm").ToLowerInvariant()); + WriteHtml(usage, language, htmlFile); + } // if + + if (_options.Rtf && ((language == null) || _options.TranslatedRtf)) + { + var rtfFile = Path.Combine(folder, (licenseFilename + ".rtf").ToLowerInvariant()); + WriteRtf(usage, language, rtfFile); + } // if + } // foreach + } // WriteLanguageLicenseFiles + + private void DeleteOldFiles(VsProject project, bool standalone) + { + var baseFile = LicensingMaintenance.Helper.GetLicensingFilename(project, standalone); + var folder = Path.GetDirectoryName(baseFile) ?? Path.GetPathRoot(baseFile); + var search = Path.GetFileNameWithoutExtension(baseFile) + ".*.xml"; + + Writer.WriteLine("Deleting old files..."); + foreach (var file in Directory.EnumerateFiles(folder, search, SearchOption.TopDirectoryOnly)) + { + if (file == baseFile) continue; // just in case + try + { + File.Delete(file); + } + catch (Exception e) + { + Writer.WriteException(e, $"Unable to delete file '{file}'"); + } // catch + } // foreach + + baseFile = LicensingMaintenance.Helper.GetLicenseFilename(project, standalone, "LICENSE"); + folder = Path.GetDirectoryName(baseFile) ?? Path.GetPathRoot(baseFile); + search = Path.GetFileName(baseFile) + ".*"; + foreach (var file in Directory.EnumerateFiles(folder, search, SearchOption.TopDirectoryOnly)) + { + try + { + File.Delete(file); + } + catch (Exception e) + { + Writer.WriteException(e, $"Unable to delete file '{file}'"); + } // catch + } // foreach + } // DeleteOldFiles + + private string ChangeTextFormat(string text, string fromFormat, string toFormat) + { + switch (toFormat) + { + case null: + return _plainTextConverter.ConvertFrom(fromFormat, text); + case "MD": + return _markdownConverter.ConvertFrom(fromFormat, text); + case "HTML": + return _htmlConverter.ConvertFrom(fromFormat, text); + case "RTF": + return _rtfConverter.ConvertFrom(fromFormat, text); + default: + Writer.WriteLine("ERROR: unable to transform '{0}' to {1}", fromFormat, toFormat); + return null; + } // switch + } // ChangeTextFormat + + private static void WriteIndented(TextWriter output, string multiLineText, string indent) + { + var lines = multiLineText.Trim().Split('\n'); + foreach (var line in lines) + { + if (line.Length == 0) + { + output.WriteLine(); + } + else + { + output.WriteLine("{0}{1}", indent, line.Trim()); + } // if-else + } // foreach + } // WriteIndented + + private static string GetLicensedItemType(LicensedItemType type) + { + return type switch + { + LicensedItemType.Library => LicensingResources.WriteTypeLibrary, + LicensedItemType.Program => LicensingResources.WriteTypeProgram, + LicensedItemType.Installer => LicensingResources.WriteTypeInstaller, + LicensedItemType.Solution => LicensingResources.WriteTypeSolution, + _ => LicensingResources.WriteUnknown + }; + } // GetLicensedItemType + + private static string GetDependencyType(ThirdPartyDependency dependency) + { + return dependency.Type switch + { + ThirdPartyDependencyType.NugetPackage => LicensingResources.WriteTypeNugetPackage, + ThirdPartyDependencyType.Library => LicensingResources.WriteTypeThirdPartyLibrary, + ThirdPartyDependencyType.ImageLibrary => LicensingResources.WriteTypeImageLibrary, + ThirdPartyDependencyType.SourceCode => LicensingResources.WriteTypeSourceCode, + _ => LicensingResources.WriteTypeOtherThirdParty + }; + } // GetDependencyType + } // class LicensesWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensingToolOptions.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensingToolOptions.cs new file mode 100644 index 00000000..b03043ce --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/LicensingToolOptions.cs @@ -0,0 +1,53 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Xml.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + [Serializable] + [XmlRoot("LicensingTool.Options")] + public class LicensingToolOptions + { + public LicensingToolOptions() + { + // no-op + } // constructor + + public LicensingToolOptions(bool notNull) + { + if (!notNull) return; + + Checker = new CheckerOptions(); + Writer = WriterOptions.CreateDefaultsOptions(); + SolutionWriter = WriterOptions.CreateSolutionDefaultsOptions(); + } // constructor + + public CheckerOptions Checker { get; set; } + + public WriterOptions Writer { get; set; } + + public WriterOptions SolutionWriter { get; set; } + + public LicensingToolOptions Clone() + { + return new LicensingToolOptions + { + Checker = Checker?.Clone(), + Writer = Writer?.Clone(), + SolutionWriter = SolutionWriter?.Clone() + }; + } // Clone + } // class LicensingToolOptions +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/ProjectAction.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/ProjectAction.cs new file mode 100644 index 00000000..ba6995ab --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/ProjectAction.cs @@ -0,0 +1,49 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Threading; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + internal abstract class ProjectAction + { + protected ProjectAction(VsSolution solution, IToolOutputWriter writer, CancellationToken token) + { + Solution = solution; + Writer = writer; + Token = token; + } // constructor + + public VsSolution Solution { get; } + + + public IToolOutputWriter Writer { get; } + + public CancellationToken Token { get; } + + public virtual void Init() + { + // no-op + } // Init + + public abstract void Do([NotNull] VsProject project, bool standalone); + + public virtual void End() + { + // no-op + } // End + } // class ProjectAction +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/Updater.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/Updater.cs new file mode 100644 index 00000000..5e010f08 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/Updater.cs @@ -0,0 +1,200 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using AlphaCentaury.Licensing.Data; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + internal sealed class Updater : ProjectAction + { + private readonly List AllLicensingData; + private readonly IDictionary NamespaceData; + + public Updater(VsSolution solution, IToolOutputWriter writer, CancellationToken token) : base(solution, writer, token) + { + AllLicensingData = new List(solution.AllProjects.Count); + NamespaceData = new Dictionary(StringComparer.InvariantCulture); + } // constructor + + public override void Do(VsProject project, bool standalone) + { + Token.ThrowIfCancellationRequested(); + Writer.WriteLine("Project '{0}'", project.Name); + Writer.IncreaseIndent(); + try + { + var filename = LicensingMaintenance.Helper.GetLicensingFilename(project, standalone); + if (!File.Exists(filename)) + { + Writer.WriteLine("ERROR: file '{0}' not found", Path.GetFileName(filename)); + return; + } // if + + Writer.WriteLine("Loading '{0}'", Path.GetFileName(filename)); + var data = XmlSerialization.Deserialize(filename); + data.FilePath = filename; + Update(data, project); + } + finally + { + Writer.DecreaseIndent(); + } // finally + } // Do + + public override void End() + { + UpdateSolution(); + UpdateSubSolutions(); + } // End + + private void Update(LicensingData data, VsProject project) + { + // clear all dependencies, except runtime + data.Dependencies?.Libraries?.RemoveAll(library => library.DependencyType != LicensedDependencyType.Dynamic); + + if ((project.ReferencedProjects != null) && (project.ReferencedProjects.Count != 0)) + { + if (data.Dependencies == null) data.Dependencies = new LicensingDependencies(); + if (data.Dependencies.Libraries == null) data.Dependencies.Libraries = new List(project.ReferencedProjects.Count); + var libraries = data.Dependencies.Libraries; + + foreach (var projectGuid in project.ReferencedProjects) + { + if (!Solution.GuidDictionary.TryGetValue(projectGuid, out var referenced)) + { + Writer.WriteLine("WARNING: unable to find referenced project {0:B}", projectGuid); + continue; + } // if + + // add a skeleton reference + // missing values will be filled later, at End() + libraries.Add(new LibraryDependency + { + DependencyType = LicensedDependencyType.Direct, + Name = referenced.Namespace + }); + } // foreach + } // if + + AllLicensingData.Add(data); + NamespaceData.Add(data.Licensed.Name, data); + } // Update + + private void UpdateSolution() + { + CompleteSkeletonDependencies(); + + Writer.WriteLine("Expanding dependencies..."); + try + { + AllLicensingData.ExpandDependencies(); + } + catch (Exception e) + { + Writer.WriteException(e); + Writer.WriteLine("ERROR: unable to expand dependencies. Aborting execution."); + return; + } // try-catch + + Writer.WriteLine("Adjusting licenses..."); + Writer.IncreaseIndent(); + foreach (var data in AllLicensingData) + { + AdjustLicenses(data); + } // foreach + + Writer.DecreaseIndent(); + + Writer.WriteLine("Saving licensing files..."); + Writer.IncreaseIndent(); + AllLicensingData.ForEach((data) => + { + try + { + // TODO: add to options + // File.Copy(data.FilePath, data.FilePath + ".backup", true); + XmlSerialization.Serialize(data.FilePath, data); + } + catch (Exception e) + { + Writer.WriteException(e, $"Unable to save '{data.FilePath}'"); + } // try-catch + }); + Writer.DecreaseIndent(); + } // UpdateSolution + + private void CompleteSkeletonDependencies() + { + var libraries = from data in AllLicensingData + where data.Dependencies?.LibrariesSpecified ?? false + from library in data.Dependencies.Libraries + select library; + + foreach (var library in libraries) + { + if (!NamespaceData.TryGetValue(library.Name, out var referencedData)) + { + Writer.WriteLine("ERROR: unable to find licensing data for '{0}'", library.Name); + continue; + } // if + + referencedData.Licensed.CopyTo(library); + } // foreach + } // CompleteSkeletonDependencies + + private void AdjustLicenses(LicensingData data) + { + if ((data.Dependencies?.LibrariesSpecified ?? false) == false) return; + + if (data.Licenses == null) data.Licenses = new List(); + var set = new HashSet(StringComparer.InvariantCultureIgnoreCase); + data.Licenses.ForEach(license => set.Add(license.Id)); + + foreach (var library in data.Dependencies.Libraries) + { + var referenced = NamespaceData[library.Name]; + var licenseId = referenced.Licensed.LicenseId; + library.LicenseId = licenseId; + if (set.Contains(licenseId)) continue; + + var license = referenced.GetLicense(licenseId); + if (license == null) + { + Writer.WriteLine("ERROR: license id '{0}' not found for {1} {2}", referenced.Licensed.Type, referenced.Licensed.Name); + continue; + } // if + + data.Licenses.Add(license); + } // foreach + } // AdjustLicenses + + private void UpdateSubSolutions() + { + if (Solution.SubSolutions == null) return; + foreach (var subVsSolution in Solution.SubSolutions) + { + var updater = new Updater(subVsSolution, Writer, Token); + LicensingMaintenance.Helper.ForEachProject(updater, "Update solution dependencies"); + } // foreach + } // UpdateSubSolutions + } // class Updater +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/WriterOptions.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/WriterOptions.cs new file mode 100644 index 00000000..c98df8e2 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Actions/WriterOptions.cs @@ -0,0 +1,74 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + [Serializable] + public class WriterOptions + { + public bool DeleteOldFiles { get; set; } + + public bool PlainText { get; set; } + + public bool Markdown { get; set; } + + public bool Html { get; set; } + + public bool Rtf { get; set; } + + public bool Translated => TranslatedPlainText || TranslatedMarkdown || TranslatedHtml || TranslatedRtf; + + public bool TranslatedPlainText { get; set; } + + public bool TranslatedMarkdown { get; set; } + + public bool TranslatedHtml { get; set; } + + public bool TranslatedRtf { get; set; } + + public bool LicensingHtml { get; set; } + + public bool LicensingRtf { get; set; } + + public WriterOptions Clone() => (WriterOptions)MemberwiseClone(); + + public static WriterOptions CreateDefaultsOptions() + { + return new WriterOptions + { + DeleteOldFiles = true, + PlainText = true, + Markdown = true, + TranslatedPlainText = true, + TranslatedMarkdown = true, + LicensingRtf = true, + }; + } // CreateDefaultsOptions + + public static WriterOptions CreateSolutionDefaultsOptions() + { + return new WriterOptions + { + DeleteOldFiles = true, + PlainText = true, + Markdown = true, + Rtf = true, + TranslatedPlainText = true, + TranslatedMarkdown = true, + TranslatedRtf = true, + }; + } // CreateDefaultsOptions + } // class WriterOptions +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDataViewer.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDataViewer.Designer.cs new file mode 100644 index 00000000..a673a18e --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDataViewer.Designer.cs @@ -0,0 +1,252 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + partial class LicensingDataViewer + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Licensing file", -2, -2); + this.splitContainerLicensing = new System.Windows.Forms.SplitContainer(); + this.treeViewLicensingData = new System.Windows.Forms.TreeView(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.propertiesViewer = new IpTviewr.UiServices.Common.Forms.PropertiesViewer(); + this.tabControlLicensingDetailsText = new System.Windows.Forms.TabControl(); + this.tabPageLicensingRaw = new System.Windows.Forms.TabPage(); + this.textBoxLicensingText = new System.Windows.Forms.TextBox(); + this.tabPageLicensingHtml = new System.Windows.Forms.TabPage(); + this.htmlPanelLicensingText = new TheArtOfDev.HtmlRenderer.WinForms.HtmlPanel(); + this.tabPageLicensingRtf = new System.Windows.Forms.TabPage(); + this.richTextBoxLicensingText = new System.Windows.Forms.RichTextBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerLicensing)).BeginInit(); + this.splitContainerLicensing.Panel1.SuspendLayout(); + this.splitContainerLicensing.Panel2.SuspendLayout(); + this.splitContainerLicensing.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.tabControlLicensingDetailsText.SuspendLayout(); + this.tabPageLicensingRaw.SuspendLayout(); + this.tabPageLicensingHtml.SuspendLayout(); + this.tabPageLicensingRtf.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainerLicensing + // + this.splitContainerLicensing.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainerLicensing.Location = new System.Drawing.Point(0, 0); + this.splitContainerLicensing.Name = "splitContainerLicensing"; + // + // splitContainerLicensing.Panel1 + // + this.splitContainerLicensing.Panel1.Controls.Add(this.treeViewLicensingData); + // + // splitContainerLicensing.Panel2 + // + this.splitContainerLicensing.Panel2.Controls.Add(this.splitContainer1); + this.splitContainerLicensing.Size = new System.Drawing.Size(400, 400); + this.splitContainerLicensing.SplitterDistance = 186; + this.splitContainerLicensing.TabIndex = 1; + // + // treeViewLicensingData + // + this.treeViewLicensingData.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeViewLicensingData.FullRowSelect = true; + this.treeViewLicensingData.HideSelection = false; + this.treeViewLicensingData.Location = new System.Drawing.Point(0, 0); + this.treeViewLicensingData.Name = "treeViewLicensingData"; + treeNode1.ImageIndex = -2; + treeNode1.Name = "DummySolutionNode"; + treeNode1.SelectedImageIndex = -2; + treeNode1.Text = "Licensing file"; + this.treeViewLicensingData.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode1}); + this.treeViewLicensingData.Size = new System.Drawing.Size(186, 400); + this.treeViewLicensingData.TabIndex = 0; + this.treeViewLicensingData.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewLicensingData_AfterSelect); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.propertiesViewer); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.tabControlLicensingDetailsText); + this.splitContainer1.Size = new System.Drawing.Size(210, 400); + this.splitContainer1.SplitterDistance = 200; + this.splitContainer1.TabIndex = 1; + // + // propertiesViewer + // + this.propertiesViewer.AutoResizeColumns = true; + this.propertiesViewer.Dock = System.Windows.Forms.DockStyle.Fill; + this.propertiesViewer.Location = new System.Drawing.Point(0, 0); + this.propertiesViewer.Name = "propertiesViewer"; + this.propertiesViewer.Size = new System.Drawing.Size(210, 200); + this.propertiesViewer.TabIndex = 0; + this.propertiesViewer.PropertySelected += new System.EventHandler(this.propertiesViewer_PropertySelected); + // + // tabControlLicensingDetailsText + // + this.tabControlLicensingDetailsText.Controls.Add(this.tabPageLicensingRaw); + this.tabControlLicensingDetailsText.Controls.Add(this.tabPageLicensingHtml); + this.tabControlLicensingDetailsText.Controls.Add(this.tabPageLicensingRtf); + this.tabControlLicensingDetailsText.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControlLicensingDetailsText.Location = new System.Drawing.Point(0, 0); + this.tabControlLicensingDetailsText.Name = "tabControlLicensingDetailsText"; + this.tabControlLicensingDetailsText.SelectedIndex = 0; + this.tabControlLicensingDetailsText.Size = new System.Drawing.Size(210, 196); + this.tabControlLicensingDetailsText.TabIndex = 0; + // + // tabPageLicensingRaw + // + this.tabPageLicensingRaw.Controls.Add(this.textBoxLicensingText); + this.tabPageLicensingRaw.Location = new System.Drawing.Point(4, 22); + this.tabPageLicensingRaw.Name = "tabPageLicensingRaw"; + this.tabPageLicensingRaw.Padding = new System.Windows.Forms.Padding(3); + this.tabPageLicensingRaw.Size = new System.Drawing.Size(202, 170); + this.tabPageLicensingRaw.TabIndex = 0; + this.tabPageLicensingRaw.Text = "Raw content"; + this.tabPageLicensingRaw.UseVisualStyleBackColor = true; + // + // textBoxLicensingText + // + this.textBoxLicensingText.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBoxLicensingText.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxLicensingText.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBoxLicensingText.Location = new System.Drawing.Point(3, 3); + this.textBoxLicensingText.Multiline = true; + this.textBoxLicensingText.Name = "textBoxLicensingText"; + this.textBoxLicensingText.ReadOnly = true; + this.textBoxLicensingText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxLicensingText.Size = new System.Drawing.Size(196, 164); + this.textBoxLicensingText.TabIndex = 0; + // + // tabPageLicensingHtml + // + this.tabPageLicensingHtml.Controls.Add(this.htmlPanelLicensingText); + this.tabPageLicensingHtml.Location = new System.Drawing.Point(4, 22); + this.tabPageLicensingHtml.Name = "tabPageLicensingHtml"; + this.tabPageLicensingHtml.Padding = new System.Windows.Forms.Padding(3); + this.tabPageLicensingHtml.Size = new System.Drawing.Size(202, 170); + this.tabPageLicensingHtml.TabIndex = 1; + this.tabPageLicensingHtml.Text = "MD/HTML"; + this.tabPageLicensingHtml.UseVisualStyleBackColor = true; + // + // htmlPanelLicensingText + // + this.htmlPanelLicensingText.AutoScroll = true; + this.htmlPanelLicensingText.BackColor = System.Drawing.SystemColors.Window; + this.htmlPanelLicensingText.BaseStylesheet = null; + this.htmlPanelLicensingText.Cursor = System.Windows.Forms.Cursors.IBeam; + this.htmlPanelLicensingText.Dock = System.Windows.Forms.DockStyle.Fill; + this.htmlPanelLicensingText.Location = new System.Drawing.Point(3, 3); + this.htmlPanelLicensingText.Name = "htmlPanelLicensingText"; + this.htmlPanelLicensingText.Size = new System.Drawing.Size(196, 164); + this.htmlPanelLicensingText.TabIndex = 0; + this.htmlPanelLicensingText.Text = null; + // + // tabPageLicensingRtf + // + this.tabPageLicensingRtf.Controls.Add(this.richTextBoxLicensingText); + this.tabPageLicensingRtf.Location = new System.Drawing.Point(4, 22); + this.tabPageLicensingRtf.Name = "tabPageLicensingRtf"; + this.tabPageLicensingRtf.Padding = new System.Windows.Forms.Padding(3); + this.tabPageLicensingRtf.Size = new System.Drawing.Size(202, 170); + this.tabPageLicensingRtf.TabIndex = 2; + this.tabPageLicensingRtf.Text = "RTF"; + this.tabPageLicensingRtf.UseVisualStyleBackColor = true; + // + // richTextBoxLicensingText + // + this.richTextBoxLicensingText.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.richTextBoxLicensingText.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBoxLicensingText.Location = new System.Drawing.Point(3, 3); + this.richTextBoxLicensingText.Name = "richTextBoxLicensingText"; + this.richTextBoxLicensingText.ReadOnly = true; + this.richTextBoxLicensingText.Size = new System.Drawing.Size(196, 164); + this.richTextBoxLicensingText.TabIndex = 0; + this.richTextBoxLicensingText.Text = ""; + // + // LicensingDataViewer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.splitContainerLicensing); + this.Name = "LicensingDataViewer"; + this.Size = new System.Drawing.Size(400, 400); + this.splitContainerLicensing.Panel1.ResumeLayout(false); + this.splitContainerLicensing.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerLicensing)).EndInit(); + this.splitContainerLicensing.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.tabControlLicensingDetailsText.ResumeLayout(false); + this.tabPageLicensingRaw.ResumeLayout(false); + this.tabPageLicensingRaw.PerformLayout(); + this.tabPageLicensingHtml.ResumeLayout(false); + this.tabPageLicensingRtf.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainerLicensing; + private System.Windows.Forms.TreeView treeViewLicensingData; + private System.Windows.Forms.TabControl tabControlLicensingDetailsText; + private System.Windows.Forms.TabPage tabPageLicensingRaw; + private System.Windows.Forms.TextBox textBoxLicensingText; + private System.Windows.Forms.TabPage tabPageLicensingHtml; + private System.Windows.Forms.SplitContainer splitContainer1; + private IpTviewr.UiServices.Common.Forms.PropertiesViewer propertiesViewer; + private System.Windows.Forms.TabPage tabPageLicensingRtf; + private System.Windows.Forms.RichTextBox richTextBoxLicensingText; + private TheArtOfDev.HtmlRenderer.WinForms.HtmlPanel htmlPanelLicensingText; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDataViewer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDataViewer.cs new file mode 100644 index 00000000..cc998a55 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDataViewer.cs @@ -0,0 +1,321 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Licensing.Data.Ui; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using IpTviewr.UiServices.Common.Controls; +using System.ComponentModel; +using System.Globalization; +using System.Text; +using System.Windows.Forms; +using TheArtOfDev.HtmlRenderer.WinForms; +using License = AlphaCentaury.Licensing.Data.Serialization.License; +using Property = System.Collections.Generic.KeyValuePair; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + public sealed partial class LicensingDataViewer : CommonBaseUserControl + { + private LicensingData _licensingData; + private string _licensingDataName; + private DetailsModeEnum _detailsMode; + private object _selectedTag; + + private enum DetailsModeEnum + { + None, + Licensed, + TermsConditions, + Library, + ThirdParty, + License, + FormattedText, + } // DetailsModeEnum + + public LicensingDataViewer() + { + InitializeComponent(); + components ??= new Container(); + + ImageList = new ImageList(components); + treeViewLicensingData.ImageList = ImageList; + LicensingUiImages.GetImageListMedium(ImageList); + UiImages = new LicensingUiImages(ImageList); + Ui = new LicensingDataUi(UiImages); + LicensingData = null; + + htmlPanelLicensingText.BaseStylesheet = LicensingResources.HtmlDefaultStylesheet; + } // constructor + + public ImageList ImageList { get; } + + public LicensingUiImages UiImages { get; } + + public LicensingDataUi Ui { get; } + + public string LicensingDataName + { + get => _licensingDataName; + set + { + _licensingDataName = value; + if (LicensingData == null) return; + + treeViewLicensingData.Nodes[0].Text = value; + } // set + } // LicensingDataName + + public LicensingData LicensingData + { + get => _licensingData; + set + { + _licensingData = value; + var root = (value == null) switch + { + true => new TreeNode(LicensingResources.NoLicensingSelected, UiImages.LicensingData, UiImages.LicensingData), + false => Ui.DataToTree(LicensingDataName, value) + }; + + treeViewLicensingData.BeginUpdate(); + treeViewLicensingData.Nodes.Clear(); + treeViewLicensingData.Nodes.Add(root); + treeViewLicensingData.EndUpdate(); + splitContainerLicensing.Panel2.Visible = false; + } // set + } // namespace + + private DetailsModeEnum DetailsMode + { + get => _detailsMode; + set + { + if (_detailsMode == value) return; + + _detailsMode = value; + splitContainerLicensing.Panel2.Visible = true; + var enable = (value != DetailsModeEnum.None); + propertiesViewer.Enabled = enable; + tabControlLicensingDetailsText.Enabled = enable; + propertiesViewer.Properties = null; + DisplayTextProperty(null, null); + + if (enable) + { + splitContainer1.SplitterDistance = value switch + { + DetailsModeEnum.Licensed => ((splitContainer1.Height * 2) / 3), + DetailsModeEnum.TermsConditions => ((splitContainer1.Height * 1) / 4), + DetailsModeEnum.License => ((splitContainer1.Height * 1) / 4), + DetailsModeEnum.FormattedText => ((splitContainer1.Height * 1) / 4), + _ => (splitContainer1.Height / 2) + }; + } // if + } // set + } // DetailsMode; + + private void DisplayTextProperty(string text, string format) + { + textBoxLicensingText.Text = text?.Trim().Replace("\n", "\r\n"); + htmlPanelLicensingText.Text = (format == "HTML") ? text : null; + richTextBoxLicensingText.Rtf = (format == "RTF") ? text : null; + + tabControlLicensingDetailsText.SelectedTab = format switch + { + "HTML" => tabPageLicensingHtml, + "RTF" => tabPageLicensingRtf, + _ => tabPageLicensingRaw, + }; + } // DisplayTextProperty + + private void DisplayTextProperty(FormattedMultilineText text) + { + if (text is null) + { + DisplayTextProperty(null, null); + } + else + { + DisplayTextProperty(text.Text, text.Format); + } // if-else + } // DisplayTextProperty + + private void treeViewLicensingData_AfterSelect(object sender, TreeViewEventArgs e) + { + _selectedTag = e.Node.Tag; + switch (e.Node.Tag) + { + case LicensedItem licensed: + SafeCall(OnLicensedSelected, licensed); + break; + + case LibraryDependency library: + SafeCall(OnDependenciesLibrarySelected, library); + break; + + case ThirdPartyDependency component: + SafeCall(OnDependenciesComponentSelected, component); + break; + + case License license: + SafeCall(OnLicenseSelected, license); + break; + + case TermsAndConditions terms: + SafeCall(OnTermsAndConditionsSelected, terms); + break; + + case FormattedMultilineText text: + SafeCall(OnFormattedTextSelected, text); + break; + + default: + DetailsMode = DetailsModeEnum.None; + break; + } // switch + } // treeViewLicensingData_AfterSelect + + private void OnLicensedSelected(LicensedItem licensed) + { + DetailsMode = DetailsModeEnum.Licensed; + + propertiesViewer.Properties = new[] + { + new Property("Name", licensed.Name), + new Property("Type", licensed.Type.ToString()), + new Property("Assembly", licensed.Assembly), + new Property("Product", licensed.Product), + new Property("LicenseId", licensed.LicenseId), + new Property("Copyright", licensed.Copyright), + new Property("Authors", licensed.Authors), + new Property("TermsConditions", (licensed.TermsConditionsSpecified).ToString(CultureInfo.CurrentUICulture)), + new Property("Remarks", string.IsNullOrEmpty(licensed.Remarks) ? null : $"Format: {licensed.Remarks.Format ?? "(default)"}"), + new Property("Notes", string.IsNullOrEmpty(licensed.Notes) ? null : $"Format: {licensed.Notes.Format ?? "(default)"}"), + }; + } // OnLicensed + + private void OnDependenciesLibrarySelected(LibraryDependency library) + { + DetailsMode = DetailsModeEnum.Library; + + propertiesViewer.Properties = new[] + { + new Property("Name", library.Name), + new Property("Type", library.Type.ToString()), + new Property("DependencyType", library.DependencyType.ToString()), + new Property("Assembly", library.Assembly), + new Property("LicenseId", library.LicenseId), + new Property("Copyright", library.Copyright), + new Property("Authors", library.Authors), + new Property("Remarks", string.IsNullOrEmpty(library.Remarks) ? null : $"Format: {library.Remarks.Format ?? "(default)"}"), + }; + } // OnDependenciesLibrarySelected + + private void OnDependenciesComponentSelected(ThirdPartyDependency component) + { + DetailsMode = DetailsModeEnum.ThirdParty; + + propertiesViewer.Properties = new[] + { + new Property("Name", component.Name), + new Property("Type", component.Type.ToString()), + new Property("DependencyType", component.DependencyType.ToString()), + new Property("LicenseId", component.LicenseId), + new Property("Copyright", component.Copyright), + new Property("Authors", component.Authors), + new Property("Description", component.Description), + new Property("Remarks", string.IsNullOrEmpty(component.Remarks) ? null : $"Format: {component.Remarks.Format ?? "(default)"}"), + }; + } // OnDependenciesComponentSelected + + private void OnLicenseSelected(License license) + { + DetailsMode = DetailsModeEnum.License; + DisplayTextProperty(license.Text, license.Format); + + propertiesViewer.Properties = new[] + { + new Property("Id", license.Id), + new Property("Name", license.Name), + new Property("Format", license.Format), + }; + } // OnLicenseSelected + + private void OnTermsAndConditionsSelected(TermsAndConditions terms) + { + DetailsMode = DetailsModeEnum.TermsConditions; + DisplayTextProperty(terms.Text, terms.Format); + + propertiesViewer.Properties = new[] + { + new Property("Language", terms.Language), + new Property("Format", terms.Format), + }; + } // OnTermsAndConditionsSelected + + private void OnFormattedTextSelected(FormattedMultilineText text) + { + DetailsMode = DetailsModeEnum.FormattedText; + DisplayTextProperty(text.Text, text.Format); + + propertiesViewer.Properties = new[] + { + new Property("Format", text.Format), + }; + } // OnFormattedTextSelected + + private void propertiesViewer_PropertySelected(object sender, PropertySelectedEventArgs e) + { + switch (DetailsMode) + { + case DetailsModeEnum.Licensed: + var licensed = (LicensedItem)_selectedTag; + switch (e.Name) + { + case "Remarks": + DisplayTextProperty(licensed.Remarks); + return; + case "Notes": + DisplayTextProperty(licensed.Notes); + return; + } // switch + DisplayTextProperty(e.Value, null); + break; + + case DetailsModeEnum.Library: + var library = (LibraryDependency)_selectedTag; + switch (e.Name) + { + case "Remarks": + DisplayTextProperty(library.Remarks); + return; + } // switch + DisplayTextProperty(e.Value, null); + break; + + case DetailsModeEnum.ThirdParty: + var component = (ThirdPartyDependency)_selectedTag; + switch (e.Name) + { + case "Remarks": + DisplayTextProperty(component.Remarks); + return; + } // switch + DisplayTextProperty(e.Value, null); + break; + } // switch + } // propertiesViewer_PropertySelected + } // class LicensingDataViewer +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDataViewer.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDataViewer.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDataViewer.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDefaultsPool.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDefaultsPool.cs new file mode 100644 index 00000000..2360d3bd --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingDefaultsPool.cs @@ -0,0 +1,85 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions +{ + public class LicensingDefaultsPool + { + public const string AppliesToDefaultScope = "#default#"; + + public LicensingDefaultsPool(string defaultsFolder, IToolOutputWriter writer) + { + var defaultsFiles = from file in Directory.EnumerateFiles(defaultsFolder, "licensing.defaults*.xml", SearchOption.TopDirectoryOnly) + select XmlSerialization.Deserialize(file); + + Pool = defaultsFiles.ToDictionary(@default => @default.AppliesTo ?? AppliesToDefaultScope, StringComparer.InvariantCulture); + ApplyInheritance(writer); + } // constructor + + public IReadOnlyDictionary Pool { get; } + + public LicensingDefaults this[string scope] => Pool.TryGetValue(scope ?? AppliesToDefaultScope, out var item) ? item : null; + + public bool TryGetValue(string scope, out LicensingDefaults defaults) + { + return Pool.TryGetValue(scope ?? AppliesToDefaultScope, out defaults); + } // TryGet + + private void ApplyInheritance(IToolOutputWriter writer) + { + if (this[null] == null) + { + writer.WriteLine("ERROR: unable to find '" + AppliesToDefaultScope + "' in licensing defaults pool"); + return; + } // if + + var done = new HashSet(); + + foreach (var licensingDefaults in Pool.Values) + { + var inheritFrom = GetInheritFrom(licensingDefaults.InheritsFrom); + licensingDefaults.Inherit(inheritFrom); + } // foreach default + + LicensingDefaults GetInheritFrom(string inheritsFrom) + { + if (string.IsNullOrEmpty(inheritsFrom)) return null; + + var from = this[inheritsFrom]; + if (from == null) + { + writer.WriteLine("WARNING: unable to find '{0}' in licensing defaults pool", inheritsFrom); + return null; + } // if + + if (done.Contains(inheritsFrom)) return from; + + // avoid inheritance cycles + done.Add(inheritsFrom); + + var parent = GetInheritFrom(from.InheritsFrom); + from.Inherit(parent); + + return from; + } // GetInheritFrom + } // Inherit + } // class SolutionDefaults +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFileNode.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFileNode.cs new file mode 100644 index 00000000..2efc1ff9 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFileNode.cs @@ -0,0 +1,46 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Licensing.Data.Serialization; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + internal class LicensingDataNode + { + private LicensingData _file; + + public LicensingDataNode(string filePath, bool exists) + { + FilePath = filePath; + Exists = exists; + } // constructor + + public string FilePath { get; } + public bool Exists { get; } + + public bool IsValueCreated => _file != null; + + public LicensingData Value + { + get + { + if (!Exists) return null; + if (IsValueCreated) return _file; + + _file = XmlSerialization.Deserialize(FilePath); + return _file; + } // get + } // Value + } // LicensingDataNode +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingForm.Designer.cs new file mode 100644 index 00000000..1b0ef58b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingForm.Designer.cs @@ -0,0 +1,48 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + partial class LicensingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private new void InitializeComponent() + { + } + + #endregion + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingForm.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingForm.cs new file mode 100644 index 00000000..14c7b8dd --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingForm.cs @@ -0,0 +1,241 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Tools.SourceCodeMaintenance.Helpers; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; +using System; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions; +using IpTviewr.Common.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + public sealed partial class LicensingForm : LicensingFormDocumentView + { + private readonly TextBoxOutputWriter _outputWriter; + private LicensingToolOptions _options; + + public LicensingForm() + { + InitializeComponent(); + _outputWriter = new TextBoxOutputWriter(textBoxOutput, timerRefreshOutput, 4); + _options = new LicensingToolOptions(true); + } // constructor + + #region Overrides of LicensingFormDocumentView + + protected override void openStripSplitButton_ButtonClick(object sender, EventArgs e) + { + SafeCall(LoadSolutionFolder); + } // openStripSplitButton_ButtonClick + + protected override void openSolutionFolderToolStripMenuItem_Click(object sender, EventArgs e) + { + SafeCall(LoadSolutionFolder); + } // openSolutionFolderToolStripMenuItem_Click + + protected override void openSolutionFileToolStripMenuItem_Click(object sender, EventArgs e) + { + SafeCall(LoadSolutionFile); + } // SafeCall + + protected override void openLicensingDataToolStripMenuItem_Click(object sender, EventArgs e) + { + SafeCall(LoadLicensingData); + } // openLicensingDataToolStripMenuItem_Click + + protected override void createStripButton_Click(object sender, EventArgs e) + { + ExecuteAsync(_outputWriter, (token) => LicensingMaintenance.CreateMissingLicensingFilesAsync(CurrentSolution, + _outputWriter, + LicensingMaintenance.Helper.GetImplicitDefaultsPath(CurrentSolution), + token)); + } // createStripButton_Click + + protected override void checkStripButton_Click(object sender, EventArgs e) + { + ExecuteAsync(_outputWriter, (token) => LicensingMaintenance.CheckLicensingFilesAsync(CurrentSolution, + _outputWriter, + _options.Checker, + LicensingMaintenance.Helper.GetImplicitDefaultsPath(CurrentSolution), + token)); + } // checkStripButton_Click + + protected override void updateStripButton_Click(object sender, EventArgs e) + { + ExecuteAsync(_outputWriter, token => LicensingMaintenance.UpdateLicensingFilesAsync(CurrentSolution, _outputWriter, token)); + } // updateStripButton_Click + + protected override void licensingWriteStripButton_Click(object sender, EventArgs e) + { + ExecuteAsync(_outputWriter, + asyncAction: token => LicensingMaintenance.WriteLicenseFilesAsync(CurrentSolution, _outputWriter, + _options.Writer, _options.SolutionWriter, token)); + } // licensingWriteStripButton_Click + + protected override void licensingOptionsStripButton_Click(object sender, EventArgs e) + { + using var dlg = new LicensingToolOptionsDialog + { + Options = _options + }; + + if (dlg.ShowDialog(this) == DialogResult.OK) + { + _options = dlg.Options; + } // if + } // licensingOptionsStripButton_Click + + #endregion + + protected override void OnVsSolutionSelected(VsSolution solution) + { + DetailsMode = DetailsModeEnum.None; + + var prefix = solution.SolutionPath.Length + 1; + var root = new TreeNode("Licensing files", SolutionImages.Certificate, SolutionImages.Certificate); + root.Expand(); + foreach (var (licensing, treeNode) in LicensingNodes.OrderBy(ln => ln.Licensing.FilePath)) + { + var node = new TreeNode(licensing.FilePath.Substring(prefix), treeNode.ImageIndex, treeNode.SelectedImageIndex) { Tag = licensing }; + root.Nodes.Add(node); + } // foreach + + treeViewDetails.ImageList = imageListSolutionTreeMedium; + treeViewDetails.Nodes.Add(root); + DetailsMode = DetailsModeEnum.LicensingDataCollection; + } // OnVsProjectSelected + + protected override void OnVsProjectSelected(VsProject vsProject) + { + DetailsMode = DetailsModeEnum.None; + + treeViewDetails.ImageList = imageListSolutionTreeSmall; + var root = LicensingVsUi.GetProjectTree(vsProject, CurrentSolution); + root.Expand(); + root.Nodes[0].Expand(); + treeViewDetails.Nodes.Add(root); + DetailsMode = DetailsModeEnum.VsProject; + } // OnVsProjectSelected + + private protected override void OnLicensingNodeSelected(LicensingDataNode node) + { + treeViewDetails.Nodes.Clear(); + if (!node.Exists) return; + + DetailsMode = DetailsModeEnum.LicensingData; + + var name = node.FilePath.Substring(CurrentSolution.SolutionPath.Length + 1); + treeViewDetails.ImageList = licensingDataViewer.ImageList; + treeViewDetails.Nodes.Add(licensingDataViewer.Ui.DataToTree(name, node.Value)); + + licensingDataViewer.LicensingDataName = name; + licensingDataViewer.LicensingData = node.Value; + } // OnLicensingNodeSelected + + private protected override void OnDetailsLicensingNodeSelected(LicensingDataNode node) + { + var details = new StringBuilder(); + details.AppendLine($"File exists: {node.Exists}"); + if (node.Exists) + { + var licensing = node.Value; + details.AppendLine($"{licensing}"); + + if (licensing.Dependencies == null) + { + details.AppendLine("No dependencies"); + } + else + { + details.AppendLine("Dependencies:"); + var libraries = licensing.Dependencies.Libraries?.Count ?? -1; + details.AppendLine($" Library dependencies: {(libraries >= 0 ? libraries.ToString(CultureInfo.DefaultThreadCurrentCulture) : "none")}"); + var dependencies = licensing.Dependencies.ThirdParty?.Count ?? -1; + details.AppendLine($" Third-party dependencies: {(dependencies >= 0 ? dependencies.ToString(CultureInfo.DefaultThreadCurrentCulture) : "none")}"); + } // if-else + + if (licensing.Licenses == null) + { + details.AppendLine("Licenses: none"); + } + else + { + details.AppendLine($"Licenses: {licensing.Licenses.Count} "); + foreach (var license in licensing.Licenses) + { + details.AppendLine($" {license.Id}: {license.Name}"); + } // foreach + } // if-else + + licensingDataViewer.LicensingData = node.Value; + licensingDataViewer.LicensingDataName = node.FilePath.Substring(CurrentSolution.SolutionPath.Length + 1); + } // if + + textBoxDetails.Text = details.ToString(); + textBoxDetails.Enabled = true; + } // OnDetailsLicensingNodeSelected + + private void LoadSolutionFolder() + { + if (string.IsNullOrEmpty(selectFolderDialog.SelectedPath)) + { +#if DEBUG + selectFolderDialog.SelectedPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "..\\..\\..\\..")); +#else + selectFolderDialog.SelectedPath = Application.ExecutablePath; +#endif + } // if + + if (selectFolderDialog.ShowDialog(this) != DialogResult.OK) return; + + tabControlSolution.SelectedTab = tabPageSolution; + LoadSolutionFolderAsync(selectFolderDialog.SelectedPath); + } // LoadSolutionFolder + + private void LoadSolutionFile() + { + openFileDialog.Filter = "Solution files|*.sln|All files|*.*"; + openFileDialog.Title = "Open VisualStudio solution file"; + openFileDialog.FileName = null; + + if (openFileDialog.ShowDialog(this) != DialogResult.OK) return; + + tabControlSolution.SelectedTab = tabPageSolution; + LoadSolutionFileAsync(openFileDialog.FileName); + } // LoadSolutionFile + + private void LoadLicensingData() + { + openFileDialog.Filter = "Licensing data files|*.xml|All files|*.*"; + openFileDialog.Title = "Open licensing data file"; + openFileDialog.FileName = null; + if (openFileDialog.ShowDialog(this) != DialogResult.OK) return; + + var data = XmlSerialization.Deserialize(openFileDialog.FileName); + var name = openFileDialog.FileName; + if ((CurrentSolution != null) && name.StartsWith(CurrentSolution.SolutionPath)) + { + name = name.Substring(CurrentSolution.SolutionPath.Length + 1); + } // if + licensingDataViewer.LicensingData = data; + licensingDataViewer.LicensingDataName = name; + tabControlSolution.SelectedTab = tabPageLicensing; + } // LoadLicensingData + } // class LicensingForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingForm.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingForm.resx new file mode 100644 index 00000000..6a671bd6 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingForm.resx @@ -0,0 +1,906 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA4 + ewAAAk1TRnQBSQFMAgEBCwEAARgBAAEIAQABGAEAARgBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFg + AwABSAMAAQEBAAEgBgABbBYAA3IBgAPwAfoDlAGiAx4BJAwAAwEBAgNKAVUDyQHWA/YB/zAAA30BiwP2 + Af8D9gH/A/YB/wPpAfQDfAGKA/YB/wP2Af8D9gH/A/IB/AMMAQ8IAAMDAQQDUQFdA60BuwPbAeYD7QH3 + A8gB1QOBAY8DIAEmEAADOAFBA8oB1wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wPzAf0DXgFrAwgBCgQA + AzgBQQPKAdcD9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D8wH9A14BawMIAQpkAANyAYAD9gH/A/AB/wPw + AfoDlAGiAyABJgNKAVUDyQHWA/YB/wPwAf8D9gH/MAADQQFMA/YB/wOzAf8DpgH/A/YB/wPvAfkD1wH/ + A5YB/wPkAf8DvgHLCAADGgEfA7sByAP2Af8BzAHPAfQB/wGPAZcB7wH/AYUBjgHuAf8BqAGuAfEB/wHr + AewB9QH/A+4B+ANgAW0IAAMwATgDyQHWA9AB/wN9Af8DfQH/A30B/wN9Af8DfQH/A30B/wO6Af8D4AHs + A14BawMwATgDyQHWA9AB/wN9Af8DfQH/A30B/wN9Af8DfQH/A30B/wO6Af8D4AHsA14Ba2QAA3IBgAP2 + Af8DUAH/A6IB/wPvAf8D9gH/A/YB/wPYAf8DhAH/A50B/wP2Af8wAAMMAQ8D8gH8A5wB/wNCAf8D5AH/ + A/YB/wONAf8DRwH/A/AB/wN9AYsEAAMPARIDywHYAeUB5gH1Af8BTAFaAeoB/wEAARMB5QH/AQABEwHl + Af8BAAETAeUB/wEAARMB5QH/ARQBJgHmAf8BpAGrAfAB/wP2Af8DYAFtBAAD8AH7A9oB/wNhAf8DQgH/ + A0IB/wNCAf8DQgH/A0IB/wNCAf8DQQH/A7oB/wPxAfwD8AH7A9oB/wNhAf8DQgH/A0IB/wNCAf8DQgH/ + A0IB/wNCAf8DQQH/A7oB/wPxAfxkAANyAYAD9gH/A0EB/wNBAf8DVAH/A6MB/wN8Af8DQgH/A0EB/wOc + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/BAADvgHL + A8kB/wNBAf8DrAH/A/UB/wNTAf8DbwH/A/YB/wP2Af8D9gH/A/YB/wHtAe4B9QH/AS8BPwHoAf8BAAET + AeUB/wEAARMB5QH/AQABEwHlAf8BAAETAeUB/wEAARMB5QH/AQABEwHlAf8BAAEUAeUB/wGkAasB8AH/ + A/YB/wP2Af8D9gH/A7oB/wNBAf8B8AHuAe8B/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8DQgH/A30B/wP2Af8D9gH/A7oB/wNBAf8B8AHuAe8B/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8DQgH/A30B/wP2Af9kAANyAYAD9gH/A0EB/wGgAp8B/wGQAo8B/wNB + Af8DVgH/AccCxgH/A0EB/wOcAf8D9gH/A5YB/wOWAf8DlgH/A5YB/wOWAf8DlgH/A5YB/wOWAf8DlgH/ + A5YB/wPGAf8D9gH/BAADgQGPA/AB/wNHAf8DbgH/A8kB/wNBAf8DnAH/A/QB/wOYAf8DowH/A/YB/wGD + AYwB7gH/AQABEwHlAf8BOgFJAeoB/wHxAfIB/AH/AUgBVgHsAf8BAAETAeUB/wHMAdAB+AH/Ab0BwgH3 + Af8BAAETAeUB/wEUASYB5gH/AesB7AH1Af8D9gH/A/YB/wO6Af8DQQH/AfAB7gHvAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0IB/wN9Af8D9gH/A/YB/wO6Af8DQQH/AfAB7gHv + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0IB/wN9Af8D9gH/ZAADcgGA + A/YB/wNBAf8BxwLGAf8B8QHvAfAB/wHpAugB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A5wB/wP2Af8DQQH/ + A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A5wB/wP2Af8EAANyAYAD9gH/A24B/wNC + Af8DegH/A0EB/wPJAf8D0QH/A0EB/wN5Af8D9gH/ASkBOgHnAf8BAAETAeUB/wFIAVYB7AH/AvwB/gH/ + AvwB/gH/AdgB2wH5Bf8BzAHQAfgB/wEAARMB5QH/AQABEwHlAf8BqAGuAfEB/wP2Af8D9gH/A7oB/wNB + Af8B8AHuAe8B/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQgH/A30B/wP2 + Af8D9gH/A7oB/wNBAf8B8AHuAe8B/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8DQgH/A30B/wP2Af9kAANyAYAD9gH/A0EB/wHHAsYB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/A0EB/wOcAf8D9gH/A0EB/wHHAsYB/wHxAe8B8AH/A0EB/wHHAsYB/wHxAe8B8AH/A0EB/wHH + AsYB/wHxAe8B8AH/A0EB/wOcAf8D9gH/BAADfgGMA/YB/wOFAf8DQQH/A0EB/wNBAf8D3wH/A+MB/wNM + Af8DnAH/A/YB/wEHARoB5gH/AQABEwHlAf8BAAETAeUB/wFIAVYB7AH/Av4G/wHYAdsB+QH/AQABEwHl + Af8BAAETAeUB/wEAARMB5QH/AYMBjAHuAf8D9gH/A/YB/wO6Af8DQQH/AfAB7gHvAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0IB/wN9Af8D9gH/A/YB/wO6Af8DQQH/AfAB7gHv + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0IB/wN9Af8D9gH/ZAADcgGA + A/YB/wNBAf8BxwLGAf8B8AHuAe8B/wHoAecB6AH/Ae0B6wHsAf8B8QHvAfAB/wNBAf8DnAH/A/YB/wHN + AcsBzAH/AegC5wH/AfEB7wHwAf8BzQHLAcwB/wHoAucB/wHxAe8B8AH/Ac0BywHMAf8BxwLGAf8DwAH/ + A0EB/wOcAf8D9gH/AwQBBgPeAekDvwH/A0EB/wGOAo0B/wG4AbcBuAH/A1MB/wNmAf8D9QH/AdgB1wHY + Af8B2QHYAdkB/wP2Af8BEQEkAeYB/wEAARMB5QH/AQABEwHlAf8BywHPAfcF/wL+Av8C/AH+Af8BSAFW + AewB/wEAARMB5QH/AQABEwHlAf8BjwGXAe8B/wP2Af8D8QH8A84B/wNVAf8BewJ6Af8BewF6AXsB/wF7 + AXoBewH/AXsBegF7Af8BewF6AXsB/wF7AXoBewH/A0EB/wOjAf8D8wH9A/EB/APOAf8DVQH/AXsCegH/ + AXsBegF7Af8BewF6AXsB/wF7AXoBewH/AXsBegF7Af8BewF6AXsB/wNBAf8DowH/A/MB/WQAA3cBhQP2 + Af8DQQH/A1wB/wNDAf8DQQH/A0EB/wNgAf8DQQH/A5wB/wP2Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHHAsYB/wNBAf8DQQH/A5wB/wP2Af8DJQEs + A/YB/wN7Af8DawH/AfEB7wHwAf8B8QHvAfAB/wHXAdUB1gH/A0EB/wPXAf8B8wHxAfIB/wHyAfEB8gH/ + A/YB/wFOAVwB6gH/AQABEwHlAf8BdwGCAe8F/wHLAc8B9wH/AUgBVgHsAf8C/AH+Af8B8QHyAfwB/wEA + ARMB5QH/AQABEwHlAf8BzAHPAfQB/wP2Af8DSgFVA/EB/AO6Af8DQgH/A0IB/wNCAf8DQQH/A0EB/wNB + Af8DlgH/A/QB/gOEAZIDSgFVA/EB/AO6Af8DQgH/A0EB/wNBAf8DQgH/A0IB/wNCAf8DlgH/A/QB/gOE + AZJgAAMQARQD4AHrA9QB/wNBAf8DVQH/AcsCygH/AecB5QHmAf8B4AHeAd8B/wOWAf8DQQH/A3kB/wP2 + Af8B9ALzAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/A0EB/wOcAf8D9gH/AyoBMgP2Af8DgQH/A2sB/wHxAe8B8AH/AfEB7wHwAf8B1wHW + AdcB/wNBAf8D2wH/AfMC8gH/AfEB7wHwAf8D9QH/AcIBxgHyAf8BAgEWAeUB/wEAARMB5QH/AXcBggHv + Af8BAAETAeUB/wEAARMB5QH/AUgBVgHsAf8BOAFIAeoB/wEAARMB5QH/AUwBWgHqAf8D9gH/A/YB/wQA + A1oBZwPfAesD9gH/A/YB/wP2Af8DtAH/A04B/wOoAf8D9gH/A6sBuQMSARYEAANtAXoD8QH7A9IB/wNR + Af8DkAH/A/YB/wP2Af8D9gH/A/QB/gOJAZgDEQEVYAADcgGAA/QB/wNfAf8BYQFgAWEB/wHvAe0B7gH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8BwgHBAcIB/wNBAf8DuQH/A/UB/wHyAfAB8QH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHmAeQB5QH/A8AB/wNBAf8DnAH/ + A/YB/wMFAQcD4wHuA8MB/wNBAf8DjwH/AbkBuAG5Af8DVAH/A2kB/wP1Af8B8gHxAfIB/wHxAe8B8AH/ + AfIC8QH/A/YB/wGVAZ0B8AH/AQIBFgHlAf8BAAETAeUB/wEAARMB5QH/AQABEwHlAf8BAAETAeUB/wEA + ARMB5QH/AS8BPwHoAf8B5QHmAfUB/wP2Af8D9gH/BAADCAEKAzgBQQNKAVUDSgFVA4wBmgP0Af8DiAH/ + A1QB/wPZAf8DuwHIAx4BJAQAA4wBmgPiAfwDYAH/A2MB/wPaAf8DrgG8A0oBVQNKAVUDSAFTAw8BE2QA + A8MB0APGAf8DQQH/Ad0C3AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AXcBdgF3Af8DbQH/A/YB/wHyAfEB8gH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHHAsYB/wNBAf8DQQH/A5wB/wP2Af8EAAOBAY8D9gH/A7MB/wNcAf8DTAH/A3wB/wPl + Af8B9QL0Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8wHyAfMB/wP2Af8BwgHGAfIB/wFOAVwB6gH/ + AREBJAHmAf8BBgEZAeYB/wEoATkB5wH/AYMBjAHuAf8B7QHuAfUB/wPeAf8DsAH/A/YB/xQAAwcBCQPR + Ad8D1gH/A10B/wNeAf8D8gH/A3cBhQM6AUQD8wH+A5EB/wNBAf8DtQH/A+IB7QMOARF0AAPqAfUDpAH/ + A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + Ab0CvAH/A0sB/wP2Af8DlQH/A0EB/wNBAf8BxwLGAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wNBAf8DnAH/A/YB/wQAA3IBgAP2Af8D8gH/A/YB/wP2Af8D9gH/A/UB/wHxAe8B8AH/A0EB/wNB + Af8DQQH/A0EB/wNxAf8D2QH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9AH/A08B/wOcAf8D9gH/GAADKAEv + A9wB6AOqAf8DQgH/A54B/wPjAfID4AHrA8UB/wNUAf8DgwH/A+YB9ANcAWl4AAPpAfQDpQH/A0EB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AbsCugH/ + A0sB/wP2Af8D1gH/Ac0BywHMAf8BzQHLAcwB/wHoAucB/wHxAe8B8AH/AfEB7wHwAf8B5gHkAeUB/wPA + Af8DQQH/A5wB/wP2Af8EAANyAYAD9gH/A1UB/wOJAf8DlQH/AfIC8QH/AfEB7wHwAf8B8QHvAfAB/wHN + AcsBzAH/Ac0BywHMAf8BzQHLAcwB/wHNAcsBzAH/Ac0BywHMAf8BzQHLAcwB/wHbAdkB2gH/Ae4B7QHu + Af8B9AHyAfMB/wHzAvIB/wHhAuAB/wPAAf8DQQH/A5wB/wP2Af8YAAMwATgD3AHnA+0B/wN5Af8DVwH/ + A80B/wPzAf8DbwH/A2YB/wPoAf8D6AHzA2UBcngAA78BzAPIAf8DQQH/AdsC2gH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A3IB/wNvAf8D9gH/AfMB8QHyAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AccCxgH/A0EB/wNBAf8DnAH/A/YB/wQA + A3IBgAP2Af8DQQH/A0EB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHHAsYB/wNBAf8DQQH/A5wB/wP2Af8UAAMwATkD7wH6A/YB/wP1Af8D8AH/A1UB/wN5Af8DlgH/ + A0sB/wO/Af8D9QH/A/UB/wPzAf0DUQFddAADbAF5A/UB/wNgAf8DXAH/Ae4B7AHtAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wG6ArkB/wNBAf8DvAH/A+UB/wNGAf8DQQH/A0EB/wNBAf8DQQH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wOcAf8D9gH/BAADcgGAA/YB/wNBAf8BxwLGAf8B8QHv + AfAB/wHxAe8B8AH/AdEC0AH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8DnAH/A/YB/xAAAycBLgPKAdcD2gH/A2wB/wNBAf8DQQH/ + A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A1UB/wO6Af8D8wH9A1UBYXAAAwwBDwPYAeQD1wH/A00B/wNQ + Af8BxQHEAcUB/wHjAuIB/wHaAdkB2gH/AYwCiwH/A0EB/wOKAf8D9gH/Ad8C3gH/Ac0BywHMAf8BzQHL + AcwB/wHNAcsBzAH/Ac0BywHMAf8BzQHLAcwB/wHxAe8B8AH/AeYB5AHlAf8DwAH/A0EB/wOcAf8D9gH/ + BAADcgGAA/YB/wNBAf8BjAKLAf8DwAH/AfEB7wHwAf8B6wLqAf8BzQHLAcwB/wHNAcsBzAH/Ac0BywHM + Af8BzQHLAcwB/wHNAcsBzAH/Ac0BywHMAf8BzQHLAcwB/wHNAcsBzAH/Ac0BywHMAf8BzQHLAcwB/wHx + Ae8B8AH/AeYB5AHlAf8DwAH/A0EB/wOcAf8D9gH/EAADSQFUA/YB/wNiAf8BaAFnAWgB/wG3ArYB/wG3 + ArYB/wG3ArYB/wG3ArYB/wG3ArYB/wG3ArYB/wG3ArYB/wG3ArYB/wGQAo8B/wNVAf8D9QH/A5oBqXQA + A3QBggP2Af8D3AH/A3cB/wNDAf8DQQH/A0EB/wNUAf8DqwH/A/UB/wH1AvQB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AccCxgH/A0EB/wNBAf8DnAH/ + A/YB/wQAA3IBgAP2Af8DQQH/A0EB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHHAsYB/wNBAf8DQQH/A5wB/wP2Af8QAANKAVUD9gH/A0IB/wF7AXoBewH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wG3 + ArYB/wNBAf8D9QH/A5wBqnQAA3IBgAP2Af8D1gH/A/YB/wPqAf8D1AH/A9sB/wP1Af8D8AH/AeIC4QH/ + AfEB7wHwAf8DQQH/AccCxgH/AfEB7wHwAf8DQQH/AccCxgH/AfEB7wHwAf8DQQH/AccCxgH/AfEB7wHw + Af8DQQH/A5wB/wP2Af8EAANyAYAD9gH/A0EB/wHHAsYB/wHxAe8B8AH/A0EB/wHHAsYB/wHxAe8B8AH/ + A0EB/wHHAsYB/wHxAe8B8AH/A0EB/wHHAsYB/wHxAe8B8AH/A0EB/wHHAsYB/wHxAe8B8AH/A0EB/wHH + AsYB/wHxAe8B8AH/A0EB/wOcAf8D9gH/EAADSgFVA/YB/wNCAf8BewF6AXsB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8BtwK2Af8DQQH/ + A/UB/wOcAap0AANyAYAD9gH/A0IB/wOBAf8DpgH/A74B/wOyAf8DngH/A1MB/wGMAosB/wPAAf8DQQH/ + AYwCiwH/A8AB/wNBAf8BjAKLAf8DwAH/A0EB/wGMAosB/wPAAf8DQQH/A5wB/wP2Af8EAANyAYAD9gH/ + A0EB/wGMAosB/wPAAf8DQQH/AYwCiwH/A8AB/wNBAf8BjAKLAf8DwAH/A0EB/wGMAosB/wPAAf8DQQH/ + AYwCiwH/A8AB/wNBAf8BjAKLAf8DwAH/A0EB/wOcAf8D9gH/EAADSgFVA/YB/wNCAf8BewF6AXsB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8BtwK2Af8DQQH/A/UB/wOcAap0AANyAYAD9gH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wOcAf8D9gH/BAADcgGA + A/YB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/ + A0EB/wNBAf8DQQH/A0EB/wNBAf8DnAH/A/YB/xAAA0oBVQP2Af8DQgH/AXsBegF7Af8B8AHuAe8B/wHw + Ae4B7wH/AfAB7gHvAf8B8AHuAe8B/wHwAe4B7wH/AfAB7gHvAf8B8AHuAe8B/wHwAe4B7wH/AbcCtgH/ + A0EB/wP1Af8DnAGqdAADcgGAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wQAA3IBgAP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8QAAM3AUED3wHqA7oB/wNVAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wNKAf8DmQH/A/QB/gN2AYR0AAMzATwDagF3A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3 + A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3 + BAADMwE8A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3A2oBdwNq + AXcDagF3A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3A2oBdxAAAwcBCQNaAWYD8QH8A84B/wO6Af8DugH/ + A7oB/wO6Af8DugH/A7oB/wO6Af8DugH/A8QB/wPpAf4DhAGSAxABFP8ASQADSgFVA/EB/AP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/QB/gOEAZJ4AAP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/2AAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP0Af4DRAFd + Ax4BKAMeASgDHgEoAx4BKAMeASgDHgEoAx4BKAMeASgDHgEoAx4BKAMeASgDGAEgYAAD9gH/A8YB/wOW + Af8DlgH/A5YB/wOWAf8DlgH/A5YB/wOWAf8DlgH/A5YB/wOWAf8DlgH/A5YB/wOWAf8DlgH/A5YB/wOW + Af8DlgH/A5YB/wOWAf8DlgH/A8YB/wP2Af9gAAP2Af8DxgH/A4sB/wOLAf8DiwH/A9sB/wOQAf8DjAH/ + A40B/wOqAf8D9AH+A/QB/gP0Af4D9AH+A/QB/gP0Af4D9AH+A/QB/gP0Af4D9AH+A/QB/gP0Af4D9AH+ + A7gBzWAAA/YB/wOcAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wOcAf8D9gH/A20BgwOmAbgDpgG4A6YBuAOm + AbgDpgG4A6YBuAOmAbgDpgG4A6YBuAOnAbgDpwG4A6cBuAOnAbgDpwG4A6cBuAOnAbgDqAG4A6gBuAOo + AbgDqAG4A6gBuAObAawDAwEEA/YB/wOLAf8BjwKOAf8BugG4AbkB/wFkAWMBZAH/A74B/wFHAkYB/wG5 + AbcBuAH/AbQBsgGzAf8DWAH/A/MB/wNNAf8DQAH/A0EB/wNBAf8DQgH/A0IB/wNCAf8DQgH/A0MB/wND + Af8DQwH/A6EB/wO6Ac4DaAGBA6IBtwOiAbcDogG3A6IBtwOiAbcDogG3A6IBtwOjAbcDowG3A6MBtwOj + AbcDowG3A6MBtwOkAbcDpAG3A6QBtwOkAbcDpAG3A6QBtwOkAbcDpAG3A6IBtgMfASoD9gH/A5wB/wNB + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A5wB/wP2Af8DpAG2A+AB/wOqAf8DqwH/A6sB/wOr + Af8DqwH/A6sB/wOsAf8DrAH/A6wB/wOsAf8DrQH/A60B/wOtAf8DrQH/A60B/wOsAf8DrQH/A6wB/wOs + Af8DyAH/A+MB7wMEAQYD9gH/A4sB/wNFAf8DVQH/AzcB/wO+Af8DMgH/AVcCVgH/A1UB/wNUAf8D8wH/ + AXIBcQFyAf8BZwFmAWcB/wFnAWYBZwH/AWcBZgFnAf8BaAFnAWgB/wFoAWcBaAH/AWgBZwFoAf8BaAFn + AWgB/wFpAWgBaQH/AWUBZAFlAf8DKAH/A44B/wO6Ac4DoAG1A+4B/wPNAf8DzQH/A80B/wPNAf8DzQH/ + A80B/wPNAf8DzQH/A80B/wPNAf8DzQH/A80B/wPNAf8DzQH/A80B/wPNAf8DzQH/A80B/wPNAf8D2AH/ + A/QB/gMrATsD9gH/A5wB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A5wB/wP2Af8DowG2 + A8EB/wM1Af8DNQH/AzYB/wM2Af8DNwH/AzcB/wM3Af8DNwH/AzgB/wM4Af8DOQH/AzkB/wM5Af8DOgH/ + AzoB/wM6Af8DOwH/AzsB/wM6Af8DggH/A+MB7wMEAQYD9gH/A4sB/wNpAf8BiAKHAf8BTgJNAf8DvwH/ + AzwB/wGJAocB/wGEAoMB/wNVAf8D9QH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AeoC6QH/AysB/wOOAf8DugHOA6ABtQPU + Af8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/Ay0B/wMtAf8DLQH/Ay0B/wMu + Af8DLgH/Ay4B/wMuAf8DLwH/A2cB/wP0Af4DKwE7A/YB/wOcAf8DQQH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/A0EB/wOcAf8D9gH/A6MBtgPCAf8DNQH/AzUB/wM1Af8DNQH/AzYB/wM2Af8DNwH/AzcB/wM4 + Af8DOAH/AzgB/wM4Af8DOQH/AzkB/wM6Af8DOgH/AzoB/wM6Af8DOgH/A4IB/wPjAe8DBAEGA/YB/wOM + Af8DIQH/AyEB/wMhAf8DvwH/AyYB/wMiAf8DIgH/A1IB/wP1Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B6gLpAf8DKwH/ + A44B/wO6Ac4DoAG1A9QB/wMsAf8BhwKGAf8BvQG7AbwB/wG9AbsBvAH/Ab4BvAG9Af8BvgG8Ab0B/wG+ + AbwBvQH/Ab4BvAG9Af8BvgG8Ab0B/wG+AbwBvQH/Ab4BvAG9Af8BvgG8Ab0B/wG/Ab0BvgH/Ab8BvQG+ + Af8BvwG9Ab4B/wG/Ab0BvgH/Ab8BvQG+Af8BvgG8Ab0B/wFEAkMB/wNnAf8D9AH+AysBOwP2Af8DnAH/ + A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8DnAH/A/YB/wOjAbYDwgH/AzQB/wM1Af8DNQH/ + AzUB/wM1Af8DNgH/AzYB/wM3Af8DNwH/AzgB/wM4Af8DOAH/AzgB/wM5Af8DOQH/AzoB/wM5Af8DOgH/ + AzoB/wOCAf8D4wHvAwQBBgP2Af8DjAH/AyEB/wMhAf8DIQH/A78B/wMmAf8DIgH/AyIB/wNSAf8D9QH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AeoC6QH/AysB/wOOAf8DuQHOA6ABtQPUAf8DKwH/Aa4BrQGuAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8AHuAe8B/wFN + AkwB/wNmAf8D9AH+AysBOwP2Af8DnAH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8DnAH/ + A/YB/wOjAbYDwgH/AzQB/wM0Af8DNQH/AzUB/wM1Af8DNQH/AzYB/wM2Af8DNwH/AzcB/wM3Af8DOAH/ + AzgB/wM4Af8DOAH/AzkB/wM5Af8DOQH/AzkB/wOCAf8D4wHvAwQBBgP2Af8DjAH/AyEB/wMhAf8DIQH/ + A78B/wMmAf8DIgH/AyIB/wNSAf8D9QH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AeoC6QH/AyoB/wONAf8DuQHOA6ABtQPU + Af8DKwH/Aa4BrQGuAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8AHuAe8B/wFMAksB/wNmAf8D9AH+AysBOwP2Af8DnAH/A0EB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wNBAf8DnAH/A/YB/wOjAbYDwgH/AzQB/wM0Af8DNAH/AzUB/wM1Af8DNQH/ + AzYB/wM2Af8DNgH/AzcB/wM3Af8DNwH/AzgB/wM4Af8DOAH/AzgB/wM5Af8DOQH/AzkB/wOBAf8D4wHv + AwQBBgP2Af8DjAH/AyEB/wMiAf8DIgH/A78B/wMoAf8DJgH/AyYB/wNSAf8D9QH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AeoC6QH/AyoB/wONAf8DuQHOA58BtQPUAf8DKgH/Aa4BrQGuAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8AHuAe8B/wFLAkoB/wNlAf8D9AH+ + AysBOwP2Af8DnAH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8DnAH/A/YB/wOiAbYDwgH/ + AzMB/wMzAf8DNAH/A0AB/wGKAokB/wGKAokB/wOHAf8DOgH/AzYB/wM2Af8BbAFrAWwB/wNOAf8DNwH/ + AzcB/wM4Af8DOAH/AzgB/wM4Af8DOAH/A4EB/wPjAe8DBAEGA/YB/wONAf8DIgH/AyIB/wMiAf8DvwH/ + A1UB/wHqAegB6QH/AeQB4gHjAf8DWgH/A/UB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHqAegB6QH/AykB/wONAf8DuQHO + A58BtQPUAf8DKgH/Aa0BrAGtAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8AHuAe8B/wFKAkkB/wNlAf8D9AH+AysBOwP2Af8DnAH/A0EB/wHx + Ae8B8AH/AfEC8AH/AfMC8gH/AfQB8gHzAf8B8wHyAfMB/wHyAfEB8gH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/A0EB/wOcAf8D9gH/A6IBtgPCAf8DMwH/AzMB/wMzAf8BVAJTAf8BpgKl + Af8BTwJOAf8BTgJNAf8BbwFuAW8B/wFnAWYBZwH/AzgB/wHGAcQBxQH/Az0B/wM3Af8DNwH/AzcB/wM3 + Af8DOAH/AzcB/wM4Af8DgQH/A+IB7wMEAQYD9gH/A40B/wMiAf8DIgH/AyIB/wO/Af8BWAFXAVgB/wHv + Ae4B7wH/AeoB6AHpAf8DWgH/A/UB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHqAegB6QH/AykB/wOMAf8DuQHOA58BtQPU + Af8DKQH/Aa4BrQGuAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8AHuAe8B/wFKAkkB/wNkAf8D9AH+AysBOwP2Af8DnAH/A08B/wP0Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP1Af8B8gHxAfIB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wOcAf8D9gH/ + A6IBtgPCAf8DMwH/AzMB/wMzAf8BVAJTAf8BmAGXAZgB/wM0Af8DNAH/A0wB/wFKAUkBSgH/AWcCZgH/ + AaICoQH/AzYB/wM2Af8DNgH/AzYB/wM3Af8DNwH/AzcB/wM3Af8DgQH/A+IB7wMEAQYD9gH/A44B/wGZ + ApgB/wHDAcIBwwH/A2wB/wPBAf8BOgI5Af8DWQH/AVgCVwH/A1oB/wP1Af8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B6gHo + AekB/wMpAf8DjAH/A7kBzgOfAbUD1AH/AykB/wGuAa0BrgH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfAB7gHvAf8BSQJIAf8DZAH/A/QB/gMr + ATsD9gH/A7AB/wPfAf8B9QHwAecB/wHsAckBgQH/AeUBrgE8Af8B4wGkASAB/wHjAacBKgH/AecBuQFX + Af8B8QHeAbgB/wP2Af8B9ALzAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A5wB/wP2Af8DogG2A8IB/wMzAf8DMwH/ + AzMB/wNTAf8BywLKAf8BpAKjAf8BoQKgAf8BXQJcAf8DUgH/AbMBsgGzAf8BUgFRAVIB/wM2Af8DNgH/ + AzYB/wM2Af8DNgH/AzYB/wM2Af8DNgH/A4AB/wPiAe8DBAEGA/YB/wOOAf8BmQKYAf8BwwHCAcMB/wNt + Af8DyAH/A+8B/wPvAf8D7wH/A/AB/wP1Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B6gHoAekB/wMpAf8DjAH/A7kBzgOf + AbUD1AH/AykB/wGuAa0BrgH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfAB7gHvAf8BSQJIAf8DYwH/A/QB/gMqATsD9gH/A/YB/wHzAesB2QH/ + AeUBqwE1Af8B4gGhARoB/wHiAaEBGgH/AfYB6AHLAf8B7gHLAYMB/wHiAaEBGgH/AeIBoQEaAf8B7AHL + AYgB/wP2Af8B8gHxAfIB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A5wB/wP2Af8DogG2A8IB/wMyAf8DMgH/AzMB/wM1Af8DRQH/ + A0cB/wNGAf8DNAH/AzQB/wFPAk4B/wM1Af8DNQH/AzUB/wM1Af8DNgH/AzYB/wM2Af8DNgH/AzYB/wOA + Af8D4gHvAwQBBgP2Af8DyAH/A48B/wOPAf8DjwH/A98B/wPzAf8B8gHwAfEB/wHyAfAB8QH/AfIB8AHx + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHqAegB6QH/AygB/wOLAf8DuQHOA58BtQPUAf8DKQH/Aa4BrQGu + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8AHuAe8B/wFIAkcB/wNiAf8D9AH+AyoBOwP2Af8D9gH/AecBtQFOAf8B4gGhARoB/wHiAaEBGgH/ + AeIBoQEaBf8B9gHmAcQB/wHiAaEBGgH/AeIBoQEaAf8B4gGhARsB/wHwAd8BuwH/A/UB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/ + A5wB/wP2Af8DogG2A8IB/wMyAf8DMgH/AzMB/wMzAf8DMwH/AzMB/wM0Af8DNAH/AzQB/wM0Af8DNAH/ + AzUB/wM1Af8DNQH/AzUB/wM1Af8DNQH/AzUB/wM2Af8DfgH/A+IB7wMEAQYD8wH9A+UB/wPVAf8D8gH/ + A/QB/wP0Af8B8gLxAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHq + AegB6QH/AygB/wOMAf8DuQHOA58BtQPUAf8DKQH/Aa4BrQGuAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8AHuAe8B/wFIAkcB/wNiAf8D9AH+ + AyoBOwP2Af8B8gHkAckB/wHiAaEBGgH/AeIBoQEaAf8B4gGhARoB/wHiAaEBGgH/Ae4BywGDAf8B6AG4 + AVIB/wHiAaEBGgH/AeIBoQEaAf8B4gGhARoB/wHoAboBWgH/A/YB/wNpAf8DQQH/A0EB/wNBAf8DQQH/ + A0EB/wNBAf8DQQH/A0EB/wOcAf8D9gH/A6IBtgPCAf8DMgH/AzIB/wMyAf8DMwH/AzMB/wMzAf8DNAH/ + AzQB/wM0Af8DNAH/AzQB/wM0Af8DNAH/AzUB/wM1Af8DNQH/AzUB/wM1Af8DNQH/A30B/wPiAe8DBAEG + A7wB0AOQAf8DKAH/Ab0CvAH/AcQBwwHEAf8BxAHDAcQB/wHEAcMBxAH/AcQBwwHEAf8BxAHDAcQB/wHE + AcMBxAH/AcMBwgHDAf8BwwHCAcMB/wHDAcIBwwH/AcIBwQHCAf8BwgHBAcIB/wHPAc0BzgH/AeAB3gHf + Af8B1wHWAdcB/wHEAcIBwwH/AcEBwAHBAf8BugK5Af8DJwH/A4sB/wO5Ac4DnwG1A9QB/wMpAf8BiwKK + Af8BxQLEAf8BxQLEAf8BxQLEAf8BxQLEAf8BxQLEAf8BxQLEAf8BxQLEAf8BxQLEAf8BxQLEAf8BxQLE + Af8BxQLEAf8B2QLYAf8B7AHrAewB/wHfAd4B3wH/AcgCxwH/AcQCwwH/Az4B/wNiAf8D9AH+AyoBOwP2 + Af8B7QHRAZgB/wHiAaEBGgH/AeIBoQEaAf8B4gGhARoB/wHiAaEBGgX/AfsB9gHsAf8B6QG4AVMB/wHi + AaEBGgH/AeIBoQEaAf8B4wGnASkB/wP2Af8DjgH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DnAH/A/YB/wOiAbYDwgH/A0oB/wPIAf8DyQH/A8oB/wPKAf8DygH/A8oB/wPKAf8DygH/A8oB/wPK + Af8D1AH/A98B/wPfAf8D3wH/A98B/wPYAf8DyQH/A0gB/wN9Af8D4gHvAwQBBgO6Ac4DkAH/AyUB/wMl + Af8DJQH/AyUB/wMlAf8DJQH/AyUB/wMkAf8DJAH/AyQB/wMkAf8DKAH/A58B/wPtAf8D9AH/A/IB/wPQ + Af8DTAH/AyQB/wMkAf8DiwH/A7kBzgOfAbUD1AH/AykB/wMpAf8DKQH/AygB/wMoAf8DKAH/AygB/wMo + Af8DKAH/AycB/wMnAf8DLgH/A64B/wPwAf8D9QH/A/MB/wPcAf8DVQH/AygB/wNhAf8D9AH+AyoBOwP2 + Af8B7AHNAY4B/wHiAaEBGgH/AeIBoQEaAf8B4gGhARoB/wHiAaEBGgH/AfYB5wHJBf8B/QH8AfkB/wHi + AaEBGgH/AeIBoQEaAf8B4wGkASAB/wP2Af8DlgH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DnAH/A/YB/wOiAbYDwgH/AzIB/wMyAf8DMgH/AzIB/wMzAf8DMwH/AzMB/wMzAf8DMwH/AzMB/wNA + Af8D4AH/AdIB4QHTAf8BhAG2AYcB/wF9AbMBgQH/AdIB4gHTAf8D2wH/A4QB/wODAf8DrwH/A+YB8gMe + AScDugHOA5AB/wMmAf8DJgH/AyYB/wMmAf8DJQH/AyUB/wMlAf8DJQH/AyUB/wMlAf8DJAH/A6IB/wHy + AfMB8gH/AaIBxQGkAf8BagGlAW0B/wGBAbEBgwH/AfIB9AHyAf8D3gH/A8YB/wPGAf8D3gH/A7wB0QOf + AbUD1AH/AykB/wMpAf8DKQH/AygB/wMoAf8DKAH/AygB/wMoAf8DKAH/AycB/wMoAf8DtwH/AecB7QHn + Af8BfQGxAYEB/wFYAZoBWwH/AYEBswGDAf8D9QH/A9kB/wPFAf8D0wH/A/QB/gMwAUED9gH/Ae8B2QGq + Af8B4gGhARoB/wHiAaEBGgH/AfYB5gHEBf8B4gGhARoB/wH2AeYBxAX/AeIBoQEaAf8B4gGhARoB/wHm + Aa8BPQH/A/YB/wOAAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wOcAf8D9gH/A6IBtgPC + Af8DMgH/AzIB/wMyAf8DMwH/AzMB/wMyAf8DMwH/AzMB/wMzAf8DMwH/A5EB/wHkAesB5AH/AT0BjQFA + Af8BigG5AY0B/wG0AdEBtQH/Ac8B3wHPAf8B8wH0AfMB/wHhAesB4gH/AeQB7AHkAf8B8AHzAfAB/wP0 + Af4DoQG1A7oBzgORAf8DJwH/AycB/wMmAf8DJgH/AyYB/wMmAf8DJgH/AyUB/wMlAf8DJQH/AzQB/wPv + Af8BnQHCAZ8B/wE1AYABNwH/AaEBxQGjAf8BmQHAAZsB/wHxAfMB8QH/AeYB7AHnAf8B7AHwAewB/wHg + AegB4AH/A/UB/wPyAf0DnwG1A9QB/wMpAf8DKQH/AykB/wMpAf8DKAH/AygB/wMoAf8DKAH/AygB/wMo + Af8DTgH/AfMB9AHzAf8BZwGjAWoB/wFNAZIBUAH/AboB1AG7Af8BsAHPAbIB/wP1Af8B2gHlAdsB/wHp + Ae4B6QH/AdUB4gHWAf8D9AH+A+gE9gH/AfUB8QHoAf8B4wGlASUB/wHiAaEBGgH/AfUB4gG8Bf8B8wHb + Aa0B/wH7AfYB7AP/Af4B/wHiAaEBGgH/AeIBoQEaAf8B7AHKAYQB/wP2Af8DsAH/A6IB/wOiAf8DogH/ + A6IB/wOiAf8DogH/A6IB/wOiAf8DzAH/A/YB/wOiAbYDywH/A1EB/wNRAf8DUQH/A1EB/wNRAf8DUgH/ + A1IB/wNSAf8DUgH/A1IB/wPBAf8BugHUAbsB/wFNAZcBUAH/AfQB9QH0Af8D9gH/A/UB/wGpAcoBqgH/ + AVYBnAFZAf8BYAGjAWMB/wGYAcEBmgH/A/UB/wOiAbYDugHOA5EB/wMnAf8DJwH/AycB/wMnAf8DJwH/ + AyYB/wMmAf8DJgH/AyYB/wMlAf8DUgH/A/UB/wFZAZoBXAH/AZMBvQGVAf8D9QH/A/UB/wHiAeoB4gH/ + AVwBmwFfAf8BeQGtAXsB/wFCAYgBRAH/Ac0B3wHOAf8D9gH/A58BtQPUAf8DKQH/AykB/wMpAf8DKQH/ + AykB/wMoAf8DKAH/AygB/wMoAf8DKAH/A4AB/wHyAfMB8gH/ATUBggE4Af8BvQHVAb4B/wP2Af8D9gH/ + AdQB4wHUAf8BTQGSAVAB/wFxAakBdAH/AUMBigFFAf8BxwHbAcgB/wP2Af8D9gH/A/YB/wHtAdABlQH/ + AeIBoQEaAf8B5wGxAUIB/wH7AfYB7AP/Af4B/wH+Af0B+wH/AfIB2wGqAf8B4gGhARoB/wHlAasBNQH/ + AfUB8QHoAf8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8DogG2 + A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/A/UB/wP1Af8D9QH/AcMB2gHEAf8BRgGS + AUkB/wHwAfMB8AH/A/UB/wP1Af8BuQHTAboB/wFeAaEBYQH/AWkBqAFsAf8BqAHKAaoB/wP1Af8DogG2 + A7sBzgPfAf8DyAH/A8gB/wPIAf8DyAH/A8gB/wPIAf8DyAH/A8gB/wPIAf8DyAH/A9MB/wP1Af8BYQGf + AWQB/wGNAboBjwH/A/UB/wP2Af8B5QHrAeUB/wFjAZ8BZQH/AYIBswGEAf8BRQGLAUgB/wHTAeIB0wH/ + A/YB/wOgAbUD7QH/A8cB/wPGAf8DxwH/A8cB/wPGAf8DxgH/A8YB/wPGAf8DxgH/A8cB/wPbAf8B8wH0 + AfMB/wE+AYgBQgH/Aa0BzQGuAf8D9QH/A/UB/wHhAekB4gH/AV0BnQFgAf8BkwG9AZUB/wFPAZMBUgH/ + AdoB5gHbAf8D9gH/BAADYgFvA/YB/wHtAc8BkgH/AeMBpQEjAf8B4gGhARoB/wHiAaEBGgH/AeIBoQEa + Af8B4gGhARoB/wHmAbMBSAH/AfMB6wHZAf8D0AHdAxEBFSwAA1QBbAN6AZcDegGXA3oBlwN6AZcDegGX + A3oBlwN6AZcDegGXA3oBlwN6AZcDegGXA5kBtAHuAfAB7gH+AVUBnAFYAf8BagGoAWwB/wGZAcIBmwH/ + AcUB2gHGAf8BfAGyAYAB/wFBAY8BRAH/AUYBkgFJAf8BagGoAW0B/wH0AfUB9AH/A6IBtgNlAYADqQG+ + A6kBvgOpAb4DqQG+A6kBvgOpAb4DqQG+A6kBvgOpAb4DqQG+A6kBvgOoAb4D5AHyAbkB0wG6Af8BMAF8 + ATQB/wGQAbsBkgH/AY8BuwGRAf8BzAHeAc0B/wE6AYMBPQH/AUUBiwFIAf8BLwF5ATIB/wGpAcoBqgH/ + A/YB/wNuAYcDqgG/A6oBvwOqAb8DqgG/A6oBvwOqAb8DqgG/A6oBvwOqAb8DqgG/A6oBvwOuAcMD8QH8 + AaABxQGhAf8BNAGAATgB/wGEAbMBhgH/AYQBtAGHAf8BwgHZAcMB/wE6AYUBPQH/AU0BkQFQAf8BNAGA + ATcB/wGyAdABtAH/A/YB/wgAA2QBcQPuAfgB9QHwAeUB/wHvAdgBqQH/AewBzgGQAf8B7QHRAZgB/wHy + AeMBxQH/AvYB9QH/A7sByAMbASBgAAMGAQgDrAHDAekB7gHpAf4BpgHJAagB/wGWAcEBmAH/AdcB5QHY + Af8B7QHwAe0B/wG3AdIBuAH/Ab8B1wHBAf8B5QHsAeYB/wP0Af4DnQGzNAADUQFvA/IB/QHAAdcBwQH/ + AXwBrwF+Af8BhwG1AYkB/wHxAfMB8QH/AboB0wG7Af8B0wHiAdQB/wGcAcIBngH/A/QB/gP0Af4zAAEB + A3wBnAPzAf4BwQHYAcIB/wGQAbsBkgH/AacByAGpAf8D9AH/AbsB1AG8Af8B3AHnAd0B/wGwAc4BsgH/ + A/QB/gP0Af4MAAMhAScDgwGRA8oB1wPtAfcD3AHnA64BvANRAV0DAwEEaAADCQEMA2ABfQO2AcgDvgHP + A74BzwO+Ac8DvgHPA74BzwO+Ac8DsAHDAw8BFDcAAQEDSwFoA9EB4wP0Af4D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP0Af4DVAFzNAADBAEFA1sBewPTAeQD9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9AH+A08Ba+AA + Ax8BKgPSAeID7gH6A5QBsAM0AUkDBAEFTAADBAEGA5ABqwPTAeMDYgF/AxcBHvAAAyYBNAMEAQYMAAMi + AS4D0wHkAeoB5QHpAf4BtQGKAawB/wHjAdgB4QH/A/IB/QPGAdkDGwEkMAADBwEJAwIBAwwAAwgBCwOO + AaoD8gH+Ad4BzwHbAf8B8gHxAfIB/gPpAfYDlAGuAxcBH+AAAxMBGQOAAZ8D7wH7A5gBtgMSARgDBwEJ + AycBNgPWAecB6QHjAegB/gF8ATkBbgH/AV4BFAFNAf8BYAEWAVAB/wGZAWEBjgH/A/QB/gMwAUADBwEJ + AwcBCQMHAQkDBwEJAwcBCQMHAQkDBwEJAwcBCQMHAQkIAAM1AUgDygHbA40BqAMOARMDBwEJAw0BEQOf + AbgB8wLyAf4BrgF8AaQB/wFpARkBVwH/AYMBOgFzAf8BxgGkAb8B/wP1Af8DPQFRAwcBCQMHAQkDBwEJ + AwcBCQMHAQkDBwEJAwQBBgQAAyoBMgPDAdAD9QH+A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D5QHwA34BjAMAAQEEAAMFAQcDdQGD + A9AB3QPjAe4D4wHuA+MB7gPjAe4D4wHuA+MB7gPjAe4D4wHuA+MB7gPjAe4D4wHuA+MB7gPjAe4D4wHu + A+MB7gPjAe4D4wHuA5sBqQwAA94B7AHxAe8B8AH+AcUBpQG/Af8B7AHnAeoB/gPsAfgD5wH1A+4B+gHo + AeEB5wH/AXkBNQFqAf8BXQETAUwB/wFdARMBTAH/AV0BEwFMAf8BdAEuAWUB/wP0Af4D6wH3A+cB9QPn + AfUD5wH1A+cB9QPnAfUD5wH1A+cB9QPnAfUD5wH1BAADagGEA/EB/AHpAeEB5wH/AfIB8AHxAf4D6wH3 + A+gB9QPpAfYB8gHxAfIB/gGrAXgBoQH/AWkBGAFXAf8BaAEYAVcB/wFoARgBVwH/AYUBPgF1Af8D9QH/ + A+sB9wPoAfUD6AH1A+gB9QPoAfUD6AH1A+gB9QOaAbAEAAPDAdAB6AHvAfMB/wG3AdYB6QH/AbQB1AHo + Af8BtAHUAegB/wG0AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0 + AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0AdQB6AH/AbQB1AHo + Af8BtAHUAegB/wHLAeAB7QH/A/YB/wNDAU4EAAN+AYwB9QL2Af8BzAHgAe0B/wG6AdcB6QH/AbQB1AHo + Af8BtAHUAegB/wG0AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0 + AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0AdQB6AH/Ac8B4gHu + Af8D8gH8AxcBHAgAA+UB8gHOAbIByAH/AVwBEwFLAf8BdwEyAWgB/wHiAdcB4AH/A/UB/wHnAd4B5QH/ + AXYBMAFnAf8BXQETAUwB/wFlARwBVAH/AWYBHQFVAf8BXQETAUwB/wFzAS4BZAH/A/UB/wG3AbYBtwH/ + A5IB/wORAf8DkQH/A5EB/wORAf8DkAH/A5AB/wO8Af8D9gH/BAADpgG3AeEB0wHeAf8BcQEjAWAB/wGc + AWABkAH/Ae8B6wHuAf8D9QH/AfMB8gHzAf8BqAFzAZ0B/wFpARgBVwH/AWkBGAFXAf8BaQEaAVgB/wFo + ARgBVwH/AYUBPgF1Af8D9QH/A6UB/wOZAf8DmQH/A5kB/wOZAf8DngH/A+8B/wOmAbcEAAP0Af0BuQHW + AekB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF8AbcB3QH/A/YB/wNuAXwEAAPaAeUByQHfAewB/wF5 + AbYB3AH/AasBzwHmAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BiAG9Ad8B/wH0AfUB9gH/A3IBfwgAA+UB8gHMAbABxgH/AW8BKAFeAf8BZwEg + AVgB/wFoASABWAH/AcUBpQG+Af8BcQEtAWIB/wFcARIBSwH/AXQBMAFlAf8B2wHLAdgB/wF7ATgBbAH/ + AVwBEgFLAf8BcgEtAWMB/wP1Af8DcQH/Ay4B/wMuAf8DLgH/Ay4B/wMtAf8DLQH/AykB/wN5Af8D9gH/ + BAADpgG3AdkBxQHVAf8BcAEiAV8B/wFsARwBWwH/AYgBQgF4Af8B5QHaAeIB/wGlAW4BmwH/AWkBGAFX + Af8BawEcAVoB/wG7AZIBswH/AYYBQAF2Af8BaAEYAVYB/wGFAT4BdAH/A/QB/wFpAWgBaQH/AVcBVgFX + Af8BVwFWAVcB/wFXAVYBVwH/AVEBUAFRAf8DNAH/A9sB/wOlAbcEAAP2Af8BuAHWAekB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF6AbcB3AH/A/YB/wNxAX4EAAP2Af8BuAHWAekB/wF5AbYB3AH/Ad0B6QHx + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wHRAeMB7wH/A9YB4gMCAQMEAAPkAfIBzAGvAcYB/wGFAUQBdgH/AdwBzQHYAf8BawEl + AVsB/wFbARIBSgH/AVsBEgFKAf8BkgFWAYYB/wHqAeMB6AH/AfEB7wHwAf8BewE4AWwB/wFbARIBSgH/ + AXIBLQFjAf8D9QH/Ae4B7AHtAf8B6wHpAeoB/wHrAekB6gH/AesB6QHqAf8B6wHpAeoB/wHqAegB6QH/ + AekB5wHoAf8BRwJGAf8DeQH/A/YB/wQAA6YBtwHZAcUB1QH/AYoBRAF7Af8BywGvAcUB/wFuAR8BXQH/ + AW0BHwFdAf8BaAEYAVcB/wF2ASsBZgH/AdYBwAHRAf8D9QH/AYcBQQF4Af8BZwEYAVYB/wGFAT4BdAH/ + A/UB/wHjAeIB4wH/AdYC1QH/AdsC2gH/AfAC7wH/AdQB0wHUAf8DNAH/A9wB/wOlAbcEAAP2Af8BuAHW + AekB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF6AbcB3AH/A/YB/wNxAX4EAAP2Af8BuAHWAekB/wF5 + AbYB3AH/A/YB/wGTAcMB4QH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AZ8ByQHkAf8D9gH/A0EBSwQAA+QB8gHMAa8BxgH/AYUBRAF1Af8B2QHH + AdUB/wFoASIBWAH/AVoBEQFJAf8BWgERAUkB/wGLAUwBfAH/AegB4AHmAf8B8QHvAfAB/wF6ATgBawH/ + AVoBEQFJAf8BcQEsAWIB/wP1Af8B8gLxAf8B8QHwAfEB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfAB7gHvAf8DRwH/A3gB/wP2Af8EAAOlAbcB2QHFAdUB/wGJAUQBegH/Ae8B7AHvAf8BigFF + AXsB/wFoARgBVwH/AWgBGAFWAf8BqAFzAZ4B/wHzAfIB8wH/A/UB/wGHAUEBdwH/AWcBGAFWAf8BhAE9 + AXQB/wP1Af8BkwGSAZMB/wMzAf8DWAH/AfEB7wHwAf8B1QHUAdUB/wM1Af8D3AH/A6UBtwQAA/YB/wG4 + AdYB6QH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXoBtwHcAf8D9gH/A3EBfgQAA/YB/wG4AdYB6QH/ + AXkBtgHcAf8D9gH/AcQB3QHsAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BewG3AdwB/wHnAe4B8wH/A6MBsQQAA+QB8gHMAa8BxQH/AWsBJQFb + Af8BYwEdAVMB/wFoASIBWAH/AcgBqwHDAf8BcAErAWAB/wFZAREBSAH/AW0BKQFeAf8B2QHGAdUB/wF5 + ATYBagH/AVkBEQFIAf8BcAErAWAB/wP1Af8B8gLxAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfAB7gHvAf8DRgH/A3gB/wP2Af8EAAOlAbcB2QHFAdUB/wGBATgBcAH/AY8BTQGB + Af8BagEZAVgB/wGiAWgBlgH/AXEBJAFgAf8BZwEYAVUB/wGWAVcBiAH/AewB5gHrAf8BhgFBAXcB/wFm + ARcBVQH/AYMBPAFzAf8D9QH/AdMC0gH/AbUCtAH/AcABvwHAAf8B8QHvAfAB/wHWAdUB1gH/AzUB/wPc + Af8DpQG3BAAD9gH/AbgB1gHpAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BegG3AdwB/wP2Af8DcQF+ + BAAD9gH/AbgB1gHpAf8BeQG2AdwB/wP2Af8B8AHzAfQB/wGBAboB3gH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AbgB1gHpAf8D8gH8AxkBHgPk + AfIB0QG3AcwB/wFXAREBRwH/AX4BPQFvAf8B6AHfAeYB/wP1Af8B6QHfAecB/wFyAS4BYgH/AVgBEQFH + Af8BXgEXAU4B/wFgARoBTwH/AVgBEQFHAf8BbwErAWAB/wP1Af8B8gLxAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfAB7gHvAf8DRQH/A3cB/wP2Af8EAAOlAbcB2QHEAdUB/wFp + ARgBVwH/AW8BIgFfAf8ByQGsAcMB/wP0Af8B2QHGAdUB/wFwASQBXwH/AWYBFwFVAf8BewEzAWwB/wF2 + ASwBZgH/AWYBFwFUAf8BgwE8AXMB/wP1Af8BwQLAAf8BjwGOAY8B/wGkAaMBpAH/AfEB7wHwAf8B1gHV + AdYB/wM0Af8D3AH/A6UBtwQAA/YB/wG4AdYB6QH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXoBtwHc + Af8D9gH/A3EBfgQAA/YB/wG4AdYB6QH/AXkBtgHcAf8D9gH/A/YB/wGrAc8B5gH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AYgBvQHfAf8B9AH1 + AfYB/wNyAX8D5AHyA/QB/wHXAcIB0wH/AfEB7wHwAf8B9ALzAf8D8QH/A/QB/wHpAeAB5wH/AXEBLgFh + Af8BVwEQAUYB/wFXARABRgH/AVcBEAFGAf8BbgEqAV8B/wP1Af8B8gLxAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfAB7gHvAf8DRAH/A3YB/wP2Af8EAAOeAbQB7wHtAe8B/gG3 + AYwBrgH/Ad4BzgHaAf8D9QH/A5AB/wPaAf8B2QHFAdQB/wFwASMBXwH/AWYBFwFUAf8BZgEXAVQB/wFm + ARcBVAH/AYMBPAFzAf8D9QH/AZgClwH/ATwBOwE8Af8BYAFfAWAB/wHxAe8B8AH/AdYB1QHWAf8DNAH/ + A90B/wOlAbcEAAP2Af8BuAHWAekB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF6AbcB3AH/A/YB/wNx + AX4EAAP2Af8BuAHWAekB/wF5AbYB3AH/A/YB/wP2Af8B3QHpAfEB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AdEB4wHvAf8D1gHi + A+QB8gPhAf8D6QH/AfIB8QHyAf8B8QHvAfAB/wHxAe8B8AH/AfEB8AHxAf8B9AHzAfQB/wHpAeEB6AH/ + AXEBLwFjAf8BVwEQAUYB/wFeARgBTQH/AaYBdQGdAf8D9QH/AfIB8AHxAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfAB7gHvAf8DQwH/A3UB/wP2Af8EAAMYASADmQGzA/MB/QPp + AfYD9AH+A2wB/wGEAYMBhAH/AfQB8wH0Af8B2gHHAdUB/wFuASMBXgH/AWUBFwFUAf8BZQEXAVQB/wGQ + AVABhAH/A/UB/wHsAeoB6wH/AeYB5AHlAf8B6AHmAecB/wHxAe8B8AH/AdYB1QHWAf8DNAH/A90B/wOl + AbcEAAP2Af8BuAHWAekB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF6AbcB3AH/A/YB/wNxAX4EAAP2 + Af8BuAHWAekB/wF5AbYB3AH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wG4AdYB6QH/AXkBtgHcAf8D9gH/A/YB/wP2Af8D5AHyA7oB/wMw + Af8B4QHfAeAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfQC8wH/AeoB4gHoAf8BugGT + AbIB/wHsAeYB6wH/A/UB/wPzAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8AHuAe8B/wNCAf8DdQH/A/YB/wsAAQEDPwFWAzYBRwPzAf0DawH/AYMCggH/AfEB8AHx + Af8B9ALzAf8B2QHFAdUB/wGTAVQBhwH/Ac8BtQHKAf8B8gHxAfIB/wH0AvMB/wOUAf8DNwH/AVsBWgFb + Af8B8QHvAfAB/wHWAdUB1gH/AzMB/wPcAf8DpQG3BAAD9gH/AbgB1gHpAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BegG3AdwB/wP2Af8DcQF+BAAD9gH/AbgB1gHpAf8BeQG2AdwB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8BuAHWAekB/wF5 + AbYB3AH/A/YB/wO2AcQDegGIA+QB8gO6Af8DJAH/AeAB3gHfAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfQB8wH0Af8D9AH/A/IB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8AHuAe8B/wNCAf8DdAH/A/YB/xAA + AxQBGwPzAf0DawH/AYICgQH/A98B/wGVAZQBlQH/A98B/wPyAf8DxAH/A7sB/wHxAfAB8QH/AcMBwgHD + Af8BlQKUAf8BqgKpAf8B8QHvAfAB/wHVAdQB1QH/AzMB/wPcAf8DpQG3BAAD9gH/AbgB1gHpAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BegG3AdwB/wP2Af8DcQF+BAAD9gH/AbgB1gHpAf8BeQG2AdwB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8BuAHWAekB/wF5AbYB3AH/A/YB/wNyAYAEAAPkAfIDugH/AyMB/wHgAd4B3wH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8AHu + Ae8B/wNBAf8DcwH/A/YB/xAAAxQBGwPzAf0DawH/AYICgQH/Ac8BzQHOAf8DNgH/A00B/wNYAf8DNgH/ + AX4CfQH/AfEB8AHxAf8B8QHwAfEB/wHxAfAB8QH/AfEB8AHxAf8B8QHwAfEB/wHVAdQB1QH/AzMB/wPc + Af8DpQG3BAAD9gH/AbgB1gHpAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BegG3AdwB/wP2Af8DcQF+ + BAAD9gH/AbgB1gHpAf8BeQG2AdwB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8BuAHWAekB/wF5AbYB3AH/A/YB/wNyAYAEAAPjAfIDugH/ + AyIB/wHgAd4B3wH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8AHuAe8B/wNAAf8DcwH/A/YB/xAAAxQBGwPzAf0DagH/AYICgQH/ + AfAB7gHvAf8B6wHpAeoB/wHrAekB6gH/AesB6QHqAf8B6wHpAeoB/wHtAesB7AH/AeoB6AHpAf8BxQHE + AcUB/wHFAcQBxQH/AcUBxAHFAf8BxQHEAcUB/wGvAq4B/wMxAf8D3AH/A6UBtwQAA/YB/wG4AdYB6QH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXoBtwHcAf8D9gH/A3EBfgQAA/YB/wG4AdYB6QH/AXkBtgHc + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/Ac0B4QHtAf8BtAHUAegB/wG0 + AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0AdQB6AH/AZcBxQHiAf8BfAG3Ad0B/wP2Af8DbQF6BAAD4wHy + A7kB/wMiAf8B4AHeAd8B/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfAB7gHvAf8DPwH/A3IB/wP2Af8QAAMUARsD8wH9A2oB/wGB + AoAB/wHfAt4B/wGUApMB/wGUApMB/wGUApMB/wGUApMB/wG5ArgB/wHUAdMB1AH/AzAB/wMwAf8DMAH/ + AzEB/wMxAf8DPgH/A+cB/wOkAbcEAAP2Af8BuAHWAekB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wGP + AcEB4AH/A/YB/wNiAW8EAAP2Af8BuAHWAekB/wF5AbYB3AH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/Ae8B8gH1Af8BgQG6Ad0B/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BfgG5Ad0B/wG5AdYB6QH/A/YB/wNBAUwEAAPjAfIDuQH/AyEB/wHdAtwB/wHvAe0B7gH/ + Ae8B7QHuAf8B7wHtAe4B/wHvAe4B7wH/Ae8B7gHvAf8B7wHuAe8B/wHvAe4B7wH/Ae8B7gHvAf8B7wHu + Ae8B/wHvAe0B7gH/Ae8B7QHuAf8B7wHtAe4B/wHvAe0B7gH/Ae8B7QHuAf8B7wHtAe4B/wHvAe0B7gH/ + Ae4B7AHtAf8BPgI9Af8DcgH/A/YB/xAAAxQBGwPzAf0DagH/AYECgAH/Ac8BzQHOAf8DNQH/AzYB/wM1 + Af8DNQH/AX0CfAH/AdQB0wHUAf8DMAH/AzAB/wMwAf8DMQH/AzwB/wPMAf8D8AH7A04BaAQAA/YB/wG4 + AdYB6QH/AXkBtgHcAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wGTAcIB4AH/AZsBxwHjAf8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D4wHuAxgBHQQAA/YB/wG4AdYB6QH/AXkBtgHcAf8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8BuAHWAekB/wGBAbkB3QH/Ae4B8gH1Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8DqgG3AwEBAgQAA+MB8gO5Af8DIAH/Ay0B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMv + Af8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay4B/wMtAf8DLQH/AyIB/wNyAf8D9gH/EAADFAEb + A/MB/QNqAf8BgQKAAf8B7wHuAe8B/wHrAekB6gH/AesB6QHqAf8B6wHpAeoB/wHrAekB6gH/Ae0B6wHs + Af8B0wHSAdMB/wMwAf8DLwH/AzAB/wM7Af8DywH/A/AB+wNVAXAIAAP2Af8BuAHWAekB/wF5AbYB3AH/ + AdAB4QHsAf8B0AHhAewB/wHQAeEB7AH/AdAB4QHsAf8B0AHhAewB/wHQAeEB7AH/AdAB4QHsAf8B0AHh + AewB/wHQAeEB7AH/AbsB1wHoAf8BeQG2AdwB/wHYAecB8AH/A9cB4wNqAXcDagF3A2oBdwNqAXcDYQFu + AxkBHggAA/AB+gG8AdgB6gH/AXkBtgHcAf8BtAHUAegB/wG0AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0 + AdQB6AH/AbQB1AHoAf8BtAHUAegB/wG0AdQB6AH/AbQB1AHoAf8BgQG6Ad0B/wG4AdYB6QH/A/UB/gOC + AZADegGIA3oBiAN6AYgDdgGEA0oBVQMBAQIIAAPjAfIDuAH/AyAB/wMgAf8DIAH/AyAB/wMgAf8DIAH/ + AyAB/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DcQH/ + A/YB/xAAAxQBGwPzAf0DaQH/AYACfgH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AdMB0gHTAf8DLwH/Ay8B/wM6Af8DyQH/A/EB/ANWAXIMAAPmAfEBywHgAe0B/wF7 + AbcB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BmwHHAeMB/wP2Af8DXQFqIAADwAHNAeQB7AHyAf8BjAHA + AeAB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wGBAboB3QH/Ae8B8gH1Af8DpAGyJAAD4wHyA7gB/wMfAf8DHwH/Ax8B/wMf + Af8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMf + Af8DHwH/A3EB/wP2Af8QAAMUARsD8wH9A2kB/wF+AX0BfgH/AfAC7wH/AfAC7wH/AfAC7wH/AfAC7wH/ + AfAC7wH/AfAC7wH/A9IB/wMvAf8DOQH/A8gB/wPxAfwDWAF0EAADgQGPA/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wPWAeIDBQEHIAADOwFFA+4B+AP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/UB/gMrATMkAAPjAfIDuAH/Ax8B/wMf + Af8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMfAf8DHwH/Ax8B/wMf + Af8DHwH/Ax8B/wMfAf8DcAH/A/YB/xAAAxQBGwPzAf0DaAH/AT0BPAE9Af8DUgH/A1EB/wNRAf8DUQH/ + A1EB/wNRAf8DSgH/AzgB/wPHAf8D8QH8A1kBdhcAAQEDRgFRA2oBdwNqAXcDagF3A2oBdwNqAXcDagF3 + A2oBdwNqAXcDagF3A2oBdwNqAXcDagF3AzgBQSgAAx4BJANpAXYDegGIA3oBiAN6AYgDegGIA3oBiAN6 + AYgDegGIA3oBiAN6AYgDegGIA2IBbygAA+MB8gPZAf8DigH/A4oB/wOLAf8DiwH/A4sB/wOLAf8DiwH/ + A4sB/wOLAf8DiwH/A4sB/wOLAf8DiwH/A4sB/wOKAf8DigH/A4kB/wOJAf8DiQH/A4kB/wO6Af8D9gH/ + EAADFAEbA/MB/QPFAf8DlgH/A5UB/wOVAf8DlQH/A5UB/wOVAf8DlQH/A5cB/wPQAf8D8QH8A1wBedgA + A+MB8gP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/EAADFAEbA/MB/QP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP0Af4DXgF7HAABQgFNAT4HAAE+AwABKAMAAWADAAFIAwABAQEA + AQEFAAFgAQMWAAP/AQABhwEPAf8BAAEYAQcBgAEIBAABgAEPAf8BAAEwAQMGAAGAAQ8B/wEAASABAQYA + AYACAAGACAABgAIAAYAIAAGAAgABgAgAAYACAAGACAABgAsAAYARAAGAAQgKAAGAAQgBAQYAAYACAAH4 + AQABHwYAAYACAAH8AQABPwYAAYACAAH8AQABPwYAAYACAAH4AQABHwYAAYACAAHwAQABDwYAAYACAAHw + AQABDwMAAYACAAGAAgAB8AEAAQ8DAAGAAgABgAIAAfABAAEPAwABgAIAAYACAAHwAQABDwMAAYACAAGA + AgAB8AEAAQ8DAAGAAgABgAIAAfABAAEPAwABgAIAAYACAAHwAQABDwMABv8B/AEAAT8GAAP/AwAD/wMA + A/8DAAP/5AABgAEHAf8JAAHAAQ8C/wHwAQAB/wH4AQAB/wHwAQAB4AEfAv8B+AEAAf8B+AEAAf8B+AEA + B/8BAwL/AYMH/wHOAQEB/wHnAQAH/wMAAcABAAEBAgABAQIAAQcDAAGAAQABAQIAAQECAAEDAwABgAEA + AQECAAEBAgABAwMAAYABAAEBAgABAQIAAQEDAAGAAQABAQIAAQECAAEBAwABgAEAAQECAAEBAgABAQMA + AYABAAEBAgABAQYAAYABAAEBAgABAQYAAYABAAEBAgABAQYAAYABAAEBAgABAQYAAcABAAEBAgABAQYA + AfABAAEBAgABAQIAAQEDAAHwAQABAQIAAQECAAEBAwAB8AEAAQECAAEBAgABAQMAAfABAAEBAgABAQIA + AQEDAAHwAQABAQIAAQECAAEBAwAB8AEAAQMCAAEDAgABAwMAAfABAAEHAgAB/wEAAQEB/wMAAfABAAEP + AgAB/wEAAQEB/wMAAfABAAEfAQABAQH/AYABAwH/AwAB8AEAAT8G/wMAAfABAAF/Cw== + + + + 340, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB8 + NwAAAk1TRnQBSQFMAgEBCwEAARgBAAEIAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABMAMAAQEBAAEgBgABMBYAA/QB/QOlAbMDKAEwBAADIgEpA5QBogPyAfwgAAOZAacD9gH/A/YB/wO2 + AcQD9gH/A/YB/wOZAacEAAMFAQcDcAF9A84B2gPtAfcDzgHaA24BfAMFAQcEAAMRARUDxQHSA/YB/wP2 + Af8D9gH/A/YB/wPKAdcDFAEYAxEBFQPFAdID9gH/A/YB/wP2Af8D9gH/A8oB1wMUARhEAAP2Af8DlwH/ + A+YB/QO4AcYD5gH9A5cB/wP2Af8gAANbAWgDsgH/A34B/wP2Af8DfQH/A7MB/wNbAWgDBgEIA7YBxAGu + AbQB8QH/ATMBQwHpAf8BCwEeAeYB/wEzAUMB6QH/Aa8BtQHxAf8DtAHCAwYBCAPGAdMDogH/A0EB/wNB + Af8DQQH/A0EB/wOcAf8DxgHTA8YB0wOiAf8DQQH/A0EB/wNBAf8DQQH/A5wB/wPGAdNEAAP2Af8DQQH/ + A1MB/wOAAf8DUwH/A0EB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wMiASgD4QH/ + A0gB/wPnAf8DSQH/A+AB/wP2Af8D9gH/Aa0BswHxAf8BAAETAeUB/wE6AUkB6gH/AQABEwHlAf8BOAFI + AeoB/wEAARMB5QH/Aa8BtQHxAf8D9gH/A/YB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wNBAf8D9gH/A/YB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/ + RAAD9gH/A0EB/wHwAe4B7wH/Ac0BzAHNAf8B8AHuAe8B/wNBAf8D9gH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wP2Af8DAAEBA/YB/wNYAf8DfgH/A1gB/wPlAf8DQgH/A9gB/wExAUEB6AH/AToBSQHq + Af8B/AH9Af4B/wGxAbcB9QH/AfwB/QH+Af8BOgFJAeoB/wEzAUMB6QH/A/YB/wP2Af8DQQH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A/YB/wP2Af8DQQH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8DQQH/A/YB/0QAA/YB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/ + A/YB/wNBAf8B8QHvAfAB/wNBAf8B8QHvAfAB/wNBAf8B8QHvAfAB/wNBAf8D9gH/AxQBGQPyAf8DYAH/ + A0EB/wNgAf8D6gH/A1UB/wP2Af8BDAEfAeYB/wEAARMB5QH/AbEBtwH1Bf8BsQG3AfUB/wEAARMB5QH/ + AQwBHwHmAf8D9gH/A/YB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/ + A/YB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/QAADAQECA/YB/wNB + Af8DowH/A3oB/wOjAf8DQQH/A/YB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8DQQH/A0EB/wP2Af8DXgFrA7MB/wGbAZoBmwH/AfEB7wHwAf8BmgGZAZoB/wOzAf8B8QHwAfEB/wP1 + Af8BMQFBAegB/wE6AUkB6gH/AfwB/QH+Af8BsAG2AfUB/wH8Af0B/gH/AToBSQHqAf8BMwFDAekB/wP2 + Af8DxgHTA5wB/wNBAf8DQQH/A0EB/wNBAf8DlgH/A8YB0wPGAdMDnAH/A0EB/wNBAf8DQQH/A0EB/wOW + Af8DxgHTQAADVQFhA9EB/wNVAf8B1ALTAf8B6wHpAeoB/wHUAtMB/wNVAf8D0QH/AfMB8gHzAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8DWAFlA7AB/wGcAZsBnAH/ + AfEB7wHwAf8BmwGaAZsB/wOwAf8B8wHxAfIB/wH0AvMB/wGtAbMB8QH/AQABEwHlAf8BOAFIAeoB/wEA + ARMB5QH/ATgBSAHqAf8BAAETAeUB/wGuAbQB8QH/A/YB/wMSARYDxgHTA/YB/wP2Af8DiQH/A4oB/wPt + AfcDFAEZAxQBGQPtAfcDigH/A4oB/wP2Af8D9gH/A8YB0wMSARZAAAO/AcwDbgH/Ad4B3AHdAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B3QLcAf8DbwH/A/UB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/A0EB/wNBAf8D9gH/AxYBGwPwAf8DewH/A0kB/wN8Af8B8QLwAf8B8QHwAfEB/wHxAe8B8AH/ + AfUC9AH/Aa0BswHxAf8BMgFCAegB/wEKAR0B5gH/ATIBQgHoAf8BrgG0AfEB/wPGAf8D9gH/DAADIgEo + A+QB9wNXAf8DxAH/A2oBdwNrAXgDxwH/A1UB/wPjAfgDJQEsTAAD6AHzA0sB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DSwH/A/IB/wNBAf8DQQH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/A0EB/wP2Af8EAAP2Af8D0AH/A/EB/wH1AfQB9QH/AfEB8AHxAf8DQQH/A0EB/wNFAf8DlgH/ + A9cB/wH2AfUB9gH/AfUB9AH1Af8B9ALzAf8DRwH/A/YB/xAAA2sBeAPHAf8DWAH/A+UB+APnAfgDWgH/ + A8QB/wNrAXhQAAPOAdoDYAH/AesB6QHqAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B6gHoAekB/wNg + Af8D9QH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A0EB/wP2Af8EAAP2Af8DQQH/ + A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wNBAf8DQQH/A/YB/wwAAxEBFQPFAdID9gH/A4kB/wOKAf8DigH/A4kB/wP2 + Af8DygHXAxQBGEwAA3sBiQOvAf8DgAH/Ae8B7QHuAf8B8QHvAfAB/wHvAe0B7gH/A34B/wOwAf8DpAH/ + A0EB/wNBAf8DQQH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/BAAD9gH/A0EB/wHxAe8B8AH/AfEB7wHw + Af8DTgH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/DAADxgHT + A6IB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wOcAf8DxgHTTAADCwEOA/UB/wOmAf8DTgH/AWMBYgFj + Af8DTgH/A6YB/wP0Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wNB + Af8D9gH/BAAD9gH/A0EB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A0EB/wP2Af8MAAP2Af8DQQH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af9QAAP2Af8DswH/ + A/UB/wPkAf8D9QH/A7MB/wHxAe8B8AH/A0EB/wHxAe8B8AH/A0EB/wHxAe8B8AH/A0EB/wHxAe8B8AH/ + A0EB/wP2Af8EAAP2Af8DQQH/AfEB7wHwAf8DQQH/AfEB7wHwAf8DQQH/AfEB7wHwAf8DQQH/AfEB7wHw + Af8DQQH/AfEB7wHwAf8DQQH/AfEB7wHwAf8DQQH/A/YB/wwAA/YB/wNBAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A/YB/1AAA/YB/wNBAf8DRQH/A1UB/wNF + Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/BAAD9gH/A0EB/wNBAf8DQQH/ + A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wP2Af8MAAP2Af8DQQH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af9QAAP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wQAA/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/DAADxgHT + A5wB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wOWAf8DxgHT2AADEQEVA8UB0gP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wPKAdcDFAEZTAAD9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/QAAD9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af9oAAP2Af8DQQH/ + A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wP2Af9AAAP2 + Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3Af8BMwGKATcB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8DQQH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/A0EB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wEzAYoBNwH/AfEB7wHwAf8B8QHvAfAB/wEzAYoBNwH/A/YB/wNB + Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wP2Af8D9gH/ATMBigE3Af8BMwGKATcB/wEz + AYoBNwH/ATMBigE3Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3 + Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3Af8BMwGKATcB/wP2Af8D9gH/A0EB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/A/YB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A/YB/wP2Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3 + Af8BMwGKATcB/wP2Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8D9gH/ATMBigE3Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8BMwGKATcB/wP2Af8D9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wNBAf8D9gH/A/YB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wNBAf8DQQH/A/YB/wP2Af8BMwGKATcB/wHxAe8B8AH/AfEB7wHwAf8BMwGKATcB/wP2 + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/A0EB/wP2Af8D9gH/ATMBigE3Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8BMwGKATcB/wP2Af8D9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNB + Af8D9gH/A/YB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A/YB/wP2Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3Af8BMwGKATcB/wP2Af8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2 + Af8D9gH/ATMBigE3Af8B8QHvAfAB/wHxAe8B8AH/AZoCmQH/A0EB/wNBAf8BugG5AboB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wEzAYoBNwH/A/YB/wP2Af8DQQH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8D9gH/A0EB/wNBAf8BbQFs + AW0B/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8BbQFsAW0B/wNBAf8DQQH/AYQCgwH/AeYB5AHl + Af8DQQH/A0EB/wP2Af8D9gH/ATMBigE3Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3Af8D9gH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNB + Af8D9gH/A/YB/wEzAYoBNwH/AfEB7wHwAf8BmgKZAf8DQQH/AeYB5AHlAf8B8QHvAfAB/wHbAdkB2gH/ + AfEB7wHwAf8DQQH/AfEB7wHwAf8DQQH/AfEB7wHwAf8B8QHvAfAB/wEzAYoBNwH/A/YB/wP2Af8DRwH/ + AfQC8wH/AfUB9AH1Af8D9QH/AfUB9AH1Af8B8wHyAfMB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8D9gH/A0EB/wNBAf8B8QHvAfAB/wNB + Af8DQQH/A0EB/wNBAf8B8QHvAfAB/wNBAf8DQQH/AdACzwH/AaQBowGkAf8DQQH/A0EB/wP2Af8D9gH/ + ATMBigE3Af8B8QHvAfAB/wHxAe8B8AH/ATMBigE3Af8D9gH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/A/YB/wEzAYoBNwH/ + AfEB7wHwAf8DQQH/AcUBxAHFAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A0EB/wNBAf8DQQH/ + A0EB/wHxAe8B8AH/ATMBigE3Af8D9gH/A/YB/wPGAf8B7gHTAZwB/wHlAa4BOgH/AeMBowEfAf8B5QGu + ATsB/wHuAdQBngH/A/QB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wNBAf8D9gH/A/YB/wNBAf8DQQH/AfEB7wHwAf8DQQH/A0EB/wNBAf8DQQH/AW0BbAFtAf8DQQH/ + AWIBYQFiAf8B8QHvAfAB/wNXAf8DQQH/A0EB/wP2Af8D9gH/ATMBigE3Af8B8QHvAfAB/wHxAe8B8AH/ + ATMBigE3Af8D9gH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/A/YB/wEzAYoBNwH/AfEB7wHwAf8DQQH/AcUBxAHFAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8B8QHvAfAB/wNBAf8B8QHvAfAB/wHxAe8B8AH/ + ATMBigE3Af8D9gH/A/YB/wHuAdYBpQH/AeIBoQEaAf8B4gGhARoF/wHiAaEBGgH/AeIBoQEaAf8B7wHX + AagB/wHzAfIB8wH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/ + A/YB/wNBAf8DQQH/AfEB7wHwAf8BbQFsAW0B/wFtAWwBbQH/AW0BbAFtAf8DQQH/AfEB7wHwAf8DQQH/ + Aa8BrgGvAf8BxQHEAcUB/wNBAf8DQQH/A0EB/wP2Af8D9gH/ATMBigE3Af8BMwGKATcB/wEzAYoBNwH/ + ATMBigE3Af8D9gH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/A/YB/wEzAYoBNwH/AfEB7wHwAf8BrwGuAa8B/wNBAf8B5gHk + AeUB/wHxAe8B8AH/AdsB2QHaAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wHxAe8B8AH/ATMBigE3Af8D9gH/ + A/YB/wHlAa8BPwH/AeIBoQEaAf8B4gGhARoB/wH2AegBywH/AeIBoQEaAf8B4gGhARoB/wHlAbABQQH/ + A9UB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wP2Af8D9gH/A0EB/wNBAf8DQQH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/A0EB/wNBAf8DQQH/AeYB5AHlAf8BhAKDAf8DQQH/A0EB/wNBAf8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/A/YB/wEzAYoBNwH/AfEB7wHwAf8B8QHvAfAB/wGv + Aa4BrwH/A0EB/wNBAf8BrwGuAa8B/wHxAe8B8AH/A0EB/wHxAe8B8AH/A0EB/wHxAe8B8AH/AfEB7wHw + Af8BMwGKATcB/wP2Af8D9gH/AeMBpQEjAf8B4gGhARoB/wHiAaEBGgH/AfwB+QHyAf8B/AH4AfAB/wHi + AaEBGgH/AeMBpQEkAf8D7QH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A/YB/wP2Af8DQQH/A0EB/wNB + Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wP2Af8D9gH/A0EB/wNB + Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/A/YB/wEz + AYoBNwH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ATMBigE3Af8D9gH/A/YB/wHl + Aa8BPwH/AeIBoQEaBf8B4gGhARoF/wHiAaEBGgH/AeUBsAFBAf8D1gH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A/YB/wP2Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wP2Af8D9gH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wNBAf8D9gH/A/YB/wEzAYoBNwH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/ATMBigE3Af8D9gH/A/YB/wHuAdYBpQH/AeIBoQEaAf8B+gH0AecB/wL+Af0B/wH6AfQB5gH/ + AeIBoQEaAf8B7wHXAagB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wNBAf8DQQH/ + A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A/YB/wP2Af8DQQH/ + A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wP2Af8D9gH/ + ATMBigE3Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3Af8BMwGK + ATcB/wEzAYoBNwH/ATMBigE3Af8BMwGKATcB/wEzAYoBNwH/ATMBigE3Af8BMwGKATcB/wP2Af8DBwEJ + A7cBxQHuAdMBmwH/AeUBrgE6Af8B4wGjAR4B/wHlAa4BOgH/Ae4B1AGeAf8DtgHEAwcBCRwAA/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/BAADBgEIA3IBfwPPAdsD7QH3A88B2wNxAX4DBgEI/wBlAAMoATADKAEwCAADKAEwA+QB7wPk + Ae8DcgGAAw0BECAAAygBMAMoATAIAAMoATAD5AHvA+QB7wNyAYADDQEQlAADKAEwA+QB7wPkAe8DKAEw + AygBMAPkAe8BqAFvAZ0B/wGJAToBeAH/AccBpgHAAf8D5AHvHAADKAEwA+QB7wP2Af8D9gH/A/YB/wP2 + Af8BqQFwAZ0B/wGKATsBeQH/AcgBpgHBAf8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8DdwGFA+8B+QP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A+8B+QN1AYMEAANAAUoDzwHb + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8DzwHbAwABAQQAA/YB/wGo + AW8BnQH/AagBbwGdAf8D9gH/A/YB/wGoAW8BnQH/AXgBHwFmAf8BeAEfAWYB/wF4AR8BZgH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wQAA+QB7wGpAXABnQH/AakBcAGdAf8D9gH/A/YB/wGpAXABnQH/ + AXkBIAFnAf8BeQEgAWcB/wF5ASABZwH/A/YB/wNBAf8DQQH/A0EB/wNBAf8D9gH/A+8B+QGDAboB3gH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wGDAbsB3gH/A+0B9wQAA9cB4wGYAcYB4wH/AZMBwwHh + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wHdAekB8QH/AzoBQwQAA/YB/wF4AR8BZgH/AXgBHwFmAf8BqAFv + AZ0B/wGoAW8BnQH/AXgBHwFmAf8BxAGhAb0B/wF4AR8BZgH/AXgBHwFmAf8D9gH/A0EB/wNBAf8DQQH/ + A0EB/wNBAf8D9gH/BAAD9gH/AXkBIAFnAf8BeQEgAWcB/wGpAXABnQH/AakBcAGdAf8BeQEgAWcB/wHE + AaIBvQH/AXkBIAFnAf8BeQEgAWcB/wP2Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A/YB/wP2 + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BegG2AdwB/wP1Af4EAAP2Af8BeQG2 + AdwB/wHEAd0B7AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BrAHPAeYB/wObAakEAAP2Af8BeAEfAWYB/wHE + AaEBvQH/AXgBHwFmAf8BeAEfAWYB/wHEAaEBvQH/AfEB7wHwAf8BeAEfAWYB/wF4AR8BZgH/A/YB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8EAAP2Af8BeQEgAWcB/wHxAe8B8AH/ + AXkBIAFnAf8BeQEgAWcB/wHEAaIBvQH/AfEB7wHwAf8BeQEgAWcB/wF5ASABZwH/A/YB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wNBAf8D9gH/A/YB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF6AbYB3AH/A/UB/gQAA/YB/wF5AbYB3AH/AfAB8wH0Af8BgQG6Ad4B/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wGA + AbkB3gH/AekB7AHuAfkDEgEWA/YB/wF4AR8BZgH/AcQBoQG9Af8BeAEfAWYB/wF4AR8BZgH/AcQBoQG9 + Af8B8QHvAfAB/wF4AR8BZgH/AXgBHwFmAf8D9gH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8DQQH/A/YB/wQAA/YB/wF5ASABZwH/AfEB7wHwAf8BeQEgAWcB/wF5ASABZwH/AcQBogG9Af8B8QHv + AfAB/wF5ASABZwH/AXkBIAFnAf8D9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A/YB/wP2Af8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BegG2AdwB/wP1Af4EAAP2Af8BeQG2AdwB/wP2 + Af8BqwHPAeYB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AcUB3QHsAf8DaQF2A/YB/wF4AR8BZgH/AXgBHwFm + Af8BqAFvAZ0B/wGoAW8BnQH/AXgBHwFmAf8BxAGhAb0B/wF4AR8BZgH/AXgBHwFmAf8D9gH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A/YB/wQAA/YB/wF5ASABZwH/AXkBIAFnAf8BqQFw + AZ0B/wGpAXABnQH/AXkBIAFnAf8BxAGiAb0B/wF5ASABZwH/AXkBIAFnAf8D9gH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/A0EB/wP2Af8D9gH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXoBtgHcAf8D9QH+BAAD9gH/AXkBtgHcAf8D9gH/Ad0B6QHxAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wGT + AcMB4QH/A88B2wP2Af8BqAFvAZ0B/wGoAW8BnQH/AfQB8wH0Af8B9AHzAfQB/wGoAW8BnQH/AXgBHwFm + Af8BeAEfAWYB/wF4AR8BZgH/A/YB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2 + Af8EAAPkAe8BqQFwAZ0B/wGpAXABnQH/A/YB/wH0AfMB9AH/AakBcAGdAf8BeQEgAWcB/wF5ASABZwH/ + AXkBIAFnAf8D9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A/YB/wP2Af8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BegG2AdwB/wP1Af4EAAP2Af8BeQG2AdwB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/AXkBtgHcAf8D9gH/A/YB/wP2Af8DswH/AfQB8wH0 + Af8B8QHvAfAB/wHxAe8B8AH/AfQB8wH0Af8BqAFvAZ0B/wGJAToBeAH/AccBpgHAAf8B9AHzAfQB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8EAAMoATAD5AHvA/YB/wNBAf8B8QHv + AfAB/wH0AfMB9AH/AakBcAGdAf8BigE7AXkB/wHIAaYBwQH/AfQB8wH0Af8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8DQQH/A/YB/wP2Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BegG2 + AdwB/wP1Af4EAAP2Af8BeQG2AdwB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/AXkBtgHcAf8D9gH/BAAD9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfQB8wH0Af8B9AHzAfQB/wHyAfAB8QH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wNBAf8D9gH/CAADKAEwA/YB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNB + Af8B8QHvAfAB/wNBAf8B8QHvAfAB/wHxAe8B8AH/A0EB/wP2Af8D9gH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BeQG2AdwB/wF5AbYB3AH/AXoBtgHcAf8D9QH+BAAD9gH/AXkBtgHcAf8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wF5AbYB3AH/A/YB/wQAA/YB/wNBAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A/YB/wwAA/YB/wNBAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/ + A/YB/wP2Af8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2 + AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BgwG7Ad4B/wPtAfcEAAP2 + Af8BeQG2AdwB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wHXAeYB7wH/AXkBtgHcAf8BeQG2AdwB/wF5 + AbYB3AH/AXkBtgHcAf8BnAHIAeMB/wPaAeUEAAP2Af8DQQH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/A0EB/wP2Af8MAAP2Af8DQQH/AfEB7wHwAf8B8QHvAfAB/wNBAf8DQQH/A0EB/wHx + Ae8B8AH/A0EB/wNBAf8DQQH/A0EB/wP2Af8D9gH/AXkBtgHcAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B4QHpAe8B/wGaAccB4wH/A/YB/wP2Af8D9gH/A+8B+QN2 + AYQEAAP2Af8BeQG2AdwB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wGZAcYB4wH/AdcB5gHvAf8D9gH/ + A/YB/wP2Af8D4QHsA0gBUwQAA/YB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wNBAf8DQQH/A/YB/wwAA/YB/wNBAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8DQQH/A0EB/wNBAf8DhgH/A/YB/wPvAfkBggG6Ad0B/wF5AbYB3AH/ + AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AdgB5gHvAf8DUAFc + FAAD3AHnAZcBxQHiAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHcAf8BeQG2AdwB/wF5AbYB3AH/AXkBtgHc + Af8BmQHGAeMB/wPQAd0DBAEFFAAD9gH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/ + A0EB/wNBAf8DQQH/A0EB/wNBAf8D9gH/DAAD9gH/A0EB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wNBAf8DQQH/A4YB/wP2Af8DkAGfA3gBhgPvAfkD9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A8sB2AMCAQMUAANLAVYD4gHtA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wNWAWIYAAP2Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wNB + Af8DQQH/A0EB/wP2Af8MAAP2Af8DQQH/A0EB/wNBAf8DQQH/A0EB/wNBAf8DQQH/A0EB/wOGAf8D9gH/ + A5ABn4QAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wwAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wOQAZ8IAAFC + AU0BPgcAAT4DAAEoAwABQAMAATADAAEBAQABAQUAAYABARYAA/8BAAGIAf8CAQQAAYAB/wYAAYAHAAGA + BwABgBsAAeABBwQAAYABAAHwAQ8EAAGAAQAB4AEHBAABgAEAAeABBwQAAYABAAHgAQcCAAGAAQABgAEA + AeABBwIAAYABAAGAAQAB4AEHAgABgAEAAYABAAHgAQcCAAT/AeABBwQAAv8BAwP/AgAC/2UAAX8GAAGA + C/8BmAE/AcwBHwT/AQABPwGAAgABAQEAAQECAAGAAgABAQEAAQECAAGAAgABAQEAAQECAAGAAgABAQQA + AYACAAEBBAABgAIAAQEEAAGAAgABAQQAAYACAAEBAQABAQIAAcACAAEBAQABAQIAAeACAAEBAQABAQIA + AeACAAEBAQABAQIAAeACAAEfAQABHwIAAeACAAEfAQABPwIAAeABAQT/AgAB4AEDCw== + + + + 542, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFormDocumentView.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFormDocumentView.Designer.cs new file mode 100644 index 00000000..1edcba5e --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFormDocumentView.Designer.cs @@ -0,0 +1,432 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + partial class LicensingFormDocumentView + { + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + protected void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Solution"); + this.tabControlSolution = new System.Windows.Forms.TabControl(); + this.tabPageSolution = new System.Windows.Forms.TabPage(); + this.splitContainerSolution = new System.Windows.Forms.SplitContainer(); + this.treeViewSolution = new System.Windows.Forms.TreeView(); + this.splitContainerSolutionRight = new System.Windows.Forms.SplitContainer(); + this.treeViewDetails = new System.Windows.Forms.TreeView(); + this.textBoxDetails = new System.Windows.Forms.TextBox(); + this.tabPageLicensing = new System.Windows.Forms.TabPage(); + this.licensingDataViewer = new AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.LicensingDataViewer(); + this.tabPageOutput = new System.Windows.Forms.TabPage(); + this.textBoxOutput = new System.Windows.Forms.TextBox(); + this.imageListSolutionTreeMedium = new System.Windows.Forms.ImageList(this.components); + this.toolStripMain = new System.Windows.Forms.ToolStrip(); + this.openStripSplitButton = new System.Windows.Forms.ToolStripSplitButton(); + this.openSolutionFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openSolutionFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openLicensingDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); + this.createStripButton = new System.Windows.Forms.ToolStripButton(); + this.checkStripButton = new System.Windows.Forms.ToolStripButton(); + this.updateStripButton = new System.Windows.Forms.ToolStripButton(); + this.licensingWriteStripButton = new System.Windows.Forms.ToolStripButton(); + this.licensingOptionsStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.cancelStripButton = new System.Windows.Forms.ToolStripButton(); + this.imageListSolutionTreeSmall = new System.Windows.Forms.ImageList(this.components); + this.selectFolderDialog = new IpTviewr.Native.WinForms.SelectFolderDialog(); + this.timerRefreshOutput = new System.Windows.Forms.Timer(this.components); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.tabControlSolution.SuspendLayout(); + this.tabPageSolution.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerSolution)).BeginInit(); + this.splitContainerSolution.Panel1.SuspendLayout(); + this.splitContainerSolution.Panel2.SuspendLayout(); + this.splitContainerSolution.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerSolutionRight)).BeginInit(); + this.splitContainerSolutionRight.Panel1.SuspendLayout(); + this.splitContainerSolutionRight.Panel2.SuspendLayout(); + this.splitContainerSolutionRight.SuspendLayout(); + this.tabPageLicensing.SuspendLayout(); + this.tabPageOutput.SuspendLayout(); + this.toolStripMain.SuspendLayout(); + this.SuspendLayout(); + // + // tabControlSolution + // + this.tabControlSolution.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControlSolution.Controls.Add(this.tabPageSolution); + this.tabControlSolution.Controls.Add(this.tabPageLicensing); + this.tabControlSolution.Controls.Add(this.tabPageOutput); + this.tabControlSolution.Location = new System.Drawing.Point(12, 28); + this.tabControlSolution.Name = "tabControlSolution"; + this.tabControlSolution.SelectedIndex = 0; + this.tabControlSolution.Size = new System.Drawing.Size(760, 521); + this.tabControlSolution.TabIndex = 0; + // + // tabPageSolution + // + this.tabPageSolution.Controls.Add(this.splitContainerSolution); + this.tabPageSolution.Location = new System.Drawing.Point(4, 22); + this.tabPageSolution.Name = "tabPageSolution"; + this.tabPageSolution.Padding = new System.Windows.Forms.Padding(3); + this.tabPageSolution.Size = new System.Drawing.Size(752, 495); + this.tabPageSolution.TabIndex = 0; + this.tabPageSolution.Text = "Solution"; + this.tabPageSolution.UseVisualStyleBackColor = true; + // + // splitContainerSolution + // + this.splitContainerSolution.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainerSolution.Location = new System.Drawing.Point(3, 3); + this.splitContainerSolution.Name = "splitContainerSolution"; + // + // splitContainerSolution.Panel1 + // + this.splitContainerSolution.Panel1.Controls.Add(this.treeViewSolution); + this.splitContainerSolution.Panel1MinSize = 125; + // + // splitContainerSolution.Panel2 + // + this.splitContainerSolution.Panel2.Controls.Add(this.splitContainerSolutionRight); + this.splitContainerSolution.Panel2MinSize = 125; + this.splitContainerSolution.Size = new System.Drawing.Size(746, 489); + this.splitContainerSolution.SplitterDistance = 350; + this.splitContainerSolution.TabIndex = 0; + // + // treeViewSolution + // + this.treeViewSolution.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeViewSolution.FullRowSelect = true; + this.treeViewSolution.HideSelection = false; + this.treeViewSolution.Location = new System.Drawing.Point(0, 0); + this.treeViewSolution.Name = "treeViewSolution"; + treeNode1.Name = "Node0"; + treeNode1.Text = "Solution"; + this.treeViewSolution.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode1}); + this.treeViewSolution.Size = new System.Drawing.Size(350, 489); + this.treeViewSolution.TabIndex = 0; + this.treeViewSolution.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeViewSolution_BeforeCollapse); + this.treeViewSolution.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeViewSolution_BeforeExpand); + this.treeViewSolution.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewSolution_AfterSelect); + // + // splitContainerSolutionRight + // + this.splitContainerSolutionRight.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainerSolutionRight.Location = new System.Drawing.Point(0, 0); + this.splitContainerSolutionRight.Name = "splitContainerSolutionRight"; + this.splitContainerSolutionRight.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainerSolutionRight.Panel1 + // + this.splitContainerSolutionRight.Panel1.Controls.Add(this.treeViewDetails); + // + // splitContainerSolutionRight.Panel2 + // + this.splitContainerSolutionRight.Panel2.Controls.Add(this.textBoxDetails); + this.splitContainerSolutionRight.Size = new System.Drawing.Size(392, 489); + this.splitContainerSolutionRight.SplitterDistance = 339; + this.splitContainerSolutionRight.TabIndex = 0; + // + // treeViewDetails + // + this.treeViewDetails.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeViewDetails.FullRowSelect = true; + this.treeViewDetails.HideSelection = false; + this.treeViewDetails.Location = new System.Drawing.Point(0, 0); + this.treeViewDetails.Name = "treeViewDetails"; + this.treeViewDetails.Size = new System.Drawing.Size(392, 339); + this.treeViewDetails.TabIndex = 0; + this.treeViewDetails.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewDetails_AfterSelect); + // + // textBoxDetails + // + this.textBoxDetails.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxDetails.Location = new System.Drawing.Point(0, 0); + this.textBoxDetails.Multiline = true; + this.textBoxDetails.Name = "textBoxDetails"; + this.textBoxDetails.ReadOnly = true; + this.textBoxDetails.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxDetails.Size = new System.Drawing.Size(392, 146); + this.textBoxDetails.TabIndex = 0; + // + // tabPageLicensing + // + this.tabPageLicensing.Controls.Add(this.licensingDataViewer); + this.tabPageLicensing.Location = new System.Drawing.Point(4, 22); + this.tabPageLicensing.Name = "tabPageLicensing"; + this.tabPageLicensing.Padding = new System.Windows.Forms.Padding(3); + this.tabPageLicensing.Size = new System.Drawing.Size(752, 495); + this.tabPageLicensing.TabIndex = 1; + this.tabPageLicensing.Text = "Licensing file"; + this.tabPageLicensing.UseVisualStyleBackColor = true; + // + // licensingDataViewer + // + this.licensingDataViewer.Dock = System.Windows.Forms.DockStyle.Fill; + this.licensingDataViewer.LicensingData = null; + this.licensingDataViewer.LicensingDataName = null; + this.licensingDataViewer.Location = new System.Drawing.Point(3, 3); + this.licensingDataViewer.Name = "licensingDataViewer"; + this.licensingDataViewer.Size = new System.Drawing.Size(746, 489); + this.licensingDataViewer.TabIndex = 0; + // + // tabPageOutput + // + this.tabPageOutput.Controls.Add(this.textBoxOutput); + this.tabPageOutput.Location = new System.Drawing.Point(4, 22); + this.tabPageOutput.Name = "tabPageOutput"; + this.tabPageOutput.Padding = new System.Windows.Forms.Padding(3); + this.tabPageOutput.Size = new System.Drawing.Size(752, 495); + this.tabPageOutput.TabIndex = 2; + this.tabPageOutput.Text = "Action output"; + this.tabPageOutput.UseVisualStyleBackColor = true; + // + // textBoxOutput + // + this.textBoxOutput.BackColor = System.Drawing.SystemColors.Window; + this.textBoxOutput.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBoxOutput.Location = new System.Drawing.Point(6, 6); + this.textBoxOutput.Multiline = true; + this.textBoxOutput.Name = "textBoxOutput"; + this.textBoxOutput.ReadOnly = true; + this.textBoxOutput.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxOutput.Size = new System.Drawing.Size(740, 483); + this.textBoxOutput.TabIndex = 0; + this.textBoxOutput.WordWrap = false; + // + // imageListSolutionTreeMedium + // + this.imageListSolutionTreeMedium.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.imageListSolutionTreeMedium.ImageSize = new System.Drawing.Size(24, 24); + this.imageListSolutionTreeMedium.TransparentColor = System.Drawing.Color.Transparent; + // + // toolStripMain + // + this.toolStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openStripSplitButton, + this.toolStripSeparator1, + this.toolStripLabel1, + this.createStripButton, + this.checkStripButton, + this.updateStripButton, + this.licensingWriteStripButton, + this.licensingOptionsStripButton, + this.toolStripSeparator2, + this.cancelStripButton}); + this.toolStripMain.Location = new System.Drawing.Point(0, 0); + this.toolStripMain.Name = "toolStripMain"; + this.toolStripMain.Size = new System.Drawing.Size(784, 25); + this.toolStripMain.TabIndex = 1; + this.toolStripMain.Text = "toolStrip1"; + // + // openStripSplitButton + // + this.openStripSplitButton.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openSolutionFolderToolStripMenuItem, + this.openSolutionFileToolStripMenuItem, + this.openLicensingDataToolStripMenuItem}); + this.openStripSplitButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Open_16x; + this.openStripSplitButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.openStripSplitButton.Name = "openStripSplitButton"; + this.openStripSplitButton.Size = new System.Drawing.Size(68, 22); + this.openStripSplitButton.Text = "Open"; + this.openStripSplitButton.ButtonClick += new System.EventHandler(this.openStripSplitButton_ButtonClick); + // + // openSolutionFolderToolStripMenuItem + // + this.openSolutionFolderToolStripMenuItem.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.LicensingResources.VS_Solution_16x; + this.openSolutionFolderToolStripMenuItem.Name = "openSolutionFolderToolStripMenuItem"; + this.openSolutionFolderToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.openSolutionFolderToolStripMenuItem.Text = "Solution folder"; + this.openSolutionFolderToolStripMenuItem.Click += new System.EventHandler(this.openSolutionFolderToolStripMenuItem_Click); + // + // openSolutionFileToolStripMenuItem + // + this.openSolutionFileToolStripMenuItem.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.LicensingResources.VS_Solution_File_16x; + this.openSolutionFileToolStripMenuItem.Name = "openSolutionFileToolStripMenuItem"; + this.openSolutionFileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.openSolutionFileToolStripMenuItem.Text = "Solution file"; + this.openSolutionFileToolStripMenuItem.Click += new System.EventHandler(this.openSolutionFileToolStripMenuItem_Click); + // + // openLicensingDataToolStripMenuItem + // + this.openLicensingDataToolStripMenuItem.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.LicensingResources.Certificate_16x; + this.openLicensingDataToolStripMenuItem.Name = "openLicensingDataToolStripMenuItem"; + this.openLicensingDataToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.openLicensingDataToolStripMenuItem.Text = "Licensing file"; + this.openLicensingDataToolStripMenuItem.Click += new System.EventHandler(this.openLicensingDataToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // toolStripLabel1 + // + this.toolStripLabel1.Name = "toolStripLabel1"; + this.toolStripLabel1.Size = new System.Drawing.Size(60, 22); + this.toolStripLabel1.Text = "Licensing:"; + // + // createStripButton + // + this.createStripButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Add_16xM; + this.createStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.createStripButton.Name = "createStripButton"; + this.createStripButton.Size = new System.Drawing.Size(61, 22); + this.createStripButton.Text = "Create"; + this.createStripButton.ToolTipText = "Create missing licensing files"; + this.createStripButton.Click += new System.EventHandler(this.createStripButton_Click); + // + // checkStripButton + // + this.checkStripButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Status_Ok_SmallCircle_16x16; + this.checkStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.checkStripButton.Name = "checkStripButton"; + this.checkStripButton.Size = new System.Drawing.Size(60, 22); + this.checkStripButton.Text = "Check"; + this.checkStripButton.Click += new System.EventHandler(this.checkStripButton_Click); + // + // updateStripButton + // + this.updateStripButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.RefreshBlue_16x16; + this.updateStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.updateStripButton.Name = "updateStripButton"; + this.updateStripButton.Size = new System.Drawing.Size(65, 22); + this.updateStripButton.Text = "Update"; + this.updateStripButton.Click += new System.EventHandler(this.updateStripButton_Click); + // + // licensingWriteStripButton + // + this.licensingWriteStripButton.ForeColor = System.Drawing.SystemColors.ControlText; + this.licensingWriteStripButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.TextFile_16x; + this.licensingWriteStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.licensingWriteStripButton.Name = "licensingWriteStripButton"; + this.licensingWriteStripButton.Size = new System.Drawing.Size(55, 22); + this.licensingWriteStripButton.Text = "Write"; + this.licensingWriteStripButton.Click += new System.EventHandler(this.licensingWriteStripButton_Click); + // + // licensingOptionsStripButton + // + this.licensingOptionsStripButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Settings_16x16; + this.licensingOptionsStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.licensingOptionsStripButton.Name = "licensingOptionsStripButton"; + this.licensingOptionsStripButton.Size = new System.Drawing.Size(69, 22); + this.licensingOptionsStripButton.Text = "Options"; + this.licensingOptionsStripButton.Click += new System.EventHandler(this.licensingOptionsStripButton_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // cancelStripButton + // + this.cancelStripButton.Enabled = false; + this.cancelStripButton.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Close_16x16; + this.cancelStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.cancelStripButton.Name = "cancelStripButton"; + this.cancelStripButton.Size = new System.Drawing.Size(72, 22); + this.cancelStripButton.Text = "CANCEL"; + // + // imageListSolutionTreeSmall + // + this.imageListSolutionTreeSmall.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.imageListSolutionTreeSmall.ImageSize = new System.Drawing.Size(16, 16); + this.imageListSolutionTreeSmall.TransparentColor = System.Drawing.Color.Transparent; + // + // timerRefreshOutput + // + this.timerRefreshOutput.Interval = 1500; + // + // openFileDialog + // + this.openFileDialog.RestoreDirectory = true; + // + // LicensingFormDocumentView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 561); + this.Controls.Add(this.toolStripMain); + this.Controls.Add(this.tabControlSolution); + this.Name = "LicensingFormDocumentView"; + this.Text = "Licensing maintenance"; + this.tabControlSolution.ResumeLayout(false); + this.tabPageSolution.ResumeLayout(false); + this.splitContainerSolution.Panel1.ResumeLayout(false); + this.splitContainerSolution.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerSolution)).EndInit(); + this.splitContainerSolution.ResumeLayout(false); + this.splitContainerSolutionRight.Panel1.ResumeLayout(false); + this.splitContainerSolutionRight.Panel2.ResumeLayout(false); + this.splitContainerSolutionRight.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerSolutionRight)).EndInit(); + this.splitContainerSolutionRight.ResumeLayout(false); + this.tabPageLicensing.ResumeLayout(false); + this.tabPageOutput.ResumeLayout(false); + this.tabPageOutput.PerformLayout(); + this.toolStripMain.ResumeLayout(false); + this.toolStripMain.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + protected System.Windows.Forms.TabControl tabControlSolution; + protected System.Windows.Forms.TabPage tabPageSolution; + protected System.Windows.Forms.SplitContainer splitContainerSolution; + protected System.Windows.Forms.TreeView treeViewSolution; + protected System.Windows.Forms.ImageList imageListSolutionTreeMedium; + protected System.Windows.Forms.TabPage tabPageLicensing; + protected System.Windows.Forms.ToolStrip toolStripMain; + protected System.Windows.Forms.ImageList imageListSolutionTreeSmall; + protected System.Windows.Forms.ToolStripSplitButton openStripSplitButton; + protected System.Windows.Forms.ToolStripMenuItem openSolutionFolderToolStripMenuItem; + protected System.Windows.Forms.ToolStripMenuItem openSolutionFileToolStripMenuItem; + protected System.Windows.Forms.ToolStripMenuItem openLicensingDataToolStripMenuItem; + protected System.Windows.Forms.SplitContainer splitContainerSolutionRight; + protected System.Windows.Forms.TreeView treeViewDetails; + protected System.Windows.Forms.TextBox textBoxDetails; + protected IpTviewr.Native.WinForms.SelectFolderDialog selectFolderDialog; + protected System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + protected System.Windows.Forms.ToolStripLabel toolStripLabel1; + protected System.Windows.Forms.ToolStripButton createStripButton; + protected System.Windows.Forms.ToolStripButton updateStripButton; + protected System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + protected System.Windows.Forms.ToolStripButton cancelStripButton; + private System.ComponentModel.IContainer components; + protected System.Windows.Forms.TextBox textBoxOutput; + protected System.Windows.Forms.Timer timerRefreshOutput; + protected System.Windows.Forms.TabPage tabPageOutput; + protected System.Windows.Forms.ToolStripButton checkStripButton; + private System.Windows.Forms.ToolStripButton licensingWriteStripButton; + private System.Windows.Forms.ToolStripButton licensingOptionsStripButton; + protected LicensingDataViewer licensingDataViewer; + protected System.Windows.Forms.OpenFileDialog openFileDialog; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFormDocumentView.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFormDocumentView.cs new file mode 100644 index 00000000..1f36716c --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFormDocumentView.cs @@ -0,0 +1,406 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Helpers; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using IpTviewr.Common; +using IpTviewr.UiServices.Common.Forms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + public partial class LicensingFormDocumentView : CommonBaseForm + { + private readonly List<(LicensingDataNode Licensing, TreeNode Node)> _licensingNodes; + private DetailsModeEnum _detailsMode; + private LicensingData _currentLicensingData; + private VsSolution _currentSolutionField; + private bool _formLoaded; + private readonly AsyncHelper _asyncHelper; + + protected enum DetailsModeEnum + { + None, + LicensingDataCollection, + LicensingData, + VsProject + } // DetailsModeEnum + + public LicensingFormDocumentView() + { + InitializeComponent(); + + SolutionImages.InitializeImageListSmall(imageListSolutionTreeSmall); + SolutionImages.InitializeImageListMedium(imageListSolutionTreeMedium); + + SolutionImages = new SolutionImages(imageListSolutionTreeSmall); + LicensingVsUi = new LicensingVsUi(SolutionImages); + + _asyncHelper = new AsyncHelper(this, toolStripMain, cancelStripButton); + _licensingNodes = new List<(LicensingDataNode Licensing, TreeNode node)>(); + } // constructor + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) + { + components?.Dispose(); + _asyncHelper?.Dispose(); + } // if + + base.Dispose(disposing); + } // Dispose + + private protected SolutionImages SolutionImages { get; } + private protected LicensingVsUi LicensingVsUi { get; } + private protected IReadOnlyList<(LicensingDataNode Licensing, TreeNode node)> LicensingNodes => _licensingNodes; + + protected VsSolution CurrentSolution + { + get => _currentSolutionField; + set + { + if ((value != null) && (value == _currentSolutionField)) return; + + treeViewSolution.Nodes.Clear(); + var root = (value == null) switch + { + true => new TreeNode(LicensingResources.NoSolutionSelected, SolutionImages.VsSolution, SolutionImages.VsSolution), + false => LicensingVsUi.GetSolutionTree(value) + }; + + treeViewSolution.Nodes.Add(root); + _licensingNodes.Clear(); + ExtractLicensingData(root); + + checkStripButton.Enabled = (value != null); + createStripButton.Enabled = (value != null); + updateStripButton.Enabled = (value != null); + licensingWriteStripButton.Enabled = (value != null); + + _currentSolutionField = value; + } // set + } // CurrentSolution + + protected LicensingData CurrentLicensingData + { + get => _currentLicensingData; + set + { + if (value == _currentLicensingData) + { + if (_formLoaded) return; + } // if + + licensingDataViewer.LicensingData = value; + _currentLicensingData = value; + } // set + } // CurrentLicensingData + + protected DetailsModeEnum DetailsMode + { + get => _detailsMode; + set + { + _detailsMode = value; + switch (value) + { + case DetailsModeEnum.LicensingData: + case DetailsModeEnum.LicensingDataCollection: + case DetailsModeEnum.VsProject: + treeViewDetails.Enabled = true; + break; + default: + treeViewDetails.Nodes.Clear(); + treeViewDetails.ImageList = null; + treeViewDetails.Enabled = false; + licensingDataViewer.LicensingData = null; + break; + } // switch + + textBoxDetails.Text = null; + textBoxDetails.Enabled = false; + } // set + } // DetailsMode + + #region Overrides of CommonBaseForm + + protected override void OnLoad(EventArgs e) + { + treeViewSolution.ImageList = imageListSolutionTreeMedium; + CurrentSolution = null; + + DetailsMode = DetailsModeEnum.None; + _formLoaded = true; + + base.OnLoad(e); + } // OnLoad + + #endregion + + #region Main ToolStrip event handlers + + protected virtual void openStripSplitButton_ButtonClick(object sender, EventArgs e) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // openStripSplitButton_ButtonClick + + protected virtual void openSolutionFolderToolStripMenuItem_Click(object sender, EventArgs e) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // openSolutionFolderToolStripMenuItem_Click + + protected virtual void openSolutionFileToolStripMenuItem_Click(object sender, EventArgs e) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // openSolutionFileToolStripMenuItem_Click + + protected virtual void openLicensingDataToolStripMenuItem_Click(object sender, EventArgs e) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // openLicensingDataToolStripMenuItem_Click + + protected virtual void createStripButton_Click(object sender, EventArgs e) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // createStripButton_Click + + protected virtual void checkStripButton_Click(object sender, EventArgs e) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // checkStripButton_Click + + protected virtual void updateStripButton_Click(object sender, EventArgs e) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // updateStripButton_Click + + protected virtual void licensingWriteStripButton_Click(object sender, EventArgs e) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // licensingWriteStripButton_Click + + protected virtual void licensingOptionsStripButton_Click(object sender, EventArgs e) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // licensingOptionsStripButton_Click + + #endregion + + #region Solution tree event handlers + + protected virtual void treeViewSolution_AfterSelect(object sender, TreeViewEventArgs e) + { + switch (e.Node.Tag) + { + case VsSolution solution: + SafeCall(OnVsSolutionSelected, solution); + break; + case VsProject project: + SafeCall(OnVsProjectSelected, project); + break; + case LicensingDataNode file: + SafeCall(OnLicensingNodeSelected, file); + break; + default: + DetailsMode = DetailsModeEnum.None; + break; + } // switch + } // treeViewSolution_AfterSelect + + protected virtual void treeViewSolution_BeforeExpand(object sender, TreeViewCancelEventArgs e) + { + if (e.Node.ImageIndex == SolutionImages.Folder) + { + e.Node.ImageIndex = SolutionImages.FolderOpen; + e.Node.SelectedImageIndex = SolutionImages.FolderOpen; + } + else if (e.Node.ImageIndex == SolutionImages.LinkedFolder) + { + e.Node.ImageIndex = SolutionImages.LinkedFolderOpen; + e.Node.SelectedImageIndex = SolutionImages.LinkedFolderOpen; + } // if-else if + } // treeViewSolution_BeforeExpand + + protected virtual void treeViewSolution_BeforeCollapse(object sender, TreeViewCancelEventArgs e) + { + if (e.Node.ImageIndex == SolutionImages.FolderOpen) + { + e.Node.ImageIndex = SolutionImages.Folder; + e.Node.SelectedImageIndex = SolutionImages.Folder; + } + else if (e.Node.ImageIndex == SolutionImages.LinkedFolderOpen) + { + e.Node.ImageIndex = SolutionImages.LinkedFolder; + e.Node.SelectedImageIndex = SolutionImages.LinkedFolder; + } // if-else if + } // treeViewSolution_BeforeCollapse + + #endregion + + #region Details tree event handlers + + private void treeViewDetails_AfterSelect(object sender, TreeViewEventArgs e) + { + switch (DetailsMode) + { + case DetailsModeEnum.LicensingDataCollection: + if (e.Node.Tag is LicensingDataNode node) + { + SafeCall(OnDetailsLicensingNodeSelected, node); + } + else + { + textBoxDetails.Text = null; + textBoxDetails.Enabled = false; + } // if-else + break; + default: + return; + } // switch + } // treeViewDetails_AfterSelect + + #endregion + + #region Solution + + protected void LoadSolutionFolderAsync(string solutionFolder) + { + LoadSolution(solutionFolder, VsSolution.FromFolderAsync); + } // LoadSolutionFolderAsync + + protected void LoadSolutionFileAsync(string solutionFile) + { + LoadSolution(solutionFile, VsSolution.FromFileAsync); + } // LoadSolutionFile + + private async void LoadSolution(string path, Func, CancellationToken, Task> asyncLoader) + { + treeViewSolution.Nodes.Clear(); + DetailsMode = DetailsModeEnum.None; + treeViewSolution.Nodes.Add(new TreeNode(LicensingResources.SolutionLoading, SolutionImages.VsSolution, SolutionImages.VsSolution)); + + try + { + _asyncHelper.BeginAsyncOperation(); + var solution = await asyncLoader(path, LicensingMaintenance.ProjectReaders, _asyncHelper.GetCancellationToken()); + _asyncHelper.EndAsyncOperation(); + CurrentSolution = solution; + } + catch (OperationCanceledException e) + { + _asyncHelper.EndAsyncOperation(); + CurrentSolution = null; + MessageBox.Show(this, e.Message, LicensingResources.SolutionLoadCancelCaption, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception e) + { + _asyncHelper.EndAsyncOperation(); + BaseProgram.HandleException(this, e.Message, e); + CurrentSolution = null; + } // try-catch + } // LoadSolution + + private void ExtractLicensingData(TreeNode treeNode) + { + if (treeNode.Tag is LicensingDataNode licensing) + { + _licensingNodes.Add((licensing, treeNode)); + } // if + + if (treeNode.Nodes.Count == 0) return; + + foreach (var node in treeNode.Nodes.Cast()) + { + ExtractLicensingData(node); + } // foreach node + } // ExtractLicensingData + + #endregion + + #region OnSelected event handlers + + protected virtual void OnVsSolutionSelected(VsSolution solution) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // OnVsSolutionSelected + + protected virtual void OnVsProjectSelected(VsProject vsProject) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // OnVsProjectSelected + + private protected virtual void OnLicensingNodeSelected(LicensingDataNode node) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // OnLicensingNodeSelected + + private protected virtual void OnDetailsLicensingNodeSelected(LicensingDataNode node) + { + // must be overriden in descendant + throw new NotSupportedException(); + } // OnDetailsLicensingNodeSelected + + #endregion + + protected async void ExecuteAsync(TextBoxOutputWriter writer, Func asyncAction) + { + if (CurrentSolution == null) return; + + try + { + tabControlSolution.SelectedTab = tabPageOutput; + writer.Clear(); + writer.Start(); + _asyncHelper.BeginAsyncOperation(); + + await asyncAction(_asyncHelper.GetCancellationToken()); + } + catch (OperationCanceledException) + { + // ignore + } // catch + catch (Exception ex) + { + writer.WriteException(ex); + } // try-catch + + _asyncHelper.EndAsyncOperation(); + writer.Stop(); + } // ExecuteAsync + } // class LicensingFormDocumentView +} // namespace + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFormDocumentView.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFormDocumentView.resx new file mode 100644 index 00000000..be353eb3 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingFormDocumentView.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 122, 17 + + + 17, 17 + + + 340, 17 + + + 542, 17 + + + 694, 17 + + + 854, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingMaintenance.Helper.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingMaintenance.Helper.cs new file mode 100644 index 00000000..6238db90 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingMaintenance.Helper.cs @@ -0,0 +1,275 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Windows.Forms; +using AlphaCentaury.Licensing.Data.Serialization; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; +using IpTviewr.Common; +using IpTviewr.Common.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + partial class LicensingMaintenance + { + internal static class Helper + { + [NotNull] + public static string GetLicensingFilename(VsProject project, bool standalone) + { + return GetLicenseFilename(project, standalone, "licensing.xml"); + } // GetLicensingFilename + + [NotNull] + public static string GetLicenseFilename(VsProject project, bool standalone, string filename) + { + if (project == null) throw new ArgumentNullException(nameof(project)); + if (project.Filename == null) throw new ArgumentException(); + if (VsSolutionProject.IsSolutionFolderProject(project)) standalone = true; + + var projectFolder = Path.GetDirectoryName(project.Filename) ?? Path.GetPathRoot(project.Filename); + return standalone switch + { + true => Path.Combine(projectFolder, filename), + false => Path.Combine(projectFolder, project.Name + "." + filename) + }; + } // GetLicenseFilename + + public static LicensingDefaultsPool ReadLicensingDefaultsPool(string path, IToolOutputWriter writer) + { + try + { + writer.IncreaseIndent(); + return new LicensingDefaultsPool(path, writer); + } + finally + { + writer.DecreaseIndent(); + } // try-finally + } // ReadLicensingDefaultsPool + + public static IReadOnlyDictionary ReadLicensesPool(string path) + { + var poolFile = Path.Combine(path, "licensing.pool.licenses.xml"); + if (!File.Exists(poolFile)) return new Dictionary(); + + var pool = XmlSerialization.Deserialize(poolFile); + return pool.Licenses == null ? new Dictionary() : pool.Licenses.ToDictionary(license => license.Id, StringComparer.InvariantCulture); + } // ReadLicensesPool + + public static LicensingThirdPartyPool ReadThirdPartyPool(string path) + { + var poolFile = Path.Combine(path, "licensing.pool.thirdparty.xml"); + if (!File.Exists(poolFile)) return new LicensingThirdPartyPool(); + + return XmlSerialization.Deserialize(poolFile); + } // ReadThirdPartyPool + + public static string GetImplicitDefaultsPath(VsSolution solution) + { + return Path.Combine(solution.SolutionPath, ".defaults"); + } // GetImplicitDefaultsPath + + public static CommandLineArguments GetCliArguments(IReadOnlyList arguments, IToolOutputWriter writer, out VsSolution solution, out LicensingToolOptions options, out string defaultsPath) + { + solution = null; + options = new LicensingToolOptions(true); + defaultsPath = null; + + var args = new CommandLineArguments(StringComparer.InvariantCultureIgnoreCase); + args.Parse(arguments); + + if (args.Arguments.Count == 0) + { + writer.WriteLine("ERROR: no solution folder or file has been specified"); + return null; + } // if + + try + { + if (string.Equals(Path.GetExtension(args.Arguments[0]), ".sln", StringComparison.InvariantCultureIgnoreCase)) + { + if (!File.Exists(args.Arguments[0])) + { + writer.WriteLine("ERROR: solution file '{0}' not found", args.Arguments[0]); + return null; + } // if + + writer.WriteLine("Loading solution from file '{0}'...", args.Arguments[0]); + solution = VsSolution.FromFile(args.Arguments[0], ProjectReaders); + } + else + { + if (!Directory.Exists(args.Arguments[0])) + { + writer.WriteLine("ERROR: solution folder '{0}' not found", args.Arguments[0]); + return null; + } // if + + writer.WriteLine("Loading solution from folder '{0}'...", args.Arguments[0]); + solution = VsSolution.FromFolder(args.Arguments[0], ProjectReaders); + } // if-else + } + catch (Exception e) + { + writer.WriteException(e); + return null; + } // try + + defaultsPath = GetImplicitDefaultsPath(solution); + if (args.Switches.ContainsKey("Defaults")) + { + var value = defaultsPath = args.Switches["Defaults"]; + if (!Directory.Exists(defaultsPath)) + { + writer.WriteLine("WARNING: defaults folder '{0}' not found. Assuming '{1}'", value, defaultsPath); + } + else + { + defaultsPath = value; + } // if-else + } + else + { + writer.WriteLine("Info: defaults path: '{0}'", defaultsPath); + } // if + + if (!args.MultiValueSwitches.ContainsKey("Action")) + { + writer.WriteLine("Info: no actions have been specified. Ending execution"); + return null; + } // if + + if (args.Switches.ContainsKey("Options")) + { + var optionsFile = args.Switches["Options"]; + if (File.Exists(optionsFile)) + { + writer.WriteLine("Loading options file '{0}'", optionsFile); + try + { + options = XmlSerialization.Deserialize(optionsFile); + return args; + } + catch (Exception e) + { + writer.WriteException(e, $"Unable to read options from file '{optionsFile}'"); + } // try-catch + } + else + { + writer.WriteLine("Options file '{0}' not found", optionsFile); + } // if-else + } // if + + writer.WriteLine("Info: using default options"); + options = new LicensingToolOptions(true); + + return args; + } // GetCliArguments + + #region ForEach + + public static void ForEachProject(TAction action, string operation) where TAction : ProjectAction + { + bool writeTimestamps, absoluteTimestamps; + + if (action == null) throw new ArgumentNullException(nameof(action)); + if (action.Solution == null) throw new ArgumentException(); + if (action.Writer == null) throw new ArgumentException(); + + var where = "action.Init()"; + try + { + PushTimestamps(true, true); + var started = action.Writer.ElapsedTime; + action.Writer.WriteLine("{0} started", operation); + PopTimestamps(); + + action.Init(); + + if (!ForEachProject(action, action.Solution.RootFolder)) + { + action.Writer.WriteLine(); + action.Writer.WriteLine(">>>> {0} <<<<", new OperationCanceledException().Message); + action.Writer.WriteLine(); + } // if + + where = "action.End()"; + action.End(); + + PushTimestamps(true, true); + action.Writer.WriteLine("{0} ended. {1:g} elapsed", operation, action.Writer.ElapsedTime - started); + PopTimestamps(); + } + catch (Exception e) + { + action.Writer.WriteException(e, where); + } // try-catch + + void PushTimestamps(bool write, bool absolute) + { + writeTimestamps = action.Writer.WriteTimestamps; + absoluteTimestamps = action.Writer.AbsoluteTimestamps; + action.Writer.WriteTimestamps = write; + action.Writer.AbsoluteTimestamps = absolute; + } // PushTimestamps + + void PopTimestamps() + { + action.Writer.WriteTimestamps = writeTimestamps; + action.Writer.AbsoluteTimestamps = absoluteTimestamps; + } // PropTimestamps + } // ForEachProject + + public static bool ForEachProject(TAction action, VsFolder folder) where TAction : ProjectAction + { + if ((folder.Projects?.Count ?? 0) > 0) + { + foreach (var project in folder.Projects) + { + try + { + action.Do(project, folder.Projects.Count == 1); + } + catch (OperationCanceledException) + { + return false; + } + catch (Exception e) + { + action.Writer.WriteException(e, project.Filename); + } // try-catch + } // foreach + } // if + + if ((folder.Folders?.Count ?? 0) == 0) return true; + + foreach (var subFolder in folder.Folders) + { + if (!ForEachProject(action, subFolder)) return false; + } // foreach + + return true; + } // ForEachProject + + #endregion + } // class Helper + } // partial class LicensingMaintenance +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingMaintenance.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingMaintenance.cs new file mode 100644 index 00000000..1ad1d3ec --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingMaintenance.cs @@ -0,0 +1,199 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + [Export(typeof(IMaintenanceTool))] + [ExportMetadata("Name", "Licensing maintenance")] + [ExportMetadata("Guid", "{13B1F04C-F4E9-4C13-832F-8FCBC5673098}")] + [ExportMetadata("CliName", "Licensing")] + [ExportMetadata("HasParameters", true)] + [ExportMetadata("HasFileParameters", true)] + [ExportMetadata("HasUi", true)] + public sealed partial class LicensingMaintenance : IMaintenanceTool + { + public LicensingMaintenance() + { + ProjectReaders = Program.Container.CompositionContainer.GetExports().Select(lazy => lazy.Value).ToList(); + } // constructor + + [ImportMany(typeof(IVsProjectReader))] + internal static IReadOnlyList ProjectReaders { get; private set; } + + #region Implementation of IMaintenanceTool + + public void Execute([NotNull] IReadOnlyList arguments, IToolOutputWriter writer, CancellationToken token) + { + var args = Helper.GetCliArguments(arguments, writer, out var solution, out var options, out var defaultsPath); + if (args == null) return; + + foreach (var value in args.MultiValueSwitches["Action"]) + { + if (string.Equals(value, "Create", StringComparison.InvariantCultureIgnoreCase)) + { + CreateMissingLicensingFiles(solution, writer, defaultsPath, token); + continue; + } // if Create + + if (string.Equals(value, "Check", StringComparison.InvariantCultureIgnoreCase)) + { + CheckLicensingFiles(solution, writer, options.Checker, defaultsPath, token); + continue; + } // if Check + + if (string.Equals(value, "Update", StringComparison.InvariantCultureIgnoreCase)) + { + UpdateLicensingFiles(solution, writer, token); + continue; + } // if Update + + if (string.Equals(value, "Write", StringComparison.InvariantCultureIgnoreCase)) + { + WriteLicenseFiles(solution, writer, options.Writer, options.SolutionWriter, token); + continue; + } // if Write + + writer.WriteLine("WARNING: /Action:{0} is not a valid switch", value); + } // foreach + + } // Execute + + public void ShowUsage(IToolOutputWriter writer) + { + throw new NotSupportedException(); + } // ShowUsage + + public Form GetUi() => new LicensingForm(); + + public string SelectFileFilter => null; + + #endregion + + #region Operations: Create + + public static void CreateMissingLicensingFiles(VsSolution solution, IToolOutputWriter writer, string defaultsPath) + { + CreateMissingLicensingFiles(solution, writer, defaultsPath, CancellationToken.None); + } // CheckLicensingFiles + + public static void CreateMissingLicensingFiles(VsSolution solution, IToolOutputWriter writer, string defaultsPath, CancellationToken token) + { + try + { + var action = new Creator(solution, writer, defaultsPath, token); + Helper.ForEachProject(action, "Create missing licensing file"); + } + catch (Exception e) + { + writer.WriteException(e); + } // try-catch + } // Creator + + public static Task CreateMissingLicensingFilesAsync(VsSolution solution, IToolOutputWriter writer, string defaultsPath, CancellationToken token) + { + var task = new Task(() => CreateMissingLicensingFiles(solution, writer, defaultsPath, token), token, TaskCreationOptions.LongRunning); + task.Start(); + + return task; + } // CreateMissingLicensingFilesAsync + + #endregion + + #region Operations: Check + + public static void CheckLicensingFiles(VsSolution solution, IToolOutputWriter writer, CheckerOptions options, string defaultsPath, CancellationToken token) + { + try + { + var action = new Checker(solution, writer, defaultsPath, options, token); + Helper.ForEachProject(action, "Check licensing files"); + } + catch (Exception e) + { + writer.WriteException(e); + } // try-catch + } // CheckLicensingFiles + + public static Task CheckLicensingFilesAsync(VsSolution solution, IToolOutputWriter writer, CheckerOptions options, string defaultsPath, CancellationToken token) + { + var task = new Task(() => CheckLicensingFiles(solution, writer, options, defaultsPath, token), token, TaskCreationOptions.LongRunning); + task.Start(); + + return task; + } // CheckLicensingFilesAsync + + #endregion + + #region Operations: Update + + public static void UpdateLicensingFiles(VsSolution solution, IToolOutputWriter writer, CancellationToken token) + { + try + { + var action = new Updater(solution, writer, token); + Helper.ForEachProject(action, "Update licensing files"); + } + catch (Exception e) + { + writer.WriteException(e); + } // try-catch + } // UpdateLicensingFiles + + public static Task UpdateLicensingFilesAsync(VsSolution solution, IToolOutputWriter writer, CancellationToken token) + { + var task = new Task(() => UpdateLicensingFiles(solution, writer, token), token, TaskCreationOptions.LongRunning); + task.Start(); + + return task; + } // UpdateLicensingFilesAsync + + #endregion + + #region Operations: Write + + public static void WriteLicenseFiles(VsSolution solution, IToolOutputWriter writer, WriterOptions options, WriterOptions solutionOptions, CancellationToken token) + { + try + { + var action = new LicensesWriter(solution, writer, options, solutionOptions, token); + Helper.ForEachProject(action, "Write licenses readme files"); + } + catch (Exception e) + { + writer.WriteException(e); + } // try-catch + } // WriteLicenseFiles + + public static Task WriteLicenseFilesAsync(VsSolution solution, IToolOutputWriter writer, WriterOptions options, WriterOptions solutionOptions, CancellationToken token) + { + var task = new Task(() => WriteLicenseFiles(solution, writer, options, solutionOptions, token), token, TaskCreationOptions.LongRunning); + task.Start(); + + return task; + } // WriteLicenseFilesAsync + + #endregion + } // class LicensingMaintenance +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingToolOptionsDialog.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingToolOptionsDialog.Designer.cs new file mode 100644 index 00000000..8b6b6e4b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingToolOptionsDialog.Designer.cs @@ -0,0 +1,526 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + partial class LicensingToolOptionsDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.groupBoxCheck = new System.Windows.Forms.GroupBox(); + this.checkBoxOverrideNotes = new System.Windows.Forms.CheckBox(); + this.checkBoxOverrideRemarks = new System.Windows.Forms.CheckBox(); + this.checkBoxOverrideLicense = new System.Windows.Forms.CheckBox(); + this.checkBoxOverrideTerms = new System.Windows.Forms.CheckBox(); + this.checkBoxOverrideCopyright = new System.Windows.Forms.CheckBox(); + this.checkBoxOverrideAuthors = new System.Windows.Forms.CheckBox(); + this.checkBoxOverrideProduct = new System.Windows.Forms.CheckBox(); + this.labelCheckOverride = new System.Windows.Forms.Label(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.groupBoxWrite = new System.Windows.Forms.GroupBox(); + this.checkBoxWriteTranslatedRtf = new System.Windows.Forms.CheckBox(); + this.checkBoxWriteTranslatedHtml = new System.Windows.Forms.CheckBox(); + this.checkBoxWriteTranslatedMarkdown = new System.Windows.Forms.CheckBox(); + this.checkBoxWriteTranslatedPlainText = new System.Windows.Forms.CheckBox(); + this.label2 = new System.Windows.Forms.Label(); + this.checkBoxWriteLicensingRtf = new System.Windows.Forms.CheckBox(); + this.checkBoxWriteRtf = new System.Windows.Forms.CheckBox(); + this.checkBoxWriteHtml = new System.Windows.Forms.CheckBox(); + this.checkBoxWriteMarkdown = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.checkBoxWriteLicensingHtml = new System.Windows.Forms.CheckBox(); + this.checkBoxWritePlainText = new System.Windows.Forms.CheckBox(); + this.labelWriteAdditional = new System.Windows.Forms.Label(); + this.buttonLoad = new System.Windows.Forms.Button(); + this.buttonSave = new System.Windows.Forms.Button(); + this.buttonClear = new System.Windows.Forms.Button(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); + this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); + this.comboBoxWriteScope = new System.Windows.Forms.ComboBox(); + this.groupBoxWriteTransform = new System.Windows.Forms.GroupBox(); + this.checkBoxWriteDeleteOld = new System.Windows.Forms.CheckBox(); + this.label3 = new System.Windows.Forms.Label(); + this.groupBoxCheck.SuspendLayout(); + this.groupBoxWrite.SuspendLayout(); + this.groupBoxWriteTransform.SuspendLayout(); + this.SuspendLayout(); + // + // groupBoxCheck + // + this.groupBoxCheck.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.groupBoxCheck.Controls.Add(this.checkBoxOverrideNotes); + this.groupBoxCheck.Controls.Add(this.checkBoxOverrideRemarks); + this.groupBoxCheck.Controls.Add(this.checkBoxOverrideLicense); + this.groupBoxCheck.Controls.Add(this.checkBoxOverrideTerms); + this.groupBoxCheck.Controls.Add(this.checkBoxOverrideCopyright); + this.groupBoxCheck.Controls.Add(this.checkBoxOverrideAuthors); + this.groupBoxCheck.Controls.Add(this.checkBoxOverrideProduct); + this.groupBoxCheck.Controls.Add(this.labelCheckOverride); + this.groupBoxCheck.Location = new System.Drawing.Point(12, 12); + this.groupBoxCheck.Name = "groupBoxCheck"; + this.groupBoxCheck.Size = new System.Drawing.Size(175, 236); + this.groupBoxCheck.TabIndex = 0; + this.groupBoxCheck.TabStop = false; + this.groupBoxCheck.Text = "Check"; + // + // checkBoxOverrideNotes + // + this.checkBoxOverrideNotes.AutoSize = true; + this.checkBoxOverrideNotes.Location = new System.Drawing.Point(32, 181); + this.checkBoxOverrideNotes.Name = "checkBoxOverrideNotes"; + this.checkBoxOverrideNotes.Size = new System.Drawing.Size(54, 17); + this.checkBoxOverrideNotes.TabIndex = 7; + this.checkBoxOverrideNotes.Text = "Notes"; + this.checkBoxOverrideNotes.UseVisualStyleBackColor = true; + // + // checkBoxOverrideRemarks + // + this.checkBoxOverrideRemarks.AutoSize = true; + this.checkBoxOverrideRemarks.Location = new System.Drawing.Point(32, 158); + this.checkBoxOverrideRemarks.Name = "checkBoxOverrideRemarks"; + this.checkBoxOverrideRemarks.Size = new System.Drawing.Size(68, 17); + this.checkBoxOverrideRemarks.TabIndex = 6; + this.checkBoxOverrideRemarks.Text = "Remarks"; + this.checkBoxOverrideRemarks.UseVisualStyleBackColor = true; + // + // checkBoxOverrideLicense + // + this.checkBoxOverrideLicense.AutoSize = true; + this.checkBoxOverrideLicense.Location = new System.Drawing.Point(32, 135); + this.checkBoxOverrideLicense.Name = "checkBoxOverrideLicense"; + this.checkBoxOverrideLicense.Size = new System.Drawing.Size(63, 17); + this.checkBoxOverrideLicense.TabIndex = 5; + this.checkBoxOverrideLicense.Text = "License"; + this.checkBoxOverrideLicense.UseVisualStyleBackColor = true; + // + // checkBoxOverrideTerms + // + this.checkBoxOverrideTerms.AutoSize = true; + this.checkBoxOverrideTerms.Location = new System.Drawing.Point(32, 112); + this.checkBoxOverrideTerms.Name = "checkBoxOverrideTerms"; + this.checkBoxOverrideTerms.Size = new System.Drawing.Size(127, 17); + this.checkBoxOverrideTerms.TabIndex = 4; + this.checkBoxOverrideTerms.Text = "Terms and conditions"; + this.checkBoxOverrideTerms.UseVisualStyleBackColor = true; + // + // checkBoxOverrideCopyright + // + this.checkBoxOverrideCopyright.AutoSize = true; + this.checkBoxOverrideCopyright.Location = new System.Drawing.Point(32, 89); + this.checkBoxOverrideCopyright.Name = "checkBoxOverrideCopyright"; + this.checkBoxOverrideCopyright.Size = new System.Drawing.Size(70, 17); + this.checkBoxOverrideCopyright.TabIndex = 3; + this.checkBoxOverrideCopyright.Text = "Copyright"; + this.checkBoxOverrideCopyright.UseVisualStyleBackColor = true; + // + // checkBoxOverrideAuthors + // + this.checkBoxOverrideAuthors.AutoSize = true; + this.checkBoxOverrideAuthors.Location = new System.Drawing.Point(32, 66); + this.checkBoxOverrideAuthors.Name = "checkBoxOverrideAuthors"; + this.checkBoxOverrideAuthors.Size = new System.Drawing.Size(62, 17); + this.checkBoxOverrideAuthors.TabIndex = 2; + this.checkBoxOverrideAuthors.Text = "Authors"; + this.checkBoxOverrideAuthors.UseVisualStyleBackColor = true; + // + // checkBoxOverrideProduct + // + this.checkBoxOverrideProduct.AutoSize = true; + this.checkBoxOverrideProduct.Location = new System.Drawing.Point(32, 43); + this.checkBoxOverrideProduct.Name = "checkBoxOverrideProduct"; + this.checkBoxOverrideProduct.Size = new System.Drawing.Size(63, 17); + this.checkBoxOverrideProduct.TabIndex = 1; + this.checkBoxOverrideProduct.Text = "Product"; + this.checkBoxOverrideProduct.UseVisualStyleBackColor = true; + // + // labelCheckOverride + // + this.labelCheckOverride.AutoSize = true; + this.labelCheckOverride.Location = new System.Drawing.Point(6, 27); + this.labelCheckOverride.Name = "labelCheckOverride"; + this.labelCheckOverride.Size = new System.Drawing.Size(84, 13); + this.labelCheckOverride.TabIndex = 0; + this.labelCheckOverride.Text = "Override values:"; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Cancel_16x16; + this.buttonCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonCancel.Location = new System.Drawing.Point(363, 265); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(100, 25); + this.buttonCancel.TabIndex = 6; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Ok_16x16; + this.buttonOk.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonOk.Location = new System.Drawing.Point(257, 265); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(100, 25); + this.buttonOk.TabIndex = 5; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // groupBoxWrite + // + this.groupBoxWrite.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxWrite.Controls.Add(this.label3); + this.groupBoxWrite.Controls.Add(this.comboBoxWriteScope); + this.groupBoxWrite.Controls.Add(this.labelWriteAdditional); + this.groupBoxWrite.Controls.Add(this.checkBoxWriteTranslatedRtf); + this.groupBoxWrite.Controls.Add(this.checkBoxWriteDeleteOld); + this.groupBoxWrite.Controls.Add(this.checkBoxWritePlainText); + this.groupBoxWrite.Controls.Add(this.groupBoxWriteTransform); + this.groupBoxWrite.Controls.Add(this.checkBoxWriteTranslatedHtml); + this.groupBoxWrite.Controls.Add(this.checkBoxWriteMarkdown); + this.groupBoxWrite.Controls.Add(this.label1); + this.groupBoxWrite.Controls.Add(this.checkBoxWriteTranslatedMarkdown); + this.groupBoxWrite.Controls.Add(this.label2); + this.groupBoxWrite.Controls.Add(this.checkBoxWriteHtml); + this.groupBoxWrite.Controls.Add(this.checkBoxWriteRtf); + this.groupBoxWrite.Controls.Add(this.checkBoxWriteTranslatedPlainText); + this.groupBoxWrite.Location = new System.Drawing.Point(213, 12); + this.groupBoxWrite.Name = "groupBoxWrite"; + this.groupBoxWrite.Size = new System.Drawing.Size(250, 236); + this.groupBoxWrite.TabIndex = 1; + this.groupBoxWrite.TabStop = false; + this.groupBoxWrite.Text = "Write"; + // + // checkBoxWriteTranslatedRtf + // + this.checkBoxWriteTranslatedRtf.AutoSize = true; + this.checkBoxWriteTranslatedRtf.Location = new System.Drawing.Point(138, 132); + this.checkBoxWriteTranslatedRtf.Name = "checkBoxWriteTranslatedRtf"; + this.checkBoxWriteTranslatedRtf.Size = new System.Drawing.Size(47, 17); + this.checkBoxWriteTranslatedRtf.TabIndex = 12; + this.checkBoxWriteTranslatedRtf.Text = "RTF"; + this.checkBoxWriteTranslatedRtf.UseVisualStyleBackColor = true; + // + // checkBoxWriteTranslatedHtml + // + this.checkBoxWriteTranslatedHtml.AutoSize = true; + this.checkBoxWriteTranslatedHtml.Location = new System.Drawing.Point(138, 109); + this.checkBoxWriteTranslatedHtml.Name = "checkBoxWriteTranslatedHtml"; + this.checkBoxWriteTranslatedHtml.Size = new System.Drawing.Size(56, 17); + this.checkBoxWriteTranslatedHtml.TabIndex = 11; + this.checkBoxWriteTranslatedHtml.Text = "HTML"; + this.checkBoxWriteTranslatedHtml.UseVisualStyleBackColor = true; + // + // checkBoxWriteTranslatedMarkdown + // + this.checkBoxWriteTranslatedMarkdown.AutoSize = true; + this.checkBoxWriteTranslatedMarkdown.Location = new System.Drawing.Point(138, 86); + this.checkBoxWriteTranslatedMarkdown.Name = "checkBoxWriteTranslatedMarkdown"; + this.checkBoxWriteTranslatedMarkdown.Size = new System.Drawing.Size(76, 17); + this.checkBoxWriteTranslatedMarkdown.TabIndex = 10; + this.checkBoxWriteTranslatedMarkdown.Text = "Markdown"; + this.checkBoxWriteTranslatedMarkdown.UseVisualStyleBackColor = true; + // + // checkBoxWriteTranslatedPlainText + // + this.checkBoxWriteTranslatedPlainText.AutoSize = true; + this.checkBoxWriteTranslatedPlainText.Location = new System.Drawing.Point(138, 63); + this.checkBoxWriteTranslatedPlainText.Name = "checkBoxWriteTranslatedPlainText"; + this.checkBoxWriteTranslatedPlainText.Size = new System.Drawing.Size(69, 17); + this.checkBoxWriteTranslatedPlainText.TabIndex = 9; + this.checkBoxWriteTranslatedPlainText.Text = "Plain text"; + this.checkBoxWriteTranslatedPlainText.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(112, 47); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(88, 13); + this.label2.TabIndex = 8; + this.label2.Text = "Translated terms:"; + // + // checkBoxWriteLicensingRtf + // + this.checkBoxWriteLicensingRtf.AutoSize = true; + this.checkBoxWriteLicensingRtf.Location = new System.Drawing.Point(138, 19); + this.checkBoxWriteLicensingRtf.Name = "checkBoxWriteLicensingRtf"; + this.checkBoxWriteLicensingRtf.Size = new System.Drawing.Size(47, 17); + this.checkBoxWriteLicensingRtf.TabIndex = 7; + this.checkBoxWriteLicensingRtf.Text = "RTF"; + this.checkBoxWriteLicensingRtf.UseVisualStyleBackColor = true; + // + // checkBoxWriteRtf + // + this.checkBoxWriteRtf.AutoSize = true; + this.checkBoxWriteRtf.Location = new System.Drawing.Point(32, 132); + this.checkBoxWriteRtf.Name = "checkBoxWriteRtf"; + this.checkBoxWriteRtf.Size = new System.Drawing.Size(47, 17); + this.checkBoxWriteRtf.TabIndex = 6; + this.checkBoxWriteRtf.Text = "RTF"; + this.checkBoxWriteRtf.UseVisualStyleBackColor = true; + this.checkBoxWriteRtf.CheckedChanged += new System.EventHandler(this.checkBoxWriteRtf_CheckedChanged); + // + // checkBoxWriteHtml + // + this.checkBoxWriteHtml.AutoSize = true; + this.checkBoxWriteHtml.Location = new System.Drawing.Point(32, 109); + this.checkBoxWriteHtml.Name = "checkBoxWriteHtml"; + this.checkBoxWriteHtml.Size = new System.Drawing.Size(56, 17); + this.checkBoxWriteHtml.TabIndex = 5; + this.checkBoxWriteHtml.Text = "HTML"; + this.checkBoxWriteHtml.UseVisualStyleBackColor = true; + this.checkBoxWriteHtml.CheckedChanged += new System.EventHandler(this.checkBoxWriteHtml_CheckedChanged); + // + // checkBoxWriteMarkdown + // + this.checkBoxWriteMarkdown.AutoSize = true; + this.checkBoxWriteMarkdown.Location = new System.Drawing.Point(32, 86); + this.checkBoxWriteMarkdown.Name = "checkBoxWriteMarkdown"; + this.checkBoxWriteMarkdown.Size = new System.Drawing.Size(76, 17); + this.checkBoxWriteMarkdown.TabIndex = 4; + this.checkBoxWriteMarkdown.Text = "Markdown"; + this.checkBoxWriteMarkdown.UseVisualStyleBackColor = true; + this.checkBoxWriteMarkdown.CheckedChanged += new System.EventHandler(this.checkBoxWriteMarkdown_CheckedChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 169); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(0, 13); + this.label1.TabIndex = 2; + // + // checkBoxWriteLicensingHtml + // + this.checkBoxWriteLicensingHtml.AutoSize = true; + this.checkBoxWriteLicensingHtml.Location = new System.Drawing.Point(23, 19); + this.checkBoxWriteLicensingHtml.Name = "checkBoxWriteLicensingHtml"; + this.checkBoxWriteLicensingHtml.Size = new System.Drawing.Size(56, 17); + this.checkBoxWriteLicensingHtml.TabIndex = 3; + this.checkBoxWriteLicensingHtml.Text = "HTML"; + this.checkBoxWriteLicensingHtml.UseVisualStyleBackColor = true; + // + // checkBoxWritePlainText + // + this.checkBoxWritePlainText.AutoSize = true; + this.checkBoxWritePlainText.Location = new System.Drawing.Point(32, 63); + this.checkBoxWritePlainText.Name = "checkBoxWritePlainText"; + this.checkBoxWritePlainText.Size = new System.Drawing.Size(69, 17); + this.checkBoxWritePlainText.TabIndex = 1; + this.checkBoxWritePlainText.Text = "Plain text"; + this.checkBoxWritePlainText.UseVisualStyleBackColor = true; + this.checkBoxWritePlainText.CheckedChanged += new System.EventHandler(this.checkBoxWritePlainText_CheckedChanged); + // + // labelWriteAdditional + // + this.labelWriteAdditional.AutoSize = true; + this.labelWriteAdditional.Location = new System.Drawing.Point(6, 47); + this.labelWriteAdditional.Name = "labelWriteAdditional"; + this.labelWriteAdditional.Size = new System.Drawing.Size(83, 13); + this.labelWriteAdditional.TabIndex = 0; + this.labelWriteAdditional.Text = "Licensing terms:"; + // + // buttonLoad + // + this.buttonLoad.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonLoad.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Open_16x; + this.buttonLoad.Location = new System.Drawing.Point(12, 265); + this.buttonLoad.Name = "buttonLoad"; + this.buttonLoad.Size = new System.Drawing.Size(50, 25); + this.buttonLoad.TabIndex = 2; + this.toolTip.SetToolTip(this.buttonLoad, "Load options from file..."); + this.buttonLoad.UseVisualStyleBackColor = true; + this.buttonLoad.Click += new System.EventHandler(this.buttonLoad_Click); + // + // buttonSave + // + this.buttonSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonSave.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.TextFile_16x; + this.buttonSave.Location = new System.Drawing.Point(68, 265); + this.buttonSave.Name = "buttonSave"; + this.buttonSave.Size = new System.Drawing.Size(50, 25); + this.buttonSave.TabIndex = 3; + this.toolTip.SetToolTip(this.buttonSave, "Save options to file..."); + this.buttonSave.UseVisualStyleBackColor = true; + this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click); + // + // buttonClear + // + this.buttonClear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonClear.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Delete_16x16; + this.buttonClear.Location = new System.Drawing.Point(124, 265); + this.buttonClear.Name = "buttonClear"; + this.buttonClear.Size = new System.Drawing.Size(50, 25); + this.buttonClear.TabIndex = 4; + this.toolTip.SetToolTip(this.buttonClear, "Clear all options"); + this.buttonClear.UseVisualStyleBackColor = true; + this.buttonClear.Click += new System.EventHandler(this.buttonClear_Click); + // + // openFileDialog + // + this.openFileDialog.FileName = "LicensingTool.options.xml"; + this.openFileDialog.Filter = "Licensing tool options|*.options.xml"; + // + // saveFileDialog + // + this.saveFileDialog.FileName = "LicensingTool.options.xml"; + this.saveFileDialog.Filter = "Licensing tool options|*.options.xml"; + // + // comboBoxWriteScope + // + this.comboBoxWriteScope.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxWriteScope.FormattingEnabled = true; + this.comboBoxWriteScope.Items.AddRange(new object[] { + "Licensing data", + "Solution licensing"}); + this.comboBoxWriteScope.Location = new System.Drawing.Point(103, 19); + this.comboBoxWriteScope.Name = "comboBoxWriteScope"; + this.comboBoxWriteScope.Size = new System.Drawing.Size(141, 21); + this.comboBoxWriteScope.TabIndex = 14; + this.comboBoxWriteScope.SelectedIndexChanged += new System.EventHandler(this.comboBoxWriteScope_SelectedIndexChanged); + // + // groupBoxWriteTransform + // + this.groupBoxWriteTransform.Controls.Add(this.checkBoxWriteLicensingHtml); + this.groupBoxWriteTransform.Controls.Add(this.checkBoxWriteLicensingRtf); + this.groupBoxWriteTransform.Location = new System.Drawing.Point(9, 155); + this.groupBoxWriteTransform.Name = "groupBoxWriteTransform"; + this.groupBoxWriteTransform.Size = new System.Drawing.Size(222, 47); + this.groupBoxWriteTransform.TabIndex = 14; + this.groupBoxWriteTransform.TabStop = false; + this.groupBoxWriteTransform.Text = "Transform licensing data:"; + // + // checkBoxWriteDeleteOld + // + this.checkBoxWriteDeleteOld.AutoSize = true; + this.checkBoxWriteDeleteOld.Location = new System.Drawing.Point(9, 208); + this.checkBoxWriteDeleteOld.Name = "checkBoxWriteDeleteOld"; + this.checkBoxWriteDeleteOld.Size = new System.Drawing.Size(95, 17); + this.checkBoxWriteDeleteOld.TabIndex = 15; + this.checkBoxWriteDeleteOld.Text = "Delete old files"; + this.checkBoxWriteDeleteOld.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 22); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(91, 13); + this.label3.TabIndex = 16; + this.label3.Text = "Options for writing"; + // + // LicensingToolOptionsDialog + // + this.AcceptButton = this.buttonOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.ClientSize = new System.Drawing.Size(475, 302); + this.Controls.Add(this.buttonClear); + this.Controls.Add(this.buttonSave); + this.Controls.Add(this.buttonLoad); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.groupBoxWrite); + this.Controls.Add(this.groupBoxCheck); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "LicensingToolOptionsDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Licensing tool options"; + this.groupBoxCheck.ResumeLayout(false); + this.groupBoxCheck.PerformLayout(); + this.groupBoxWrite.ResumeLayout(false); + this.groupBoxWrite.PerformLayout(); + this.groupBoxWriteTransform.ResumeLayout(false); + this.groupBoxWriteTransform.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxCheck; + private System.Windows.Forms.CheckBox checkBoxOverrideLicense; + private System.Windows.Forms.CheckBox checkBoxOverrideTerms; + private System.Windows.Forms.CheckBox checkBoxOverrideCopyright; + private System.Windows.Forms.CheckBox checkBoxOverrideAuthors; + private System.Windows.Forms.CheckBox checkBoxOverrideProduct; + private System.Windows.Forms.Label labelCheckOverride; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.CheckBox checkBoxOverrideNotes; + private System.Windows.Forms.CheckBox checkBoxOverrideRemarks; + private System.Windows.Forms.GroupBox groupBoxWrite; + private System.Windows.Forms.CheckBox checkBoxWriteLicensingHtml; + private System.Windows.Forms.CheckBox checkBoxWritePlainText; + private System.Windows.Forms.Label labelWriteAdditional; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button buttonLoad; + private System.Windows.Forms.Button buttonSave; + private System.Windows.Forms.ToolTip toolTip; + private System.Windows.Forms.Button buttonClear; + private System.Windows.Forms.OpenFileDialog openFileDialog; + private System.Windows.Forms.SaveFileDialog saveFileDialog; + private System.Windows.Forms.CheckBox checkBoxWriteTranslatedRtf; + private System.Windows.Forms.CheckBox checkBoxWriteTranslatedHtml; + private System.Windows.Forms.CheckBox checkBoxWriteTranslatedMarkdown; + private System.Windows.Forms.CheckBox checkBoxWriteTranslatedPlainText; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.CheckBox checkBoxWriteLicensingRtf; + private System.Windows.Forms.CheckBox checkBoxWriteRtf; + private System.Windows.Forms.CheckBox checkBoxWriteHtml; + private System.Windows.Forms.CheckBox checkBoxWriteMarkdown; + private System.Windows.Forms.CheckBox checkBoxWriteDeleteOld; + private System.Windows.Forms.GroupBox groupBoxWriteTransform; + private System.Windows.Forms.ComboBox comboBoxWriteScope; + private System.Windows.Forms.Label label3; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingToolOptionsDialog.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingToolOptionsDialog.cs new file mode 100644 index 00000000..c34022c7 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingToolOptionsDialog.cs @@ -0,0 +1,222 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.Actions; +using IpTviewr.Common.Serialization; +using IpTviewr.UiServices.Common.Forms; +using System; +using System.Windows.Forms; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + public partial class LicensingToolOptionsDialog : CommonBaseForm + { + private LicensingToolOptions _options; + private int _writeScope; + + public LicensingToolOptionsDialog() + { + InitializeComponent(); + } // constructor + + public LicensingToolOptions Options { get; set; } + + #region Overrides of Form + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + _options = Options?.Clone() ?? new LicensingToolOptions(); + _options.Checker ??= new CheckerOptions(); + _options.Writer ??= new WriterOptions(); + _options.SolutionWriter ??= new WriterOptions(); + _writeScope = -1; + + SetOptionsToDialog(_options); + } // OnLoad + + #endregion + + #region Controls Events + + private void checkBoxWritePlainText_CheckedChanged(object sender, EventArgs e) + { + checkBoxWriteTranslatedPlainText.Enabled = checkBoxWritePlainText.Checked; + } // checkBoxWritePlainText_CheckedChanged + + private void checkBoxWriteMarkdown_CheckedChanged(object sender, EventArgs e) + { + checkBoxWriteTranslatedMarkdown.Enabled = checkBoxWriteMarkdown.Checked; + } // checkBoxWriteMarkdown_CheckedChanged + + private void checkBoxWriteHtml_CheckedChanged(object sender, EventArgs e) + { + checkBoxWriteTranslatedHtml.Enabled = checkBoxWriteHtml.Checked; + } // checkBoxWriteHtml_CheckedChanged + + private void checkBoxWriteRtf_CheckedChanged(object sender, EventArgs e) + { + checkBoxWriteTranslatedRtf.Enabled = checkBoxWriteRtf.Checked; + } // checkBoxWriteRtf_CheckedChanged + + private void buttonLoad_Click(object sender, EventArgs e) + { + if (openFileDialog.ShowDialog(this) != DialogResult.OK) return; + SafeCall(() => + { + var options = XmlSerialization.Deserialize(openFileDialog.FileName); + SetOptionsToDialog(options); + }); + } // buttonLoad_Click + + private void buttonSave_Click(object sender, EventArgs e) + { + if (saveFileDialog.ShowDialog(this) != DialogResult.OK) return; + SafeCall(() => + { + GetOptionsFromDialog(_options); + XmlSerialization.Serialize(saveFileDialog.FileName, _options); + }); + } // buttonSave_Click + + private void buttonClear_Click(object sender, EventArgs e) + { + Clear(); + } // buttonClear_Click + + private void buttonOk_Click(object sender, EventArgs e) + { + GetOptionsFromDialog(_options); + Options = _options; + } // buttonOk_Click + + #endregion + + private void SetOptionsToDialog(LicensingToolOptions options) + { + if (options == null) return; + + if (options.Checker != null) + { + checkBoxOverrideAuthors.Checked = options.Checker.OverrideAuthors; + checkBoxOverrideCopyright.Checked = options.Checker.OverrideCopyright; + checkBoxOverrideLicense.Checked = options.Checker.OverrideLicense; + checkBoxOverrideProduct.Checked = options.Checker.OverrideProduct; + checkBoxOverrideTerms.Checked = options.Checker.OverrideTerms; + checkBoxOverrideRemarks.Checked = options.Checker.OverrideRemarks; + checkBoxOverrideNotes.Checked = options.Checker.OverrideNotes; + } // if + + comboBoxWriteScope.SelectedIndex = -1; + comboBoxWriteScope.SelectedIndex = 0; + } // SetOptionsToDialog + + private void SetWriterOptionsToDialog(WriterOptions options) + { + checkBoxWritePlainText.Checked = options.PlainText; + checkBoxWriteMarkdown.Checked = options.Markdown; + checkBoxWriteHtml.Checked = options.Html; + checkBoxWriteRtf.Checked = options.Rtf; + + checkBoxWriteTranslatedPlainText.Checked = options.TranslatedPlainText; + checkBoxWriteTranslatedMarkdown.Checked = options.TranslatedMarkdown; + checkBoxWriteTranslatedHtml.Checked = options.TranslatedHtml; + checkBoxWriteTranslatedRtf.Checked = options.TranslatedRtf; + + checkBoxWriteTranslatedPlainText.Enabled = options.PlainText; + checkBoxWriteTranslatedMarkdown.Enabled = options.Markdown; + checkBoxWriteTranslatedHtml.Enabled = options.Html; + checkBoxWriteTranslatedRtf.Enabled = options.Rtf; + + checkBoxWriteLicensingHtml.Checked = options.LicensingHtml; + checkBoxWriteLicensingRtf.Checked = options.LicensingRtf; + + checkBoxWriteDeleteOld.Checked = options.DeleteOldFiles; + } // SetWriterOptionsToDialog + + private void GetOptionsFromDialog(LicensingToolOptions options) + { + if (options == null) return; + + options.Checker.OverrideAuthors = checkBoxOverrideAuthors.Checked; + options.Checker.OverrideCopyright = checkBoxOverrideCopyright.Checked; + options.Checker.OverrideLicense = checkBoxOverrideLicense.Checked; + options.Checker.OverrideProduct = checkBoxOverrideProduct.Checked; + options.Checker.OverrideTerms = checkBoxOverrideTerms.Checked; + options.Checker.OverrideRemarks = checkBoxOverrideRemarks.Checked; + options.Checker.OverrideNotes = checkBoxOverrideNotes.Checked; + + switch (_writeScope) + { + case 0: + GetWriterOptionsFromDialog(_options.Writer); + break; + case 1: + GetWriterOptionsFromDialog(_options.SolutionWriter); + break; + } // switch + } // GetOptionsFromDialog + + private void GetWriterOptionsFromDialog(WriterOptions options) + { + options.PlainText = checkBoxWritePlainText.Checked; + options.Markdown = checkBoxWriteMarkdown.Checked; + options.Html = checkBoxWriteHtml.Checked; + options.Rtf = checkBoxWriteRtf.Checked; + + options.TranslatedPlainText = checkBoxWriteTranslatedPlainText.Checked; + options.TranslatedMarkdown = checkBoxWriteTranslatedMarkdown.Checked; + options.TranslatedHtml = checkBoxWriteTranslatedHtml.Checked; + options.TranslatedRtf = checkBoxWriteTranslatedRtf.Checked; + + options.LicensingHtml = checkBoxWriteLicensingHtml.Checked; + options.LicensingRtf = checkBoxWriteLicensingRtf.Checked; + + options.DeleteOldFiles = checkBoxWriteDeleteOld.Checked; + } // WriterOptions + + private void Clear() + { + _options = new LicensingToolOptions(true); + + SetOptionsToDialog(_options); + } // Clear + + private void comboBoxWriteScope_SelectedIndexChanged(object sender, EventArgs e) + { + // save changes, if any + switch (_writeScope) + { + case 0: + GetWriterOptionsFromDialog(_options.Writer); + break; + case 1: + GetWriterOptionsFromDialog(_options.SolutionWriter); + break; + } // switch + + switch (comboBoxWriteScope.SelectedIndex) + { + case 0: + SetWriterOptionsToDialog(_options.Writer); + break; + case 1: + SetWriterOptionsToDialog(_options.SolutionWriter); + break; + } // switch + + _writeScope = comboBoxWriteScope.SelectedIndex; + } // comboBoxWriteScope_SelectedIndexChanged + } // class LicensingToolOptionsDialog +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingToolOptionsDialog.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingToolOptionsDialog.resx new file mode 100644 index 00000000..df2ab04c --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingToolOptionsDialog.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 17, 17 + + + 107, 17 + + + 240, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingVsUi.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingVsUi.cs new file mode 100644 index 00000000..a40186f5 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/LicensingVsUi.cs @@ -0,0 +1,138 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + internal sealed class LicensingVsUi + { + public LicensingVsUi(SolutionImages solutionImages) + { + SolutionImages = solutionImages; + } // constructor + + public SolutionImages SolutionImages { get; } + + #region VsSolution + + public TreeNode GetSolutionTree(VsSolution solution) + { + var image = SolutionImages.VsSolution; + var root = new TreeNode($"Solution {(solution.SolutionFile == null ? "folder" : "file")} <{solution.Name}> ({solution.AllProjects.Count} projects)", image, image) + { + Tag = solution + }; + + root.Expand(); + AddSolutionFolder(root, solution.RootFolder); + + return root; + } // GetSolutionTree + + public void AddSolutionFolder(TreeNode treeNode, VsFolder vsFolder) + { + if ((vsFolder == null) || (treeNode == null)) return; + if (vsFolder.Folders != null) + { + foreach (var folder in vsFolder.Folders) + { + var folderImage = folder.Name.StartsWith("<") ? SolutionImages.LinkedFolder : SolutionImages.Folder; + var node = new TreeNode(folder.Name, folderImage, folderImage); + AddSolutionFolder(node, folder); + treeNode.Nodes.Add(node); + } // foreach + } // if + + if (vsFolder.Projects == null) return; + + foreach (var project in vsFolder.Projects) + { + AddProject(treeNode, vsFolder, project); + } // foreach + } // AddSolutionFolder + + #endregion + + #region VsProject + + public TreeNode GetProjectTree(VsProject project, VsSolution solution) + { + var root = GetProjectTreeNode(project); + AddProjectReferences(root, solution, project.ReferencedProjects); + + return root; + } // GetProjectTree + + public void AddProjectReferences(TreeNode treeNode, VsSolution solution, List referencedProjects) + { + if ((referencedProjects == null) || (referencedProjects.Count == 0)) + { + treeNode.Nodes.Add(new TreeNode("No references", SolutionImages.References, SolutionImages.References)); + return; + } // if + + var node = new TreeNode("Referenced projects", SolutionImages.References, SolutionImages.References); + foreach (var guid in referencedProjects) + { + if (solution.TryGetValue(guid, out var project)) + { + node.Nodes.Add(GetProjectTree(project, solution)); + } + else + { + var image = SolutionImages.VsProjectUnknown; + node.Nodes.Add(new TreeNode($" {guid.ToString("B", CultureInfo.InvariantCulture)}", image, image)); + } // if-else + } // foreach + + treeNode.Nodes.Add(node); + } // AddProjectReferences + + public void AddProject(TreeNode treeNode, VsFolder vsFolder, VsProject project) + { + treeNode.Nodes.Add(GetProjectTreeNode(project)); + + var licensing = LicensingMaintenance.Helper.GetLicensingFilename(project, vsFolder.Projects.Count == 1); + + var exists = File.Exists(licensing); + var image = exists switch + { + true => SolutionImages.Certificate, + false => SolutionImages.CertificateError + }; + + treeNode.Nodes.Add(new TreeNode(Path.GetFileName(licensing), image, image) + { + Tag = new LicensingDataNode(licensing, exists) + }); + } // AddProject + + public TreeNode GetProjectTreeNode(VsProject project) + { + var image = SolutionImages[project.ImageKey]; + + return new TreeNode(project.Namespace, image, image) + { + Tag = project + }; + } // GetProjectTreeNode + + #endregion + } // class LicensingVsUi +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/PackagesConfig.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/PackagesConfig.cs new file mode 100644 index 00000000..ed4c7f3c --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/PackagesConfig.cs @@ -0,0 +1,27 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; +using System.Xml.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + [XmlRoot("packages")] + public class PackagesConfig + { + [XmlElement("package")] + public List Packages { get; set; } + + public bool PackagesSpecified => (Packages != null) && (Packages.Count > 0); + } // class PackagesConfig +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/PackagesConfigPackage.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/PackagesConfigPackage.cs new file mode 100644 index 00000000..74e1b2bc --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/PackagesConfigPackage.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Xml.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + public class PackagesConfigPackage + { + [XmlAttribute("id")] + public string Id { get; set; } + + [XmlAttribute("version")] + public string Version { get; set; } + + [XmlAttribute("targetFramework")] + public string TargetFramework { get; set; } + } // class PackagesConfigPackage +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe.ico b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe.ico new file mode 100644 index 00000000..05153a36 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe.ico differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_16x.png new file mode 100644 index 00000000..f879e0e6 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_24x.png new file mode 100644 index 00000000..43b571f1 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_256x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_256x.png new file mode 100644 index 00000000..da73c9f8 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_256x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_32x.png new file mode 100644 index 00000000..95be1695 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_48x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_48x.png new file mode 100644 index 00000000..4c5086f3 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_48x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_64x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_64x.png new file mode 100644 index 00000000..a8be93ad Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Exe_64x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib.ico b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib.ico new file mode 100644 index 00000000..729e5e8e Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib.ico differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_16x.png new file mode 100644 index 00000000..505d0431 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_24x.png new file mode 100644 index 00000000..d54efa44 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_256x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_256x.png new file mode 100644 index 00000000..8bd2160e Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_256x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_32x.png new file mode 100644 index 00000000..416208f8 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_48x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_48x.png new file mode 100644 index 00000000..336b6e3a Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_48x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_64x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_64x.png new file mode 100644 index 00000000..e877fb88 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_Lib_64x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe.ico b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe.ico new file mode 100644 index 00000000..53563ceb Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe.ico differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_16x.png new file mode 100644 index 00000000..41b6ad2e Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_24x.png new file mode 100644 index 00000000..47f97f27 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_256x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_256x.png new file mode 100644 index 00000000..4b3203da Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_256x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_32x.png new file mode 100644 index 00000000..e2671f7c Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_48x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_48x.png new file mode 100644 index 00000000..89f3aeec Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_48x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_64x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_64x.png new file mode 100644 index 00000000..3c3a84fa Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CSharp_WinExe_64x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_16x.png new file mode 100644 index 00000000..61eb6353 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_16x.svg new file mode 100644 index 00000000..ccb25ce5 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_16x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_24x.png new file mode 100644 index 00000000..690e59b9 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_32x.png new file mode 100644 index 00000000..466053b9 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateError_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateWarning_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateWarning_16x.svg new file mode 100644 index 00000000..1be5b480 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/CertificateWarning_16x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_16x.png new file mode 100644 index 00000000..c6db9967 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_16x.svg new file mode 100644 index 00000000..2178e9ab --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_16x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_24x.png new file mode 100644 index 00000000..8d645d86 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_32x.png new file mode 100644 index 00000000..49006ba9 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Certificate_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Component_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Component_16x.svg new file mode 100644 index 00000000..66415b89 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Component_16x.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Component_Black_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Component_Black_16x.svg new file mode 100644 index 00000000..3a74f39d --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Component_Black_16x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies.svg new file mode 100644 index 00000000..39bd11c1 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies_16x.png new file mode 100644 index 00000000..0e0e13d0 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies_24x.png new file mode 100644 index 00000000..ebc1f8f3 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies_32x.png new file mode 100644 index 00000000..98f9ae33 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Dependencies_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer.svg new file mode 100644 index 00000000..baecb080 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_16x.png new file mode 100644 index 00000000..1871d63c Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_24x.png new file mode 100644 index 00000000..31735860 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_32x.png new file mode 100644 index 00000000..f88a9c71 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_48x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_48x.png new file mode 100644 index 00000000..092e3fdd Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/Installer_48x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_16x.png new file mode 100644 index 00000000..8eae2a4e Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_16x.svg new file mode 100644 index 00000000..9e3deddf --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_16x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_24x.png new file mode 100644 index 00000000..2641f9e6 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_32x.png new file mode 100644 index 00000000..47b42cf4 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Project_Unknown_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution.ico b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution.ico new file mode 100644 index 00000000..61d3aea9 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution.ico differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_16x.png new file mode 100644 index 00000000..0b4bcc6e Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_24x.png new file mode 100644 index 00000000..db836b7b Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_256x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_256x.png new file mode 100644 index 00000000..140953a0 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_256x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_32x.png new file mode 100644 index 00000000..46f17800 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_48x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_48x.png new file mode 100644 index 00000000..45d9b1b5 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_48x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_64x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_64x.png new file mode 100644 index 00000000..dd7fd809 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_64x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File.ico b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File.ico new file mode 100644 index 00000000..df7c1b77 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File.ico differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_16x.png new file mode 100644 index 00000000..91abd0a6 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_24x.png new file mode 100644 index 00000000..7a252846 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_256x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_256x.png new file mode 100644 index 00000000..a909c893 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_256x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_32x.png new file mode 100644 index 00000000..f07379af Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_48x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_48x.png new file mode 100644 index 00000000..57e38efc Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_48x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_64x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_64x.png new file mode 100644 index 00000000..abea750c Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/Resources/VS_Solution_File_64x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/SolutionImages.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/SolutionImages.cs new file mode 100644 index 00000000..9f2484f0 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/SolutionImages.cs @@ -0,0 +1,118 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Drawing; +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing +{ + internal sealed class SolutionImages + { + public const string KeyFolder = @"Folder"; + public const string KeyFolderOpen = @"FolderOpen"; + public const string KeyLinkedFolder = @"LinkedFolder"; + public const string KeyLinkedFolderOpen = @"LinkedFolderOpen"; + public const string KeyVsSolution = @"VS_Solution"; + public const string KeyVsSolutionFile = @"VS_Solution_File"; + public const string KeyVsProjectUnknown = @"VS_Project_Unknown"; + public const string KeyCsExe = @"CSharp_Exe"; + public const string KeyCsLib = @"CSharp_Lib"; + public const string KeyCsWinExe = @"CSharp_WinExe"; + public const string KeyInstaller = @"CSharp_Installer"; + public const string KeyCertificate = @"Certificate"; + public const string KeyCertificateError = @"Certificate_Error"; + public const string KeyReferences = @"References"; + + private readonly ImageList _list; + + public SolutionImages(ImageList list) + { + _list = list; + + var images = list.Images; + Folder = images.IndexOfKey(KeyFolder); + FolderOpen = images.IndexOfKey(KeyFolderOpen); + LinkedFolder = images.IndexOfKey(KeyLinkedFolder); + LinkedFolderOpen = images.IndexOfKey(KeyLinkedFolderOpen); + VsSolution = images.IndexOfKey(KeyVsSolution); + VsSolutionFile = images.IndexOfKey(KeyVsSolutionFile); + VsProjectUnknown = images.IndexOfKey(KeyVsProjectUnknown); + CsExe = images.IndexOfKey(KeyCsExe); + CsLib = images.IndexOfKey(KeyCsLib); + CsWinExe = images.IndexOfKey(KeyCsWinExe); + Installer = images.IndexOfKey(KeyInstaller); + Certificate = images.IndexOfKey(KeyCertificate); + CertificateError = images.IndexOfKey(KeyCertificateError); + References = images.IndexOfKey(KeyReferences); + } // constructor + + public static void InitializeImageListSmall(ImageList list) + { + list.ColorDepth = ColorDepth.Depth32Bit; + list.ImageSize = new Size(16, 16); + list.Images.Add(KeyFolder, Resources.Folder_16x); + list.Images.Add(KeyFolderOpen, Resources.FolderOpen_16x); + list.Images.Add(KeyLinkedFolder, Resources.LinkedFolder_16x); + list.Images.Add(KeyLinkedFolderOpen, Resources.LinkedFolderOpen_16x); + list.Images.Add(KeyVsSolution, LicensingResources.VS_Solution_16x); + list.Images.Add(KeyVsSolutionFile, LicensingResources.VS_Solution_File_16x); + list.Images.Add(KeyVsProjectUnknown, LicensingResources.VS_Project_Unknown_16x); + list.Images.Add(KeyCsExe, LicensingResources.CSharp_Exe_16x); + list.Images.Add(KeyCsLib, LicensingResources.CSharp_Lib_16x); + list.Images.Add(KeyCsWinExe, LicensingResources.CSharp_WinExe_16x); + list.Images.Add(KeyInstaller, LicensingResources.Installer_16x); + list.Images.Add(KeyCertificate, LicensingResources.Certificate_16x); + list.Images.Add(KeyCertificateError, LicensingResources.CertificateError_16x); + list.Images.Add(KeyReferences, LicensingResources.Dependencies_16x); + } // InitializeImageListSmall + + public static void InitializeImageListMedium(ImageList list) + { + list.ColorDepth = ColorDepth.Depth32Bit; + list.ImageSize = new Size(24, 24); + list.Images.Add(KeyFolder, Resources.Folder_24x); + list.Images.Add(KeyFolderOpen, Resources.FolderOpen_24x); + list.Images.Add(KeyLinkedFolder, Resources.LinkedFolder_24x); + list.Images.Add(KeyLinkedFolderOpen, Resources.LinkedFolderOpen_24x); + list.Images.Add(KeyVsSolution, LicensingResources.VS_Solution_24x); + list.Images.Add(KeyVsSolutionFile, LicensingResources.VS_Solution_File_24x); + list.Images.Add(KeyVsProjectUnknown, LicensingResources.VS_Project_Unknown_24x); + list.Images.Add(KeyCsExe, LicensingResources.CSharp_Exe_24x); + list.Images.Add(KeyCsLib, LicensingResources.CSharp_Lib_24x); + list.Images.Add(KeyCsWinExe, LicensingResources.CSharp_WinExe_24x); + list.Images.Add(KeyInstaller, LicensingResources.Installer_24x); + list.Images.Add(KeyCertificate, LicensingResources.Certificate_24x); + list.Images.Add(KeyCertificateError, LicensingResources.CertificateError_24x); + list.Images.Add(KeyReferences, LicensingResources.Dependencies_32x); + } // InitializeImageListMedium + + public int this[string key] => _list.Images.IndexOfKey(key); + public Image this[int index] => _list.Images[index]; + + public int Folder { get; } + public int FolderOpen { get; } + public int LinkedFolder { get; } + public int LinkedFolderOpen { get; } + public int VsSolution { get; } + public int VsSolutionFile { get; } + public int VsProjectUnknown { get; } + public int CsExe { get; } + public int CsLib { get; } + public int CsWinExe { get; } + public int Installer { get; } + public int Certificate { get; } + public int CertificateError { get; } + public int References { get; } + } // class SolutionImages +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/HtmlConverter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/HtmlConverter.cs new file mode 100644 index 00000000..94a29c22 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/HtmlConverter.cs @@ -0,0 +1,56 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using Markdig; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.TextConverters +{ + internal sealed class HtmlConverter : ITextFormatConverter + { + private readonly IToolOutputWriter _writer; + private readonly MarkdownPipeline _mdPipeline; + + public HtmlConverter(IToolOutputWriter writer, MarkdownPipeline mdPipeline) + { + _writer = writer; + _mdPipeline = mdPipeline; + } // constructor + + public string ConvertFrom(string fromFormat, string text) + { + switch (fromFormat) + { + case null: + text = MarkdownConverter.PlainTextToMarkdown(text); + goto case "MD"; + + case "MD": + var markdown = Markdown.Normalize(text, null, _mdPipeline); + return Markdown.ToHtml(markdown, _mdPipeline); + + case "HTML": + return text; + + default: + _writer.WriteLine("ERROR: unable to transform '{0}' to HTML", fromFormat); + return null; + } // switch + } // ConvertFrom + + public void Dispose() + { + // nothing to dispose + } // Dispose + } // class HtmlConverter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/ITextFormatConverter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/ITextFormatConverter.cs new file mode 100644 index 00000000..c377505a --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/ITextFormatConverter.cs @@ -0,0 +1,22 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.TextConverters +{ + public interface ITextFormatConverter: IDisposable + { + string ConvertFrom(string fromFormat, string text); + } // interface ITextFormatConverter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/MarkdownConverter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/MarkdownConverter.cs new file mode 100644 index 00000000..80e18570 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/MarkdownConverter.cs @@ -0,0 +1,78 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using Markdig; +using Markdig.Extensions.Footers; +using Markdig.Extensions.Footnotes; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.TextConverters +{ + internal sealed class MarkdownConverter: ITextFormatConverter + { + private readonly IToolOutputWriter _writer; + + public MarkdownConverter(IToolOutputWriter writer) + { + _writer = writer; + var builder = new MarkdownPipelineBuilder().UseAdvancedExtensions(); + builder.Extensions.TryRemove(); + builder.Extensions.TryRemove(); + Pipeline = builder.Build(); + } // constructor + + public MarkdownPipeline Pipeline { get; } + + public string ConvertFrom(string fromFormat, string text) + { + switch (fromFormat) + { + case null: + return PlainTextToMarkdown(text.Trim()); + + case "MD": + var markdown = Markdown.Normalize(text, null, Pipeline); + return markdown.Trim(); + + default: + _writer.WriteLine("ERROR: unable to transform '{0}' to Markdown", fromFormat); + return null; + } // switch + } // ConvertFrom + + public void Dispose() + { + // nothing to dispose + } // Dispose + + public static string PlainTextToMarkdown(string text) + { + var lines = text.Trim().Split('\n'); + + for (var index = 0; index < lines.Length; index++) + { + if (string.IsNullOrWhiteSpace(lines[index])) lines[index] = string.Empty; + } // for + + for (var index = 0; index < lines.Length; index++) + { + if (((index + 1) < lines.Length) && (lines[index + 1].Trim().Length != 0)) + { + lines[index] += " \\"; // break line
+ } // if + } // for + + return string.Join("\n", lines); + } // PlainTextToMarkdown + } // class MarkdownConverter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/NaiveRtfRenderer.DefaultsTagComparer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/NaiveRtfRenderer.DefaultsTagComparer.cs new file mode 100644 index 00000000..1705bee2 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/NaiveRtfRenderer.DefaultsTagComparer.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.TextConverters +{ + public partial class NaiveRtfRenderer + { + private sealed class DefaultsTagComparer : IComparer<(string Tag, string Rtf)> + { + public int Compare((string Tag, string Rtf) x, (string Tag, string Rtf) y) + { + return string.Compare(x.Tag, y.Tag, StringComparison.InvariantCultureIgnoreCase); + } // Compare + } // class DefaultsTagComparer + } // partial class NaiveRtfRenderer +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/NaiveRtfRenderer.ListInfo.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/NaiveRtfRenderer.ListInfo.cs new file mode 100644 index 00000000..1e7710f5 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/NaiveRtfRenderer.ListInfo.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.TextConverters +{ + public partial class NaiveRtfRenderer + { + private sealed class ListInfo + { + public int ListId { get; set; } + + public int Depth { get; set; } + + public int OlLevel { get; set; } + + public int UlLevel { get; set; } + + public string Tag { get; set; } + + public int ItemCount { get; set; } + + public string Bullet { get; set; } + } // class ListInfo + } // partial class NaiveRtfRenderer +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/NaiveRtfRenderer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/NaiveRtfRenderer.cs new file mode 100644 index 00000000..dfe0a9b7 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/NaiveRtfRenderer.cs @@ -0,0 +1,548 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using HtmlAgilityPack; +using Markdig; +using Markdig.Helpers; +using HtmlDocument = HtmlAgilityPack.HtmlDocument; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.TextConverters +{ + // ************************************************************************** + // + // This code DOES NOT WORK as intented! + // + // ************************************************************************** + // + // A naive attempt at transforming simple HTML to RTF + // Currently chokes on nested lists + + public partial class NaiveRtfRenderer + { + private readonly Encoding _ansi1252; + private readonly string[] _bullets; + private readonly (string Tag, string Rtf)[] _defaults; + private readonly DefaultsTagComparer _defaultsTagComparer; + private readonly Dictionary _tags; + private readonly Dictionary> _specialTags; + private readonly List> _listTable; + private readonly Stack _listsStack; + private readonly int _indentTwips; + private MarkdownPipeline _mdPipeline; + private List _currentListDefinition; + + private StringBuilder Output { get; } + + #region Public API + + public NaiveRtfRenderer() + { + Output = new StringBuilder(); + _ansi1252 = Encoding.GetEncoding(1252, EncoderFallback.ReplacementFallback, DecoderFallback.ReplacementFallback); + + _bullets = CreateBulletsList(); + _defaultsTagComparer = new DefaultsTagComparer(); + _defaults = CreateDefaultsList(); + _specialTags = CreateSpecialTagsDictionary(); + _tags = CreateTagsDictionary(); + _listTable = new List>(); + _listsStack = new Stack(); + + _indentTwips = 360; + } // constructor + + public string HtmlToRtf(string html) + { + var doc = new HtmlDocument(); + doc.LoadHtml(html); + + HtmlToRtf(doc.DocumentNode); + + var header = GetHeader(); + WriteFooter(); + Output.EnsureCapacity(Output.Length + header.Length); + Output.Insert(0, header.ToString()); + + return Output.ToString(); + } // HtmlToRtf + + public string MarkdownToRtf(string markdown) + { + _mdPipeline ??= new MarkdownPipelineBuilder().UseAdvancedExtensions().Build(); + + markdown = Markdown.Normalize(markdown, null, _mdPipeline); + return HtmlToRtf(Markdown.ToHtml(markdown)); + } // MarkdownToRtf + + #endregion + + #region Initialization + + private static string[] CreateBulletsList() + { + return new[] + { + @"\'B7", + @"\'A8", + @"\'AE", + @"\'BE", + }; + } // CreateBulletsList + + private static (string Tag, string Rtf)[] CreateDefaultsList() + { + var list = new (string Tag, string Rtf)[] + { + // sa = space after in twips (default is 0) + // sl = space between lines + // slmult = line spacing multiple + ("p", @"\sa200\sl276\slmult1 "), + ("ol:level", @"\levelnfc0\leveljc0\levelstartat1{{\leveltext\'02\'{0:00}.;}}{{\levelnumbers\'01;}}\jclisttab\tx360"), // {0} = level + ("ul:level", @"\levelnfc23\leveljc0\levelstartat1{{\leveltext\'01{0};}}{{\levelnumbers;}}\f1\jclisttab\tx360"), // {0} = bullet symbol + }; + + var sorted = list.OrderBy(item => item.Tag, StringComparer.InvariantCultureIgnoreCase); + + var result = new (string Tag, string Rtf)[list.Length]; + var index = 0; + foreach (var item in sorted) + { + result[index++] = item; + } // foreach + + return result; + } // CreateDefaultsList + + private string GetDefaults(string tag) + { + var index = Array.BinarySearch(_defaults, (tag, null), _defaultsTagComparer); + return (index >= 0) ? _defaults[index].Rtf : null; + } // tag + + private Dictionary> CreateSpecialTagsDictionary() + { + return new Dictionary>(StringComparer.InvariantCultureIgnoreCase) + { + {"head", TagHead }, + {"a", TagA }, + {"ol", TagList }, + {"ul", TagList }, + {"li", TagLi }, + {"#text", WriteText } + }; + } // CreateSpecialTagsDictionary + + private Dictionary CreateTagsDictionary() + { + var tags = new Dictionary(StringComparer.InvariantCultureIgnoreCase) + { + // pard = resets to default paragraph properties + // par = new paragraph + {"p", (@"\pard{0}", "\\par\r\n")}, // {0} =

defaults + + // b = bold + // b0 = bold off + {"b", (@"\b ", @"\b0 ") }, + {"strong", (@"\b ", @"\b0 ") }, + + // i = italic + // i0 = italic off + {"i", (@"\i ", @"\i0 ") }, + {"em", (@"\i ", @"\i0 ") }, + + // i = underline + // i0 = underline off + {"u", (@"\ul ", @"\ul0 ") }, + + // line = required line break (no paragraph break). + {"br", (@"\line ", "") }, + + // pard = resets to default paragraph properties + // \fs = font size in half-points (default is 24 = 12pt) + // par = new paragraph + {"h1", (@"\pard{0}\fs52", "\\fs22\\par\r\n") }, + {"h2", (@"\pard{0}\fs46", "\\fs22\\par\r\n") }, + {"h3", (@"\pard{0}\fs36", "\\fs22\\par\r\n") }, + {"h4", (@"\pard{0}\fs30\i", "\\fs22\\i0\\par\r\n") }, + {"h5", (@"\pard{0}\fs24\b\i", "\\fs22\\b0\\i0\\par\r\n") }, + }; + + // add 'defaults' + var defaultP = GetDefaults("p"); + + var tag = tags["p"]; + tags["p"] = (string.Format(tag.Open, defaultP), tag.Close); + + tag = tags["h1"]; + tags["h1"] = (string.Format(tag.Open, defaultP), tag.Close); + tag = tags["h2"]; + tags["h2"] = (string.Format(tag.Open, defaultP), tag.Close); + tag = tags["h3"]; + tags["h3"] = (string.Format(tag.Open, defaultP), tag.Close); + tag = tags["h3"]; + tags["h4"] = (string.Format(tag.Open, defaultP), tag.Close); + tag = tags["h4"]; + tags["h4"] = (string.Format(tag.Open, defaultP), tag.Close); + tag = tags["h5"]; + tags["h5"] = (string.Format(tag.Open, defaultP), tag.Close); + + return tags; + } // CreateTagsDictionary + + #endregion + + #region RTF header & footer + + private StringBuilder GetHeader() + { + var header = new StringBuilder(); + + header.AppendLine(@"{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033\deflangfe3082"); + AddFontTable(header); + AddColorTable(header); + AddListTable(header); + header.AppendFormat(@"{{\*\generator {0} v{1}}}", GetType().FullName, Application.ProductVersion); + header.Append(@"\viewkind0\uc1"); + header.Append(@"\fs22"); + header.AppendLine(); + + return header; + } // WriteHeader + + private void AddFontTable(StringBuilder header) + { + header.Append(@"{\fonttbl"); + header.Append(@"{\f0\fnil\fcharset0 Calibri;}"); + header.Append(@"{\f1\fnil\fcharset2 Symbol;}"); + header.AppendLine(@"}"); + } // WriteFontTable + + private void AddColorTable(StringBuilder header) + { + + } // AddColorTable + + private void AddListTable(StringBuilder header) + { + if (_listTable.Count == 0) return; + + // \listtable = List Table: a list of lists (destination \list). + // Each list contains a number of list properties that pertain to the entire list, + // and a list of levels (destination \listlevel), each of which contains properties that pertain only to that level. + header.AppendLine(@"{\*\listtable"); + for (var index = 0; index < _listTable.Count; index++) + { + var table = _listTable[index]; + // \list = start of list definitions + // \listhybrid = present if the list has 9 levels, each of which is the equivalent of a simple list; only one of \listsimpleN and \listhybrid should be present. + header.AppendLine(@"{\list\listhybrid"); + foreach (var level in table) + { + // \listlevel = start of list level + header.Append(@"{\listlevel"); + header.Append(level); + header.AppendLine("}"); + } // foreach + + // \listid = each list must have a unique list ID [that should be randomly generated] + header.AppendFormat("\\listid{0} }}", index + 1); + header.AppendLine(); + } // for + + header.AppendLine(@"}"); + } // AddListTable + + private void WriteFooter() + { + Output.Append("}\0"); + } // WriteFooter + + #endregion + + private void HtmlToRtf(HtmlNode node) + { + var name = node.Name; + if (_specialTags.TryGetValue(name, out var action)) + { + action(node); + return; + } // if + + if (_tags.TryGetValue(name, out var tuple)) + { + Output.Append(tuple.Open); + foreach (var child in node.ChildNodes) + { + HtmlToRtf(child); + } // foreach + Output.Append(tuple.Close); + return; + } // if + + foreach (var child in node.ChildNodes) + { + HtmlToRtf(child); + } // foreach + } // HtmlToRtf + + #region Special tags handling + + private static void TagHead(HtmlNode node) + { + // ignore node + } // TagHead + + private void TagA(HtmlNode node) + { + // TODO: transform to RTF link + WriteText(node.InnerText); + } // TagA + + #endregion + + #region Special tags: ul / ol / li + + private void TagList(HtmlNode node) + { + BeginListDefinition(node.Name); + var previous = GetPreviousListInfo(); + + var info = new ListInfo + { + ListId = previous.ListId, + Depth = previous.Depth + 1, + Tag = node.Name + }; + + switch (info.Tag) + { + case "ul": + info.OlLevel = -1; + info.UlLevel = previous.UlLevel + 1; + info.Bullet = _bullets[info.UlLevel % _bullets.Length]; + if (info.Depth == _currentListDefinition.Count) + { + _currentListDefinition.Add(string.Format(GetDefaults("ul:level"), info.Bullet)); + } // if + + break; + + case "ol": + info.OlLevel = previous.OlLevel + 1; + info.UlLevel = -1; + if (info.Depth == _currentListDefinition.Count) + { + _currentListDefinition.Add(string.Format(CultureInfo.InvariantCulture, GetDefaults("ol:level"), info.Depth)); + } // if + + break; + + default: + throw new InvalidDataException(); + } // switch + + // if nested, 'end' li + Output.Append("\\par\r\n"); + + _listsStack.Push(info); + foreach (var child in node.ChildNodes) + { + HtmlToRtf(child); + } // foreach + + _listsStack.Pop(); + EndListDefinition(); + } // TagList + + private void BeginListDefinition(string tag) + { + if (_currentListDefinition != null) return; + + _currentListDefinition = new List(); + _listTable.Add(_currentListDefinition); + } // BeginListDefinition + + private void EndListDefinition() + { + if (_listsStack.Count == 0) + { + _currentListDefinition = null; + } // if + } // EndListDefinition + + private ListInfo GetPreviousListInfo() + { + if (_listsStack.Count > 0) return _listsStack.Peek(); + + return new ListInfo + { + ListId = _listTable.Count, + Depth = -1, + OlLevel = -1, + UlLevel = -1, + Tag = null, + }; + } // GetPreviousListInfo + + private void TagLi(HtmlNode node) + { + var info = _listsStack.Peek(); + + if (info.ItemCount == 0) + { + // start first li + Output.AppendFormat(@"\pard"); + AddAlternateText(); + Output.AppendFormat(@"\jclisttab\tx{0}\ls{1}", _indentTwips, info.ListId); + if (info.Depth > 0) Output.AppendFormat(@"\ilvl{0}", info.Depth); + Output.AppendFormat(@"\widctlpar\fi{0}\li{1}\sa{2} ", (-1 * _indentTwips), (_indentTwips / 2) + (_indentTwips * info.Depth), 100); + } + else + { + // start new li + AddAlternateText(); + } // if-else + + foreach (var child in node.ChildNodes) + { + if (string.Equals(child.Name, "p", StringComparison.InvariantCultureIgnoreCase)) + { + foreach (var pChild in child.ChildNodes) + { + HtmlToRtf(pChild); + } // foreach + } + else + { + HtmlToRtf(child); + } // if-else + } // foreach + + // close li + Output.AppendLine("\\par\r\n"); + + void AddAlternateText() + { + info.ItemCount++; + if (info.Bullet == null) + { + Output.AppendFormat(@"{{\listtext\f0 {0:D}.\tab}}", info.ItemCount); + } + else + { + Output.AppendFormat(@"{{\listtext\f1{0}\tab}}", info.Bullet); + } // if-else + } // AddAlternateText + } // TagLi + + #endregion + + private void WriteText(HtmlNode node) + { + WriteText(node.InnerText); + } // WriteText + + private void WriteText(string text) + { + if (string.IsNullOrEmpty(text)) return; + + var start = true; + for (var index = 0; index < text.Length; index++) + { + var c = text[index]; + + if (c.IsWhiteSpaceOrZero()) + { + var prev = index > 0 ? text[index - 1] : '\0'; + // skip repeated spaces + if (prev == ' ') continue; + if (!start) Output.Append(' '); + } + else + { + start = false; + index = WriteChar(text, index); + } // if-else + } // for + } // WriteTex + + private int WriteChar(string text, int index) + { + var c = text[index]; + + switch (c) + { + case '\r': + Output.Append("\r\n"); + + var n = (index + 1) < text.Length ? text[index + 1] : '\0'; + if ((n == '\n') || (n == '\0')) + { + index++; + } // if + + break; + + case '\n': + Output.Append("\r\n"); + break; + + case '\\': + Output.Append(@"\\"); + break; + + case '&': + var end = text.IndexOf(';', index); + if (end > 0) + { + WriteText(HtmlEntity.DeEntitize(text.Substring(index, 1 + end - index))); + index = end + 1; + } + else + { + Output.Append('&'); + } // if-else + + break; + + default: + if (c < ' ') + { + // ommit char + } + else if (c < '\x80') + { + Output.Append(c); + } + else + { + unchecked + { + Output.AppendFormat(@"\u{0}\'{1:x2}", (short)(ushort)c, _ansi1252.GetBytes(c.ToString())[0]); + } // unchecked + } // if-ese + + break; + } // switch + + return index; + } // WriteChar + } // class NaiveRtfRenderer +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/PlainTextConverter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/PlainTextConverter.cs new file mode 100644 index 00000000..cbb52d69 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/PlainTextConverter.cs @@ -0,0 +1,81 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.TextConverters +{ + public class PlainTextConverter: ITextFormatConverter + { + private readonly IToolOutputWriter _writer; + private RichTextBox _rtfBox; + + public PlainTextConverter(IToolOutputWriter writer) + { + _writer = writer; + } // constructor + + public string ConvertFrom(string fromFormat, string text) + { + switch (fromFormat) + { + case null: + return text.Trim(); + + case "MD": + return text.Trim(); + + case "RTF": + _rtfBox ??= new RichTextBox(); + _rtfBox.Clear(); + _rtfBox.Rtf = text; + var plainText = _rtfBox.Text; + _rtfBox.Clear(); + return plainText; + + default: + _writer.WriteLine("ERROR: unable to transform '{0}' to Plain Text", fromFormat); + return null; + } // switch + } // ConvertFrom + + #region IDisposable Support + + private bool _disposedValue; // To detect redundant calls + + protected virtual void Dispose(bool disposing) + { + if (_disposedValue) return; + + if (disposing) + { + // dispose managed resources + _rtfBox?.Dispose(); + } // if + + // dispose unmanaged resources + // no unmanaged resources + + _disposedValue = true; + } // Dispose + + public void Dispose() + { + Dispose(true); + } // Dispose + + #endregion + + } // class PlainTextConverter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/RtfConverter.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/RtfConverter.cs new file mode 100644 index 00000000..044b98a0 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/TextConverters/RtfConverter.cs @@ -0,0 +1,226 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using AlphaCentaury.Tools.SourceCodeMaintenance.Properties; +using Markdig; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.TextConverters +{ + internal sealed class RtfConverter : ITextFormatConverter + { + private readonly IToolOutputWriter _writer; + private readonly MarkdownPipeline _mdPipeline; + private readonly Dictionary _markdownCache; + private readonly Dictionary _htmlCache; + private readonly CancellationToken _token; + private RichTextBox _rtfBox; + private dynamic _word; + + public RtfConverter(IToolOutputWriter writer, MarkdownPipeline mdPipeline, CancellationToken token, bool withCache = true) + { + _writer = writer; + _mdPipeline = mdPipeline; + + if (withCache) + { + _markdownCache = new Dictionary(); + _htmlCache = new Dictionary(); + } // if + } // constructor + + public string ConvertFrom(string fromFormat, string text) + { + switch (fromFormat) + { + case null: + return ConvertFromText(text); + + case "MD": + return ConvertFromMarkdown(text); + + case "HTML": + return ConvertFromHtml(text); + + case "RTF": + return text; + + default: + _writer.WriteLine("ERROR: unable to transform '{0}' to RTF", fromFormat); + return null; + } // switch format + } // ConvertFrom + + public string ConvertFromText(string text) + { + _rtfBox.Clear(); + _rtfBox.Text = text; + var rtf = _rtfBox.Rtf; + _rtfBox.Clear(); + + return rtf; + } // ConvertFromText + + public string ConvertFromMarkdown(string markdown) + { + markdown = Markdown.Normalize(markdown, null, _mdPipeline); + if ((_markdownCache != null) && (_markdownCache.TryGetValue(markdown, out var cachedRtf))) + { + return cachedRtf; + } // if + + var html = Markdown.ToHtml(markdown, _mdPipeline); + var rtf = ConvertFromHtml(html, "MD"); + + _markdownCache?.Add(markdown, rtf); + + return rtf; + } // ConvertFromMarkdown + + public string ConvertFromHtml(string html) + { + html = html.Trim(); + if ((_htmlCache != null) && (_htmlCache.TryGetValue(html, out var cachedRtf))) + { + return cachedRtf; + } // if + + var rtf = ConvertFromHtml(html, "HTML"); + _htmlCache?.Add(html, rtf); + + return rtf; + } // ConvertFromHtml + + private string ConvertFromHtml(string html, string from) + { + _token.ThrowIfCancellationRequested(); + var word = GetWord(); + + _writer.WriteLine("Converting {0} text to RTF via Word...", from ?? "plain"); + var htmlFilename = Path.Combine(Application.StartupPath, $"~RtfConverter~{Guid.NewGuid():D}.htm"); + var rtfFilename = htmlFilename + ".rtf"; + + var stylesheet = LicensingResources.HtmlDefaultStylesheetRf; + var htmlOutput = new StringBuilder(html.Length + stylesheet.Length + 128); + htmlOutput.AppendLine(""); + htmlOutput.Append(html); + htmlOutput.AppendLine(""); + + File.WriteAllText(htmlFilename, htmlOutput.ToString(), Encoding.UTF8); + + dynamic documents = null; + dynamic document = null; + try + { + documents = word.Documents; + document = documents.Open(FileName: htmlFilename, + ConfirmConversions: false, + ReadOnly: true, + AddToRecentFiles: false, + Format: 7, // WdOpenFormat.wdOpenFormatWebPages + Revert: true, + NoEncodingDialog: true, + Encoding: 65001); // MsoEncoding.msoEncodingUTF8 + + document.SaveAs2(FileName: rtfFilename, + FileFormat: 6, // WdSaveFormat.wdFormatRTF + AddToRecentFiles: false, + EmbedTrueTypeFonts: false, + SaveFormsData: false, + SaveAsAOCELetter: false, + Encoding: 1252); + + document.Close(); + document = null; + + var rtf = File.ReadAllText(rtfFilename, Encoding.ASCII); + _rtfBox.Clear(); + _rtfBox.Rtf = rtf; + _rtfBox.AppendText(" "); // force 'cleaning' of RTF code, removing Word 'extra' tags + rtf = _rtfBox.Rtf; + _rtfBox.Clear(); + + return rtf; + } + finally + { + if (document != null) document.Close(); + if (documents != null) Marshal.ReleaseComObject(documents); + if (File.Exists(htmlFilename)) File.Delete(htmlFilename); + if (File.Exists(rtfFilename)) File.Delete(rtfFilename); + } // try-finally + } // ConvertFromHtml + + private dynamic GetWord() + { + if (_word != null) return _word; + + _rtfBox = new RichTextBox(); + + _writer.WriteLine("Creating new Microsoft Word instance..."); + var wordType = Type.GetTypeFromProgID("Word.Application"); + _word = Activator.CreateInstance(wordType); + _token.ThrowIfCancellationRequested(); + + return _word; + } // GetWord + + #region IDisposable Support + + private bool _disposedValue; // To detect redundant calls + + private void Dispose(bool disposing) + { + if (_disposedValue) return; + + if (disposing) + { + // dispose managed resources + _rtfBox?.Dispose(); + _markdownCache?.Clear(); + _htmlCache?.Clear(); + } // if + + // dispose unmanaged resources + if (_word != null) + { + _writer.WriteLine("Closing Microsoft Word instance..."); + _word.Quit(); + } // if + + _disposedValue = true; + } // Dispose + + ~RtfConverter() + { + Dispose(false); + } // destructor + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } // Dispose + + #endregion + } // RtfConverter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/IVsProjectReader.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/IVsProjectReader.cs new file mode 100644 index 00000000..febe4a48 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/IVsProjectReader.cs @@ -0,0 +1,23 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.IO; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + public interface IVsProjectReader + { + string[] SupportedExtensions { get; } + VsProject Read(Stream stream, string type); + } // interface IVsProjectReader +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsCSharpProject.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsCSharpProject.cs new file mode 100644 index 00000000..1641997c --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsCSharpProject.cs @@ -0,0 +1,74 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Licensing.Data.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + public sealed class VsCSharpProject : VsProject + { + #region Overrides of VsProject + + public override string Language => "C#"; + + public override bool IsLibrary + { + get + { + return Type switch + { + "Library" => true, + "Exe" => false, + "WinExe" => false, + _ => true // we will assume all kinds of projects are libraries (.dll) and not executables (.exe) + }; + } // get + } // IsLibrary + + public override bool IsGui => !IsLibrary && (Type != "Exe"); + + public override string ImageKey + { + get + { + return Type switch + { + "Exe" => SolutionImages.KeyCsExe, + "Library" => SolutionImages.KeyCsLib, + "WinExe" => SolutionImages.KeyCsWinExe, + _ => SolutionImages.KeyVsProjectUnknown, + }; + } // get + } // ImageKey + + protected override LicensedItem GetLicensedItem(LicensingDefaults defaults) + { + LicensedItem item; + + if (IsLibrary) + { + item = defaults.ForLibraries.Clone(); + } + else + { + var program = defaults.ForPrograms.Clone(); + program.IsGuiApp = IsGui; + item = program; + } // if-else + + return item; + } // GetLicensedItem + + #endregion + } // class VsCSharpProject +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsCsProjectReader.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsCsProjectReader.cs new file mode 100644 index 00000000..a0b83f9d --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsCsProjectReader.cs @@ -0,0 +1,89 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel.Composition; +using System.IO; +using System.Linq; +using System.Xml.Linq; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + [Export(typeof(IVsProjectReader))] + public class VsCsProjectReader : IVsProjectReader + { + #region Implementation of IVsProjectReader + + public string[] SupportedExtensions { get; } = { ".csproj" }; + + public VsProject Read(Stream stream, string type) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + if (string.IsNullOrEmpty(type)) throw new ArgumentNullException(nameof(type)); + if (!string.Equals(type, ".csproj", StringComparison.InvariantCultureIgnoreCase)) throw new ArgumentOutOfRangeException(nameof(type), type, null); + + var project = new VsCSharpProject(); + + var xmlProj = XElement.Load(stream); + var ns = XNamespace.Get("http://schemas.microsoft.com/developer/msbuild/2003"); + + var propertyItems = from propGroup in xmlProj.Elements(ns + "PropertyGroup") + from item in propGroup.Elements() + select item; + + // project properties + foreach (var item in propertyItems) + { + switch (item.Name.LocalName) + { + case "ProjectGuid": + if (project.Guid != Guid.Empty) throw new InvalidDataException(); + project.Guid = Guid.Parse(item.Value); + break; + + case "OutputType": + if (project.Type != null) throw new InvalidDataException(); + project.Type = item.Value; + break; + + case "RootNamespace": + if (project.Namespace != null) throw new InvalidDataException(); + project.Namespace = item.Value; + break; + + case "AssemblyName": + if (project.AssemblyName != null) throw new InvalidDataException(); + project.AssemblyName = item.Value; + break; + } // switch + } // foreach + + // project references + var q2 = from itemGroup in xmlProj.Elements(ns + "ItemGroup") + from reference in itemGroup.Elements(ns + "ProjectReference") + let guid = reference.Element(ns + "Project") + where guid != null + select Guid.Parse(guid.Value); + + project.ReferencedProjects = q2.ToList(); + if (project.ReferencedProjects.Count == 0) + { + project.ReferencedProjects = null; + } // if + + return project; + } // Read + + #endregion + } // class VsCsProjectReader +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsFolder.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsFolder.cs new file mode 100644 index 00000000..037a1271 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsFolder.cs @@ -0,0 +1,45 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Collections.Generic; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + public class VsFolder + { + private readonly List _folders; + + public VsFolder(string name, IReadOnlyList projects, List folders, string licensingDefaultsKey = null) + { + Name = name; + Projects = projects; + LicensingDefaultsKey = licensingDefaultsKey; + _folders = folders; + } // constructor + + public string Name { get; } + + public IReadOnlyList Projects; + + public IReadOnlyList Folders => _folders; + + public string LicensingDefaultsKey { get; internal set; } + + public override string ToString() => Name; + + internal void AddFolder(VsFolder folder) + { + _folders.Add(folder); + } // AddFolder + } // VsFolder +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsProject.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsProject.cs new file mode 100644 index 00000000..19cf6122 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsProject.cs @@ -0,0 +1,66 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using AlphaCentaury.Licensing.Data.Serialization; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + public abstract class VsProject + { + public Guid Guid { get; set; } + + public abstract string Language { get; } + + public string Name { get; set; } + + public string Filename { get; set; } + + public string AssemblyName { get; set; } + + public string Namespace { get; set; } + + public List ReferencedProjects { get; set; } + + public string Type { get; set; } + + public string LicensingDefaultsKey { get; set; } + + public override string ToString() + { + return $"{Type}:{Namespace}"; + } // ToString + + public abstract bool IsLibrary { get; } + + public abstract bool IsGui { get; } + + public abstract string ImageKey { get; } + + public virtual LicensingData GetLicensingData(LicensingDefaults defaults) + { + var licensed = GetLicensedItem(defaults); + licensed.Name = Namespace; + + return new LicensingData + { + Licensed = licensed, + Licenses = defaults.Licenses + }; + } // GetLicensingData + + protected abstract LicensedItem GetLicensedItem(LicensingDefaults defaults); + } // VsProject +} // diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsSolution.Loader.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsSolution.Loader.cs new file mode 100644 index 00000000..2b0bf0bf --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsSolution.Loader.cs @@ -0,0 +1,441 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + public partial class VsSolution + { + private struct ProjectData + { + public string GuidType; + public string Name; + public string Path; + public Guid Guid; + } // struct ProjectData + + private class LoaderFolder + { + public string Partial { get; set; } + + public List Folders { get; set; } + + public IEnumerable Projects { get; set; } + + public override string ToString() + { + return $"{Partial} = {Folders?.Count}"; + } // ToString + } // LoaderFolder + + private class Loader + { + private const string SolutionFolderProjectGuid = "{2150E333-8FDC-42A3-9474-1A3956D46DE8}"; + + private readonly CancellationToken _token; + private readonly Dictionary _projectReaders; + private readonly string[] _extensions; + private readonly List _allProjects; + private List _solutionProjects; + private Guid _guid; + private Guid _solutionFolderProjectGuid; + private string _solutionFolder; + + public Loader(IEnumerable readers, CancellationToken token) : this(GetProjectReaders(readers), token) + { + // no-op + } // constructor + + private Loader(Dictionary readers, CancellationToken token) + { + _token = token; + _projectReaders = readers; + _extensions = _projectReaders.Keys.ToArray(); + _allProjects = new List(); + _solutionFolderProjectGuid = Guid.Parse(SolutionFolderProjectGuid); + } // constructor + + public VsSolution FromFolder(string solutionFolder) + { + _solutionFolder = solutionFolder; + + var rootFolder = GetRootVsFolder(solutionFolder); + var subSolutions = GetSubSolutions(solutionFolder); + var solution = new VsSolution(true, solutionFolder, rootFolder, _allProjects, Guid.NewGuid(), subSolutions) + { + LicensingDefaultsScope = GetLicensingDefaultsKey(_solutionFolder), + }; + + PropagateLicensingDefaultsKey(solution); + + return solution; + } // FromFolder + + public VsSolution FromFile(string solutionFile) + { + return FromFile(solutionFile, null); + } // FromFile + + public VsSolution FromFile(VsSolution parentSolution, string solutionFile) + { + return FromFile(solutionFile, parentSolution?.GuidDictionary); + } // FromFile + + private VsSolution FromFile(string solutionFile, IReadOnlyDictionary guidDictionary) + { + _solutionFolder = Path.GetDirectoryName(solutionFile) ?? Path.GetPathRoot(solutionFile); + + ReadSolutionFile(solutionFile); + var q = from data in _solutionProjects + let path = Path.GetDirectoryName(data.Path) ?? Path.GetPathRoot(data.Path) + group data by path; + var root = GetLoaderFolderRoot(q); + var rootFolder = ToVsFolder(root, guidDictionary); + + var solution = new VsSolution(false, solutionFile, rootFolder, _allProjects, _guid) + { + LicensingDefaultsScope = GetLicensingDefaultsKey(_solutionFolder), + }; + + PropagateLicensingDefaultsKey(solution); + + return solution; + } // FromFile + + List GetSubSolutions(string solutionFolder) + { + var guidDictionary = _allProjects.ToDictionary(project => project.Guid); + var solutionFiles = Directory.EnumerateFiles(solutionFolder, "*.sln", SearchOption.AllDirectories); + var subSolutions = from file in solutionFiles + let loader = new Loader(_projectReaders, _token) + select loader.FromFile(file, guidDictionary); + var subSolutionsList = subSolutions.ToList(); + if (subSolutionsList.Count == 0) subSolutionsList = null; + + return subSolutionsList; + } // GetSubSolutions + + private VsFolder GetRootVsFolder(string solutionFolder) + { + return GetVsFolder(solutionFolder); + } // GetRootVsFolder + + private VsFolder GetVsFolder(string fromFolder) + { + _token.ThrowIfCancellationRequested(); + var projects = from file in Directory.EnumerateFiles(fromFolder) + let reader = GetReader(Path.GetExtension(file)) + where reader != null + select ReadVsProject(reader, file, _token); + var projectsList = projects.ToList(); + + _token.ThrowIfCancellationRequested(); + var folders = from folder in Directory.EnumerateDirectories(fromFolder) + let vsFolder = GetVsFolder(folder) + where vsFolder != null + select vsFolder; + var foldersList = folders.ToList(); + + if (projectsList.Count == 0) projectsList = null; + if (foldersList.Count == 0) foldersList = null; + if ((projectsList == null) && (foldersList == null)) + { + return null; + } // if + + if (projectsList != null) + { + _allProjects.AddRange(projectsList); + } // if + + return new VsFolder(Path.GetFileName(fromFolder), projectsList, foldersList, GetLicensingDefaultsKey(fromFolder)); + } // GetVsFolder + + private static LoaderFolder GetLoaderFolderRoot(IEnumerable> projectFolders) + { + var folders = new Dictionary(StringComparer.InvariantCulture); + var root = new LoaderFolder() { Folders = new List(), Partial = "" }; + folders.Add("", root); + + var chSeparator = new string(Path.DirectorySeparatorChar, 1); + var parent = root; + foreach (var pf in projectFolders) + { + var fragments = pf.Key.Split(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + for (var count = 0; count <= fragments.Length; count++) + { + var partialPath = string.Join(chSeparator, fragments, 0, count); + if (folders.TryGetValue(partialPath, out var folder)) + { + parent = folder; + } + else + { + folder = new LoaderFolder { Folders = new List(), Partial = Path.GetFileName(partialPath) }; + parent.Folders.Add(folder); + folders.Add(partialPath, folder); + parent = folder; + } // if-else + } // for count + + parent.Projects = pf; + } // foreach + + return root; + } // GetLoaderFolderRoot + + private VsFolder ToVsFolder(LoaderFolder loaderFolder, IReadOnlyDictionary guidDictionary) + { + var fromFolder = Path.Combine(_solutionFolder, loaderFolder.Partial); + + List projectsList; + List foldersList; + + if (loaderFolder.Projects != null) + { + var projects = from data in loaderFolder.Projects + let vsProject = GetVsProject(data, guidDictionary) + where vsProject != null + select vsProject; + projectsList = projects.ToList(); + _allProjects.AddRange(projectsList); + } + else + { + projectsList = null; + } // if-else + + if (loaderFolder.Folders.Count > 0) + { + var folders = from folder in loaderFolder.Folders + orderby folder.Partial + select ToVsFolder(folder, guidDictionary); + + foldersList = folders.ToList(); + } + else + { + foldersList = null; + } // if-else + + return new VsFolder(loaderFolder.Partial, projectsList, foldersList, GetLicensingDefaultsKey(fromFolder)); + } // ToVsFolder + + private void ReadSolutionFile([NotNull] string solutionFile) + { + string line; + + var haveHeader = false; + var inGlobals = false; + var inGuidSection = false; + var skip = (string)null; + var list = new List(); + using var reader = new StreamReader(solutionFile); + while ((line = reader.ReadLine()) != null) + { + line = line.Trim(); + if (line.Length == 0) continue; + if (line.StartsWith("#")) continue; + if (line.StartsWith(@"Microsoft Visual Studio Solution File", StringComparison.InvariantCultureIgnoreCase)) + { + if (haveHeader) throw new InvalidDataException(); + haveHeader = true; + } // if + + if (line.StartsWith(@"Project", StringComparison.InvariantCulture)) + { + var data = GetProjectData(line); + if (!string.Equals(data.GuidType, SolutionFolderProjectGuid, StringComparison.InvariantCultureIgnoreCase)) + { + if (data.GuidType != null) list.Add(data); + } // if + + skip = "EndProject"; + } // if Project + + if (string.Equals(line, @"Global", StringComparison.InvariantCulture)) + { + inGlobals = true; + continue; + } // if Global + + if (inGlobals && line.StartsWith(@"GlobalSection", StringComparison.InvariantCulture)) + { + if (!string.Equals(GetGlobalSectionName(line), "ExtensibilityGlobals", StringComparison.InvariantCulture)) + { + skip = "EndGlobalSection"; + continue; + } // if + + inGuidSection = true; + continue; + } // if GlobalSection + + if (inGuidSection && line.StartsWith(@"SolutionGuid", StringComparison.InvariantCulture)) + { + var index = line.IndexOf('='); + if (index < 0) throw new InvalidDataException(); + var guidText = line.Substring(index + 1); + _guid = Guid.Parse(guidText); + + inGuidSection = false; + skip = "EndGlobalSection"; + continue; + } // if SolutionGuid + + if (string.Equals(line, @"EndGlobal", StringComparison.InvariantCulture)) + { + inGlobals = false; + continue; + } // if EndGlobal + + if ((skip != null) && line.StartsWith(skip, StringComparison.InvariantCulture)) + { + skip = null; + } // if + } // while + + _solutionProjects = list; + } // ReadSolutionFile + + private static Dictionary GetProjectReaders(IEnumerable readers) + { + if (readers == null) return new Dictionary(); + + var q = from reader in readers + let supported = reader.SupportedExtensions + where supported != null + from extension in supported + select new { Extension = extension, Reader = reader }; + + var projectReaders = q.ToDictionary(item => item.Extension, item => item.Reader, StringComparer.InvariantCultureIgnoreCase); + + return projectReaders; + } // GetProjectReaders + + private static VsProject ReadVsProject(IVsProjectReader reader, string file, CancellationToken token) + { + if (reader == null) return null; + token.ThrowIfCancellationRequested(); + + var extension = Path.GetExtension(file); + using var stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read); + var project = reader.Read(stream, extension); + project.Name = Path.GetFileNameWithoutExtension(file); + project.Filename = file; + + return project; + } // ReadVsProject + + private VsProject GetVsProject(ProjectData data, IReadOnlyDictionary guidDictionary) + { + if (guidDictionary != null) + { + if (guidDictionary.TryGetValue(data.Guid, out var vsProject)) + { + return vsProject; + } // if + } // if + + var reader = GetReader(Path.GetExtension(data.Path)); + return ReadVsProject(reader, Path.Combine(_solutionFolder, data.Path), _token); + + } // GetVsProject + + private IVsProjectReader GetReader(string extension) + { + return _projectReaders.TryGetValue(extension, out var value) ? value : null; + } // GetReader + + private static ProjectData GetProjectData(string line) + { + string guidType; + var result = new ProjectData(); + + var start = line.IndexOf('('); + if (start < 0) return result; + + start++; + var index = line.IndexOf(')', start); + if (index < 0) return result; + guidType = line.Substring(start, index - start); + + index = line.IndexOf('=', index + 1); + if (index < 0) return result; + + var fragment = new StringBuilder(); + var fragments = new List(); + + var quotedText = false; + index++; + for (; index < line.Length; index++) + { + var c = line[index]; + + if ((c == ',') && !quotedText) + { + fragments.Add(fragment.ToString().Trim()); + fragment.Clear(); + continue; + } // if + + if (c == '"') + { + quotedText = !quotedText; + continue; + } // if + + fragment.Append(c); + } // for + + var last = fragment.ToString().Trim(); + if (last.Length > 0) fragments.Add(last); + + if (fragments.Count != 3) return result; + + result.GuidType = Unquote(guidType); + result.Name = fragments[0]; + result.Path = fragments[1]; + result.Guid = Guid.Parse(Unquote(fragments[2])); + return result; + + string Unquote(string text) + { + if (text[0] != '"') return text; + if (text[text.Length - 1] != '"') return text.Substring(1); + return text.Substring(1, text.Length - 2); + } // Unquote + } // GetProjectPath + + private static string GetGlobalSectionName(string line) + { + var index = line.IndexOf('('); + if (index < 0) return null; + var endIndex = line.IndexOf(')', index + 1); + if (endIndex < 0) return null; + + var name = line.Substring(index + 1, endIndex - index - 1); + return name; + } // GetGlobalSectionName + } // class Loader + } // partial class VsSolution +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsSolution.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsSolution.cs new file mode 100644 index 00000000..639e4b93 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsSolution.cs @@ -0,0 +1,179 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + public partial class VsSolution + { + public VsSolution(bool isFolderSolution, string path, VsFolder rootFolder, IReadOnlyList allProjects, Guid guid, IReadOnlyList subSolutions = null) + { + if (string.IsNullOrEmpty(path)) throw new ArgumentNullException(nameof(path)); + if (allProjects == null) throw new ArgumentNullException(nameof(allProjects)); + + RootFolder = rootFolder ?? throw new ArgumentNullException(nameof(rootFolder)); + Name = Path.GetFileName(path); + SolutionPath = isFolderSolution ? path : Path.GetDirectoryName(path) ?? Path.GetPathRoot(path); + SolutionFile = isFolderSolution ? null : path; + Guid = guid; + + if (subSolutions == null) + { + AllProjects = allProjects; + } + else + { + AllProjects = allProjects; + var solutionProjects = new List(subSolutions.Count + 1) + { + new VsSolutionProject(this) + }; + solutionProjects.AddRange(subSolutions.Select(subSolution => new VsSolutionProject(subSolution))); + + + var all = new List(allProjects.Count + solutionProjects.Count); + all.AddRange(allProjects); + all.AddRange(solutionProjects); + + AllProjects = all; + SubSolutions = subSolutions; + + rootFolder.AddFolder(new VsFolder("", solutionProjects, null)); + } // if-else + + GuidDictionary = AllProjects.ToDictionary(project => project.Guid); + NamespaceDictionary = AllProjects.ToDictionary(project => project.Namespace); + } // constructor + + [NotNull] + public string Name { get; } + + [NotNull] + public string SolutionPath { get; } + + public string SolutionFile { get; } + + public Guid Guid { get; } + + [NotNull] + public VsFolder RootFolder; + + [NotNull] + public IReadOnlyList AllProjects; + + [NotNull] + public IReadOnlyDictionary GuidDictionary; + + [NotNull] + public IReadOnlyDictionary NamespaceDictionary; + + [CanBeNull] + public IReadOnlyList SubSolutions { get; } + + public string LicensingDefaultsScope { get; private set; } + + public VsProject this[Guid guid] => GuidDictionary[guid]; + + public VsProject this[string @namespace] => NamespaceDictionary[@namespace]; + + public bool TryGetValue(Guid guid, out VsProject project) => GuidDictionary.TryGetValue(guid, out project); + + public bool TryGetValue(string @namespace, out VsProject project) => NamespaceDictionary.TryGetValue(@namespace, out project); + + public override string ToString() => SolutionPath; + + #region Static methods + + public static VsSolution FromFile(string solutionFile, IEnumerable readers) + { + return FromFile(solutionFile, readers, CancellationToken.None); + } // FromFile + + public static VsSolution FromFolder(string solutionFolder, IEnumerable readers) + { + return FromFolder(solutionFolder, readers, CancellationToken.None); + } // FromFolder + + public static VsSolution FromFile(string solutionFile, IEnumerable readers, CancellationToken token) + { + if (solutionFile == null) throw new ArgumentNullException(nameof(solutionFile)); + if (!File.Exists(solutionFile)) throw new FileNotFoundException($"File not found: {solutionFile}"); + if (readers == null) throw new ArgumentNullException(nameof(readers)); + + var loader = new Loader(readers, token); + return loader.FromFile(solutionFile); + } // FromFile + + public static VsSolution FromFolder(string solutionFolder, IEnumerable readers, CancellationToken token) + { + if (solutionFolder == null) throw new ArgumentNullException(nameof(solutionFolder)); + if (!Directory.Exists(solutionFolder)) throw new DirectoryNotFoundException($"Directory not found exception: {solutionFolder}"); + if (readers == null) throw new ArgumentNullException(nameof(readers)); + + var loader = new Loader(readers, token); + return loader.FromFolder(solutionFolder); + } // FromFolder + + public static Task FromFileAsync(string solutionFile, IEnumerable readers, CancellationToken token) + { + return Task.Run(() => FromFile(solutionFile, readers, token), token); + } // FromFileAsync + + public static Task FromFolderAsync(string solutionFolder, IEnumerable readers, CancellationToken token) + { + return Task.Run(() => FromFolder(solutionFolder, readers, token), token); + } // FromFolderAsync + + public static string GetLicensingDefaultsKey(string path) + { + const string markerFilename = "licensing.data.default"; + + var filename = Path.Combine(path, markerFilename); + return File.Exists(filename) ? File.ReadAllText(filename).Trim() : null; + } // GetLicensingDefaultsKey + + private static void PropagateLicensingDefaultsKey(VsSolution solution) + { + PropagateLicensingDefaultsKey(solution.RootFolder, solution.LicensingDefaultsScope); + } // PropagateLicensingDefaultsKey + + private static void PropagateLicensingDefaultsKey(VsFolder vsFolder, string licensingDefaultsKey) + { + if (vsFolder.LicensingDefaultsKey == null) vsFolder.LicensingDefaultsKey = licensingDefaultsKey; + if (vsFolder.Projects != null) + { + foreach (var project in vsFolder.Projects) + { + if (project.LicensingDefaultsKey == null) project.LicensingDefaultsKey = vsFolder.LicensingDefaultsKey; + } // foreach + } // if + + if (vsFolder.Folders != null) + { + foreach (var folder in vsFolder.Folders) + { + PropagateLicensingDefaultsKey(folder, vsFolder.LicensingDefaultsKey); + } // foreach + } // if + } // PropagateLicensingDefaultsKey + + #endregion + } // class VsSolution +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsSolutionProject.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsSolutionProject.cs new file mode 100644 index 00000000..f014e44a --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsSolutionProject.cs @@ -0,0 +1,85 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.IO; +using System.Linq; +using AlphaCentaury.Licensing.Data; +using AlphaCentaury.Licensing.Data.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + public class VsSolutionProject: VsProject + { + private const string SolutionFolderNamespace = ""; + private readonly bool _isGlobal; + + public VsSolutionProject(VsSolution solution) + { + if (solution.SolutionFile != null) + { + AssemblyName = Path.GetFileName(solution.SolutionFile); + Name = Path.GetFileNameWithoutExtension(AssemblyName); + Namespace = $"<{AssemblyName}>"; + LicensingDefaultsKey = AssemblyName; + Filename = solution.SolutionFile; + } + else + { + _isGlobal = true; + AssemblyName = $""; + Name = AssemblyName; + Namespace = SolutionFolderNamespace; + LicensingDefaultsKey = "#solution#"; + Filename = Path.Combine(solution.SolutionPath, "~.sln"); + } // if-else + + Guid = solution.Guid; + Type = "Solution"; + ReferencedProjects = solution.AllProjects.Select(project => project.Guid).ToList(); + } // constructor + + #region Overrides of VsProject + + public override string Language => ".sln"; + + public override bool IsLibrary => true; + + public override bool IsGui => false; + + public override string ImageKey => _isGlobal? SolutionImages.KeyVsSolution : SolutionImages.KeyVsSolutionFile; + + public static bool IsSolutionFolderProject(VsProject project) + { + if (!(project is VsSolutionProject solution)) return false; + + return string.Equals(solution.Namespace, SolutionFolderNamespace, StringComparison.InvariantCulture); + } // IsSolutionFolderProject + + public static bool IsSolutionProject(VsProject project) + { + return project is VsSolutionProject; + } // IsSolutionProject + + + protected override LicensedItem GetLicensedItem(LicensingDefaults defaults) + { + var solution = new LicensedSolution(); + solution.Inherit(defaults.ForLibraries); + + return solution; + } // GetLicensedItem + + #endregion + } // class VsSolutionProject +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsWixProject.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsWixProject.cs new file mode 100644 index 00000000..63af16a0 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsWixProject.cs @@ -0,0 +1,44 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using AlphaCentaury.Licensing.Data.Serialization; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + public class VsWixProject: VsProject + { + #region Overrides of VsProject + + public override string Language => "WiX"; + + public override bool IsLibrary => false; + + public override bool IsGui => true; + + public override string ImageKey => SolutionImages.KeyInstaller; + + protected override LicensedItem GetLicensedItem(LicensingDefaults defaults) + { + var item = new LicensedInstaller + { + Technology = "MSI", + IsGuiApp = true, + }; + defaults.ForPrograms.CopyTo(item); + + return item; + } // GetLicensedItem + + #endregion + } // class VsWixProject +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsWixProjectReader.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsWixProjectReader.cs new file mode 100644 index 00000000..1c5fefb8 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Licensing/VisualStudio/VsWixProjectReader.cs @@ -0,0 +1,69 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel.Composition; +using System.IO; +using System.Linq; +using System.Xml.Linq; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Licensing.VisualStudio +{ + [Export(typeof(IVsProjectReader))] + public class VsWixProjectReader: IVsProjectReader + { + public string[] SupportedExtensions { get; } = { ".wixproj" }; + + public VsProject Read(Stream stream, string type) + { + if (stream == null) throw new ArgumentNullException(nameof(stream)); + if (string.IsNullOrEmpty(type)) throw new ArgumentNullException(nameof(type)); + if (!string.Equals(type, ".wixproj", StringComparison.InvariantCultureIgnoreCase)) throw new ArgumentOutOfRangeException(nameof(type), type, null); + + var project = new VsWixProject(); + + var xmlProj = XElement.Load(stream); + var ns = XNamespace.Get("http://schemas.microsoft.com/developer/msbuild/2003"); + + var propertyItems = from propGroup in xmlProj.Elements(ns + "PropertyGroup") + from item in propGroup.Elements() + select item; + + // project properties + foreach (var item in propertyItems) + { + switch (item.Name.LocalName) + { + case "ProjectGuid": + if (project.Guid != Guid.Empty) throw new InvalidDataException(); + project.Guid = Guid.Parse(item.Value); + break; + + case "OutputType": + if (project.Type != null) throw new InvalidDataException(); + project.Type = item.Value; + break; + + case "OutputName": + if (project.AssemblyName != null) throw new InvalidDataException(); + project.AssemblyName = item.Value; + break; + } // switch + } // foreach + + project.Namespace = $"WiX:{project.AssemblyName}"; + + return project; + } // Read + } // class VsWixProjectReader +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/MainForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/MainForm.Designer.cs new file mode 100644 index 00000000..8fa37de7 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/MainForm.Designer.cs @@ -0,0 +1,203 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance +{ + partial class MainForm + { + ///

+ /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.windowsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.arrangeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.cascadeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tileHorizontalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tileVerticalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.arrangeIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolsToolStripMenuItem, + this.windowsToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.MdiWindowListItem = this.windowsToolStripMenuItem; + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(1008, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // toolsToolStripMenuItem + // + this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newStripMenuItem, + this.toolStripSeparator1, + this.aboutToolStripMenuItem}); + this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; + this.toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20); + this.toolsToolStripMenuItem.Text = "Tools"; + // + // newStripMenuItem + // + this.newStripMenuItem.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Property_Add_16x16; + this.newStripMenuItem.Name = "newStripMenuItem"; + this.newStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); + this.newStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.newStripMenuItem.Text = "&New..."; + this.newStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(147, 6); + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(150, 22); + this.aboutToolStripMenuItem.Text = "About..."; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // windowsToolStripMenuItem + // + this.windowsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.arrangeToolStripMenuItem, + this.closeAllToolStripMenuItem}); + this.windowsToolStripMenuItem.Name = "windowsToolStripMenuItem"; + this.windowsToolStripMenuItem.Size = new System.Drawing.Size(68, 20); + this.windowsToolStripMenuItem.Text = "Windows"; + this.windowsToolStripMenuItem.DropDownOpening += new System.EventHandler(this.windowsToolStripMenuItem_DropDownOpening); + // + // arrangeToolStripMenuItem + // + this.arrangeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.cascadeToolStripMenuItem, + this.tileHorizontalToolStripMenuItem, + this.tileVerticalToolStripMenuItem, + this.arrangeIconsToolStripMenuItem}); + this.arrangeToolStripMenuItem.Name = "arrangeToolStripMenuItem"; + this.arrangeToolStripMenuItem.Size = new System.Drawing.Size(118, 22); + this.arrangeToolStripMenuItem.Text = "Arrange"; + // + // cascadeToolStripMenuItem + // + this.cascadeToolStripMenuItem.Name = "cascadeToolStripMenuItem"; + this.cascadeToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.cascadeToolStripMenuItem.Text = "Cascade"; + this.cascadeToolStripMenuItem.Click += new System.EventHandler(this.cascadeToolStripMenuItem_Click); + // + // tileHorizontalToolStripMenuItem + // + this.tileHorizontalToolStripMenuItem.Name = "tileHorizontalToolStripMenuItem"; + this.tileHorizontalToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.tileHorizontalToolStripMenuItem.Text = "Tile horizontal"; + this.tileHorizontalToolStripMenuItem.Click += new System.EventHandler(this.tileHorizontalToolStripMenuItem_Click); + // + // tileVerticalToolStripMenuItem + // + this.tileVerticalToolStripMenuItem.Name = "tileVerticalToolStripMenuItem"; + this.tileVerticalToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.tileVerticalToolStripMenuItem.Text = "Tile vertical"; + this.tileVerticalToolStripMenuItem.Click += new System.EventHandler(this.tileVerticalToolStripMenuItem_Click); + // + // arrangeIconsToolStripMenuItem + // + this.arrangeIconsToolStripMenuItem.Name = "arrangeIconsToolStripMenuItem"; + this.arrangeIconsToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.arrangeIconsToolStripMenuItem.Text = "Arrange icons"; + this.arrangeIconsToolStripMenuItem.Click += new System.EventHandler(this.arrangeIconsToolStripMenuItem_Click); + // + // closeAllToolStripMenuItem + // + this.closeAllToolStripMenuItem.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Delete_16x16; + this.closeAllToolStripMenuItem.Name = "closeAllToolStripMenuItem"; + this.closeAllToolStripMenuItem.Size = new System.Drawing.Size(118, 22); + this.closeAllToolStripMenuItem.Text = "Close all"; + this.closeAllToolStripMenuItem.Click += new System.EventHandler(this.closeAllToolStripMenuItem_Click); + // + // statusStrip1 + // + this.statusStrip1.Location = new System.Drawing.Point(0, 707); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(1008, 22); + this.statusStrip1.TabIndex = 2; + this.statusStrip1.Text = "statusStrip1"; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1008, 729); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.menuStrip1); + this.IsMdiContainer = true; + this.MainMenuStrip = this.menuStrip1; + this.Name = "MainForm"; + this.Text = "Source code maintenance"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newStripMenuItem; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripMenuItem windowsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem closeAllToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem arrangeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem cascadeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tileHorizontalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem tileVerticalToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem arrangeIconsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + } +} + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/MainForm.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/MainForm.cs new file mode 100644 index 00000000..861496d8 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/MainForm.cs @@ -0,0 +1,100 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Reflection; +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance; +using IpTviewr.UiServices.Common.Forms; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance +{ + public partial class MainForm : CommonBaseForm + { + public MainForm() + { + InitializeComponent(); + } // constructor + + #region Overrides of Form + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + newStripMenuItem.PerformClick(); + } // OnShow + + #endregion + + private void newToolStripMenuItem_Click(object sender, EventArgs e) + { + using var form = new SelectToolDialog(); + if (form.ShowDialog(this) != DialogResult.OK) return; + var selected = form.SelectedTool; + SafeCall(() => + { + var form = selected.Value.GetUi(); + form.MdiParent = this; + form.Show(); + }); + } // newToolStripMenuItem_Click + + private void cascadeToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.Cascade); + } // cascadeToolStripMenuItem_Click + + private void tileHorizontalToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.TileHorizontal); + } // tileHorizontalToolStripMenuItem_Click + + private void tileVerticalToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.TileVertical); + } // tileVerticalToolStripMenuItem_Click + + private void arrangeIconsToolStripMenuItem_Click(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.ArrangeIcons); + } // arrangeIconsToolStripMenuItem_Click + + private void closeAllToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (var mdiChild in MdiChildren) + { + mdiChild.Close(); + } // foreach + } // closeAllToolStripMenuItem_Click + + private void windowsToolStripMenuItem_DropDownOpening(object sender, EventArgs e) + { + var enabled = (MdiChildren.Length != 0); + arrangeToolStripMenuItem.Enabled = enabled; + closeAllToolStripMenuItem.Enabled = enabled; + } // windowsToolStripMenuItem_DropDownOpening + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + using var box = new AboutBox + { + ApplicationData = new AboutBoxApplicationData + { + Name = Assembly.GetEntryAssembly()?.GetCustomAttribute()?.Title + } + }; + + box.ShowDialog(this); + } // aboutToolStripMenuItem_Click + } // class MainForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/MainForm.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/MainForm.resx new file mode 100644 index 00000000..f1d13d78 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/MainForm.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 132, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Program.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Program.cs new file mode 100644 index 00000000..c4aeacbf --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Program.cs @@ -0,0 +1,123 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.ComponentModel.Composition.Hosting; +using System.ComponentModel.Composition.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.Linq; +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; +using IpTviewr.Common; +using JetBrains.Annotations; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance +{ + public static class Program + { + public class ToolsContainer + { + public ToolsContainer(ComposablePartCatalog catalog) + { + CompositionContainer = new CompositionContainer(catalog); + CompositionContainer.ComposeParts(this); + if (ToolsComponents == null) return; + + Tools = ToolsComponents.OrderBy(tool => tool.Metadata.Name).ToArray(); + ToolsNames = Tools.Select(tool => tool.Metadata.Name).ToList(); + ToolsUi = ToolsComponents.Where(tool => tool.Metadata.HasUi).OrderBy(tool => tool.Metadata.Name).ToArray(); + ToolsUiNames = ToolsUi.Select(tool => tool.Metadata.Name).ToList(); + ToolsCli = ToolsComponents.Where(tool => tool.Metadata.CliName != null).OrderBy(tool => tool.Metadata.CliName).ToArray(); + ToolsCliNames = ToolsCli.Select(tool => tool.Metadata.Name).ToList(); + GuidTools = Tools.ToDictionary(tool => Guid.Parse(tool.Metadata.Guid)); + CliTools = ToolsCli.ToDictionary(lazy => lazy.Metadata.CliName); + } // constructor + + public CompositionContainer CompositionContainer { get; } + +#pragma warning disable 00649 // Field is never assigned to + [SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "Can't be readonly: value will be set by MEF when composing parts")] + [SuppressMessage("Code Quality", "IDE0051:Remove unused private members", Justification = "Value will be set by MEF when composing parts")] + [SuppressMessage("Warning", "CS0069: Field is never assigned to")] + [ImportMany(typeof(IMaintenanceTool))] + [ItemNotNull] + [CanBeNull] + internal Lazy[] ToolsComponents; +#pragma warning restore 00649 + + public IReadOnlyDictionary> GuidTools { get; } + public IReadOnlyDictionary> CliTools { get; } + } // class + + public static ToolsContainer Container; + + public static Lazy[] Tools { get; private set; } + public static List ToolsNames { get; private set; } + + public static Lazy[] ToolsUi { get; private set; } + public static List ToolsUiNames { get; private set; } + + public static Lazy[] ToolsCli { get; private set; } + public static List ToolsCliNames { get; private set; } + + /// + /// The main entry point for the application. + /// + [STAThread] + internal static void Main(string[] arguments) + { + LoadTools(); + if (arguments.Length > 0) + { + ExecuteCli(arguments); + return; + } // if + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } // Main + + public static Lazy GetTool(Guid toolGuid) + { + return Container.GuidTools.TryGetValue(toolGuid, out var tool) ? tool : null; + } // GetTool + + public static Lazy GetTool(string toolCli) + { + return Container.CliTools.TryGetValue(toolCli, out var tool) ? tool : null; + } // GetTool + + private static void ExecuteCli(string[] arguments) + { + throw new NotImplementedException(); + } // ExecuteCli + + private static void LoadTools() + { + try + { + var catalog = new ApplicationCatalog(); + Container = new ToolsContainer (catalog); + } + catch (Exception e) + { + BaseProgram.HandleException(null, "Unable to load tools: MEF composition failed.", e); + throw; + } // try-catch + } // LoadTools + } // class Program +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..b8e3cf86 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AlphaCentaury tool: Source code maintenance")] +[assembly: AssemblyDescription("AlphaCentaury.Tools.SourceCodeMaintenance")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("de019d79-3699-4d17-8545-74b79c32fef6")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/BatchResources.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/BatchResources.Designer.cs new file mode 100644 index 00000000..0e5054cc --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/BatchResources.Designer.cs @@ -0,0 +1,153 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class BatchResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal BatchResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AlphaCentaury.Tools.SourceCodeMaintenance.Properties.BatchResources", typeof(BatchResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Arguments are not optional. + /// + internal static string ArgumentsNotOptional { + get { + return ResourceManager.GetString("ArgumentsNotOptional", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cannot add tool. + /// + internal static string ArgumentsNotOptionalCaption { + get { + return ResourceManager.GetString("ArgumentsNotOptionalCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Yes = Save changes and create a new batch + ///No = Discard changes and create a new batch + ///Cancel = Keep current batch. + /// + internal static string NewBatchSaveExplanation { + get { + return ResourceManager.GetString("NewBatchSaveExplanation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Yes = Save changes and open a new batch + ///No = Discard changes and open a new batch + ///Cancel = Keep current batch and don't open a new batch. + /// + internal static string OpenBatchSaveExplanation { + get { + return ResourceManager.GetString("OpenBatchSaveExplanation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Save changes to current batch?. + /// + internal static string SaveBatchChanges { + get { + return ResourceManager.GetString("SaveBatchChanges", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Save changes. + /// + internal static string SaveBatchChangesCaption { + get { + return ResourceManager.GetString("SaveBatchChangesCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} + /// + ///{1}. + /// + internal static string SaveIfDirty { + get { + return ResourceManager.GetString("SaveIfDirty", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to All files|*.*. + /// + internal static string SelectAllFilesFilter { + get { + return ResourceManager.GetString("SelectAllFilesFilter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Batch files|*.batch. + /// + internal static string SelectFileFilter { + get { + return ResourceManager.GetString("SelectFileFilter", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/BatchResources.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/BatchResources.resx new file mode 100644 index 00000000..06ec52af --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/BatchResources.resx @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Batch files|*.batch + + + Arguments are not optional + + + Cannot add tool + + + Yes = Save changes and create a new batch +No = Discard changes and create a new batch +Cancel = Keep current batch + + + Yes = Save changes and open a new batch +No = Discard changes and open a new batch +Cancel = Keep current batch and don't open a new batch + + + Save changes to current batch? + + + Save changes + + + {0} + +{1} + {0} = Save changes + {1} = Buttons explanation + + + All files|*.* + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/LicensingResources.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/LicensingResources.Designer.cs new file mode 100644 index 00000000..e46e3a92 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/LicensingResources.Designer.cs @@ -0,0 +1,671 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class LicensingResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal LicensingResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AlphaCentaury.Tools.SourceCodeMaintenance.Properties.LicensingResources", typeof(LicensingResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Certificate_16x { + get { + object obj = ResourceManager.GetObject("Certificate_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Certificate_24x { + get { + object obj = ResourceManager.GetObject("Certificate_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Certificate_32x { + get { + object obj = ResourceManager.GetObject("Certificate_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CertificateError_16x { + get { + object obj = ResourceManager.GetObject("CertificateError_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CertificateError_24x { + get { + object obj = ResourceManager.GetObject("CertificateError_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CertificateError_32x { + get { + object obj = ResourceManager.GetObject("CertificateError_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CSharp_Exe_16x { + get { + object obj = ResourceManager.GetObject("CSharp_Exe_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CSharp_Exe_24x { + get { + object obj = ResourceManager.GetObject("CSharp_Exe_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CSharp_Exe_32x { + get { + object obj = ResourceManager.GetObject("CSharp_Exe_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CSharp_Lib_16x { + get { + object obj = ResourceManager.GetObject("CSharp_Lib_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CSharp_Lib_24x { + get { + object obj = ResourceManager.GetObject("CSharp_Lib_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CSharp_Lib_32x { + get { + object obj = ResourceManager.GetObject("CSharp_Lib_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CSharp_WinExe_16x { + get { + object obj = ResourceManager.GetObject("CSharp_WinExe_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CSharp_WinExe_24x { + get { + object obj = ResourceManager.GetObject("CSharp_WinExe_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CSharp_WinExe_32x { + get { + object obj = ResourceManager.GetObject("CSharp_WinExe_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Dependencies_16x { + get { + object obj = ResourceManager.GetObject("Dependencies_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Dependencies_24x { + get { + object obj = ResourceManager.GetObject("Dependencies_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Dependencies_32x { + get { + object obj = ResourceManager.GetObject("Dependencies_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to body {font-family: "Calibri", "Tahoma", "Arial", Sans-serif; font-size:11pt} + ///h1 {border-bottom: solid 2px #A0A0A0; font-size: 24pt} + ///h2 {border-bottom: solid 1px #A0A0A0; font-size: 20pt} + ///h3 {border-bottom: solid 1px #A0A0A0; font-size: 17pt} + ///h4 {font-size: 14pt; font-weight: bold} + ///h5 {font-size: 12pt; font-weight: bold; font-style: italic} + ///ol {margin-left: 0; padding-left: 1em;} + ///ul {margin-left: 0; padding-left: 1em;} + ///li {margin-left: 1em; padding-left: 0.5em}. + /// + internal static string HtmlDefaultStylesheet { + get { + return ResourceManager.GetString("HtmlDefaultStylesheet", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to body {font-family: "Calibri", "Tahoma", "Arial", Sans-serif; font-size:11pt} + ///h1 {border-bottom: solid 2px #A0A0A0; font-size: 24pt} + ///h2 {border-bottom: solid 1px #A0A0A0; font-size: 20pt} + ///h3 {border-bottom: solid 1px #A0A0A0; font-size: 17pt} + ///h4 {font-size: 14pt; font-weight: bold} + ///h5 {font-size: 12pt; font-weight: bold; font-style: italic}. + /// + internal static string HtmlDefaultStylesheetRf { + get { + return ResourceManager.GetString("HtmlDefaultStylesheetRf", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Installer_16x { + get { + object obj = ResourceManager.GetObject("Installer_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Installer_24x { + get { + object obj = ResourceManager.GetObject("Installer_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Installer_32x { + get { + object obj = ResourceManager.GetObject("Installer_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to No licensing file has been selected. + /// + internal static string NoLicensingSelected { + get { + return ResourceManager.GetString("NoLicensingSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No solution has been selected. + /// + internal static string NoSolutionSelected { + get { + return ResourceManager.GetString("NoSolutionSelected", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Open solution. + /// + internal static string SolutionLoadCancelCaption { + get { + return ResourceManager.GetString("SolutionLoadCancelCaption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Loading solution. Please wait.... + /// + internal static string SolutionLoading { + get { + return ResourceManager.GetString("SolutionLoading", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VS_Project_Unknown_16x { + get { + object obj = ResourceManager.GetObject("VS_Project_Unknown_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VS_Project_Unknown_24x { + get { + object obj = ResourceManager.GetObject("VS_Project_Unknown_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VS_Project_Unknown_32x { + get { + object obj = ResourceManager.GetObject("VS_Project_Unknown_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VS_Solution_16x { + get { + object obj = ResourceManager.GetObject("VS_Solution_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VS_Solution_24x { + get { + object obj = ResourceManager.GetObject("VS_Solution_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VS_Solution_32x { + get { + object obj = ResourceManager.GetObject("VS_Solution_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VS_Solution_File_16x { + get { + object obj = ResourceManager.GetObject("VS_Solution_File_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VS_Solution_File_24x { + get { + object obj = ResourceManager.GetObject("VS_Solution_File_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VS_Solution_File_32x { + get { + object obj = ResourceManager.GetObject("VS_Solution_File_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to >>> '{0}' applies to the following components: <<<. + /// + internal static string WriteAppliesToLibrariesFormat { + get { + return ResourceManager.GetString("WriteAppliesToLibrariesFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to > **'{0}'** applies to the following components:. + /// + internal static string WriteAppliesToLibrariesFormatMd { + get { + return ResourceManager.GetString("WriteAppliesToLibrariesFormatMd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to >>> '{0}' applies to the following THIRD-PARTY components: <<<. + /// + internal static string WriteAppliesToThirdPartyFormat { + get { + return ResourceManager.GetString("WriteAppliesToThirdPartyFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to > **'{0}'** applies to the following **third-party components:**. + /// + internal static string WriteAppliesToThirdPartyFormatMd { + get { + return ResourceManager.GetString("WriteAppliesToThirdPartyFormatMd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ## by {0}. + /// + internal static string WriteAuthorsFormat { + get { + return ResourceManager.GetString("WriteAuthorsFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to _by {0}_. + /// + internal static string WriteAuthorsFormatMd { + get { + return ResourceManager.GetString("WriteAuthorsFormatMd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to by {0}. + /// + internal static string WriteDependencyAuthorsFormat { + get { + return ResourceManager.GetString("WriteDependencyAuthorsFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <html> + ///<head> + ///<meta charset="UTF-8"> + ///<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">. + /// + internal static string WriteHtmlHead { + get { + return ResourceManager.GetString("WriteHtmlHead", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <title>{0} '{1}'</title>. + /// + internal static string WriteHtmlTitle { + get { + return ResourceManager.GetString("WriteHtmlTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ## {0} '{1}'. + /// + internal static string WriteLicensedFormat { + get { + return ResourceManager.GetString("WriteLicensedFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to # {0} '{1}'. + /// + internal static string WriteLicensedFormatMd { + get { + return ResourceManager.GetString("WriteLicensedFormatMd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Licenses. + /// + internal static string WriteListLicenses { + get { + return ResourceManager.GetString("WriteListLicenses", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Terms and conditions. + /// + internal static string WriteTermsAndCondition { + get { + return ResourceManager.GetString("WriteTermsAndCondition", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} by {1}. + /// + internal static string WriteTypeDependencyAuthorsFormat { + get { + return ResourceManager.GetString("WriteTypeDependencyAuthorsFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to _{0} by {1}_. + /// + internal static string WriteTypeDependencyAuthorsFormatMd { + get { + return ResourceManager.GetString("WriteTypeDependencyAuthorsFormatMd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Image library. + /// + internal static string WriteTypeImageLibrary { + get { + return ResourceManager.GetString("WriteTypeImageLibrary", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Installer. + /// + internal static string WriteTypeInstaller { + get { + return ResourceManager.GetString("WriteTypeInstaller", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Library. + /// + internal static string WriteTypeLibrary { + get { + return ResourceManager.GetString("WriteTypeLibrary", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 'nuget' package. + /// + internal static string WriteTypeNugetPackage { + get { + return ResourceManager.GetString("WriteTypeNugetPackage", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + internal static string WriteTypeOtherThirdParty { + get { + return ResourceManager.GetString("WriteTypeOtherThirdParty", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Program. + /// + internal static string WriteTypeProgram { + get { + return ResourceManager.GetString("WriteTypeProgram", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to VS Solution. + /// + internal static string WriteTypeSolution { + get { + return ResourceManager.GetString("WriteTypeSolution", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Source code. + /// + internal static string WriteTypeSourceCode { + get { + return ResourceManager.GetString("WriteTypeSourceCode", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Library. + /// + internal static string WriteTypeThirdPartyLibrary { + get { + return ResourceManager.GetString("WriteTypeThirdPartyLibrary", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Component. + /// + internal static string WriteUnknown { + get { + return ResourceManager.GetString("WriteUnknown", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/LicensingResources.es.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/LicensingResources.es.resx new file mode 100644 index 00000000..a750a392 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/LicensingResources.es.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + >>> '{0}' aplica a los siguientes componentes: <<< + {0} = license name + + + > **'{0}'** aplica a los siguientes componentes: + {0} = license name + + + >>> '{0}' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + {0} = license name + + + > **'{0}'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + {0} = license name + + + ## por {0} + + + _por {0}_ + + + por {0} + + + # {0} '{1}' + {0} = licensed type; {1} = licensed name + + + Licencias de uso + + + Términos y condiciones de uso + + + {0} por {1} + {0} = component type, {1} = author + + + _{0} por {1}_ + {0} = component type, {1} = authore + + + Biblioteca de imágenes + + + Instalador + + + Biblioteca + + + Paquete 'nuget' + + + + + + Programa + + + Solución VS + + + Código fuente + + + Biblioteca + + + Componente + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/LicensingResources.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/LicensingResources.resx new file mode 100644 index 00000000..015fa88f --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/LicensingResources.resx @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\licensing\resources\certificateerror_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\certificateerror_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\certificateerror_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\certificate_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\certificate_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\certificate_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\csharp_exe_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\csharp_exe_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\csharp_exe_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\csharp_lib_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\csharp_lib_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\csharp_lib_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\csharp_winexe_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\csharp_winexe_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\csharp_winexe_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Licensing\Resources\Dependencies_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Licensing\Resources\Dependencies_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Licensing\Resources\Dependencies_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + body {font-family: "Calibri", "Tahoma", "Arial", Sans-serif; font-size:11pt} +h1 {border-bottom: solid 2px #A0A0A0; font-size: 24pt} +h2 {border-bottom: solid 1px #A0A0A0; font-size: 20pt} +h3 {border-bottom: solid 1px #A0A0A0; font-size: 17pt} +h4 {font-size: 14pt; font-weight: bold} +h5 {font-size: 12pt; font-weight: bold; font-style: italic} +ol {margin-left: 0; padding-left: 1em;} +ul {margin-left: 0; padding-left: 1em;} +li {margin-left: 1em; padding-left: 0.5em} + + + body {font-family: "Calibri", "Tahoma", "Arial", Sans-serif; font-size:11pt} +h1 {border-bottom: solid 2px #A0A0A0; font-size: 24pt} +h2 {border-bottom: solid 1px #A0A0A0; font-size: 20pt} +h3 {border-bottom: solid 1px #A0A0A0; font-size: 17pt} +h4 {font-size: 14pt; font-weight: bold} +h5 {font-size: 12pt; font-weight: bold; font-style: italic} + + + ..\licensing\resources\installer_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\installer_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\installer_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + No licensing file has been selected + + + No solution has been selected + + + Open solution + + + Loading solution. Please wait... + + + ..\licensing\resources\vs_project_unknown_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\vs_project_unknown_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\vs_project_unknown_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\vs_solution_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\vs_solution_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\vs_solution_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\vs_solution_file_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\vs_solution_file_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\licensing\resources\vs_solution_file_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + >>> '{0}' applies to the following components: <<< + {0} = license name + + + > **'{0}'** applies to the following components: + {0} = license name + + + >>> '{0}' applies to the following THIRD-PARTY components: <<< + {0} = license name + + + > **'{0}'** applies to the following **third-party components:** + {0} = license name + + + ## by {0} + + + _by {0}_ + + + by {0} + + + <html> +<head> +<meta charset="UTF-8"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + + + <title>{0} '{1}'</title> + {0} = licensed type; {1} = licensed name + + + ## {0} '{1}' + {0} = licensed type; {1} = licensed name + + + # {0} '{1}' + {0} = licensed type; {1} = licensed name + + + Licenses + + + Terms and conditions + + + {0} by {1} + {0} = component type, {1} = author + + + _{0} by {1}_ + {0} = component type, {1} = author + + + Image library + + + Installer + + + Library + + + 'nuget' package + + + + + + Program + + + VS Solution + + + Source code + + + Library + + + Component + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Resources.Designer.cs new file mode 100644 index 00000000..188b9281 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Resources.Designer.cs @@ -0,0 +1,426 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Add_16xM { + get { + object obj = ResourceManager.GetObject("Action_Add_16xM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Cancel_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Close_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Close_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Delete_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Edit_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Edit_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_FullView_16x16 { + get { + object obj = ResourceManager.GetObject("Action_FullView_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Go_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Go_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoNextDown_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoNextDown_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_GoPreviousUp_16x16 { + get { + object obj = ResourceManager.GetObject("Action_GoPreviousUp_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Ok_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Open_16x { + get { + object obj = ResourceManager.GetObject("Action_Open_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Property_Add_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Property_Add_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_Settings_16x16 { + get { + object obj = ResourceManager.GetObject("Action_Settings_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Folder_16x { + get { + object obj = ResourceManager.GetObject("Folder_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Folder_24x { + get { + object obj = ResourceManager.GetObject("Folder_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Folder_32x { + get { + object obj = ResourceManager.GetObject("Folder_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap FolderOpen_16x { + get { + object obj = ResourceManager.GetObject("FolderOpen_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap FolderOpen_24x { + get { + object obj = ResourceManager.GetObject("FolderOpen_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap FolderOpen_32x { + get { + object obj = ResourceManager.GetObject("FolderOpen_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LinkedFolder_16x { + get { + object obj = ResourceManager.GetObject("LinkedFolder_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LinkedFolder_24x { + get { + object obj = ResourceManager.GetObject("LinkedFolder_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LinkedFolder_32x { + get { + object obj = ResourceManager.GetObject("LinkedFolder_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LinkedFolderOpen_16x { + get { + object obj = ResourceManager.GetObject("LinkedFolderOpen_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LinkedFolderOpen_24x { + get { + object obj = ResourceManager.GetObject("LinkedFolderOpen_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap LinkedFolderOpen_32x { + get { + object obj = ResourceManager.GetObject("LinkedFolderOpen_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MaintenanceTool_Cli_16x { + get { + object obj = ResourceManager.GetObject("MaintenanceTool_Cli_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MaintenanceTool_Cli_24x { + get { + object obj = ResourceManager.GetObject("MaintenanceTool_Cli_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MaintenanceTool_Cli_32x { + get { + object obj = ResourceManager.GetObject("MaintenanceTool_Cli_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MaintenanceTool_Gui_16x { + get { + object obj = ResourceManager.GetObject("MaintenanceTool_Gui_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MaintenanceTool_Gui_24x { + get { + object obj = ResourceManager.GetObject("MaintenanceTool_Gui_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MaintenanceTool_Gui_32x { + get { + object obj = ResourceManager.GetObject("MaintenanceTool_Gui_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap RefreshBlue_16x16 { + get { + object obj = ResourceManager.GetObject("RefreshBlue_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Ok_SmallCircle_16x16 { + get { + object obj = ResourceManager.GetObject("Status_Ok_SmallCircle_16x16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Status_Unknown_16x616 { + get { + object obj = ResourceManager.GetObject("Status_Unknown_16x616", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TextFile_16x { + get { + object obj = ResourceManager.GetObject("TextFile_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Resources.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Resources.resx new file mode 100644 index 00000000..750812bc --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Resources.resx @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\resources\maintenancetool_gui_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Settings_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_GoNextDown_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\folder_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Edit_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_GoPreviousUp_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\maintenancetool_gui_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\maintenancetool_cli_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_FullView_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\maintenancetool_cli_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Close_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Open_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\folder_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Property_Add_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Status_Ok_SmallCircle_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Go_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\RefreshBlue_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\folder_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\folderopen_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\maintenancetool_gui_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\folderopen_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Status_Unknown_16x616.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\folderopen_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\maintenancetool_cli_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_Add_16xM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TextFile_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\LinkedFolderOpen_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\LinkedFolderOpen_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\LinkedFolderOpen_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\LinkedFolder_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\LinkedFolder_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\LinkedFolder_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Settings.Designer.cs new file mode 100644 index 00000000..52ffd0c4 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Settings.Designer.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Settings.settings b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Add_16xM.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Add_16xM.png new file mode 100644 index 00000000..7139c070 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Add_16xM.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Cancel_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Cancel_16x16.png new file mode 100644 index 00000000..5fcec020 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Cancel_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Close_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Close_16x16.png new file mode 100644 index 00000000..097f527c Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Close_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Delete_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Delete_16x16.png new file mode 100644 index 00000000..0e36ba6e Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Delete_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Edit_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Edit_16x16.png new file mode 100644 index 00000000..041e23f4 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Edit_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_FullView_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_FullView_16x16.png new file mode 100644 index 00000000..d0e2f3b2 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_FullView_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_GoNextDown_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_GoNextDown_16x16.png new file mode 100644 index 00000000..d8a5871f Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_GoNextDown_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_GoPreviousUp_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_GoPreviousUp_16x16.png new file mode 100644 index 00000000..22979557 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_GoPreviousUp_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Go_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Go_16x16.png new file mode 100644 index 00000000..b25f72b9 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Go_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Ok_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Ok_16x16.png new file mode 100644 index 00000000..caac04de Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Ok_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Open_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Open_16x.png new file mode 100644 index 00000000..3d974a8b Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Open_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Property_Add_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Property_Add_16x16.png new file mode 100644 index 00000000..387c2980 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Property_Add_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Settings_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Settings_16x16.png new file mode 100644 index 00000000..4c328f01 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Action_Settings_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_16x.png new file mode 100644 index 00000000..c1684f48 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_16x.svg new file mode 100644 index 00000000..4c8a03f5 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_16x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_24x.png new file mode 100644 index 00000000..2e2d909f Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_32x.png new file mode 100644 index 00000000..ad3778bb Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/FolderOpen_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_16x.png new file mode 100644 index 00000000..ccb1725f Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_16x.svg new file mode 100644 index 00000000..481bb01a --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_16x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_24x.png new file mode 100644 index 00000000..55f30fb8 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_32x.png new file mode 100644 index 00000000..1606b25d Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Folder_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder.svg new file mode 100644 index 00000000..39e682e5 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen.svg new file mode 100644 index 00000000..10593c7a --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen_16x.png new file mode 100644 index 00000000..86115b85 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen_24x.png new file mode 100644 index 00000000..af014d57 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen_32x.png new file mode 100644 index 00000000..15c6632e Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolderOpen_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder_16x.png new file mode 100644 index 00000000..39c80b97 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder_24x.png new file mode 100644 index 00000000..78e0feea Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder_32x.png new file mode 100644 index 00000000..d9ffb92b Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/LinkedFolder_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_16x.png new file mode 100644 index 00000000..e51f4589 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_16x.svg new file mode 100644 index 00000000..6b4ef4c1 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_16x.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_24x.png new file mode 100644 index 00000000..3ccfdafd Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_32x.png new file mode 100644 index 00000000..19c5099f Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Cli_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_16x.png new file mode 100644 index 00000000..c95cf82d Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_16x.svg b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_16x.svg new file mode 100644 index 00000000..50385b6f --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_16x.svg @@ -0,0 +1,81 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_24x.png new file mode 100644 index 00000000..f6630eef Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_32x.png new file mode 100644 index 00000000..85b68b35 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/MaintenanceTool_Gui_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/RefreshBlue_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/RefreshBlue_16x16.png new file mode 100644 index 00000000..b3889f60 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/RefreshBlue_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Status_Ok_SmallCircle_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Status_Ok_SmallCircle_16x16.png new file mode 100644 index 00000000..6b66f3ed Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Status_Ok_SmallCircle_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Status_Unknown_16x616.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Status_Unknown_16x616.png new file mode 100644 index 00000000..3dde4898 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Status_Unknown_16x616.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/TextFile_16x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/TextFile_16x.png new file mode 100644 index 00000000..9317a920 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/TextFile_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/TextFile_24x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/TextFile_24x.png new file mode 100644 index 00000000..66310dfa Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/TextFile_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/TextFile_32x.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/TextFile_32x.png new file mode 100644 index 00000000..8836fa29 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/TextFile_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Word2007RTFSpec9.pdf b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Word2007RTFSpec9.pdf new file mode 100644 index 00000000..4fbebe5a Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/Word2007RTFSpec9.pdf differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cog_16x16.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cog_16x16.png new file mode 100644 index 00000000..cca7a4fa Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cog_16x16.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cog_24x24.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cog_24x24.png new file mode 100644 index 00000000..2d689e7f Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cog_24x24.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cog_32x32.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cog_32x32.png new file mode 100644 index 00000000..ac1cab56 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cog_32x32.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cogs.ico b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cogs.ico new file mode 100644 index 00000000..65c74be0 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cogs.ico differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cogs_24x24.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cogs_24x24.png new file mode 100644 index 00000000..72afb56f Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cogs_24x24.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cogs_32x32.png b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cogs_32x32.png new file mode 100644 index 00000000..eb28f4a8 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/cogs_32x32.png differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/idr_dll.ico b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/idr_dll.ico new file mode 100644 index 00000000..f6ec6182 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/Resources/idr_dll.ico differ diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SelectToolDialog.Designer.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SelectToolDialog.Designer.cs new file mode 100644 index 00000000..bc813c11 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SelectToolDialog.Designer.cs @@ -0,0 +1,220 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace AlphaCentaury.Tools.SourceCodeMaintenance +{ + partial class SelectToolDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SelectToolDialog)); + this.buttonUsage = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.listViewTools = new System.Windows.Forms.ListView(); + this.columnHeaderToolName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.imageListLarge = new System.Windows.Forms.ImageList(this.components); + this.imageListSmall = new System.Windows.Forms.ImageList(this.components); + this.textBoxInfo = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.SuspendLayout(); + // + // buttonUsage + // + this.buttonUsage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonUsage.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Status_Unknown_16x616; + this.buttonUsage.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonUsage.Location = new System.Drawing.Point(12, 324); + this.buttonUsage.Name = "buttonUsage"; + this.buttonUsage.Size = new System.Drawing.Size(100, 25); + this.buttonUsage.TabIndex = 1; + this.buttonUsage.Text = "Usage..."; + this.buttonUsage.UseVisualStyleBackColor = true; + this.buttonUsage.Click += new System.EventHandler(this.buttonUsage_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Ok_16x16; + this.buttonOk.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonOk.Location = new System.Drawing.Point(166, 324); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(100, 25); + this.buttonOk.TabIndex = 2; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Image = global::AlphaCentaury.Tools.SourceCodeMaintenance.Properties.Resources.Action_Cancel_16x16; + this.buttonCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonCancel.Location = new System.Drawing.Point(272, 324); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(100, 25); + this.buttonCancel.TabIndex = 3; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // splitContainer + // + this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer.Location = new System.Drawing.Point(12, 12); + this.splitContainer.Name = "splitContainer"; + this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.listViewTools); + this.splitContainer.Panel1MinSize = 75; + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.textBoxInfo); + this.splitContainer.Panel2MinSize = 75; + this.splitContainer.Size = new System.Drawing.Size(360, 306); + this.splitContainer.SplitterDistance = 200; + this.splitContainer.SplitterIncrement = 15; + this.splitContainer.TabIndex = 0; + // + // listViewTools + // + this.listViewTools.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewTools.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderToolName}); + this.listViewTools.FullRowSelect = true; + this.listViewTools.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.listViewTools.HideSelection = false; + this.listViewTools.LargeImageList = this.imageListLarge; + this.listViewTools.Location = new System.Drawing.Point(3, 3); + this.listViewTools.MultiSelect = false; + this.listViewTools.Name = "listViewTools"; + this.listViewTools.ShowItemToolTips = true; + this.listViewTools.Size = new System.Drawing.Size(354, 194); + this.listViewTools.SmallImageList = this.imageListSmall; + this.listViewTools.TabIndex = 0; + this.listViewTools.UseCompatibleStateImageBehavior = false; + this.listViewTools.View = System.Windows.Forms.View.Details; + this.listViewTools.SelectedIndexChanged += new System.EventHandler(this.listViewTools_SelectedIndexChanged); + this.listViewTools.DoubleClick += new System.EventHandler(this.listViewTools_DoubleClick); + this.listViewTools.Resize += new System.EventHandler(this.listViewTools_Resize); + // + // columnHeaderToolName + // + this.columnHeaderToolName.Text = "Tool name"; + this.columnHeaderToolName.Width = 300; + // + // imageListLarge + // + this.imageListLarge.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListLarge.ImageStream"))); + this.imageListLarge.TransparentColor = System.Drawing.Color.Transparent; + this.imageListLarge.Images.SetKeyName(0, "Gui"); + this.imageListLarge.Images.SetKeyName(1, "Cli"); + // + // imageListSmall + // + this.imageListSmall.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListSmall.ImageStream"))); + this.imageListSmall.TransparentColor = System.Drawing.Color.Transparent; + this.imageListSmall.Images.SetKeyName(0, "Gui"); + this.imageListSmall.Images.SetKeyName(1, "Cli"); + // + // textBoxInfo + // + this.textBoxInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxInfo.BackColor = System.Drawing.SystemColors.Window; + this.textBoxInfo.Location = new System.Drawing.Point(3, 3); + this.textBoxInfo.Multiline = true; + this.textBoxInfo.Name = "textBoxInfo"; + this.textBoxInfo.ReadOnly = true; + this.textBoxInfo.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxInfo.Size = new System.Drawing.Size(354, 96); + this.textBoxInfo.TabIndex = 0; + // + // SelectToolDialog + // + this.AcceptButton = this.buttonOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.ClientSize = new System.Drawing.Size(384, 361); + this.Controls.Add(this.splitContainer); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.buttonUsage); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(350, 300); + this.Name = "SelectToolDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Select new tool"; + this.Load += new System.EventHandler(this.DialogSelectTool_Load); + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + this.splitContainer.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Button buttonUsage; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.TextBox textBoxInfo; + private System.Windows.Forms.ListView listViewTools; + private System.Windows.Forms.ColumnHeader columnHeaderToolName; + private System.Windows.Forms.ImageList imageListLarge; + private System.Windows.Forms.ImageList imageListSmall; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SelectToolDialog.cs b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SelectToolDialog.cs new file mode 100644 index 00000000..89a00724 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SelectToolDialog.cs @@ -0,0 +1,89 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using AlphaCentaury.Tools.SourceCodeMaintenance.Interfaces; + +namespace AlphaCentaury.Tools.SourceCodeMaintenance +{ + public partial class SelectToolDialog : Form + { + public SelectToolDialog() + { + InitializeComponent(); + } // constructor + + public Lazy SelectedTool { get; private set; } + + private void DialogSelectTool_Load(object sender, EventArgs e) + { + listViewTools.BeginUpdate(); + listViewTools_Resize(listViewTools, EventArgs.Empty); + listViewTools.Items.AddRange(Program.ToolsUi.Select(tool => new ListViewItem(tool.Metadata.Name, 0)).ToArray()); + listViewTools.EndUpdate(); + + if (listViewTools.Items.Count > 0) + { + listViewTools.Items[0].Selected = true; + } + else + { + listViewTools.Enabled = false; + buttonOk.Enabled = false; + } // if-else + } // DialogSelectTool_Load + + private void listViewTools_SelectedIndexChanged(object sender, EventArgs e) + { + var enable = (listViewTools.SelectedIndices.Count > 0); + SelectedTool = enable ? Program.ToolsUi[listViewTools.SelectedIndices[0]] : null; + buttonUsage.Enabled = enable && SelectedTool.Metadata.HasUsage; + buttonOk.Enabled = enable; + + if (SelectedTool == null) return; + + var buffer = new StringBuilder(); + buffer.AppendLine($"Guid: {SelectedTool.Metadata.Guid}"); + if (SelectedTool.Metadata.CliName != null) + { + buffer.AppendLine($"CLI name: {SelectedTool.Metadata.CliName}"); + } // if + buffer.AppendLine($"Has parameters: {SelectedTool.Metadata.HasParameters}"); + buffer.AppendLine($"Has file parameters: {SelectedTool.Metadata.HasFileParameters}"); + buffer.AppendLine($"Has UI: {SelectedTool.Metadata.HasUi}"); + buffer.AppendLine($"Has Usage: {SelectedTool.Metadata.HasUsage}"); + textBoxInfo.Text = buffer.ToString(); + } // listViewTools_SelectedIndexChanged + + private void listViewTools_DoubleClick(object sender, EventArgs e) + { + buttonOk.PerformClick(); + } // listViewTools_DoubleClick + + private void buttonUsage_Click(object sender, EventArgs e) + { + var writer = new Helpers.TextBoxOutputWriter(textBoxInfo); + writer.Start(); + SelectedTool.Value.ShowUsage(writer); + writer.Stop(); + } // buttonUsage_Click + + private void listViewTools_Resize(object sender, EventArgs e) + { + columnHeaderToolName.Width = listViewTools.ClientSize.Width; + } // listViewTools_Resize + } // class SelectToolDialog +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SelectToolDialog.resx b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SelectToolDialog.resx new file mode 100644 index 00000000..c3f70364 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SelectToolDialog.resx @@ -0,0 +1,421 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 127, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB8 + KQAAAk1TRnQBSQFMAgEBAgEAASgBAAEoAQABIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA + AwABIAMAAQEBAAEgBgABQHoAAwkBDANYAYoDkwHGA2cBnQMTARpsAAMJAQwDVwGIA5IBxQNmAZwDEwEa + /wBpAAMNAREDnAHMAe0B5QHcAf8BywGpAYAB/wHnAdoBywH/A6UB0wMEAQVkAAMMARADmQHKAe0B5gHd + Af8BywGqAYEB/wHnAdoBywH/A6UB0wMEAQX/AAEAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8B6gHgAdUB/wGmAWYBGgH/AZwBVAEAAf8BpwFoARwB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8B6gHhAdYB/wGnAWcBGwH/AZwBVAEA + Af8BpgFmARoB/wP2Af8D9gH//wABAAP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8B6gHgAdUB/wGmAWYBGgH/AZwBVAEAAf8BnAFUAQAB/wGxAXgBNgH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/AeoB4QHWAf8BpwFoARwB/wGcAVQBAAH/AZwBVAEA + Af8BrwF2ATMB/wP2Af8D9gH//wABAAP2Af8D9gH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQQH/A1IB/wNUAf8DTAH/A9IB/wHr + AeIB2AH/AagBaQEeAf8BnAFUAQAB/wGcAVQBAAH/AaoBbAEjAf8B7QHmAd0B/wP2Af8D9gH/A/YB/wP2 + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DUgH/A1MB/wNMAf8D0QH/AesB4wHZAf8BqAFpAR4B/wGcAVQBAAH/AZwBVAEA + Af8BqgFsASMB/wHtAeYB3QH/A/YB/wP2Af//AAEAA/YB/wP2Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DRAH/A5UB/wPiAf8D9gH/A/YB/wP1 + Af8B6wHiAdgB/wGoAWkBHgH/AZwBVAEAAf8BnAFUAQAB/wGqAWwBIwH/Ae0B5gHdAf8DxwH/A/YB/wP2 + Af8D9gH/A/YB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNDAf8DlAH/A+EB/wP2Af8D9gH/A/UB/wHrAeMB2QH/AagBaQEeAf8BnAFUAQAB/wGc + AVQBAAH/AaoBbAEjAf8B7QHmAd0B/wPJAf8D9gH/A/YB//8AAQAD9gH/A/YB/wNAAf8DQAH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8D9AH/AfEB7QHoAf8ByQGmAXkB/wGv + AXUBMQH/AawBcAEqAf8BwAGWAWEB/wGmAWYBGgH/AZwBVAEAAf8BnAFUAQAB/wGrAW4BJQH/Ae4B5wHf + Af8DxwH/A0cB/wP2Af8D9gH/A/YB/wP2Af8DQAH/A0AB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/A/QB/wHxAe0B6QH/AckBpgF6Af8BrwF2ATMB/wGsAXEBKwH/AcABlgFh + Af8BpwFoARwB/wGcAVQBAAH/AZwBVAEAAf8BqgFtASQB/wHtAeYB3gH/A8kB/wNIAf8D9gH/A/YB//8A + AQAD9gH/A/YB/wNAAf8DQAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfQC8wH/ + Ae8B6gHjAf8BqwFuASUB/wGcAVQBAAH/AZwBVAEAAf8BnAFUAQAB/wGcAVQBAAH/AZwBVAEAAf8BnAFU + AQAB/wGrAW4BJQH/Ae4B5wHfAf8D9AH/A0cB/wNAAf8D9gH/A/YB/wP2Af8D9gH/A0AB/wNAAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B9ALzAf8B8AHqAeQB/wGrAW8BJwH/AZwBVAEA + Af8BnAFUAQAB/wGcAVQBAAH/AZwBVAEAAf8BnAFUAQAB/wGcAVQBAAH/AaoBbQEkAf8B7QHmAd4B/wP0 + Af8DSAH/A0AB/wP2Af8D9gH//wABAAP2Af8D9gH/A0AB/wNAAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8D9gH/Ab8BkwFcAf8BnAFUAQAB/wGcAVQBAAH/AZwBVAEAAf8BnAFUAQAB/wGc + AVQBAAH/AZwBVAEAAf8BngFXAQIB/wHtAeYB3QH/AfUC9AH/AfIB8AHxAf8DQAH/A0AB/wP2Af8D9gH/ + A/YB/wP2Af8DQAH/A0AB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8gHwAfEB/wH2AfUB9gH/ + Ab8BlAFeAf8BnAFUAQAB/wGcAVQBAAH/AZwBVAEAAf8BnAFUAQAB/wGcAVQBAAH/AZwBVAEAAf8BngFX + AQIB/wHtAeUB3AH/AfUC9AH/AfIB8AHxAf8DQAH/A0AB/wP2Af8D9gH//wABAAP2Af8D9gH/A0AB/wNA + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfIC8QH/AvUB9AH/AaEBXAEKAf8BnAFUAQAB/wGo + AWoBHwH/AaQBYgEUAf8BnAFUAQAB/wGcAVQBAAH/AZwBVAEAAf8BnAFUAQAB/wHkAdYBxAH/AfMB8gHz + Af8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af8D9gH/A/YB/wNAAf8DQAH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8AHuAe8B/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHyAvEB/wH2AvUB/wGhAV0BCwH/AZwBVAEAAf8BqAFpAR4B/wGkAWMBFQH/AZwBVAEA + Af8BnAFUAQAB/wGcAVQBAAH/AZwBVAEAAf8B4wHUAcIB/wHzAfIB8wH/AfEB7wHwAf8DQAH/A0AB/wP2 + Af8D9gH//wABAAP2Af8D9gH/A0AB/wNAAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfMB8QHy + Af8B8wHwAe0B/wGcAVQBAAH/AagBagEfAf8B6wHjAdkB/wHnAdwBzgH/AaQBYgEUAf8BnAFUAQAB/wGc + AVQBAAH/AZwBVAEAAf8B3AHHAa4B/wP0Af8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af8D9gH/A/YB/wNA + Af8DQAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DuAH/AWkBaAFpAf8DRAH/A0EB/wNS + Af8DkQH/AfEB7wHwAf8B8wHxAfIB/wHzAfEB7wH/AZwBVAEAAf8BqAFpAR4B/wHrAeMB2QH/AecB3AHO + Af8BpAFjARUB/wGcAVQBAAH/AZwBVAEAAf8BnAFUAQAB/wHbAccBrQH/A/QB/wHxAe8B8AH/A0AB/wNA + Af8D9gH/A/YB//8AAQAD9gH/A/YB/wNAAf8DQAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHy + AfAB8QH/A/YB/wG1AYIBQQH/AesB4wHZAf8D9gH/A/YB/wHaAcQBqQH/AZwBVAEAAf8BnAFUAQAB/wGc + AVQBAAH/AeoB4AHVAf8B9ALzAf8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af8D9gH/A/YB/wNAAf8DQAH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A50B/wNAAf8DVAH/A5QB/wGrAqoB/wOWAf8DnAH/AfEB7wHw + Af8B8gHwAfEB/wP2Af8BtQGCAUEB/wHrAeIB2AH/A/YB/wP2Af8B2gHFAaoB/wGcAVQBAAH/AZwBVAEA + Af8BnAFUAQAB/wHpAeAB1AH/AfQC8wH/AfEB7wHwAf8DQAH/A0AB/wP2Af8D9gH//wABAAP2Af8D9gH/ + A0AB/wNAAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8D9QH/AfUB9AHzAf8D9gH/ + A/YB/wHnAdwBzgH/AaQBYwEVAf8BnAFUAQAB/wGcAVQBAAH/AbgBiAFLAf8D9gH/AfIC8QH/AfEB7wHw + Af8DQAH/A0AB/wP2Af8D9gH/A/YB/wP2Af8DQAH/A0AB/wHxAe8B8AH/AfEB7wHwAf8B1gLVAf8DQQH/ + A2MB/wHpAecB6AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + A+AB/wH1AfQB8wH/A/YB/wP2Af8B6AHdAdAB/wGlAWQBFgH/AZwBVAEAAf8BnAFUAQAB/wG4AYcBSgH/ + A/YB/wHyAvEB/wHxAe8B8AH/A0AB/wNAAf8D9gH/A/YB//8AAQAD9gH/A/YB/wNAAf8DQAH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfQC8wH/A/YB/wP2Af8B5wHcAc4B/wGkAWMBFQH/ + AZwBVAEAAf8BnAFUAQAB/wGyAXwBOwH/AfAB7AHmAf8B9AHzAfQB/wHxAe8B8AH/AfEB7wHwAf8DQAH/ + A0AB/wP2Af8D9gH/A/YB/wP2Af8DQAH/A0AB/wHxAe8B8AH/AfEB7wHwAf8DmwH/A0AB/wHBAsAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A5YB/wP2 + Af8D9gH/AegB3QHQAf8BpQFkARYB/wGcAVQBAAH/AZwBVAEAAf8BsgF7AToB/wHwAesB5QH/AfQB8wH0 + Af8B8QHvAfAB/wHxAe8B8AH/A0AB/wNAAf8D9gH/A/YB//8AAQAD9gH/A/YB/wNAAf8DQAH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8D9AH/A/YB/wHoAd4B0QH/Ac0BrgGH + Af8ByQGmAXoB/wHdAcoBswH/AfYC9QH/AfQB8wH0Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQAH/ + A0AB/wP2Af8D9gH/A/YB/wP2Af8DQAH/A0AB/wHxAe8B8AH/AfEB7wHwAf8DggH/A0AB/wHiAeAB4QH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wP0Af8D9gH/AekB3gHSAf8BzgGuAYgB/wHJAaYBegH/Ad0BygGyAf8B9gL1Af8D6gH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/A0AB/wNAAf8D9gH/A/YB//8AAQAD9gH/A/YB/wNAAf8DQAH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAfAB8QH/A/MB/wH1 + AvQB/wP1Af8B9AHzAfQB/wHzAfEB8gH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQAH/ + A0AB/wP2Af8D9gH/A/YB/wP2Af8DQAH/A0AB/wHxAe8B8AH/AfEB7wHwAf8BhQKEAf8DQAH/AeEB3wHg + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHwAfEB/wPzAf8B9QL0Af8D8QH/A7UB/wOUAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af//AAEAA/YB/wP2Af8DQAH/A0AB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wNAAf8DQAH/A/YB/wP2Af8D9gH/A/YB/wNAAf8DQAH/AfEB7wHwAf8B8QHvAfAB/wOlAf8DQAH/ + Ab0BvAG9Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wNAAf8DQAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A5YB/wNAAf8BuQK4Af8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af//AAEAA/YB/wP2Af8DQAH/A0AB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af8D9gH/A/YB/wNAAf8DQAH/AfEB7wHwAf8B8QHvAfAB/wHi + AeAB4QH/A0kB/wNfAf8B5QHjAeQB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wNAAf8DQAH/AfEB7wHwAf8B8QHvAfAB/wHsAeoB6wH/A08B/wNTAf8B7gHsAe0B/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0AB/wNAAf8D9gH/A/YB//8AAQAD9gH/A/YB/wNA + Af8DQAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/A0AB/wNAAf8D9gH/A/YB/wP2Af8D9gH/A0AB/wNAAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8BuAK3Af8DRAH/A1IB/wGUApMB/wGrAqoB/wOYAf8DnwH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A7QB/wNAAf8DnAH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af//AAEAA/YB/wP2Af8DQAH/ + A0AB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af8D9gH/A/YB/wNAAf8DQAH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8BzQHLAcwB/wN3Af8DSQH/A0AB/wNOAf8DigH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A2gB/wNEAf8B3wLeAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A0AB/wNAAf8D9gH/A/YB//8AAQAD9gH/A/YB/wNA + Af8DQAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/A0AB/wNAAf8D9gH/A/YB/wP2Af8D9gH/A0AB/wNAAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHvAe0B7gH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8DQAH/A0AB/wP2Af8D9gH//wABAAP2Af8D9gH/A0AB/wNAAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DQAH/A0AB/wP2 + Af8D9gH/A/YB/wP2Af8DQAH/A0AB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af//AAEAA/YB/wP2 + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A/YB/wP2 + Af8D9gH/A/YB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8D9gH/A/YB//8AAQAD9gH/A/YB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8D9gH/A/YB/wP2Af8D9gH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wP2Af8D9gH//wABAAP2Af8D9gH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wP2Af8D9gH/A/YB/wP2Af8DQAH/A0AB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wNAAf8DQAH/A/YB/wP2Af//AAEAA/YB/wP2Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A/YB/wP2Af8D9gH/A/YB/wNAAf8DQAH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/A0AB/wNAAf8D9gH/A/YB//8AAQAD9gH/A/YB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8D9gH/A/YB/wP2Af8D9gH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wP2Af8D9gH//wABAAP2Af8D9gH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wP2Af8D9gH/A/YB/wP2 + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNA + Af8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A0AB/wNAAf8DQAH/A/YB/wP2 + Af//AAEAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB//8AAQAD9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH//wD/AP8A/wD/AAUAAUIBTQE+ + BwABPgMAASgDAAGAAwABIAMAAQEBAAEBBgABAhYAA/8BAAP/AcED/wHBCAAD/wGAA/8BgP8AyQAI/wgA + CP8IAAs= + + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAI + GAAAAk1TRnQBSQFMAgEBAgEAASgBAAEoAQABGAEAARgBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFg + AwABGAMAAQEBAAEgBgABJF4AAwcBCQNUAZQDjAHSA0kBgQMAAQFMAAMHAQkDUwGTA4wB0gNKAYIDAAEB + wAADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJ + AYADSQGAA0kBgANJAYADSwGEA50B3QHUAbkBmQH/AasBbgEmAf8B4wHUAcEB/wNfAaYDSQGAA0kBgANJ + AYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJ + AYADSwGEA50B3QHUAboBmgH/AasBbQEmAf8B4gHTAcAB/wNfAabAAAP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8B0wG4 + AZYB/wGdAVQBAAH/AZwBUwEAAf8B1QG7AZsB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/AdMBtwGWAf8BnQFU + AQAB/wGcAVMBAAH/AdQBugGaAf8D9gH/wAAD9gH/A5wB/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/ + Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wNWAf8DewH/A3IB/wPGAf8B0wG4AZcB/wGdAVQBAAH/AZwBUwEA + Af8BwAGWAV8B/wHoAucB/wP2Af8D9gH/A5wB/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/ + Az8B/wM/Af8DPwH/Az8B/wNWAf8DewH/A3EB/wPFAf8B0wG4AZcB/wGdAVQBAAH/AZwBUwEAAf8BvwGV + AV4B/wHpAugB/wP2Af/AAAP2Af8DnAH/Az8B/wHHAsYB/wHHAsYB/wHHAsYB/wHHAsYB/wHHAsYB/wHH + AsYB/wHHAsYB/wHHAsYB/wHHAsYB/wHIAscB/wHkAuMB/wHuAegB4QH/AdkBwgGmAf8B3AHHAa4B/wHR + AbQBkQH/AZ0BVAEAAf8BnAFTAQAB/wHCAZoBZQH/AdwC2wH/A6UB/wP2Af8D9gH/A5wB/wM/Af8BoQGg + AaEB/wGhAaABoQH/AaEBoAGhAf8BoQGgAaEB/wGhAaABoQH/AaEBoAGhAf8BoQGgAaEB/wGhAaABoQH/ + AaEBoAGhAf8BowGiAaMB/wPUAf8B7gHoAeEB/wHZAcMBpwH/AdwByAGvAf8B0gG1AZIB/wGdAVQBAAH/ + AZwBUwEAAf8BwQGYAWMB/wHcAtsB/wOmAf8D9gH/wAAD9gH/A5wB/wM/Af8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B9AHz + AfQB/wHbAcUBqwH/AaEBXAELAf8BnAFTAQAB/wGcAVMBAAH/AZwBUwEAAf8BnAFTAQAB/wHCAZoBZQH/ + AfUC9AH/A1IB/wOcAf8D9gH/A/YB/wOcAf8DPwH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfQB8wH0Af8B2wHGAawB/wGh + AVwBCwH/AZwBUwEAAf8BnAFTAQAB/wGcAVMBAAH/AZwBUwEAAf8BwQGYAWMB/wH1AvQB/wNTAf8DnAH/ + A/YB/8AAA/YB/wOcAf8DPwH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7QHpAf8BogFdAQ0B/wGcAVMBAAH/AZwBUwEA + Af8BnAFTAQAB/wGcAVMBAAH/AawBbwEpAf8B9gL1Af8B8QHwAfEB/wM/Af8DnAH/A/YB/wP2Af8DnAH/ + Az8B/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe0B6QH/AaIBXQENAf8BnAFTAQAB/wGcAVMBAAH/AZwBUwEAAf8BnAFT + AQAB/wGrAW8BKAH/AfYC9QH/AfIB8AHxAf8DPwH/A5wB/wP2Af/AAAP2Af8DnAH/Az8B/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8gHx + AfIB/wHgAc8BugH/AZwBUwEAAf8BvwGUAV0B/wG6AYwBUAH/AZwBUwEAAf8BnAFTAQAB/wGhAVsBCQH/ + A/YB/wHxAe8B8AH/Az8B/wOcAf8D9gH/A/YB/wOcAf8DPwH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + A98B/wGxAbABsQH/A5sB/wGsAqsB/wHiAeAB4QH/AfIB8QHyAf8B4AHQAbsB/wGcAVMBAAH/Ab8BlQFd + Af8BugGMAVAB/wGcAVMBAAH/AZwBUwEAAf8BoAFaAQgB/wPzAf8B8QHvAfAB/wM/Af8DnAH/A/YB/8AA + A/YB/wOcAf8DPwH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAfAB8QH/AecB2gHLAf8BvwGUAV0B/wL1AfQB/wH0AfMB8gH/Aa4BcwEu + Af8BnAFTAQAB/wGrAW0BJQH/A/UB/wHxAe8B8AH/Az8B/wOcAf8D9gH/A/YB/wOcAf8DPwH/AfEB7wHw + Af8B8QHvAfAB/wHHAsYB/wNHAf8DZwH/A48B/wN5Af8ByQLIAf8B8QHwAfEB/wHnAdsBzAH/Ab8BlQFd + Af8C9QH0Af8B9AHzAfIB/wGuAXMBLwH/AZwBUwEAAf8BqwFtASQB/wPzAf8B8QHvAfAB/wM/Af8DnAH/ + A/YB/8AAA/YB/wOcAf8DPwH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A/UB/wH2AvUB/wP2Af8B0AGyAY0B/wGcAVQBAAH/ + AZwBUwEAAf8B0wG3AZYB/wH0AvMB/wHxAe8B8AH/Az8B/wOcAf8D9gH/A/YB/wOcAf8DPwH/AfEB7wHw + Af8B7wHtAe4B/wNXAf8DkAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wPc + Af8B9gL1Af8D9gH/AdABswGPAf8BnAFUAQAB/wGcAVMBAAH/AdMBtwGVAf8B9ALzAf8B8QHvAfAB/wM/ + Af8DnAH/A/YB/8AAA/YB/wOcAf8DPwH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfMB8gHzAf8D9gH/AecB2wHMAf8BqwFt + ASQB/wGxAXkBNwH/AdYBvQGeAf8D9QH/AfIB8AHxAf8B8QHvAfAB/wM/Af8DnAH/A/YB/wP2Af8DnAH/ + Az8B/wHxAe8B8AH/AdkB1wHYAf8DPwH/Ad4B3AHdAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/A8EB/wP2Af8B5wHbAc0B/wGrAW0BJAH/AbEBeAE2Af8B1QG7AZsB/wPtAf8B8QHv + AfAB/wHxAe8B8AH/Az8B/wOcAf8D9gH/wAAD9gH/A5wB/wM/Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHy + AfAB8QH/AfUC9AH/AfYC9QH/A/UB/wH0AvMB/wHyAfAB8QH/AfEB7wHwAf8B8QHvAfAB/wM/Af8DnAH/ + A/YB/wP2Af8DnAH/Az8B/wHxAe8B8AH/AdABzwHQAf8DPwH/AecB5QHmAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8gHwAfEB/wH0AvMB/wH2AvUB/wPjAf8DqQH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/Az8B/wOcAf8D9gH/wAAD9gH/A5wB/wM/Af8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8DPwH/A5wB/wP2Af8D9gH/A5wB/wM/Af8B8QHvAfAB/wHrAekB6gH/A0MB/wG/ + Ar4B/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DPwH/AZsCmgH/AfEB7wHw + Af8B7AHqAesB/wNOAf8DpAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/Az8B/wOcAf8D9gH/wAAD9gH/ + A5wB/wM/Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DPwH/A5wB/wP2Af8D9gH/A5wB/wM/Af8B8QHv + AfAB/wHxAe8B8AH/AZQCkwH/A1UB/wHBAsAB/wHjAeEB4gH/AdUC1AH/AeUB4wHkAf8B8QHvAfAB/wGh + AaABoQH/AckCyAH/AfEB7wHwAf8DswH/A0YB/wHlAeMB5AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + Az8B/wOcAf8D9gH/wAAD9gH/A5wB/wM/Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DPwH/A5wB/wP2 + Af8D9gH/A5wB/wM/Af8B8QHvAfAB/wHxAe8B8AH/AfAB7gHvAf8BoQGgAaEB/wNbAf8DQgH/A0wB/wHH + AsYB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A2cB/wOIAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wM/Af8DnAH/A/YB/8AAA/YB/wOcAf8DPwH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/Az8B/wOcAf8D9gH/A/YB/wOcAf8DPwH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/Az8B/wOc + Af8D9gH/wAAD9gH/A5wB/wM/Af8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLG + Af8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLG + Af8BxwLGAf8DPwH/A5wB/wP2Af8D9gH/A5wB/wM/Af8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/ + A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DPwH/A5wB/wP2Af/AAAP2 + Af8DnAH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/ + Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DnAH/A/YB/wP2Af8DnAH/Az8B/wM/Af8DPwH/Az8B/wM/ + Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/ + Af8DnAH/A/YB/8AAA/YB/wOcAf8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/ + Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wOcAf8D9gH/A/YB/wOcAf8DPwH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/Az8B/wOcAf8D9gH/wAAD9gH/A5wB/wM/Af8DPwH/Az8B/wM/ + Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/ + Af8DPwH/A5wB/wP2Af8D9gH/A5wB/wM/Af8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/A5QB/wOU + Af8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DPwH/A5wB/wP2Af/AAAP2Af8DnAH/ + Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/ + Az8B/wM/Af8DPwH/Az8B/wM/Af8DnAH/A/YB/wP2Af8DnAH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/ + Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DPwH/Az8B/wM/Af8DnAH/ + A/YB/8AAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/wAADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGA + A0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGA + A0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYADSQGA + A0kBgANJAYADSQGAA0kBgANJAYADSQGAA0kBgANJAYD/AP8AQgABQgFNAT4HAAE+AwABKAMAAWADAAEY + AwABAQEAAQEFAAEgAQEWAAP/AQAC/wHgAv8B4P8ADwAG/wYACw== + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SourceCodeMaintenance.csproj b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SourceCodeMaintenance.csproj new file mode 100644 index 00000000..c78c2bc0 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/SourceCodeMaintenance.csproj @@ -0,0 +1,435 @@ + + + + + Debug + AnyCPU + {DE019D79-3699-4D17-8545-74B79C32FEF6} + WinExe + AlphaCentaury.Tools.SourceCodeMaintenance + SourceCodeMaintenance + v4.6.2 + 512 + true + true + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + 8.0 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + 8.0 + + + + ..\..\packages\HtmlAgilityPack.1.11.17\lib\Net45\HtmlAgilityPack.dll + + + ..\..\packages\HtmlRenderer.Core.1.5.0.6\lib\net45\HtmlRenderer.dll + + + ..\..\packages\HtmlRenderer.WinForms.1.5.0.6\lib\net45\HtmlRenderer.WinForms.dll + + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + + + ..\..\packages\Markdig.0.18.0\lib\net40\Markdig.dll + + + + + + + ..\..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + UserControl + + + ArgumentsListEditor.cs + + + Form + + + BatchDialog.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + UserControl + + + LicensingDataViewer.cs + + + + Form + + + LicensingForm.cs + + + + + + + + + Form + + + LicensingToolOptionsDialog.cs + + + + + + + + + + + + + True + True + LicensingResources.resx + + + True + True + BatchResources.resx + + + Form + + + SelectToolDialog.cs + + + + Form + + + LicensingFormDocumentView.cs + + + Form + + + MainForm.cs + + + + + + + + + + + + Form + + + ToolArgumentsDialog.cs + + + ArgumentsListEditor.cs + + + BatchDialog.cs + + + LicensingDataViewer.cs + + + LicensingForm.cs + + + LicensingToolOptionsDialog.cs + + + + ResXFileCodeGenerator + LicensingResources.Designer.cs + Designer + + + ResXFileCodeGenerator + BatchResources.Designer.cs + Designer + + + SelectToolDialog.cs + + + LicensingFormDocumentView.cs + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + ToolArgumentsDialog.cs + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + PreserveNewest + + + + + + + + {1293a5c4-478f-4efd-8e53-d283b35e1a06} + AlphaCentaury.Licensing.Data.Ui + + + {42b71db3-2e34-43bb-bf87-88f422bcf861} + AlphaCentaury.Licensing.Data + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common + + + {8986cd52-0c65-42d6-9c47-20ff47cf87bb} + IpTviewr.Native + + + {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} + UiServices.Common + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + Microsoft .NET Framework 4.6.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/UpdateCopyrightHeaders.batch b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/UpdateCopyrightHeaders.batch new file mode 100644 index 00000000..80f29bb6 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/UpdateCopyrightHeaders.batch @@ -0,0 +1,12 @@ + + + + + + C:\Users\Developer\Source\Repos\AlphaCentaury\MovistarTV\1.5 'Kruger 60' + /exclude:C:\Users\Developer\Source\Repos\AlphaCentaury\MovistarTV\1.5 'Kruger 60'\packages + /R + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/license.txt b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/license.txt new file mode 100644 index 00000000..d704dd31 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/license.txt @@ -0,0 +1,226 @@ +############################################################################## +## +## Program 'SourceCodeMaintenance' +## +############################################################################## +## +## Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® Exception Message Box License Terms + * The MIT License (MIT) + * BSD 3-Clause “Revised” License + * BSD 2-Clause “Simplified” License + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. AlphaCentaury.Licensing.Data +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. AlphaCentaury.Licensing.Data.Ui +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. SourceCodeMaintenance +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. HtmlAgilityPack +------------------------------ +'nuget' package by ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell +Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved. + This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + +2. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +//////////////////////////////////////////////////////////// +// +// BSD 3-Clause “Revised” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 3-Clause “Revised” License' applies to the following THIRD-PARTY components: <<< + +1. HtmlRenderer.Core +------------------------------ +'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + +2. HtmlRenderer.WinForms +------------------------------ +'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +//////////////////////////////////////////////////////////// +// +// BSD 2-Clause “Simplified” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 2-Clause “Simplified” License' applies to the following THIRD-PARTY components: <<< + +1. Markdig +------------------------------ +'nuget' package by Alexandre Mutel +Copyright (c) 2018-2019, Alexandre Mutel + A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/licensing.xml b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/licensing.xml new file mode 100644 index 00000000..b4709076 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/licensing.xml @@ -0,0 +1,226 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + AlphaCentaury.Licensing.Data + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + AlphaCentaury.Licensing.Data.Ui + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + + + BSD-2-Clause + Alexandre Mutel + Copyright (c) 2018-2019, Alexandre Mutel + A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + BSD-3-Clause + Arthur Teplitzki, José Manuel Menéndez Poo + Copyright (c) 2009, José Manuel Menéndez Poo + Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + + + BSD-3-Clause + Arthur Teplitzki, José Manuel Menéndez Poo + Copyright (c) 2009, José Manuel Menéndez Poo + Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + MIT + ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell + Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved. + This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/packages.config b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/packages.config new file mode 100644 index 00000000..e6bc553e --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/SourceCodeMaintenance/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/CliToolData.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/CliToolData.cs new file mode 100644 index 00000000..5090ab16 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/CliToolData.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public sealed class CliToolData : ToolData + { + public CliToolData(Guid guid, ICliToolDataProvider data, Lazy tool, bool isGuiTool) : base(guid, data, tool, isGuiTool) + { + // no-op + } // constructor + + internal static CliToolData New(Guid guid, ICliToolDataProvider data, Lazy tool, bool isGuiTool) + { + return new CliToolData(guid, data, tool, isGuiTool); + } // New + } // class CliToolData +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/GuiToolData.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/GuiToolData.cs new file mode 100644 index 00000000..b18a7c8a --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/GuiToolData.cs @@ -0,0 +1,30 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public sealed class GuiToolData : ToolData + { + public GuiToolData(Guid guid, IGuiToolDataProvider data, Lazy tool, bool isGuiTool) : base(guid, data, tool, isGuiTool) + { + // no-op + } // constructor + + internal static GuiToolData New(Guid guid, IGuiToolDataProvider data, Lazy tool, bool isGuiTool) + { + return new GuiToolData(guid, data, tool, isGuiTool); + } // New + } // class GuiToolData +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ICliTool.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ICliTool.cs new file mode 100644 index 00000000..f4a4203e --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ICliTool.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public interface ICliTool : ITool + { + + } // interface ICliTool +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ICliToolDataProvider.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ICliToolDataProvider.cs new file mode 100644 index 00000000..24824c3b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ICliToolDataProvider.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public interface ICliToolDataProvider : IToolDataProvider + { + + } // interface ICliToolDataProvider +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IGuiTool.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IGuiTool.cs new file mode 100644 index 00000000..12b73d37 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IGuiTool.cs @@ -0,0 +1,22 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public interface IGuiTool: ITool + { + Form CreateForm(); + } // interface IGuiTool +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IGuiToolDataProvider.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IGuiToolDataProvider.cs new file mode 100644 index 00000000..9cf53866 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IGuiToolDataProvider.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public interface IGuiToolDataProvider : IToolDataProvider + { + + } // interface IGuiToolDataProvider +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IRibbonMdiChild.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IRibbonMdiChild.cs new file mode 100644 index 00000000..4c1948c8 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IRibbonMdiChild.cs @@ -0,0 +1,31 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public interface IRibbonMdiChild + { + IRibbonMdiForm RibbonMdiForm { set; } + + Guid TypeGuid { get; } + + MdiRibbonContext[] GetChildContexts(); + + bool IsActiveChild { set; } + + Form Form { get; } + } // IRibbonMdiChild +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IRibbonMdiForm.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IRibbonMdiForm.cs new file mode 100644 index 00000000..3d14f9f7 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IRibbonMdiForm.cs @@ -0,0 +1,22 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public interface IRibbonMdiForm + { + void SetActiveContexts(IRibbonMdiChild child, params string[] contexts); + + void SetStatusText(string status); + } // interface IRibbonMdiForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ITool.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ITool.cs new file mode 100644 index 00000000..ebaa33e7 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ITool.cs @@ -0,0 +1,20 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public interface ITool + { + + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IToolDataProvider.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IToolDataProvider.cs new file mode 100644 index 00000000..c04d8b74 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IToolDataProvider.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Drawing; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public interface IToolDataProvider + { + string Guid { get; } + + string Category { get; } + + string Name { get; } + + Image GetLogo(int size); + } // interface IToolDataProvider +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IToolMetadata.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IToolMetadata.cs new file mode 100644 index 00000000..b2915f5c --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IToolMetadata.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.ComponentModel; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public interface IToolMetadata + { + string Guid { get; } + + [DefaultValue(true)] + bool HasGui { get; } + + [DefaultValue(false)] + bool HasCli { get; } + } // IToolMetadata +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IToolOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IToolOutputWriter.cs new file mode 100644 index 00000000..946ed0e0 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/IToolOutputWriter.cs @@ -0,0 +1,47 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Diagnostics; +using JetBrains.Annotations; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + [PublicAPI] + public interface IToolOutputWriter + { + void WriteLine(TraceLevel level = TraceLevel.Info); + + void WriteLine(string text, TraceLevel level = TraceLevel.Info); + + void WriteLine(string format, params object[] objects); + + void WriteLine(TraceLevel level, string format, params object[] objects); + + void WriteException(Exception ex, string message = null); + + int IncreaseIndent(); + + int DecreaseIndent(); + + bool WriteTimestamps { get; set; } + + bool AbsoluteTimestamps { get; set; } + + TimeSpan ElapsedTime { get; } + + DateTime UtcStartTime { get; } + + int IndentLevel { get; } + } // IToolOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/LICENSE.ES.MD b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/LICENSE.ES.MD new file mode 100644 index 00000000..a889545f --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/LICENSE.ES.MD @@ -0,0 +1,116 @@ +# Biblioteca 'IpTviewr.ToolsUiFramework' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IpTviewr.ToolsUiFramework +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/LICENSE.MD b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/LICENSE.MD new file mode 100644 index 00000000..2512f9e8 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/LICENSE.MD @@ -0,0 +1,88 @@ +# Library 'IpTviewr.ToolsUiFramework' +Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IpTviewr.ToolsUiFramework +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonChildForm.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonChildForm.cs new file mode 100644 index 00000000..27170f5f --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonChildForm.cs @@ -0,0 +1,35 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public class MdiRibbonChildForm: Form, IRibbonMdiChild + { + #region Implementation of IRibbonMdiChild + + public IRibbonMdiForm RibbonMdiForm { get; set; } + + public virtual Guid TypeGuid => throw new NotSupportedException(); + + public virtual MdiRibbonContext[] GetChildContexts() => null; + + public virtual bool IsActiveChild { get; set; } + + public Form Form => this; + + #endregion + } // class MdiRibbonChildForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonContext.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonContext.cs new file mode 100644 index 00000000..82a84dfa --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonContext.cs @@ -0,0 +1,29 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using ComponentFactory.Krypton.Ribbon; +using System.Drawing; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public class MdiRibbonContext + { + public Color Color { get; set; } + + public string Name { get; set; } + + public string Title { get; set; } + + public KryptonRibbonTab[] Tabs { get; set; } + } // MdiRibbonContext +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonForm.Designer.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonForm.Designer.cs new file mode 100644 index 00000000..cff4ede9 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonForm.Designer.cs @@ -0,0 +1,355 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.UiFramework +{ + partial class MdiRibbonForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MdiRibbonForm)); + this.ribbon = new ComponentFactory.Krypton.Ribbon.KryptonRibbon(); + this.buttonSpecHelp = new ComponentFactory.Krypton.Toolkit.ButtonSpecAny(); + this.kryptonContextMenuItem1 = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem(); + this.tabWindows = new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab(); + this.ribbonGroupWindowsOperations = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupTriple2 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.ribbonButtonNewTool = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupSeparator1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupSeparator(); + this.kryptonRibbonGroupTriple3 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.ribbonButtonCloseWindow = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.commandCloseWindow = new ComponentFactory.Krypton.Toolkit.KryptonCommand(); + this.ribbonButtonCloseAllWindows = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.commandCloseAllWindows = new ComponentFactory.Krypton.Toolkit.KryptonCommand(); + this.ribbonGroupWindowsArrange = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupTriple4 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.ribbonButtonCascade = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.commandCascade = new ComponentFactory.Krypton.Toolkit.KryptonCommand(); + this.ribbonButtonTileHorizontal = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.commandTileHorizontal = new ComponentFactory.Krypton.Toolkit.KryptonCommand(); + this.ribbonButtonTileVertical = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.commandTileVertical = new ComponentFactory.Krypton.Toolkit.KryptonCommand(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.statusLabelStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.kryptonManager1 = new ComponentFactory.Krypton.Toolkit.KryptonManager(this.components); + this.timerClearStatus = new System.Windows.Forms.Timer(this.components); + this.kryptonRibbonGroupLines1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupLines(); + this.kryptonRibbonGroupButton1 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton2 = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton(); + this.ribbonComboWindows = new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupComboBox(); + ((System.ComponentModel.ISupportInitialize)(this.ribbon)).BeginInit(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // ribbon + // + this.ribbon.ButtonSpecs.AddRange(new ComponentFactory.Krypton.Toolkit.ButtonSpecAny[] { + this.buttonSpecHelp}); + this.ribbon.InDesignHelperMode = true; + this.ribbon.Name = "ribbon"; + this.ribbon.QATLocation = ComponentFactory.Krypton.Ribbon.QATLocation.Hidden; + this.ribbon.RibbonAppButton.AppButtonMenuItems.AddRange(new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuItem1}); + this.ribbon.RibbonAppButton.AppButtonShowRecentDocs = false; + this.ribbon.RibbonTabs.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonTab[] { + this.tabWindows}); + this.ribbon.SelectedTab = this.tabWindows; + this.ribbon.Size = new System.Drawing.Size(1008, 115); + this.ribbon.TabIndex = 1; + // + // buttonSpecHelp + // + this.buttonSpecHelp.Image = ((System.Drawing.Image)(resources.GetObject("buttonSpecHelp.Image"))); + this.buttonSpecHelp.Style = ComponentFactory.Krypton.Toolkit.PaletteButtonStyle.ButtonSpec; + this.buttonSpecHelp.UniqueName = "06E98F3735BC4B1106E98F3735BC4B11"; + // + // kryptonContextMenuItem1 + // + this.kryptonContextMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("kryptonContextMenuItem1.Image"))); + this.kryptonContextMenuItem1.Text = "E&xit"; + // + // tabWindows + // + this.tabWindows.Groups.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup[] { + this.ribbonGroupWindowsOperations, + this.ribbonGroupWindowsArrange}); + this.tabWindows.KeyTip = "W"; + this.tabWindows.Text = "Windows"; + // + // ribbonGroupWindowsOperations + // + this.ribbonGroupWindowsOperations.DialogBoxLauncher = false; + this.ribbonGroupWindowsOperations.Image = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_CloseWindow_16x; + this.ribbonGroupWindowsOperations.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupTriple2, + this.kryptonRibbonGroupSeparator1, + this.kryptonRibbonGroupTriple3}); + this.ribbonGroupWindowsOperations.KeyTipGroup = "O"; + this.ribbonGroupWindowsOperations.TextLine1 = "Operations"; + // + // kryptonRibbonGroupTriple2 + // + this.kryptonRibbonGroupTriple2.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.ribbonButtonNewTool}); + // + // ribbonButtonNewTool + // + this.ribbonButtonNewTool.ImageLarge = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_NewWindow_32x; + this.ribbonButtonNewTool.ImageSmall = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_NewWindow_16x; + this.ribbonButtonNewTool.KeyTip = "N"; + this.ribbonButtonNewTool.TextLine1 = "New Tool"; + this.ribbonButtonNewTool.Click += new System.EventHandler(this.ribbonButtonNewTool_Click); + // + // kryptonRibbonGroupTriple3 + // + this.kryptonRibbonGroupTriple3.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.ribbonButtonCloseWindow, + this.ribbonButtonCloseAllWindows}); + // + // ribbonButtonCloseWindow + // + this.ribbonButtonCloseWindow.ImageLarge = null; + this.ribbonButtonCloseWindow.ImageSmall = null; + this.ribbonButtonCloseWindow.KeyTip = "X"; + this.ribbonButtonCloseWindow.KryptonCommand = this.commandCloseWindow; + this.ribbonButtonCloseWindow.TextLine1 = "Close"; + this.ribbonButtonCloseWindow.TextLine2 = "Window"; + // + // commandCloseWindow + // + this.commandCloseWindow.ImageLarge = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_CloseWindow_32x; + this.commandCloseWindow.ImageSmall = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_CloseWindow_16x; + this.commandCloseWindow.Text = "Close Window"; + this.commandCloseWindow.TextLine1 = "Close"; + this.commandCloseWindow.TextLine2 = "Window"; + this.commandCloseWindow.Execute += new System.EventHandler(this.commandCloseWindow_Execute); + // + // ribbonButtonCloseAllWindows + // + this.ribbonButtonCloseAllWindows.ImageLarge = null; + this.ribbonButtonCloseAllWindows.ImageSmall = null; + this.ribbonButtonCloseAllWindows.KeyTip = "A"; + this.ribbonButtonCloseAllWindows.KryptonCommand = this.commandCloseAllWindows; + this.ribbonButtonCloseAllWindows.TextLine1 = "Close All"; + this.ribbonButtonCloseAllWindows.TextLine2 = "Windows"; + // + // commandCloseAllWindows + // + this.commandCloseAllWindows.ImageLarge = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_CloseAllWindows_32x; + this.commandCloseAllWindows.ImageSmall = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_CloseAllWindows_16x; + this.commandCloseAllWindows.Text = "Close all windows"; + this.commandCloseAllWindows.TextLine1 = "Close All"; + this.commandCloseAllWindows.TextLine2 = "Windows"; + this.commandCloseAllWindows.Execute += new System.EventHandler(this.commandCloseAllWindows_Execute); + // + // ribbonGroupWindowsArrange + // + this.ribbonGroupWindowsArrange.DialogBoxLauncher = false; + this.ribbonGroupWindowsArrange.Image = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_ArrangeCascade_16x; + this.ribbonGroupWindowsArrange.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupTriple4, + this.kryptonRibbonGroupLines1}); + this.ribbonGroupWindowsArrange.KeyTipGroup = "A"; + this.ribbonGroupWindowsArrange.TextLine1 = "Arrange"; + // + // kryptonRibbonGroupTriple4 + // + this.kryptonRibbonGroupTriple4.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.ribbonButtonCascade, + this.ribbonButtonTileHorizontal, + this.ribbonButtonTileVertical}); + // + // ribbonButtonCascade + // + this.ribbonButtonCascade.ImageLarge = null; + this.ribbonButtonCascade.ImageSmall = null; + this.ribbonButtonCascade.KeyTip = "C"; + this.ribbonButtonCascade.KryptonCommand = this.commandCascade; + this.ribbonButtonCascade.TextLine1 = "Cascade"; + // + // commandCascade + // + this.commandCascade.ImageLarge = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_ArrangeCascade_32x; + this.commandCascade.ImageSmall = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_ArrangeCascade_16x; + this.commandCascade.Text = "Cascade"; + this.commandCascade.TextLine1 = "Cascade"; + this.commandCascade.Execute += new System.EventHandler(this.commandCascade_Execute); + // + // ribbonButtonTileHorizontal + // + this.ribbonButtonTileHorizontal.ImageLarge = null; + this.ribbonButtonTileHorizontal.ImageSmall = null; + this.ribbonButtonTileHorizontal.KeyTip = "H"; + this.ribbonButtonTileHorizontal.KryptonCommand = this.commandTileHorizontal; + this.ribbonButtonTileHorizontal.TextLine1 = "Tile"; + this.ribbonButtonTileHorizontal.TextLine2 = "Horizontal"; + // + // commandTileHorizontal + // + this.commandTileHorizontal.ImageLarge = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_TileHorizontal_32x; + this.commandTileHorizontal.ImageSmall = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_TileHorizontal_16x; + this.commandTileHorizontal.Text = "Tile horizontal"; + this.commandTileHorizontal.TextLine1 = "Tile"; + this.commandTileHorizontal.TextLine2 = "Horizontal"; + this.commandTileHorizontal.Execute += new System.EventHandler(this.commandTileHorizontal_Execute); + // + // ribbonButtonTileVertical + // + this.ribbonButtonTileVertical.ImageLarge = null; + this.ribbonButtonTileVertical.ImageSmall = null; + this.ribbonButtonTileVertical.KeyTip = "V"; + this.ribbonButtonTileVertical.KryptonCommand = this.commandTileVertical; + this.ribbonButtonTileVertical.TextLine1 = "Tile"; + this.ribbonButtonTileVertical.TextLine2 = "Vertical"; + // + // commandTileVertical + // + this.commandTileVertical.ImageLarge = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_TileVertical_32x; + this.commandTileVertical.ImageSmall = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.Action_TileVertical_16x; + this.commandTileVertical.Text = "Tile vertical"; + this.commandTileVertical.TextLine1 = "Tile"; + this.commandTileVertical.TextLine2 = "Vertical"; + this.commandTileVertical.Execute += new System.EventHandler(this.commandTileVertical_Execute); + // + // statusStrip + // + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.statusLabelStatus}); + this.statusStrip.Location = new System.Drawing.Point(0, 707); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(1008, 22); + this.statusStrip.TabIndex = 3; + this.statusStrip.Text = "statusStrip1"; + // + // statusLabelStatus + // + this.statusLabelStatus.Name = "statusLabelStatus"; + this.statusLabelStatus.Size = new System.Drawing.Size(993, 17); + this.statusLabelStatus.Spring = true; + this.statusLabelStatus.Text = "Ready"; + this.statusLabelStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kryptonManager1 + // + this.kryptonManager1.GlobalPaletteMode = ComponentFactory.Krypton.Toolkit.PaletteModeManager.Office2010Silver; + // + // timerClearStatus + // + this.timerClearStatus.Interval = 1250; + this.timerClearStatus.Tick += new System.EventHandler(this.timerClearStatus_Tick); + // + // kryptonRibbonGroupLines1 + // + this.kryptonRibbonGroupLines1.Items.AddRange(new ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton1, + this.kryptonRibbonGroupButton2, + this.ribbonComboWindows}); + // + // kryptonRibbonGroupButton1 + // + this.kryptonRibbonGroupButton1.Visible = false; + // + // kryptonRibbonGroupButton2 + // + this.kryptonRibbonGroupButton2.Visible = false; + // + // ribbonComboWindows + // + this.ribbonComboWindows.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories; + this.ribbonComboWindows.DisplayMember = "Text"; + this.ribbonComboWindows.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ribbonComboWindows.DropDownWidth = 400; + this.ribbonComboWindows.FormattingEnabled = false; + this.ribbonComboWindows.ItemHeight = 15; + this.ribbonComboWindows.KeyTip = "T"; + this.ribbonComboWindows.MaximumSize = new System.Drawing.Size(300, 0); + this.ribbonComboWindows.MinimumSize = new System.Drawing.Size(200, 0); + this.ribbonComboWindows.Text = ""; + this.ribbonComboWindows.SelectedIndexChanged += new System.EventHandler(this.ribbonComboWindows_SelectedIndexChanged); + // + // MdiRibbonForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1008, 729); + this.Controls.Add(this.statusStrip); + this.Controls.Add(this.ribbon); + this.IsMdiContainer = true; + this.Name = "MdiRibbonForm"; + this.Text = "MdiForm"; + ((System.ComponentModel.ISupportInitialize)(this.ribbon)).EndInit(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private ComponentFactory.Krypton.Ribbon.KryptonRibbon ribbon; + private ComponentFactory.Krypton.Toolkit.ButtonSpecAny buttonSpecHelp; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonTab tabWindows; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup ribbonGroupWindowsOperations; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple2; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton ribbonButtonNewTool; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupSeparator kryptonRibbonGroupSeparator1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple3; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton ribbonButtonCloseWindow; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton ribbonButtonCloseAllWindows; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroup ribbonGroupWindowsArrange; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple4; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton ribbonButtonCascade; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton ribbonButtonTileHorizontal; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton ribbonButtonTileVertical; + private ComponentFactory.Krypton.Toolkit.KryptonCommand commandCloseWindow; + private ComponentFactory.Krypton.Toolkit.KryptonCommand commandCloseAllWindows; + private ComponentFactory.Krypton.Toolkit.KryptonCommand commandCascade; + private ComponentFactory.Krypton.Toolkit.KryptonCommand commandTileHorizontal; + private ComponentFactory.Krypton.Toolkit.KryptonCommand commandTileVertical; + private System.Windows.Forms.StatusStrip statusStrip; + protected ComponentFactory.Krypton.Toolkit.KryptonManager kryptonManager1; + private System.Windows.Forms.ToolStripStatusLabel statusLabelStatus; + private System.Windows.Forms.Timer timerClearStatus; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupLines kryptonRibbonGroupLines1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton1; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton2; + private ComponentFactory.Krypton.Ribbon.KryptonRibbonGroupComboBox ribbonComboWindows; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonForm.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonForm.cs new file mode 100644 index 00000000..2cbb14fd --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonForm.cs @@ -0,0 +1,244 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using ComponentFactory.Krypton.Ribbon; +using ComponentFactory.Krypton.Toolkit; +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public partial class MdiRibbonForm : KryptonForm, IRibbonMdiForm + { + private int _mdiChildCount; + private readonly Dictionary _contexts; + + public MdiRibbonForm() + { + InitializeComponent(); + _contexts = new Dictionary(); + } // constructor + + protected int MdiChildCount + { + get => _mdiChildCount; + private set + { + commandCloseWindow.Enabled = (value > 0) && (ActiveMdiChild != null); + commandCloseAllWindows.Enabled = value > 1; + commandCascade.Enabled = value > 1; + commandTileHorizontal.Enabled = value > 1; + commandTileVertical.Enabled = value > 1; + _mdiChildCount = value; + } // set + } // MdiChildCount + + protected virtual Form CreateNewMdiChild() + { + return null; + } // CreateNewMdiChild + + #region Overrides of KryptonForm/Form + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + MdiChildCount = 0; + } // OnLoad + + [SuppressMessage("ReSharper", "SuspiciousTypeConversion.Global")] + protected override void OnMdiChildActivate(EventArgs e) + { + base.OnMdiChildActivate(e); + commandCloseWindow.Enabled = true; + ribbon.SelectedContext = null; + + foreach (var mdiChild in MdiChildren.OfType()) + { + mdiChild.IsActiveChild = ReferenceEquals(mdiChild.Form, ActiveMdiChild); + } // foreach + + ribbonComboWindows.SelectedItem = ActiveMdiChild; + } // OnMdiChildActivate + + #endregion + + #region Event handlers + + private void ribbonButtonNewTool_Click(object sender, EventArgs e) + { + try + { + CreateNewToolWindow(); + } + catch (Exception exception) + { + Console.WriteLine(exception); + throw; + } + } // ribbonButtonNewTool_Click + + private void commandCloseWindow_Execute(object sender, EventArgs e) + { + ActiveMdiChild?.Close(); + } // commandCloseWindow_Execute + + private void commandCloseAllWindows_Execute(object sender, EventArgs e) + { + foreach (var child in MdiChildren) + { + child.Close(); + } // foreach + } // commandCloseAllWindows_Execute + + private void commandCascade_Execute(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.Cascade); + LayoutMdi(MdiLayout.ArrangeIcons); + } // commandCascade_Execute + + private void commandTileHorizontal_Execute(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.TileHorizontal); + LayoutMdi(MdiLayout.ArrangeIcons); + } // commandTileHorizontal_Execute + + private void commandTileVertical_Execute(object sender, EventArgs e) + { + LayoutMdi(MdiLayout.TileVertical); + LayoutMdi(MdiLayout.ArrangeIcons); + } // commandTileVertical_Execute + + private void timerClearStatus_Tick(object sender, EventArgs e) + { + timerClearStatus.Stop(); + statusLabelStatus.Text = "Ready"; + } // timerClearStatus_Tick + + private void ribbonComboWindows_SelectedIndexChanged(object sender, EventArgs e) + { + if (ribbonComboWindows.SelectedItem is Form form) + { + form.Activate(); + } // if + } // ribbonComboWindows_SelectedIndexChanged + + #endregion + + protected bool CreateNewToolWindow() + { + return OnMdiChildCreated(CreateNewMdiChild()); + } // CreateNewToolWindow + + protected Image RibbonAppButtonImage + { + get => ribbon.RibbonAppButton.AppButtonImage; + set => ribbon.RibbonAppButton.AppButtonImage = value; + } // RibbonAppButtonImage + + [SuppressMessage("ReSharper", "SuspiciousTypeConversion.Global")] + private bool OnMdiChildCreated(Form form) + { + if (form == null) return false; + form.MdiParent = this; + + if (form is IRibbonMdiChild child) + { + child.RibbonMdiForm = this; + CreateRibbonContexts(child.TypeGuid, child.GetChildContexts()); + } // if + + form.FormClosed += MdiChildOnFormClosed; + form.Show(); + ribbonComboWindows.Items.Add(form); + ribbonComboWindows.SelectedIndex = ribbonComboWindows.Items.Count - 1; + MdiChildCount++; + + return true; + } // OnMdiChildCreated + + private void CreateRibbonContexts(Guid guid, IEnumerable contexts) + { + if (contexts == null) return; + + foreach (var context in contexts) + { + if ((context.Tabs == null) || (context.Tabs.Length == 0)) return; + + var fullName = $"{guid:N}-{context.Name}"; + if (_contexts.ContainsKey(fullName)) continue; + + KryptonRibbonTab first = null; + foreach (var tab in context.Tabs) + { + if (tab == null) continue; + if (first == null) first = tab; + tab.ContextName = fullName; + ribbon.RibbonTabs.Add(tab); + } // foreach + + ribbon.RibbonContexts.Add(new KryptonRibbonContext + { + ContextColor = context.Color, + ContextName = fullName, + ContextTitle = context.Title, + }); + + _contexts.Add(fullName, first); + } // foreach + } // CreateRibbonContexts + + private void MdiChildOnFormClosed(object sender, FormClosedEventArgs e) + { + if (!(sender is Form form)) return; + + form.FormClosed -= MdiChildOnFormClosed; + form.Dispose(); + + MdiChildCount--; + + ribbonComboWindows.Items.Remove(form); + } // MdiChildOnFormClosed + + #region IRibbonMdiForm implementation + + void IRibbonMdiForm.SetActiveContexts(IRibbonMdiChild child, params string[] contexts) + { + if ((contexts == null) || (contexts.Length == 0)) return; + var guid = child.TypeGuid; + + var selected = from context in contexts + select $"{guid:N}-{context}"; + ribbon.SelectedContext = string.Join(",", selected); + + if ((!_contexts.TryGetValue($"{guid:N}-{contexts[0]}", out var tab) || (tab == null))) return; + + ribbon.Refresh(); // needed to avoid a bug that crashes the app + ribbon.SelectedTab = tab; + } // IRibbonMdiForm.SetActiveContexts + + void IRibbonMdiForm.SetStatusText(string status) + { + timerClearStatus.Start(); + statusLabelStatus.Text = status; + statusStrip.Refresh(); + } // IRibbonMdiForm.SetStatusText + + #endregion + + } // class MdiRibbonForm +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonForm.resx b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonForm.resx new file mode 100644 index 00000000..39840ee1 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/MdiRibbonForm.resx @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsQAAALEAGtI711AAADT0lE + QVQ4T2WTaU9TQRiF7y/gL5iYuIAWRBFKizWuEaOiiFvcRdQIEVSwKLRIN5bSHWq5BbG0QgtoW2wQBakg + myDYagSJgYghVRaNcY2i9zi38MHoSU7yZuY87yyZof7VuTypIF1aZFNWWiaMN2sZo62WKSF1hrzYmlmg + 5M/H/leyUBhySaVzWG67GJlSjYxsEY6fvYjDZy4gNSsHcqUG7JxQrbez2XlsTuxArq60v8bpxGmhFKqa + +7juHYKtYwTmliHIGvqQWebE4Qwx7C43cjWl/cnZfzVhV65tbMQZuQnFbh8BnqDAOQjF7QGIHQSu7sLp + ci9SK9qxV6iD3eMBu5MgnCZSrK1yNTLnVRakVXYi09qD/IYB9I1O4cOXH0H3kzq7tg8H9K3YUXQXp+QV + YJks9k7SpYU2us6Jg2oPkss7kHqjF+3Db/Hp+yz0nqcQ1XTh47ef8I+/x37DQ2xT3sNGcR3oehcyZEVW + SmKumsinHUjSenGE7kZK1WMEPn7HDFk5PMcDzpU7mPr8A9PEAnkL4lVt2KhoxhVjDaR01QSlsdcx6UYX + dmi82GvswSrJAyzOciFM6EZ0QSecvncE/glr5yiW5jRj8eVmrCtoRYq2AVp7PUPJTDRzrrwJm0s6wMn3 + IlzWiUhFD1YW9+OWfxrTX2bR6AsgKr8VHEk7wq62IVragmNaN+SEpdLEeQGJ9R44eW1YLnmEyKIBrNa9 + ANfwEpOfZzHz9RfWKMnOlAOILOxDnLIXkTIvsiubkCbKC1C7jx4vqb7ThAWX7iJcToIlfnDLRrDGNAa+ + xodY1SD4pBnXMAy+zo/40kEsJMewuJsC+5JTCqmdhw5xs8QiJsXUilDFY0SpnyG27BUE5jd4/40h/k3q + cWygR7G9Yhgxqic4abqPTMIknTixOvgW4hOTHKYKM7aqHmKl+jnijKRB+WuYuidh7p1EgnUcu6pfI87w + AltIJphN2jP3kFjxebwQrkDg05fqcd7SjWjtc2wyjyGeHsEW4vX0GFaQo6VbuqA36MFmWWYen9MiPj8k + mstzJO5OYIzmShTXd0F0yx80W18jY4mJCUxMLM/OZuex/8XhcAShy8JsEcvDJngxUQxrtg5dssQaERHx + z3emqD/LPEEB055VrQAAAABJRU5ErkJggg== + + + + + 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 + + + + 17, 17 + + + 198, 17 + + + 398, 17 + + + 549, 17 + + + 731, 17 + + + 897, 17 + + + 1006, 17 + + + 1155, 17 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/OutputWriter/BaseOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/OutputWriter/BaseOutputWriter.cs new file mode 100644 index 00000000..b3adac84 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/OutputWriter/BaseOutputWriter.cs @@ -0,0 +1,168 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Diagnostics; +using System.Text; + +namespace IpTviewr.Internal.Tools.UiFramework.OutputWriter +{ + public abstract class BaseOutputWriter + { + private readonly string[] _indents; + private bool _started; + + protected BaseOutputWriter(int indentSize) + { + if (indentSize < 1) throw new ArgumentOutOfRangeException(nameof(indentSize)); + + _indents = new string[9]; + IndentSize = indentSize; + + for (var indent = 0; indent < _indents.Length; indent++) + { + _indents[indent] = new string(' ', indent * indentSize); + } // for indent + } // constructor + + public TimeSpan ElapsedTime => (DateTime.UtcNow - UtcStartTime); + + public DateTime UtcStartTime { get; private set; } + + public int IndentLevel { get; private set; } + + public int IndentSize { get; } + + public bool Started + { + get => _started; + protected set + { + _started = value; + if (_started) UtcStartTime = DateTime.UtcNow; + } + } // Started + + public abstract void WriteLine(string text, TraceLevel level = TraceLevel.Info); + + public void WriteException(Exception ex, string message = null) + { + StringBuilder buffer = null; + var level = IndentLevel; + + while (ex != null) + { + if (buffer == null) buffer = new StringBuilder(); + if (ex is AggregateException aggregateException) + { + ex = aggregateException.Flatten(); + } // if + + buffer.Append(GetIndent()); + buffer.AppendFormat(">>>>> {0} <<<<<", ex.GetType().Name); + buffer.AppendLine(); + if (message != null) + { + buffer.Append(GetIndent()); + buffer.AppendLine(message); + message = null; + } // if + + IncreaseIndent(); + + buffer.Append(GetIndent()); + buffer.AppendLine(ex.Message); + + var trace = ex.StackTrace.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); + foreach (var traceLine in trace) + { + buffer.Append(GetIndent()); + buffer.AppendLine(traceLine); + } // foreach + ex = ex.InnerException; + } // while + + if (buffer != null) + { + IndentLevel = 0; + WriteLine(buffer.ToString()); + } // if + + IndentLevel = level; + } // WriteException + + public bool WriteTimestamps { get; set; } + public bool AbsoluteTimestamps { get; set; } + + public int IncreaseIndent() + { + if (!Started) return 0; + + return (++IndentLevel); + } // IncreaseIndent + + public int DecreaseIndent() + { + if (!Started) return 0; + + IndentLevel--; + if (IndentLevel < 0) IndentLevel = 0; + + return IndentLevel; + } // DecreaseIndent + + protected void Reset() + { + IndentLevel = 0; + } // Reset + + protected abstract void WriteLine(string text); + + protected string GetTimestamp() + { + if (!WriteTimestamps) return string.Empty; + + if (!AbsoluteTimestamps) return $"[{ElapsedTime:g}]{(IndentLevel != 0 ? "" : " ")}"; + + var now = DateTime.Now; + return $"[{now.ToShortDateString()} {now:HH:mm:ss.ff zz}]{(IndentLevel != 0 ? "" : " ")}"; + } // GetTimestamp + + protected string GetIndent() + { + return (IndentLevel < _indents.Length) ? _indents[IndentLevel] : new string(' ', IndentLevel * IndentSize); + } // GetIndent + + protected void AppendText(StringBuilder buffer, string text) + { + if (!WriteTimestamps) + { + buffer.Append(GetIndent()); + if (text != null) buffer.AppendLine(text); + return; + } // if + + if (AbsoluteTimestamps) + { + var now = DateTime.Now; + buffer.AppendFormat("[{0} {1:HH:mm:ss.ff zz}]{2}{3}", now.ToShortDateString(), now, (IndentLevel != 0) ? "" : " ", GetIndent()); + } + else + { + buffer.AppendFormat("[{0:g}]{1}{2}", ElapsedTime, (IndentLevel != 0) ? "" : " ", GetIndent()); + } // if + + if (text != null) buffer.AppendLine(text); + } // AppendText + } // class BaseOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/OutputWriter/ToolOutputWriter.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/OutputWriter/ToolOutputWriter.cs new file mode 100644 index 00000000..29293142 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/OutputWriter/ToolOutputWriter.cs @@ -0,0 +1,99 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Diagnostics; + +namespace IpTviewr.Internal.Tools.UiFramework.OutputWriter +{ + public abstract class ToolOutputWriter : IToolOutputWriter + { + private bool _started; + + public TraceLevel Level { get; set; } + + public bool Started + { + get => _started; + protected set + { + _started = value; + if (_started) UtcStartTime = DateTime.UtcNow; + } // set + } // Started + + #region IToolOuputWriter implementation + + public virtual bool WriteTimestamps { get; set; } + + public virtual bool AbsoluteTimestamps { get; set; } + + public TimeSpan ElapsedTime => (DateTime.UtcNow - UtcStartTime); + + public DateTime UtcStartTime { get; private set; } + + public int IndentLevel { get; private set; } + + public virtual int IncreaseIndent() + { + if (!Started) return 0; + + return (++IndentLevel); + } // IncreaseIndent + + public virtual int DecreaseIndent() + { + if (!Started) return 0; + + IndentLevel--; + if (IndentLevel < 0) IndentLevel = 0; + + return IndentLevel; + } // DecreaseIndent + + public virtual void WriteException(Exception ex, string message = null) + { + throw new NotImplementedException(); + } // WriteException + + public void WriteLine(TraceLevel level = TraceLevel.Info) + { + if (level > Level) return; + throw new NotImplementedException(); + } // WriteLine + + public void WriteLine(string text, TraceLevel level = TraceLevel.Info) + { + if (level > Level) return; + + throw new NotImplementedException(); + } // WriteLine + + public void WriteLine(string format, params object[] objects) => WriteLine(TraceLevel.Info, format, objects); + + public void WriteLine(TraceLevel level, string format, params object[] objects) + { + if (level > Level) return; + + throw new NotImplementedException(); + } // WriteLine + + #endregion + + #region Protected implementation + + + + #endregion + } // class ToolOutputWriter +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..43a42ab6 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Properties/AssemblyInfo.cs @@ -0,0 +1,46 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// associated with an assembly. +[assembly: AssemblyTitle("IpTviewr internal tools UI framework")] +[assembly: AssemblyDescription("IpTviewr.Internal.Tools.UiFramework")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("63482f69-c5de-430d-86e7-e2a4eac59a51")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Properties/Resources.Designer.cs new file mode 100644 index 00000000..0dac9358 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Properties/Resources.Designer.cs @@ -0,0 +1,256 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IpTviewr.Internal.Tools.UiFramework.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Internal.Tools.UiFramework.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_ArrangeCascade_16x { + get { + object obj = ResourceManager.GetObject("Action_ArrangeCascade_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_ArrangeCascade_32x { + get { + object obj = ResourceManager.GetObject("Action_ArrangeCascade_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_CloseAllWindows_16x { + get { + object obj = ResourceManager.GetObject("Action_CloseAllWindows_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_CloseAllWindows_32x { + get { + object obj = ResourceManager.GetObject("Action_CloseAllWindows_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_CloseWindow_16x { + get { + object obj = ResourceManager.GetObject("Action_CloseWindow_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_CloseWindow_32x { + get { + object obj = ResourceManager.GetObject("Action_CloseWindow_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_NewWindow_16x { + get { + object obj = ResourceManager.GetObject("Action_NewWindow_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_NewWindow_32x { + get { + object obj = ResourceManager.GetObject("Action_NewWindow_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_TileHorizontal_16x { + get { + object obj = ResourceManager.GetObject("Action_TileHorizontal_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_TileHorizontal_32x { + get { + object obj = ResourceManager.GetObject("Action_TileHorizontal_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_TileVertical_16x { + get { + object obj = ResourceManager.GetObject("Action_TileVertical_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Action_TileVertical_32x { + get { + object obj = ResourceManager.GetObject("Action_TileVertical_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CliTool_16x { + get { + object obj = ResourceManager.GetObject("CliTool_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CliTool_24x { + get { + object obj = ResourceManager.GetObject("CliTool_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap CliTool_32x { + get { + object obj = ResourceManager.GetObject("CliTool_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GuiTool_16x { + get { + object obj = ResourceManager.GetObject("GuiTool_16x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GuiTool_24x { + get { + object obj = ResourceManager.GetObject("GuiTool_24x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GuiTool_32x { + get { + object obj = ResourceManager.GetObject("GuiTool_32x", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Properties/Resources.resx b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Properties/Resources.resx new file mode 100644 index 00000000..2ce8a94b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Properties/Resources.resx @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Action_ArrangeCascade_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_ArrangeCascade_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_CloseAllWindows_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_CloseAllWindows_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_CloseWindow_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_CloseWindow_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_NewWindow_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_NewWindow_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_TileHorizontal_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_TileHorizontal_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_TileVertical_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Action_TileVertical_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\clitool_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\clitool_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\clitool_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\guitool_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\guitool_24x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\guitool_32x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_ArrangeCascade_16x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_ArrangeCascade_16x.png new file mode 100644 index 00000000..bb71fca1 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_ArrangeCascade_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_ArrangeCascade_32x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_ArrangeCascade_32x.png new file mode 100644 index 00000000..c70c53a8 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_ArrangeCascade_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseAllWindows_16x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseAllWindows_16x.png new file mode 100644 index 00000000..f0aba3a1 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseAllWindows_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseAllWindows_32x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseAllWindows_32x.png new file mode 100644 index 00000000..823f7a4a Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseAllWindows_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseWindow_16x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseWindow_16x.png new file mode 100644 index 00000000..9fa270b8 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseWindow_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseWindow_32x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseWindow_32x.png new file mode 100644 index 00000000..1b760f31 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_CloseWindow_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_NewWindow_16x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_NewWindow_16x.png new file mode 100644 index 00000000..77ce005b Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_NewWindow_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_NewWindow_32x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_NewWindow_32x.png new file mode 100644 index 00000000..c5f8a08c Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_NewWindow_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileHorizontal_16x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileHorizontal_16x.png new file mode 100644 index 00000000..cfdada78 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileHorizontal_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileHorizontal_32x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileHorizontal_32x.png new file mode 100644 index 00000000..0dddb5ce Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileHorizontal_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileVertical_16x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileVertical_16x.png new file mode 100644 index 00000000..97fddffb Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileVertical_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileVertical_32x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileVertical_32x.png new file mode 100644 index 00000000..ab3e516e Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/Action_TileVertical_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool.svg b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool.svg new file mode 100644 index 00000000..6b4ef4c1 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool_16x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool_16x.png new file mode 100644 index 00000000..e51f4589 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool_24x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool_24x.png new file mode 100644 index 00000000..3ccfdafd Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool_32x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool_32x.png new file mode 100644 index 00000000..19c5099f Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/CliTool_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool.svg b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool.svg new file mode 100644 index 00000000..50385b6f --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool.svg @@ -0,0 +1,81 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool_16x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool_16x.png new file mode 100644 index 00000000..c95cf82d Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool_16x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool_24x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool_24x.png new file mode 100644 index 00000000..f6630eef Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool_24x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool_32x.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool_32x.png new file mode 100644 index 00000000..85b68b35 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/GuiTool_32x.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/buttonSpecHelp.Image.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/buttonSpecHelp.Image.png new file mode 100644 index 00000000..1469e6c1 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/buttonSpecHelp.Image.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/kryptonContextMenuItem1.Image.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/kryptonContextMenuItem1.Image.png new file mode 100644 index 00000000..823f7a4a Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/kryptonContextMenuItem1.Image.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/kryptonRibbonGroup1.Image.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/kryptonRibbonGroup1.Image.png new file mode 100644 index 00000000..bb71fca1 Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/kryptonRibbonGroup1.Image.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/kryptonRibbonGroup2.Image.png b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/kryptonRibbonGroup2.Image.png new file mode 100644 index 00000000..77ce005b Binary files /dev/null and b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/Resources/kryptonRibbonGroup2.Image.png differ diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/SelectToolDialog.Designer.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/SelectToolDialog.Designer.cs new file mode 100644 index 00000000..c6718687 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/SelectToolDialog.Designer.cs @@ -0,0 +1,310 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTviewr.Internal.Tools.UiFramework +{ + partial class SelectToolDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SelectToolDialog)); + this.buttonUsage = new System.Windows.Forms.Button(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.kryptonNavigator = new ComponentFactory.Krypton.Navigator.KryptonNavigator(); + this.kryptonPageGuiTools = new ComponentFactory.Krypton.Navigator.KryptonPage(); + this.listViewGuiTools = new System.Windows.Forms.ListView(); + this.columnHeaderGuiToolName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.imageListSmall = new System.Windows.Forms.ImageList(this.components); + this.kryptonPageCliTools = new ComponentFactory.Krypton.Navigator.KryptonPage(); + this.listViewCliTools = new System.Windows.Forms.ListView(); + this.columnHeaderCliToolName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.textBoxInfo = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonNavigator)).BeginInit(); + this.kryptonNavigator.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPageGuiTools)).BeginInit(); + this.kryptonPageGuiTools.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPageCliTools)).BeginInit(); + this.kryptonPageCliTools.SuspendLayout(); + this.SuspendLayout(); + // + // buttonUsage + // + this.buttonUsage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonUsage.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonUsage.Location = new System.Drawing.Point(12, 424); + this.buttonUsage.Name = "buttonUsage"; + this.buttonUsage.Size = new System.Drawing.Size(100, 25); + this.buttonUsage.TabIndex = 1; + this.buttonUsage.Text = "Usage..."; + this.buttonUsage.UseVisualStyleBackColor = true; + this.buttonUsage.Click += new System.EventHandler(this.buttonUsage_Click); + // + // buttonOk + // + this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOk.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonOk.Location = new System.Drawing.Point(191, 424); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(100, 25); + this.buttonOk.TabIndex = 2; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.buttonCancel.Location = new System.Drawing.Point(297, 424); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(100, 25); + this.buttonCancel.TabIndex = 3; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // splitContainer + // + this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer.Location = new System.Drawing.Point(12, 12); + this.splitContainer.Name = "splitContainer"; + this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.kryptonNavigator); + this.splitContainer.Panel1MinSize = 75; + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.textBoxInfo); + this.splitContainer.Panel2MinSize = 75; + this.splitContainer.Size = new System.Drawing.Size(385, 406); + this.splitContainer.SplitterDistance = 300; + this.splitContainer.SplitterIncrement = 15; + this.splitContainer.TabIndex = 0; + // + // kryptonNavigator + // + this.kryptonNavigator.AllowPageReorder = false; + this.kryptonNavigator.Button.ButtonDisplayLogic = ComponentFactory.Krypton.Navigator.ButtonDisplayLogic.None; + this.kryptonNavigator.Button.CloseButtonAction = ComponentFactory.Krypton.Navigator.CloseButtonAction.None; + this.kryptonNavigator.Button.CloseButtonDisplay = ComponentFactory.Krypton.Navigator.ButtonDisplay.Hide; + this.kryptonNavigator.Button.ContextButtonAction = ComponentFactory.Krypton.Navigator.ContextButtonAction.SelectPage; + this.kryptonNavigator.Button.ContextButtonDisplay = ComponentFactory.Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonNavigator.Button.ContextMenuMapImage = ComponentFactory.Krypton.Navigator.MapKryptonPageImage.Small; + this.kryptonNavigator.Button.ContextMenuMapText = ComponentFactory.Krypton.Navigator.MapKryptonPageText.TextTitle; + this.kryptonNavigator.Button.NextButtonAction = ComponentFactory.Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonNavigator.Button.NextButtonDisplay = ComponentFactory.Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonNavigator.Button.PreviousButtonAction = ComponentFactory.Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonNavigator.Button.PreviousButtonDisplay = ComponentFactory.Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonNavigator.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonNavigator.Location = new System.Drawing.Point(0, 0); + this.kryptonNavigator.Name = "kryptonNavigator"; + this.kryptonNavigator.NavigatorMode = ComponentFactory.Krypton.Navigator.NavigatorMode.BarTabGroup; + this.kryptonNavigator.Pages.AddRange(new ComponentFactory.Krypton.Navigator.KryptonPage[] { + this.kryptonPageGuiTools, + this.kryptonPageCliTools}); + this.kryptonNavigator.SelectedIndex = 0; + this.kryptonNavigator.Size = new System.Drawing.Size(385, 300); + this.kryptonNavigator.TabIndex = 0; + this.kryptonNavigator.Text = "kryptonNavigator"; + this.kryptonNavigator.SelectedPageChanged += new System.EventHandler(this.kryptonNavigator_SelectedPageChanged); + // + // kryptonPageGuiTools + // + this.kryptonPageGuiTools.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPageGuiTools.Controls.Add(this.listViewGuiTools); + this.kryptonPageGuiTools.Flags = 65534; + this.kryptonPageGuiTools.ImageLarge = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.GuiTool_32x; + this.kryptonPageGuiTools.ImageMedium = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.GuiTool_24x; + this.kryptonPageGuiTools.ImageSmall = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.GuiTool_24x; + this.kryptonPageGuiTools.LastVisibleSet = true; + this.kryptonPageGuiTools.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPageGuiTools.Name = "kryptonPageGuiTools"; + this.kryptonPageGuiTools.Size = new System.Drawing.Size(383, 267); + this.kryptonPageGuiTools.Text = " GUI tools "; + this.kryptonPageGuiTools.ToolTipTitle = "Page ToolTip"; + this.kryptonPageGuiTools.UniqueName = "09519AC793CF498F1EBBEC65CA4DF0F1"; + // + // listViewGuiTools + // + this.listViewGuiTools.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderGuiToolName}); + this.listViewGuiTools.FullRowSelect = true; + this.listViewGuiTools.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.listViewGuiTools.HideSelection = false; + this.listViewGuiTools.Location = new System.Drawing.Point(3, 3); + this.listViewGuiTools.MultiSelect = false; + this.listViewGuiTools.Name = "listViewGuiTools"; + this.listViewGuiTools.ShowItemToolTips = true; + this.listViewGuiTools.Size = new System.Drawing.Size(377, 261); + this.listViewGuiTools.SmallImageList = this.imageListSmall; + this.listViewGuiTools.TabIndex = 0; + this.listViewGuiTools.UseCompatibleStateImageBehavior = false; + this.listViewGuiTools.View = System.Windows.Forms.View.Details; + this.listViewGuiTools.SelectedIndexChanged += new System.EventHandler(this.listViewGuiTools_SelectedIndexChanged); + this.listViewGuiTools.DoubleClick += new System.EventHandler(this.listViewGuiTools_DoubleClick); + this.listViewGuiTools.Resize += new System.EventHandler(this.listViewGuiTools_Resize); + // + // columnHeaderGuiToolName + // + this.columnHeaderGuiToolName.Text = "Tool name"; + this.columnHeaderGuiToolName.Width = 300; + // + // imageListSmall + // + this.imageListSmall.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListSmall.ImageStream"))); + this.imageListSmall.TransparentColor = System.Drawing.Color.Transparent; + this.imageListSmall.Images.SetKeyName(0, "Gui"); + this.imageListSmall.Images.SetKeyName(1, "Cli"); + // + // kryptonPageCliTools + // + this.kryptonPageCliTools.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPageCliTools.Controls.Add(this.listViewCliTools); + this.kryptonPageCliTools.Flags = 65534; + this.kryptonPageCliTools.ImageLarge = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.CliTool_32x; + this.kryptonPageCliTools.ImageMedium = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.CliTool_24x; + this.kryptonPageCliTools.ImageSmall = global::IpTviewr.Internal.Tools.UiFramework.Properties.Resources.CliTool_24x; + this.kryptonPageCliTools.LastVisibleSet = true; + this.kryptonPageCliTools.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPageCliTools.Name = "kryptonPageCliTools"; + this.kryptonPageCliTools.Size = new System.Drawing.Size(383, 267); + this.kryptonPageCliTools.Text = " CLI tools "; + this.kryptonPageCliTools.ToolTipTitle = "Page ToolTip"; + this.kryptonPageCliTools.UniqueName = "F3CA96A08E764A5678B8D749509A0D98"; + // + // listViewCliTools + // + this.listViewCliTools.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeaderCliToolName}); + this.listViewCliTools.FullRowSelect = true; + this.listViewCliTools.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.listViewCliTools.HideSelection = false; + this.listViewCliTools.Location = new System.Drawing.Point(3, 3); + this.listViewCliTools.MultiSelect = false; + this.listViewCliTools.Name = "listViewCliTools"; + this.listViewCliTools.ShowItemToolTips = true; + this.listViewCliTools.Size = new System.Drawing.Size(377, 261); + this.listViewCliTools.SmallImageList = this.imageListSmall; + this.listViewCliTools.TabIndex = 1; + this.listViewCliTools.UseCompatibleStateImageBehavior = false; + this.listViewCliTools.View = System.Windows.Forms.View.Details; + this.listViewCliTools.SelectedIndexChanged += new System.EventHandler(this.listViewCliTools_SelectedIndexChanged); + this.listViewCliTools.DoubleClick += new System.EventHandler(this.listViewCliTools_DoubleClick); + this.listViewCliTools.Resize += new System.EventHandler(this.listViewCliTools_Resize); + // + // columnHeaderCliToolName + // + this.columnHeaderCliToolName.Text = "Tool name"; + this.columnHeaderCliToolName.Width = 300; + // + // textBoxInfo + // + this.textBoxInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxInfo.BackColor = System.Drawing.SystemColors.Window; + this.textBoxInfo.Location = new System.Drawing.Point(3, 3); + this.textBoxInfo.Multiline = true; + this.textBoxInfo.Name = "textBoxInfo"; + this.textBoxInfo.ReadOnly = true; + this.textBoxInfo.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBoxInfo.Size = new System.Drawing.Size(379, 96); + this.textBoxInfo.TabIndex = 0; + // + // SelectToolDialog + // + this.AcceptButton = this.buttonOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.ClientSize = new System.Drawing.Size(409, 461); + this.Controls.Add(this.splitContainer); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.buttonUsage); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(350, 300); + this.Name = "SelectToolDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Select new tool"; + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + this.splitContainer.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonNavigator)).EndInit(); + this.kryptonNavigator.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPageGuiTools)).EndInit(); + this.kryptonPageGuiTools.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPageCliTools)).EndInit(); + this.kryptonPageCliTools.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Button buttonUsage; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.TextBox textBoxInfo; + private System.Windows.Forms.ListView listViewGuiTools; + private System.Windows.Forms.ColumnHeader columnHeaderGuiToolName; + private System.Windows.Forms.ImageList imageListSmall; + private ComponentFactory.Krypton.Navigator.KryptonNavigator kryptonNavigator; + private ComponentFactory.Krypton.Navigator.KryptonPage kryptonPageGuiTools; + private ComponentFactory.Krypton.Navigator.KryptonPage kryptonPageCliTools; + private System.Windows.Forms.ListView listViewCliTools; + private System.Windows.Forms.ColumnHeader columnHeaderCliToolName; + } +} diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/SelectToolDialog.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/SelectToolDialog.cs new file mode 100644 index 00000000..66e45c63 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/SelectToolDialog.cs @@ -0,0 +1,217 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using IpTviewr.Internal.Tools.UiFramework.Properties; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public partial class SelectToolDialog : Form + { + private string _guiDescription; + private string _cliDescription; + + public SelectToolDialog() + { + InitializeComponent(); + } // constructor + + public Lazy SelectedGuiTool { get; private set; } + + public Lazy SelectedCliTool { get; private set; } + + public Image OkButtonImage + { + get => buttonOk.Image; + set => buttonOk.Image = value; + } // OkButtonImage + + public Image CancelButtonImage + { + get => buttonCancel.Image; + set => buttonCancel.Image = value; + } // CancelButtonImage + + public bool SelectCliTool { get; set; } + + protected override void OnLoad(EventArgs e) + { + buttonUsage.Enabled = false; + + imageListSmall.Images.Add("Gui", Resources.GuiTool_24x); + imageListSmall.Images.Add("Cli", Resources.GuiTool_24x); + + FillList(listViewGuiTools, + ToolsContainer.Current.GetSortedGuiTools(CultureInfo.CurrentCulture), + true); + + FillList(listViewGuiTools, + ToolsContainer.Current.GetSortedCliTools(CultureInfo.CurrentCulture), + false); + + kryptonPageGuiTools.Visible = listViewGuiTools.Items.Count > 0; + kryptonPageCliTools.Visible = listViewCliTools.Items.Count > 0; + + if (kryptonPageGuiTools.Visible || kryptonPageCliTools.Visible) + { + kryptonNavigator.SelectedPage = (SelectCliTool && kryptonPageCliTools.Visible) ? kryptonPageCliTools : kryptonPageGuiTools; + buttonOk.Enabled = true; + } + else + { + kryptonPageGuiTools.Visible = true; + listViewGuiTools.Items.Add("No tools are available", 0); + buttonOk.Enabled = false; + kryptonPageCliTools.Visible = false; + splitContainer.Panel2Collapsed = true; + } // if-else + kryptonNavigator.SelectedPage = (SelectCliTool) ? kryptonPageCliTools : kryptonPageGuiTools; + } // DialogSelectTool_Load + + private void kryptonNavigator_SelectedPageChanged(object sender, EventArgs e) + { + if (kryptonNavigator.SelectedPage == kryptonPageGuiTools) + { + textBoxInfo.Text = _guiDescription; + buttonUsage.Visible = false; + buttonOk.Enabled = listViewGuiTools.SelectedIndices.Count > 0; + SelectCliTool = false; + } + else if (kryptonNavigator.SelectedPage == kryptonPageCliTools) + { + textBoxInfo.Text = _cliDescription; + buttonUsage.Visible = true; + buttonOk.Enabled = listViewCliTools.SelectedIndices.Count > 0; + SelectCliTool = true; + } // if-else if + } // kryptonNavigator_SelectedPageChanged + + private void listViewGuiTools_SelectedIndexChanged(object sender, EventArgs e) + { + SelectedGuiTool = (Lazy)((listViewGuiTools.SelectedIndices.Count > 0) ? listViewGuiTools.SelectedItems[0].Tag : null); + _guiDescription = GetToolDescription(SelectedGuiTool); + textBoxInfo.Text = _guiDescription; + } // listViewGuiTools_SelectedIndexChanged + + private void listViewCliTools_SelectedIndexChanged(object sender, EventArgs e) + { + SelectedCliTool = (Lazy)((listViewCliTools.SelectedIndices.Count > 0) ? listViewCliTools.SelectedItems[0].Tag : null); + _cliDescription = GetToolDescription(SelectedCliTool); + textBoxInfo.Text = _cliDescription; + } // listViewGuiTools_SelectedIndexChanged + + private void listViewGuiTools_DoubleClick(object sender, EventArgs e) + { + buttonOk.PerformClick(); + } // listViewGuiTools_DoubleClick + + private void listViewCliTools_DoubleClick(object sender, EventArgs e) + { + buttonOk.PerformClick(); + } // listViewCliTools_DoubleClick + + private void buttonUsage_Click(object sender, EventArgs e) + { + /* + var writer = new Helpers.TextBoxOutputWriter(textBoxInfo); + writer.Start(); + SelectedTool.Value.ShowUsage(writer); + writer.Stop(); + */ + } // buttonUsage_Click + + private void buttonOk_Click(object sender, EventArgs e) + { + if (kryptonNavigator.SelectedPage == kryptonPageGuiTools) + { + SelectedCliTool = null; + } + else if (kryptonNavigator.SelectedPage == kryptonPageCliTools) + { + SelectedGuiTool = null; + } // if-else if + } // buttonOk_Click + + private void listViewGuiTools_Resize(object sender, EventArgs e) + { + columnHeaderGuiToolName.Width = listViewGuiTools.ClientSize.Width; + } // listViewGuiTools_Resize + + private void listViewCliTools_Resize(object sender, EventArgs e) + { + columnHeaderCliToolName.Width = listViewCliTools.ClientSize.Width; + } // listViewCliTools_Resize + + private void FillList(ListView listView, + IEnumerable<(string Category, TToolData[] Data)> tools, + bool isGui) + where TTool : ITool + where TMetadata : IToolMetadata + where TProvider : IToolDataProvider + where TToolData : ToolData + { + listView.BeginUpdate(); + foreach (var (category, toolData) in tools) + { + var group = listView.Groups.Add(category ?? "", category); + foreach (var data in toolData) + { + var image = data.GetLogo(imageListSmall.ImageSize.Width); + var imgIndex = (image == null) ? (isGui ? 0 : 1) : imageListSmall.Images.Count; + if (image != null) imageListSmall.Images.Add(data.Guid.ToString("N") + isGui, image); + + var listItem = new ListViewItem(data.Name, group) + { + Tag = data.Tool, + ImageIndex = imgIndex, + }; + + listView.Items.Add(listItem); + } // foreach data + } // foreach item + + if (listView.Items.Count > 0) + { + listView.Items[0].Selected = true; + } + else + { + listView.Enabled = false; + buttonOk.Enabled = false; + } // if-else + + listView.EndUpdate(); + } // FillList + + private string GetToolDescription(Lazy selectedGuiTool) + { + // TODO: implement + + return ""; + } // GetToolDescription + + private string GetToolDescription(Lazy selectedCliTool) + { + // TODO: implement + + return ""; + } // GetToolDescription + } // class SelectToolDialog +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/SelectToolDialog.resx b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/SelectToolDialog.resx new file mode 100644 index 00000000..87c2f0ec --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/SelectToolDialog.resx @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAI + GAAAAk1TRnQBSQFMAgEBAgEAAWABAAFgAQABGAEAARgBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFg + AwABGAMAAQEBAAEgBgABJF4AAwcBCQNOAZQDXwHSA0cBgQMAAQFMAAMHAQkDTAGTA18B0gNHAYIDAAEB + wAADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANH + AYADRwGAA0cBgANHAYADSAGEA2cB3QHUAbkBmQH/AasBZwEfAf8B4wHUAcEB/wNUAaYDRwGAA0cBgANH + AYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANH + AYADSAGEA2cB3QHUAboBmgH/AasBZgEfAf8B4gHTAcAB/wNUAabAAAP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8B0wG4 + AZYB/wGdAU0BAAH/AZwBTAEAAf8B1QG7AZsB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/ + A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/AdMBtwGWAf8BnQFN + AQAB/wGcAUwBAAH/AdQBugGaAf8D9gH/wAAD9gH/A5wB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4 + Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wNPAf8DdAH/A2sB/wPGAf8B0wG4AZcB/wGdAU0BAAH/AZwBTAEA + Af8BwAGWAVgB/wHoAucB/wP2Af8D9gH/A5wB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/ + AzgB/wM4Af8DOAH/AzgB/wNPAf8DdAH/A2oB/wPFAf8B0wG4AZcB/wGdAU0BAAH/AZwBTAEAAf8BvwGV + AVcB/wHpAugB/wP2Af/AAAP2Af8DnAH/AzgB/wHHAsYB/wHHAsYB/wHHAsYB/wHHAsYB/wHHAsYB/wHH + AsYB/wHHAsYB/wHHAsYB/wHHAsYB/wHIAscB/wHkAuMB/wHuAegB4QH/AdkBwgGmAf8B3AHHAa4B/wHR + AbQBkQH/AZ0BTQEAAf8BnAFMAQAB/wHCAZoBXgH/AdwC2wH/A6UB/wP2Af8D9gH/A5wB/wM4Af8BoQGg + AaEB/wGhAaABoQH/AaEBoAGhAf8BoQGgAaEB/wGhAaABoQH/AaEBoAGhAf8BoQGgAaEB/wGhAaABoQH/ + AaEBoAGhAf8BowGiAaMB/wPUAf8B7gHoAeEB/wHZAcMBpwH/AdwByAGvAf8B0gG1AZIB/wGdAU0BAAH/ + AZwBTAEAAf8BwQGYAVwB/wHcAtsB/wOmAf8D9gH/wAAD9gH/A5wB/wM4Af8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B9AHz + AfQB/wHbAcUBqwH/AaEBVQEEAf8BnAFMAQAB/wGcAUwBAAH/AZwBTAEAAf8BnAFMAQAB/wHCAZoBXgH/ + AfUC9AH/A0sB/wOcAf8D9gH/A/YB/wOcAf8DOAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfQB8wH0Af8B2wHGAawB/wGh + AVUBBAH/AZwBTAEAAf8BnAFMAQAB/wGcAUwBAAH/AZwBTAEAAf8BwQGYAVwB/wH1AvQB/wNMAf8DnAH/ + A/YB/8AAA/YB/wOcAf8DOAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7QHpAf8BogFWAQYB/wGcAUwBAAH/AZwBTAEA + Af8BnAFMAQAB/wGcAUwBAAH/AawBaAEiAf8B9gL1Af8B8QHwAfEB/wM4Af8DnAH/A/YB/wP2Af8DnAH/ + AzgB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe0B6QH/AaIBVgEGAf8BnAFMAQAB/wGcAUwBAAH/AZwBTAEAAf8BnAFM + AQAB/wGrAWgBIQH/AfYC9QH/AfIB8AHxAf8DOAH/A5wB/wP2Af/AAAP2Af8DnAH/AzgB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8gHx + AfIB/wHgAc8BugH/AZwBTAEAAf8BvwGUAVYB/wG6AYwBSQH/AZwBTAEAAf8BnAFMAQAB/wGhAVQBAgH/ + A/YB/wHxAe8B8AH/AzgB/wOcAf8D9gH/A/YB/wOcAf8DOAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + A98B/wGxAbABsQH/A5sB/wGsAqsB/wHiAeAB4QH/AfIB8QHyAf8B4AHQAbsB/wGcAUwBAAH/Ab8BlQFW + Af8BugGMAUkB/wGcAUwBAAH/AZwBTAEAAf8BoAFTAQEB/wPzAf8B8QHvAfAB/wM4Af8DnAH/A/YB/8AA + A/YB/wOcAf8DOAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAfAB8QH/AecB2gHLAf8BvwGUAVYB/wL1AfQB/wH0AfMB8gH/Aa4BbAEn + Af8BnAFMAQAB/wGrAWYBHgH/A/UB/wHxAe8B8AH/AzgB/wOcAf8D9gH/A/YB/wOcAf8DOAH/AfEB7wHw + Af8B8QHvAfAB/wHHAsYB/wNAAf8DYAH/A48B/wNyAf8ByQLIAf8B8QHwAfEB/wHnAdsBzAH/Ab8BlQFW + Af8C9QH0Af8B9AHzAfIB/wGuAWwBKAH/AZwBTAEAAf8BqwFmAR0B/wPzAf8B8QHvAfAB/wM4Af8DnAH/ + A/YB/8AAA/YB/wOcAf8DOAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A/UB/wH2AvUB/wP2Af8B0AGyAY0B/wGcAU0BAAH/ + AZwBTAEAAf8B0wG3AZYB/wH0AvMB/wHxAe8B8AH/AzgB/wOcAf8D9gH/A/YB/wOcAf8DOAH/AfEB7wHw + Af8B7wHtAe4B/wNQAf8DkAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wPc + Af8B9gL1Af8D9gH/AdABswGPAf8BnAFNAQAB/wGcAUwBAAH/AdMBtwGVAf8B9ALzAf8B8QHvAfAB/wM4 + Af8DnAH/A/YB/8AAA/YB/wOcAf8DOAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfMB8gHzAf8D9gH/AecB2wHMAf8BqwFm + AR0B/wGxAXIBMAH/AdYBvQGeAf8D9QH/AfIB8AHxAf8B8QHvAfAB/wM4Af8DnAH/A/YB/wP2Af8DnAH/ + AzgB/wHxAe8B8AH/AdkB1wHYAf8DOAH/Ad4B3AHdAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/A8EB/wP2Af8B5wHbAc0B/wGrAWYBHQH/AbEBcQEvAf8B1QG7AZsB/wPtAf8B8QHv + AfAB/wHxAe8B8AH/AzgB/wOcAf8D9gH/wAAD9gH/A5wB/wM4Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHy + AfAB8QH/AfUC9AH/AfYC9QH/A/UB/wH0AvMB/wHyAfAB8QH/AfEB7wHwAf8B8QHvAfAB/wM4Af8DnAH/ + A/YB/wP2Af8DnAH/AzgB/wHxAe8B8AH/AdABzwHQAf8DOAH/AecB5QHmAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8gHwAfEB/wH0AvMB/wH2AvUB/wPjAf8DqQH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AzgB/wOcAf8D9gH/wAAD9gH/A5wB/wM4Af8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8DOAH/A5wB/wP2Af8D9gH/A5wB/wM4Af8B8QHvAfAB/wHrAekB6gH/AzwB/wG/ + Ar4B/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DOAH/AZsCmgH/AfEB7wHw + Af8B7AHqAesB/wNHAf8DpAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AzgB/wOcAf8D9gH/wAAD9gH/ + A5wB/wM4Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DOAH/A5wB/wP2Af8D9gH/A5wB/wM4Af8B8QHv + AfAB/wHxAe8B8AH/AZQCkwH/A04B/wHBAsAB/wHjAeEB4gH/AdUC1AH/AeUB4wHkAf8B8QHvAfAB/wGh + AaABoQH/AckCyAH/AfEB7wHwAf8DswH/Az8B/wHlAeMB5AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AzgB/wOcAf8D9gH/wAAD9gH/A5wB/wM4Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8DOAH/A5wB/wP2 + Af8D9gH/A5wB/wM4Af8B8QHvAfAB/wHxAe8B8AH/AfAB7gHvAf8BoQGgAaEB/wNUAf8DOwH/A0UB/wHH + AsYB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/A2AB/wOIAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wM4Af8DnAH/A/YB/8AAA/YB/wOcAf8DOAH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AzgB/wOcAf8D9gH/A/YB/wOcAf8DOAH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHw + Af8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHx + Ae8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AzgB/wOc + Af8D9gH/wAAD9gH/A5wB/wM4Af8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLG + Af8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLGAf8BxwLG + Af8BxwLGAf8DOAH/A5wB/wP2Af8D9gH/A5wB/wM4Af8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/ + A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DOAH/A5wB/wP2Af/AAAP2 + Af8DnAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4 + Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DnAH/A/YB/wP2Af8DnAH/AzgB/wM4Af8DOAH/AzgB/wM4 + Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4 + Af8DnAH/A/YB/8AAA/YB/wOcAf8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/ + AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wOcAf8D9gH/A/YB/wOcAf8DOAH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHv + AfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/ + AfEB7wHwAf8B8QHvAfAB/wHxAe8B8AH/AzgB/wOcAf8D9gH/wAAD9gH/A5wB/wM4Af8DOAH/AzgB/wM4 + Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4 + Af8DOAH/A5wB/wP2Af8D9gH/A5wB/wM4Af8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/A5QB/wOU + Af8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DlAH/A5QB/wOUAf8DOAH/A5wB/wP2Af/AAAP2Af8DnAH/ + AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/ + AzgB/wM4Af8DOAH/AzgB/wM4Af8DnAH/A/YB/wP2Af8DnAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/ + AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DOAH/AzgB/wM4Af8DnAH/ + A/YB/8AAA/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2Af8D9gH/A/YB/wP2 + Af8D9gH/A/YB/wP2Af8D9gH/wAADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGA + A0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGA + A0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYADRwGA + A0cBgANHAYADRwGAA0cBgANHAYADRwGAA0cBgANHAYD/AP8AQgABQgFNAT4HAAE+AwABKAMAAWADAAEY + AwABAQEAAQEFAAEgAQEWAAP/AQAC/wHgAv8B4P8ADwAG/wYACw== + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ToolData.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ToolData.cs new file mode 100644 index 00000000..8d1e21be --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ToolData.cs @@ -0,0 +1,59 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public abstract class ToolData where TTool : ITool where TMetadata : IToolMetadata where TProvider : IToolDataProvider + { + private readonly IList> _images; + private readonly TProvider _data; + + internal ToolData(Guid guid, TProvider data, Lazy tool, bool isGuiTool) + { + _images = new List>(); + _data = data; + Guid = guid; + Category = data.Category; + Name = data.Name; + IsGuiTool = isGuiTool; + Data = data; + Tool = tool; + } // constructor + + public Guid Guid { get; } + + public string Category { get; } + + public string Name { get; } + + public bool IsGuiTool { get; } + + public Image GetLogo(int size) + { + var img = _images.FirstOrDefault(item => item.Key == size); + if (img.Value != null) return img.Value; + + img = new KeyValuePair(size, _data.GetLogo(size)); + _images.Add(img); + return img.Value; + } // GetLogo + + public Lazy Tool { get; } + public TProvider Data { get; } + } // // class ToolData +} // namespace diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ToolsContainer.cs b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ToolsContainer.cs new file mode 100644 index 00000000..a196ca0b --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ToolsContainer.cs @@ -0,0 +1,185 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using JetBrains.Annotations; +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.ComponentModel.Composition.Hosting; +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IpTviewr.Internal.Tools.UiFramework +{ + public sealed class ToolsContainer + { + private static readonly Lazy LazyCurrent = new Lazy(); + + public ToolsContainer() + { + Compose(); + } // constructor + + public static ToolsContainer Current => LazyCurrent.Value; + +#pragma warning disable CS0649 + + [ImportMany] + [SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "")] + [CanBeNull] + private Lazy[] _guiTools; + + [ImportMany] + [SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "")] + [CanBeNull] + private Lazy[] _cliTools; + + [ImportMany] + [SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "")] + [CanBeNull] + private Lazy[] _guiData; + + [ImportMany] + [SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "")] + [CanBeNull] + private Lazy[] _cliData; + +#pragma warning restore CS0649 + + private List<(CultureInfo Culture, IReadOnlyList<(string Category, GuiToolData[] Data)> List)> _sortedGuiTools; + + private List<(CultureInfo Culture, IReadOnlyList<(string Category, CliToolData[] Data)> List)> _sortedCliTools; + + public IReadOnlyList GuiTools { get; private set; } + + public IReadOnlyList CliTools { get; private set; } + + public IReadOnlyList<(string Category, GuiToolData[] Data)> GuiToolsList { get; private set; } + + public IReadOnlyList<(string Category, CliToolData[] Data)> CliToolsList { get; private set; } + + public CompositionContainer Container { get; private set; } + + public AggregateCatalog Catalog { get; private set; } + + public IReadOnlyList<(string Category, GuiToolData[] Data)> GetSortedGuiTools([CanBeNull] CultureInfo culture) + { + return GetSortedTools(culture, GuiToolsList, _sortedGuiTools); + } // GetSortedGuiTools + + public IReadOnlyList<(string Category, CliToolData[] Data)> GetSortedCliTools([CanBeNull] CultureInfo culture) + { + return GetSortedTools(culture, CliToolsList, _sortedCliTools); + } // GetSortedCliTools + + internal void Compose() + { + var catalog = new AggregateCatalog(new ApplicationCatalog()); + Catalog = catalog; + var toolsPath = Path.Combine(Application.StartupPath, "tools"); + if (Directory.Exists(toolsPath)) + { + catalog.Catalogs.Add(new DirectoryCatalog(toolsPath)); + } // if + + var container = new CompositionContainer(catalog); + Container = container; + container.ComposeParts(this); + + GuiTools = Build(_guiTools, _guiData, true, GuiToolData.New); + CliTools = Build(_cliTools, _cliData, true, CliToolData.New); + + GuiToolsList = BuildList(GuiTools); + CliToolsList = BuildList(CliTools); + + _sortedGuiTools = new List<(CultureInfo Culture, IReadOnlyList<(string Category, GuiToolData[] Data)> List)>(); + _sortedCliTools = new List<(CultureInfo Culture, IReadOnlyList<(string Category, CliToolData[] Data)> List)>(); + + _ = GetSortedGuiTools(null); + _ = GetSortedCliTools(null); + } // Compose + + private static List Build(ICollection> tools, + IEnumerable> toolsData, + bool isGuiTool, + Func, bool, TToolData> createNew) + where TTool : ITool + where TMetadata : IToolMetadata + where TProvider : IToolDataProvider + where TToolData : ToolData + { + var toolsDictionary = new Dictionary(); + var list = new List(tools.Count); + + foreach (var data in toolsData.Select(lazy => lazy.Value)) + { + if (!Guid.TryParse(data.Guid, out var guid)) continue; + + toolsDictionary.Add(guid, data); + } // foreach data + + foreach (var tool in tools) + { + if (!Guid.TryParse(tool.Metadata.Guid, out var guid)) continue; + if (!toolsDictionary.TryGetValue(guid, out var data)) continue; + + var toolData = createNew(guid, data, tool, isGuiTool); + list.Add(toolData); + } // foreach tool + + return list; + } // namespace + + private static List<(string Category, TToolData[] Data)> BuildList(IEnumerable tools) where TTool : ITool + where TMetadata : IToolMetadata + where TProvider : IToolDataProvider + where TToolData : ToolData + { + var q = from tool in tools + group tool by tool.Category; + + var list = q.Select(z => (z.Key, z.ToArray())).ToList(); + return list; + } // BuildList + + private static IReadOnlyList<(string Category, TToolData[] Data)> GetSortedTools(CultureInfo culture, + IEnumerable<(string Category, TToolData[] Data)> toolsList, + ICollection<(CultureInfo Culture, IReadOnlyList<(string Category, TToolData[] Data)> List)> cultureList) where TTool : ITool + where TMetadata : IToolMetadata + where TProvider : IToolDataProvider + where TToolData : ToolData + { + if (culture == null) culture = CultureInfo.CurrentCulture; + var list = cultureList.FirstOrDefault(item => item.Culture.Equals(culture)); + if (list.List != null) return list.List; + + var comparer = StringComparer.Create(culture, true); + var result = toolsList.OrderBy(x => x.Category, comparer).ToList(); + for (var index = 0; index < result.Count; index++) + { + var (category, data) = result[index]; + var tools = data.OrderBy(tool => tool.Name, comparer); + result[index] = (category, tools.ToArray()); + } // for index + + cultureList.Add((culture, result)); + return result; + } // GetSortedTools + } // class ToolsContainer +} diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ToolsUiFramework.csproj b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ToolsUiFramework.csproj new file mode 100644 index 00000000..a2c358c7 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/ToolsUiFramework.csproj @@ -0,0 +1,169 @@ + + + + + Debug + AnyCPU + {63482F69-C5DE-430D-86E7-E2A4EAC59A51} + Library + Properties + IpTviewr.Internal.Tools.UiFramework + IpTviewr.ToolsUiFramework + v4.6.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\Assemblies\Third-party\ComponentFactory\Krypton\v4.6.0.0\ComponentFactory.Krypton.Navigator.dll + + + False + ..\..\Assemblies\Third-party\ComponentFactory\Krypton\v4.6.0.0\ComponentFactory.Krypton.Ribbon.dll + + + False + ..\..\Assemblies\Third-party\ComponentFactory\Krypton\v4.6.0.0\ComponentFactory.Krypton.Toolkit.dll + + + ..\..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll + + + + + + + ..\..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + + + + + + + + + Form + + + Form + + + MdiRibbonForm.cs + + + + + + + Resources.resx + True + True + + + Form + + + SelectToolDialog.cs + + + + + + + MdiRibbonForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SelectToolDialog.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/license.txt b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/license.txt new file mode 100644 index 00000000..a50a321d --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/license.txt @@ -0,0 +1,104 @@ +############################################################################## +## +## Library 'IpTviewr.ToolsUiFramework' +## +############################################################################## +## +## Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. IpTviewr.ToolsUiFramework +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/licensing.xml b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/licensing.xml new file mode 100644 index 00000000..a5038dcb --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/licensing.xml @@ -0,0 +1,123 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Internal tools for IPTViewr version 1.5 “Kruger 60” Beta 1 + + + + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + + + + + + diff --git a/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/packages.config b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/packages.config new file mode 100644 index 00000000..6e864107 --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/ToolsUiFramework/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/InternalTools/licensing.data.default b/1.5 'Kruger 60'/InternalTools/licensing.data.default new file mode 100644 index 00000000..3a5678eb --- /dev/null +++ b/1.5 'Kruger 60'/InternalTools/licensing.data.default @@ -0,0 +1 @@ +InternalTools \ No newline at end of file diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj b/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj deleted file mode 100644 index 0e5740f0..00000000 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTv.MovistarPlus.csproj +++ /dev/null @@ -1,83 +0,0 @@ - - - - - Debug - AnyCPU - {E1748F45-DD50-4479-96F6-F7EBA6F3E28B} - Library - Properties - IpTviewr.MovistarPlus - IpTv.MovistarPlus - v4.5.2 - 512 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - False - ..\Third-party\Json70r1\Bin\Net35\Newtonsoft.Json.dll - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - - - - {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} - Core.IpTvProvider - - - {a722de9d-ae51-479c-825f-a19f4c69bd75} - UiServices.Config - - - {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} - UiServices.Discovery - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTvProviderMovistarPlus.cs b/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTvProviderMovistarPlus.cs deleted file mode 100644 index 8be4cc76..00000000 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/IpTvProviderMovistarPlus.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using IpTviewr.UiServices.Configuration; - -namespace IpTviewr.MovistarPlus -{ - public class IpTvProviderMovistarPlus : Core.IpTvProvider.IpTvProvider - { - public override InitializationResult Initialize() - { - //EpgInfo = new EpgInfoProvider(); - - return InitializationResult.Ok; - } // Initialize - } // class IpTvProviderMovistarPlus -} // namespace diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/License.txt b/1.5 'Kruger 60'/IpTv.MovistarPlus/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarCrId.cs b/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarCrId.cs deleted file mode 100644 index a9d0e443..00000000 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarCrId.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.MovistarPlus -{ - public class MovistarCrId - { - public static MovistarCrId Get(string CRID) - { - var crid = new Uri(CRID); - var components = crid.AbsolutePath.Split('/'); - if (components.Length != 4) return null; - if (components[2] != components[3]) return null; - if (components[3].Length < 5) return null; - - var result = new MovistarCrId() - { - SeriesId = components[1], - ContentIdRoot = components[3].Substring(0, 4), - ContentId = components[3] - }; - - return result; - } // Get - - public string SeriesId - { - get; - private set; - } // SeriedId - - public string ContentIdRoot - { - get; - private set; - } // ContentIdRoot - - public string ContentId - { - get; - private set; - } // ContentId - } // class MovistarCrId -} // namespace diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonEpgInfoResponse.cs b/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonEpgInfoResponse.cs deleted file mode 100644 index 6c4147f8..00000000 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonEpgInfoResponse.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Project.IpTv.MovistarPlus -{ - public class MovistarJsonEpgInfoResponse: MovistarJsonResponse - { - [JsonProperty("resultData")] - public MovistarEpgInfo Data; - } // class MovistarJsonEpgInfoResponse -} // namespace diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonResponse.cs b/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonResponse.cs deleted file mode 100644 index 3231a8ca..00000000 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/MovistarJsonResponse.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.MovistarPlus -{ - public abstract class MovistarJsonResponse - { - [JsonProperty("resultCode")] - public int Code; - - [JsonProperty("resultText")] - public string Text; - - [JsonProperty("hashCode")] - public string HashCode; - } // abstract class MovistarJsonResponse -} // namespace diff --git a/1.5 'Kruger 60'/IpTv.MovistarPlus/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/IpTv.MovistarPlus/Properties/AssemblyInfo.cs deleted file mode 100644 index d7ac313d..00000000 --- a/1.5 'Kruger 60'/IpTv.MovistarPlus/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IpTv.MovistarPlus")] -[assembly: AssemblyDescription("IpTviewr.IpTvProvider.MovistarPlus")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d01ab43e-4873-413f-9fb2-9bde7c593b00")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/InternalExtensions.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/InternalExtensions.cs index 46dc1643..a0f83772 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/InternalExtensions.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/InternalExtensions.cs @@ -1,9 +1,17 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.Linq; using System.Text; namespace IpTviewr.RecorderLauncher @@ -22,7 +30,7 @@ public static string ToString(this Exception ex, bool withMessage, bool withStac public static void ToString(this Exception ex, StringBuilder buffer, bool withMessage, bool withStackTrace) { - string message = withMessage ? ex.Message : null; + var message = withMessage ? ex.Message : null; buffer.Append(ex.GetType().FullName); if (message != null && message.Length > 0) @@ -43,7 +51,7 @@ public static void ToString(this Exception ex, StringBuilder buffer, bool withMe if (withStackTrace) { - string stackTrace = ex.StackTrace; + var stackTrace = ex.StackTrace; if (stackTrace != null) { buffer.Append(Environment.NewLine); diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj b/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj index b5099d7f..4768524b 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/IpTvRecorderLauncher.csproj @@ -9,7 +9,7 @@ Properties IpTviewr.RecorderLauncher IpTvRecorderLauncher - v4.5.2 + v4.6.2 512 SAK SAK @@ -46,15 +46,12 @@ - False ..\..\..\..\..\..\..\..\..\..\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop\System.Data.SqlServerCe.dll - - - + @@ -101,17 +98,20 @@ + + + - + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common + IpTviewr.Common - + {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} Services.Record.Serialization diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/LICENSE.ES.MD b/1.5 'Kruger 60'/IpTvRecorderLauncher/LICENSE.ES.MD new file mode 100644 index 00000000..ac95ba4b --- /dev/null +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/LICENSE.ES.MD @@ -0,0 +1,241 @@ +# Programa 'IpTvRecorderLauncher' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este PROGRAMA (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios, incluyendo, en su caso, al Grupo Teléfonica. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. IpTvRecorderLauncher +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Services.Record.Serialization +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. Services.SqlServerCE +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/LICENSE.MD b/1.5 'Kruger 60'/IpTvRecorderLauncher/LICENSE.MD new file mode 100644 index 00000000..50b7bf03 --- /dev/null +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/LICENSE.MD @@ -0,0 +1,213 @@ +# Program 'IpTvRecorderLauncher' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. IpTvRecorderLauncher +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. Services.Record.Serialization +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. Services.SqlServerCE +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs index 10574032..bb809234 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Launcher.cs @@ -1,5 +1,15 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using Microsoft.Win32.SafeHandles; using IpTviewr.Common; @@ -10,26 +20,24 @@ using System.Diagnostics; using System.Globalization; using System.IO; -using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Text; -using System.Xml.Serialization; namespace IpTviewr.RecorderLauncher { internal class Launcher { - private DateTime StartTime; - private TimeSpan TotalTime; - private bool RecordingLate; - private bool RecordingTimeExceeded; - private bool RecordingTimeExceededDisplayed; - private int TimerTickCount; + private DateTime _startTime; + private TimeSpan _totalTime; + private bool _recordingLate; + private bool _recordingTimeExceeded; + private bool _recordingTimeExceededDisplayed; + private int _timerTickCount; public Program.Result Run(Guid taskId, string dbFile, string logFolder) { - var logFilename = Path.Combine(logFolder, string.Format("{0}{1}", taskId, Properties.Resources.ExtensionLogFile)); + var logFilename = Path.Combine(logFolder, $"{taskId}{Properties.Resources.ExtensionLogFile}"); if (logFolder != null) { Logger.Start(logFilename, Logger.Level.Verbose); @@ -96,7 +104,7 @@ private static void CreateWindowsJob() { using (var process = Process.GetCurrentProcess()) { - string jobName = string.Format(Properties.Resources.FormatJobName, Assembly.GetEntryAssembly().GetName().Name, process.Id); + var jobName = string.Format(Properties.Resources.FormatJobName, Assembly.GetEntryAssembly().GetName().Name, process.Id); Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseJobName, jobName); var jobHandleNative = UnsafeNativeMethods.CreateJobObject(IntPtr.Zero, jobName); @@ -179,13 +187,13 @@ private Program.Result LaunchRecorderProgram(RecordTask task) var gap = now - scheduledDateTime; if (gap.TotalSeconds < 1) gap = TimeSpan.Zero; - TotalTime = scheduledTotalTime - gap; + _totalTime = scheduledTotalTime - gap; Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseScheduledStartTimeGap, - scheduledStartTime, scheduledTotalTime, gap, TotalTime); - DisplayTaskData(task, TotalTime); + scheduledStartTime, scheduledTotalTime, gap, _totalTime); + DisplayTaskData(task, _totalTime); - if (TotalTime.TotalSeconds < 1) + if (_totalTime.TotalSeconds < 1) { Logger.Log(Logger.Level.Error, Properties.Texts.LogErrorTooLate); return Program.Result.TooLate; @@ -197,7 +205,7 @@ private Program.Result LaunchRecorderProgram(RecordTask task) { if (gap.TotalSeconds > task.Schedule.SafetyMarginTimeSpan.TotalSeconds) { - RecordingLate = true; + _recordingLate = true; Logger.Log(Logger.Level.Warning, Properties.Texts.LogWarningRecordingLate, (int)task.Schedule.SafetyMarginTimeSpan.TotalMinutes); Console.WriteLine(Properties.Texts.DisplayWarningRecordingLate, (int)task.Schedule.SafetyMarginTimeSpan.TotalMinutes); } @@ -216,7 +224,7 @@ private Program.Result LaunchRecorderProgram(RecordTask task) task.Action.SaveLocationPath, task.Action.Filename, date, - RecordingLate ? Properties.Texts.FormatRecordFileDelayed : null, + _recordingLate ? Properties.Texts.FormatRecordFileDelayed : null, task.Action.FileExtension); var parameters = CreateParameters(filename, task); @@ -242,8 +250,8 @@ private Program.Result LaunchRecorderProgram(RecordTask task) Logger.Log(Logger.Level.Info, Properties.Texts.LogInfoLaunchingRecorderOk, process.Id); Console.WriteLine(Properties.Texts.DisplayLaunchingRecorderOk, process.Id); - TimerTickCount = 0; - StartTime = DateTime.UtcNow; + _timerTickCount = 0; + _startTime = DateTime.UtcNow; var timer = new System.Threading.Timer(OnTimerTick, null, 0, 60000); Logger.Log(Logger.Level.Verbose, Properties.Texts.LogVerboseWaitForExit); @@ -275,7 +283,7 @@ private Program.Result LaunchRecorderProgram(RecordTask task) private IDictionary CreateParameters(string filename, RecordTask task) { - var paramKeys = new string[] + var paramKeys = new[] { "OutputFile", "Channel.Url", @@ -285,7 +293,7 @@ private IDictionary CreateParameters(string filename, RecordTask "Description.Description", "Duration.TotalSeconds", }; - var paramValues = new string[] + var paramValues = new[] { filename, task.Channel.ChannelUrl, @@ -293,7 +301,7 @@ private IDictionary CreateParameters(string filename, RecordTask task.Channel.Description, task.Description.Name, task.Description.Description, - ((int)TotalTime.TotalSeconds).ToString(CultureInfo.InvariantCulture), + ((int)_totalTime.TotalSeconds).ToString(CultureInfo.InvariantCulture), }; return ArgumentsManager.CreateParameters(paramKeys, paramValues, false); @@ -303,14 +311,14 @@ private void OnTimerTick(object state) { try { - var elapsed = DateTime.UtcNow - StartTime; - var remaining = TotalTime - elapsed; + var elapsed = DateTime.UtcNow - _startTime; + var remaining = _totalTime - elapsed; - if ((TimerTickCount % 10) == 0) + if ((_timerTickCount % 10) == 0) { Logger.Log(Logger.Level.Verbose, "OnTimerTick({0}, {1})", elapsed, remaining); } // if - ++TimerTickCount; + ++_timerTickCount; if (remaining.TotalSeconds < 0) { @@ -320,10 +328,10 @@ private void OnTimerTick(object state) } else { - if (!RecordingTimeExceededDisplayed) + if (!_recordingTimeExceededDisplayed) { - RecordingTimeExceeded = true; - RecordingTimeExceededDisplayed = true; + _recordingTimeExceeded = true; + _recordingTimeExceededDisplayed = true; Logger.Log(Logger.Level.Error, Properties.Texts.LogErrorRecordingTimeExceeded); Console.Write(new string(' ', Console.WindowWidth - 2)); @@ -334,22 +342,22 @@ private void OnTimerTick(object state) } // if } // if - if (elapsed > TotalTime) elapsed = TotalTime; + if (elapsed > _totalTime) elapsed = _totalTime; var remainingFormat = (remaining.Days > 0) ? "{0,3}.{1:00}:{2:00}:{3:00}" : "{1:00}:{2:00}:{3:00}"; var remainingText = string.Format(remainingFormat, remaining.Days, remaining.Hours, remaining.Minutes, remaining.Seconds); var barLength = (Console.WindowWidth - 2) - remainingText.Length; - var secondsPerChar = TotalTime.TotalSeconds / barLength; + var secondsPerChar = _totalTime.TotalSeconds / barLength; var elapsedChars = (int)(elapsed.TotalSeconds / secondsPerChar); var progressElapsed = new string('#', elapsedChars); var progressRemaining = new string('.', barLength - elapsedChars); - var ForeColor = Console.ForegroundColor; - if (RecordingTimeExceeded) Console.ForegroundColor = ConsoleColor.Red; + var foreColor = Console.ForegroundColor; + if (_recordingTimeExceeded) Console.ForegroundColor = ConsoleColor.Red; Console.Write(progressElapsed); Console.Write(progressRemaining); - if (RecordingTimeExceeded) Console.ForegroundColor = ForeColor; + if (_recordingTimeExceeded) Console.ForegroundColor = foreColor; Console.Write(" "); Console.Write(remainingText); Console.Write("\r"); @@ -389,7 +397,7 @@ private void LogArguments(string exePath, string[] originalArguments, string arg buffer.Append("\" "); buffer.Append(arguments); - for (int index = 0; index < originalArguments.Length; index++) + for (var index = 0; index < originalArguments.Length; index++) { buffer.AppendLine(); buffer.AppendFormat("{0}", originalArguments[index]); diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/License.txt b/1.5 'Kruger 60'/IpTvRecorderLauncher/License.txt index 564d5dfc..c1bed343 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/License.txt +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/License.txt @@ -1,43 +1,232 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions +############################################################################## +## +## Program 'IpTvRecorderLauncher' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. IpTvRecorderLauncher +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. Services.Record.Serialization +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. Services.SqlServerCE +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Logger.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Logger.cs index 61404a09..8f3bb702 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Logger.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Logger.cs @@ -1,22 +1,29 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; using System.Diagnostics; using System.IO; -using System.Linq; using System.Text; namespace IpTviewr.RecorderLauncher { internal static class Logger { - private static object syncLock; - private static string logFilename; - private static DateTime startTime; - private static int processId; - private static Level minLevel; + private static object _syncLock; + private static string _logFilename; + private static DateTime _startTime; + private static int _processId; public enum Level { @@ -30,14 +37,14 @@ public enum Level /// NOT THREAD SAFE. Call from MAIN thread before being used in other threads public static void Start(string logFilename, Level minLevel) { - Logger.logFilename = logFilename; - Logger.syncLock = new object(); - Logger.minLevel = minLevel; - startTime = DateTime.Now; + _logFilename = logFilename; + _syncLock = new object(); + MinLevel = minLevel; + _startTime = DateTime.Now; using (var process = Process.GetCurrentProcess()) { - processId = process.Id; + _processId = process.Id; } // using process if (!File.Exists(logFilename)) @@ -49,60 +56,57 @@ public static void Start(string logFilename, Level minLevel) } // if } // if - WriteDate("PROGRAM-START", string.Format("ProcessId={0}", processId), false); + WriteDate("PROGRAM-START", $"ProcessId={_processId}", false); } // Start /// NOT THREAD SAFE. Call from main() just before returning the exit code public static void Stop(int exitCode) { - if (syncLock == null) return; + if (_syncLock == null) return; - WriteDate("PROGRAM-STOP ", string.Format("ProcessId={0} & ExitCode={1}", processId, exitCode), true); + WriteDate("PROGRAM-STOP ", $"ProcessId={_processId} & ExitCode={exitCode}", true); - syncLock = null; - logFilename = null; + _syncLock = null; + _logFilename = null; } // Stop #region Log methods - public static Level MinLevel - { - get { return minLevel; } - } // MinLevel + public static Level MinLevel { get; private set; } public static void Log(Level level, string text) { - if (syncLock == null) return; - if (level < minLevel) return; + if (_syncLock == null) return; + if (level < MinLevel) return; Write(level, text, null); } // Log public static void Log(Level level, string format, params object[] args) { - if (syncLock == null) return; - if (level < minLevel) return; + if (_syncLock == null) return; + if (level < MinLevel) return; Write(level, format, args); } // Log public static void Exception(Exception ex) { - if (syncLock == null) return; + if (_syncLock == null) return; Write(Level.Exception, ex.ToString(), null); } // Exception public static void Exception(Exception ex, string context) { - if (syncLock == null) return; + if (_syncLock == null) return; Write(Level.Exception, Properties.Texts.LoggerExceptionFormat, context, ex.ToString()); } // Exception public static void Exception(Exception ex, string context, params object[] args) { - if (syncLock == null) return; + if (_syncLock == null) return; Write(Level.Exception, Properties.Texts.LoggerExceptionFormat, string.Format(context, args), ex.ToString()); } // Exception @@ -118,16 +122,16 @@ private static void WriteDate(string specialOperation, string text, bool newLine var buffer = new StringBuilder(); buffer.Append(specialOperation); buffer.Append(' '); - buffer.AppendFormat("{0:X8}", processId); + buffer.AppendFormat("{0:X8}", _processId); buffer.Append(' '); buffer.AppendFormat("{0:O}", DateTime.Now); buffer.Append(' '); buffer.AppendLine(text); if (newLine) buffer.AppendLine(); - lock (syncLock) + lock (_syncLock) { - File.AppendAllText(logFilename, buffer.ToString(), Encoding.UTF8); + File.AppendAllText(_logFilename, buffer.ToString(), Encoding.UTF8); } // lock } catch @@ -140,7 +144,7 @@ private static void Write(Level level, string text, params object[] args) { try { - var ellapsed = DateTime.Now - startTime; + var ellapsed = DateTime.Now - _startTime; var buffer = new StringBuilder(); switch (level) @@ -155,7 +159,7 @@ private static void Write(Level level, string text, params object[] args) } // switch buffer.Append(' '); - buffer.AppendFormat("{0:X8}", processId); + buffer.AppendFormat("{0:X8}", _processId); buffer.Append(' '); var format = (ellapsed.Days > 0) ? "P{0:00}DT{1:00}H{2:00}M{3:00}.{4:000}S" : "PT{1:00}H{2:00}M{3:00}.{4:000}S"; @@ -174,9 +178,9 @@ private static void Write(Level level, string text, params object[] args) buffer.Replace("\r\n", "\r\n >> "); buffer.AppendLine(); - lock (syncLock) + lock (_syncLock) { - File.AppendAllText(logFilename, buffer.ToString(), Encoding.UTF8); + File.AppendAllText(_logFilename, buffer.ToString(), Encoding.UTF8); } // lock } catch diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Program.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Program.cs index f8c08c65..ae5a4536 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Program.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Program.cs @@ -1,23 +1,32 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using IpTviewr.Common; using System; using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; namespace IpTviewr.RecorderLauncher { class Program { - private static bool PressAnyKey; - private static bool NoLogo; - private static Guid TaskId; - private static string DbFile; - private static string LogFolder; - private static ProgramMode Mode; + private static AssemblyName _toolName; + private static bool _pressAnyKey; + private static bool _noLogo; + private static Guid _taskId; + private static string _dbFile; + private static string _logFolder; + private static ProgramMode _mode; enum ProgramMode { @@ -52,7 +61,7 @@ static int Main(string[] args) result = Result.Exception; } // try-catch - if (PressAnyKey) + if (_pressAnyKey) { Console.WriteLine(); Console.Write(Properties.Texts.PressAnyKeyEnd); @@ -73,29 +82,30 @@ static Result Run(string[] args) } // using icon // Initial setup + _toolName = Assembly.GetEntryAssembly().GetName(); Console.Title = Properties.Texts.ProgramCaption; - PressAnyKey = true; + _pressAnyKey = true; if (!ProcessArguments(args)) { return Result.Arguments; } // if - if (!NoLogo) + if (!_noLogo) { DisplayLogo(); } // if - switch (Mode) + switch (_mode) { case ProgramMode.Help: DisplayHelp(); return Result.Help; case ProgramMode.Record: - PressAnyKey = false; + _pressAnyKey = false; var launcher = new Launcher(); - return launcher.Run(TaskId, DbFile, LogFolder); + return launcher.Run(_taskId, _dbFile, _logFolder); default: return Result.Arguments; @@ -116,7 +126,7 @@ static bool ProcessArguments(string[] args) SpecialHelpArgument = true }; - var arguments = parser.Parse(args); + parser.Parse(args); if (!parser.IsOk) { DisplayLogo(); @@ -124,60 +134,68 @@ static bool ProcessArguments(string[] args) return false; } // if - return ProcessArguments(arguments); + if (parser.Switches.ContainsKey("nologo")) + { + _noLogo = true; + } // if + + if (parser.Switches.ContainsKey("help")) + { + _mode = ProgramMode.Help; + return true; + } + else + { + return ProcessArguments(parser.Switches); + } // if-else } // ProcessArguments static bool ProcessArguments(IDictionary arguments) { string value; - if (arguments.TryGetValue("nologo", out value)) - { - NoLogo = true; - } // if - if (arguments.TryGetValue("TaskId", out value)) { - TaskId = new Guid(value); + _taskId = new Guid(value); } // if if (arguments.TryGetValue("Database", out value)) { - DbFile = value; + _dbFile = value; } // if if (arguments.TryGetValue("LogFolder", out value)) { - LogFolder = value; + _logFolder = value; } // if if (arguments.TryGetValue("Action", out value)) { if (string.Compare(value, "Record", true) == 0) { - Mode = ProgramMode.Record; + _mode = ProgramMode.Record; } else { // Unknown action - Mode = ProgramMode.None; + _mode = ProgramMode.None; } // if-else } // if // TODO: display error message if arguments validation fails // validate general arguments - if (!string.IsNullOrEmpty(LogFolder)) + if (!string.IsNullOrEmpty(_logFolder)) { - if (!System.IO.Directory.Exists(LogFolder)) return false; + if (!System.IO.Directory.Exists(_logFolder)) return false; } // if // validate record mode arguments - if (Mode == ProgramMode.Record) + if (_mode == ProgramMode.Record) { - if (TaskId == Guid.Empty) return false; - if (string.IsNullOrEmpty(DbFile)) return false; - if (!System.IO.File.Exists(DbFile)) return false; + if (_taskId == Guid.Empty) return false; + if (string.IsNullOrEmpty(_dbFile)) return false; + if (!System.IO.File.Exists(_dbFile)) return false; } // if return true; @@ -188,26 +206,21 @@ public static void DisplayException(Exception ex) Console.WriteLine(Properties.Texts.DisplayExceptionFormat, null, ex.ToString(true, false)); } // DisplayException - static void DisplayLogo() + private static void DisplayLogo() { string copyright; // get copyright text - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); - if (attributes.Length == 0) - { - copyright = "Copyright (C) http://movistartv.codeplex.com"; - } - copyright = ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + var attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + copyright = (attributes.Length > 0) ? ((AssemblyCopyrightAttribute)attributes[0]).Copyright : "Copyright (C) http://movistartv.alphacentaury.org"; - Console.WriteLine(Properties.Texts.StartLogo, Assembly.GetEntryAssembly().GetName().Version, copyright); + Console.WriteLine(Properties.Texts.StartLogo, Properties.Texts.ProgramCaption, _toolName.Version, copyright); Console.WriteLine(); } // DisplayLogo - static void DisplayHelp() + private static void DisplayHelp() { - PressAnyKey = false; - Console.WriteLine(Properties.Texts.ProgramHelp, Assembly.GetEntryAssembly().GetName().Name); + Console.WriteLine(Properties.Texts.ProgramHelp, _toolName.Name); } // DisplayHelp } // class Program } // namespace diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/AssemblyInfo.cs index faa1b6f5..4f6d1be6 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/AssemblyInfo.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/AssemblyInfo.cs @@ -1,30 +1,39 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute parameters to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Utilidad de ejecución de grabación IPTV")] -[assembly: AssemblyDescription("IpTvRecorderLauncher app")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("dad9c234-aae8-4290-af3a-86ed659d9baf")] - -// Version information for an assembly consists of the following four parameters: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute parameters to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Utilidad de ejecución de grabación IPTV")] +[assembly: AssemblyDescription("IpTvRecorderLauncher app")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("dad9c234-aae8-4290-af3a-86ed659d9baf")] + +// Version information for an assembly consists of the following four parameters: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs index 81dc80e7b..980df77b 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Resources.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.RecorderLauncher.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.RecorderLauncher.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs index 25431038..58e02b75 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/SerializationTexts.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.RecorderLauncher.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.RecorderLauncher.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class SerializationTexts { diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs index 890fb32e..96eb8c22 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/Properties/Texts.Designer.cs @@ -1,12 +1,15 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== namespace IpTviewr.RecorderLauncher.Properties { using System; @@ -19,7 +22,7 @@ namespace IpTviewr.RecorderLauncher.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Texts { diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/UnsafeNativeMethods.cs b/1.5 'Kruger 60'/IpTvRecorderLauncher/UnsafeNativeMethods.cs index 95e3d11c..8ddb5327 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/UnsafeNativeMethods.cs +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/UnsafeNativeMethods.cs @@ -1,15 +1,22 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; -using System.Text; namespace IpTviewr.RecorderLauncher { - internal partial class UnsafeNativeMethods + internal class UnsafeNativeMethods { /// Win32: JOBOBJECTINFOCLASS public enum JobObjectInfoClass @@ -18,7 +25,7 @@ public enum JobObjectInfoClass BasicAccountingInformation = 1, BasicLimitInformation, BasicProcessIdList, - BasicUIRestrictions, + BasicUiRestrictions, SecurityLimitInformation, EndOfJobTimeInformation, AssociateCompletionPortInformation, @@ -74,7 +81,7 @@ public struct JobObjectExtendedLimitInformation // lpJobAttributes: LPSECURITY_ATTRIBUTES->_SECURITY_ATTRIBUTES* // lpName: LPCWSTR->WCHAR* [DllImport("kernel32.dll", EntryPoint = "CreateJobObjectW", SetLastError=true)] - public static extern System.IntPtr CreateJobObject([In] IntPtr lpJobAttributes, [In] [MarshalAs(UnmanagedType.LPWStr)] string lpName); + public static extern IntPtr CreateJobObject([In] IntPtr lpJobAttributes, [In] [MarshalAs(UnmanagedType.LPWStr)] string lpName); // Return Type: BOOL->int // hJob: HANDLE->void* @@ -90,7 +97,7 @@ public struct JobObjectExtendedLimitInformation // cbJobObjectInformationLength: DWORD->unsigned int [DllImport("kernel32.dll", EntryPoint = "SetInformationJobObject", SetLastError=true)] [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool SetInformationJobObject([In] IntPtr hJob, JobObjectInfoClass JobObjectInformationClass, [In] IntPtr lpJobObjectInformation, uint cbJobObjectInformationLength); + public static extern bool SetInformationJobObject([In] IntPtr hJob, JobObjectInfoClass jobObjectInformationClass, [In] IntPtr lpJobObjectInformation, uint cbJobObjectInformationLength); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool SetConsoleIcon(IntPtr hIcon); diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/app.config b/1.5 'Kruger 60'/IpTvRecorderLauncher/app.config index ff995010..2a0024f7 100644 --- a/1.5 'Kruger 60'/IpTvRecorderLauncher/app.config +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/app.config @@ -1,3 +1,3 @@ - + diff --git a/1.5 'Kruger 60'/IpTvRecorderLauncher/licensing.xml b/1.5 'Kruger 60'/IpTvRecorderLauncher/licensing.xml new file mode 100644 index 00000000..dae1ebdf --- /dev/null +++ b/1.5 'Kruger 60'/IpTvRecorderLauncher/licensing.xml @@ -0,0 +1,252 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record.Serialization + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.SqlServerCE + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + diff --git a/1.5 'Kruger 60'/LICENSE.ES.MD b/1.5 'Kruger 60'/LICENSE.ES.MD new file mode 100644 index 00000000..0dee349e --- /dev/null +++ b/1.5 'Kruger 60'/LICENSE.ES.MD @@ -0,0 +1,1021 @@ +# Solución VS '' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Los COMPONENTES y/o PROGRAMAS (el “SOFTWARE”), ya sea en forma de código binario o fuente, están **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, salvo que se indique lo contrario. \ +En particular, prevalecerán sobre estos términos de licencia, los especificados expresamente en el correspondiente archivo “LICENSE” de cada proyecto y/o carpeta. \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**El SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +**AVISO IMPORTANTE: El presente software _NO ESTÁ SOPORTADO NI RESPALDADO_ por Movistar ni por Telefónica**. \ +El software puede dejar de funcionar en cualquier momento si movistar+ realiza cambios tecnológicos en su plataforma. + +**NO DEBE LLAMARSE NUNCA al 1002 o al 1004** si desaparecen canales de la lista o no pueden verse o cualquier otra anomalía relaciona con el uso de este software. \ +movistar+ sólo proporciona ayuda y soporte técnico para su decodificador físico y únicamente para los servicios contratados. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Apache License Version 2.0, January 2004] + * [BSD 2-Clause “Simplified” License] + * [BSD 3-Clause “Revised” License] + * [The MIT License (MIT)] + * [Microsoft .NET Library License Terms] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. +_Solución VS por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. AlphaCentaury.Licensing.Data.Ui +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. ChannelLogos +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. ChannelLogosEditor +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. ConsoleExperiments +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. Etsi.Ts102034 +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. ExceptionMsgBox +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. FirstTimeConfig +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. GuiTools +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. IPTViewr +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. IpTViewr.Core +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 16. IpTViewr.MovistarPlus +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 17. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 18. IpTviewr.Telemetry +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 19. IpTviewr.ToolsUiFramework +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 20. IPTViewr_Movistar+_1-5_beta-1 +_Instalador por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 21. IpTviewrTools +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 22. IpTvRecorderLauncher +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 23. PackLogos +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 24. Services.EpgDiscovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 25. Services.Record +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 26. Services.Record.Serialization +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 27. Services.SqlServerCE +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 28. SourceCodeMaintenance +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 29. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 30. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 31. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 32. UiServices.DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 33. UiServices.EPG +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 34. UiServices.Forms +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 35. UiServices.Record +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Apache License Version 2.0, January 2004 + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + + +> **'Apache License Version 2.0, January 2004'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. SQLitePCLRaw.bundle_green +_Paquete 'nuget' por Eric Sink_ + +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + +#### 2. SQLitePCLRaw.core +_Paquete 'nuget' por Eric Sink, et al_ + +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + +#### 3. SQLitePCLRaw.lib.e_sqlite3.linux +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 4. SQLitePCLRaw.lib.e_sqlite3.osx +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 6. SQLitePCLRaw.provider.e_sqlite3.net45 +_Paquete 'nuget' por Eric Sink et al_ + +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +### BSD 2-Clause “Simplified” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 2-Clause “Simplified” License'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Markdig +_Paquete 'nuget' por Alexandre Mutel_ + +**Copyright (c) 2018-2019, Alexandre Mutel** + +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + +### BSD 3-Clause “Revised” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 3-Clause “Revised” License'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. HtmlRenderer.Core +_Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + + +#### 2. HtmlRenderer.WinForms +_Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. HtmlAgilityPack +_Paquete 'nuget' por ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell_ + +**Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved.** + +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + + +#### 2. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 3. Microsoft.AppCenter.Analytics +_Paquete 'nuget' por Microsoft_ + +This package contains functionalities to collect session, device properties, events etc… for your application. + + +#### 4. Microsoft.AppCenter.Crashes +_Paquete 'nuget' por Microsoft_ + +This package contains functionalities to collect crash reports for your application. + + +#### 5. Microsoft.AppCenter +_Paquete 'nuget' por Microsoft_ + +This package contains the basic functionalities that all App Center services use to communicate with the backend. + + +#### 6. Microsoft.NETCore.Platforms +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + +#### 7. NETStandard.Library +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +A set of standard .NET APIs that are prescribed to be used and supported together. + + +#### 8. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 9. sqlite-net-pcl +_Paquete 'nuget' por Frank A. Krueger_ + +**Copyright (c) Krueger Systems, Inc.** + +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + +#### 10. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + +#### 11. TaskScheduler +_Paquete 'nuget' por David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft .NET Library License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at [https://go.microsoft.com/fwlink/?LinkID=824704](https://go.microsoft.com/fwlink/?LinkID=824704). You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at [https://docs.microsoft.com/en-us/legal/gdpr](https://docs.microsoft.com/en-us/legal/gdpr). + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft .NET Library License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft.Win32.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for Win32-based libraries. + + +#### 2. System.AppContext +_Paquete 'nuget' por Microsoft_ + +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + +#### 3. System.Collections.Concurrent +_Paquete 'nuget' por Microsoft_ + +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + +#### 4. System.Collections +_Paquete 'nuget' por Microsoft_ + +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + +#### 5. System.Console +_Paquete 'nuget' por Microsoft_ + +Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + +#### 6. System.Diagnostics.Debug +_Paquete 'nuget' por Microsoft_ + +Provides classes and attributes that allows basic interaction with a debugger. + + +#### 7. System.Diagnostics.DiagnosticSource +_Paquete 'nuget' por Microsoft_ + +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + +#### 8. System.Diagnostics.Tools +_Paquete 'nuget' por Microsoft_ + +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + +#### 9. System.Diagnostics.Tracing +_Paquete 'nuget' por Microsoft_ + +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + +#### 10. System.Globalization.Calendars +_Paquete 'nuget' por Microsoft_ + +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + +#### 11. System.Globalization +_Paquete 'nuget' por Microsoft_ + +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + +#### 12. System.IO.Compression.ZipFile +_Paquete 'nuget' por Microsoft_ + +Provides classes that support the compression and decompression of streams using file system paths. + + +#### 13. System.IO.Compression +_Paquete 'nuget' por Microsoft_ + +Provides classes that support the compression and decompression of streams. + + +#### 14. System.IO.FileSystem.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common enumerations and exceptions for path-based I/O libraries. + + +#### 15. System.IO.FileSystem +_Paquete 'nuget' por Microsoft_ + +Provides types that allow reading and writing to files and types that provide basic file and directory support. + + +#### 16. System.IO +_Paquete 'nuget' por Microsoft_ + +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + +#### 17. System.Linq.Expressions +_Paquete 'nuget' por Microsoft_ + +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + +#### 18. System.Linq +_Paquete 'nuget' por Microsoft_ + +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + +#### 19. System.Net.Http +_Paquete 'nuget' por Microsoft_ + +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + +#### 20. System.Net.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + +#### 21. System.Net.Sockets +_Paquete 'nuget' por Microsoft_ + +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + +#### 22. System.ObjectModel +_Paquete 'nuget' por Microsoft_ + +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + +#### 23. System.Reflection.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides custom attribute extension methods for System.Reflection types. + + +#### 24. System.Reflection.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common enumerations for reflection-based libraries. + + +#### 25. System.Reflection +_Paquete 'nuget' por Microsoft_ + +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + +#### 26. System.Resources.ResourceManager +_Paquete 'nuget' por Microsoft_ + +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + +#### 27. System.Runtime.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + +#### 28. System.Runtime.Handles +_Paquete 'nuget' por Microsoft_ + +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + +#### 29. System.Runtime.InteropServices.RuntimeInformation +_Paquete 'nuget' por Microsoft_ + +Provides APIs to query about runtime and OS information. + + +#### 30. System.Runtime.InteropServices +_Paquete 'nuget' por Microsoft_ + +Provides types that support COM interop and platform invoke services. + + +#### 31. System.Runtime.Numerics +_Paquete 'nuget' por Microsoft_ + +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + +#### 32. System.Runtime +_Paquete 'nuget' por Microsoft_ + +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + +#### 33. System.Security.Cryptography.Algorithms +_Paquete 'nuget' por Microsoft_ + +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + +#### 34. System.Security.Cryptography.Encoding +_Paquete 'nuget' por Microsoft_ + +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + +#### 35. System.Security.Cryptography.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for the cryptographic libraries. + + +#### 36. System.Security.Cryptography.X509Certificates +_Paquete 'nuget' por Microsoft_ + +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + +#### 37. System.Text.Encoding.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + +#### 38. System.Text.Encoding +_Paquete 'nuget' por Microsoft_ + +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + +#### 39. System.Text.RegularExpressions +_Paquete 'nuget' por Microsoft_ + +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + +#### 40. System.Threading.Tasks +_Paquete 'nuget' por Microsoft_ + +Provides types that simplify the work of writing concurrent and asynchronous code. + + +#### 41. System.Threading.Timer +_Paquete 'nuget' por Microsoft_ + +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + +#### 42. System.Threading +_Paquete 'nuget' por Microsoft_ + +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + +#### 43. System.Xml.ReaderWriter +_Paquete 'nuget' por Microsoft_ + +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + +#### 44. System.Xml.XDocument +_Paquete 'nuget' por Microsoft_ + +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/LICENSE.MD b/1.5 'Kruger 60'/LICENSE.MD new file mode 100644 index 00000000..4bbd7aec --- /dev/null +++ b/1.5 'Kruger 60'/LICENSE.MD @@ -0,0 +1,993 @@ +# VS Solution '' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +The COMPONENTS and/or PROGRAMS (“SOFWARE”), either in binary or source code form, are **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_**, unless otherwise stated. \ +In particular, those specified in the corresponding “LICENSE” file of each project and/or folder will prevail over these license terms. \ +All other rights are reserved by the author(s) of the software. + +_**The SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. \ + +**IMPORTANT NOTICE: This software is _NOT SUPPORTED NOR ENDORSED_ by Movistar or Telefónica.** \ +This software may stop working at any time if movistar+ makes technological changes to its platform. + +**DO NOT EVER CALL 1002 nor 1004** if channels disappear from the list or cannot be seen or if you experience any other anomaly related to the use of this software. \ +movistar+ only provides help and support for their physical decoder and only for the contracted services. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Apache License Version 2.0, January 2004] + * [BSD 2-Clause “Simplified” License] + * [BSD 3-Clause “Revised” License] + * [The MIT License (MIT)] + * [Microsoft .NET Library License Terms] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. +_VS Solution by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. AlphaCentaury.Licensing.Data.Ui +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. ChannelLogos +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. ChannelLogosEditor +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. ConsoleExperiments +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. Etsi.Ts102034 +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. ExceptionMsgBox +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. FirstTimeConfig +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. GuiTools +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. IPTViewr +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. IpTViewr.Core +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 16. IpTViewr.MovistarPlus +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 17. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 18. IpTviewr.Telemetry +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 19. IpTviewr.ToolsUiFramework +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 20. IPTViewr_Movistar+_1-5_beta-1 +_Installer by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 21. IpTviewrTools +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 22. IpTvRecorderLauncher +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 23. PackLogos +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 24. Services.EpgDiscovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 25. Services.Record +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 26. Services.Record.Serialization +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 27. Services.SqlServerCE +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 28. SourceCodeMaintenance +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 29. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 30. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 31. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 32. UiServices.DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 33. UiServices.EPG +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 34. UiServices.Forms +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 35. UiServices.Record +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Apache License Version 2.0, January 2004 + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + + +> **'Apache License Version 2.0, January 2004'** applies to the following **third-party components:** + +#### 1. SQLitePCLRaw.bundle_green +_'nuget' package by Eric Sink_ + +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + +#### 2. SQLitePCLRaw.core +_'nuget' package by Eric Sink, et al_ + +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + +#### 3. SQLitePCLRaw.lib.e_sqlite3.linux +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 4. SQLitePCLRaw.lib.e_sqlite3.osx +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 6. SQLitePCLRaw.provider.e_sqlite3.net45 +_'nuget' package by Eric Sink et al_ + +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +### BSD 2-Clause “Simplified” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 2-Clause “Simplified” License'** applies to the following **third-party components:** + +#### 1. Markdig +_'nuget' package by Alexandre Mutel_ + +**Copyright (c) 2018-2019, Alexandre Mutel** + +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + +### BSD 3-Clause “Revised” License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> **'BSD 3-Clause “Revised” License'** applies to the following **third-party components:** + +#### 1. HtmlRenderer.Core +_'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + + +#### 2. HtmlRenderer.WinForms +_'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo_ + +**Copyright (c) 2009, José Manuel Menéndez Poo** + +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. HtmlAgilityPack +_'nuget' package by ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell_ + +**Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved.** + +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + + +#### 2. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 3. Microsoft.AppCenter.Analytics +_'nuget' package by Microsoft_ + +This package contains functionalities to collect session, device properties, events etc… for your application. + + +#### 4. Microsoft.AppCenter.Crashes +_'nuget' package by Microsoft_ + +This package contains functionalities to collect crash reports for your application. + + +#### 5. Microsoft.AppCenter +_'nuget' package by Microsoft_ + +This package contains the basic functionalities that all App Center services use to communicate with the backend. + + +#### 6. Microsoft.NETCore.Platforms +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + +#### 7. NETStandard.Library +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +A set of standard .NET APIs that are prescribed to be used and supported together. + + +#### 8. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 9. sqlite-net-pcl +_'nuget' package by Frank A. Krueger_ + +**Copyright (c) Krueger Systems, Inc.** + +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + +#### 10. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + +#### 11. TaskScheduler +_'nuget' package by David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft .NET Library License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at [https://go.microsoft.com/fwlink/?LinkID=824704](https://go.microsoft.com/fwlink/?LinkID=824704). You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at [https://docs.microsoft.com/en-us/legal/gdpr](https://docs.microsoft.com/en-us/legal/gdpr). + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft .NET Library License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft.Win32.Primitives +_'nuget' package by Microsoft_ + +Provides common types for Win32-based libraries. + + +#### 2. System.AppContext +_'nuget' package by Microsoft_ + +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + +#### 3. System.Collections.Concurrent +_'nuget' package by Microsoft_ + +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + +#### 4. System.Collections +_'nuget' package by Microsoft_ + +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + +#### 5. System.Console +_'nuget' package by Microsoft_ + +Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + +#### 6. System.Diagnostics.Debug +_'nuget' package by Microsoft_ + +Provides classes and attributes that allows basic interaction with a debugger. + + +#### 7. System.Diagnostics.DiagnosticSource +_'nuget' package by Microsoft_ + +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + +#### 8. System.Diagnostics.Tools +_'nuget' package by Microsoft_ + +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + +#### 9. System.Diagnostics.Tracing +_'nuget' package by Microsoft_ + +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + +#### 10. System.Globalization.Calendars +_'nuget' package by Microsoft_ + +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + +#### 11. System.Globalization +_'nuget' package by Microsoft_ + +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + +#### 12. System.IO.Compression.ZipFile +_'nuget' package by Microsoft_ + +Provides classes that support the compression and decompression of streams using file system paths. + + +#### 13. System.IO.Compression +_'nuget' package by Microsoft_ + +Provides classes that support the compression and decompression of streams. + + +#### 14. System.IO.FileSystem.Primitives +_'nuget' package by Microsoft_ + +Provides common enumerations and exceptions for path-based I/O libraries. + + +#### 15. System.IO.FileSystem +_'nuget' package by Microsoft_ + +Provides types that allow reading and writing to files and types that provide basic file and directory support. + + +#### 16. System.IO +_'nuget' package by Microsoft_ + +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + +#### 17. System.Linq.Expressions +_'nuget' package by Microsoft_ + +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + +#### 18. System.Linq +_'nuget' package by Microsoft_ + +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + +#### 19. System.Net.Http +_'nuget' package by Microsoft_ + +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + +#### 20. System.Net.Primitives +_'nuget' package by Microsoft_ + +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + +#### 21. System.Net.Sockets +_'nuget' package by Microsoft_ + +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + +#### 22. System.ObjectModel +_'nuget' package by Microsoft_ + +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + +#### 23. System.Reflection.Extensions +_'nuget' package by Microsoft_ + +Provides custom attribute extension methods for System.Reflection types. + + +#### 24. System.Reflection.Primitives +_'nuget' package by Microsoft_ + +Provides common enumerations for reflection-based libraries. + + +#### 25. System.Reflection +_'nuget' package by Microsoft_ + +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + +#### 26. System.Resources.ResourceManager +_'nuget' package by Microsoft_ + +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + +#### 27. System.Runtime.Extensions +_'nuget' package by Microsoft_ + +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + +#### 28. System.Runtime.Handles +_'nuget' package by Microsoft_ + +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + +#### 29. System.Runtime.InteropServices.RuntimeInformation +_'nuget' package by Microsoft_ + +Provides APIs to query about runtime and OS information. + + +#### 30. System.Runtime.InteropServices +_'nuget' package by Microsoft_ + +Provides types that support COM interop and platform invoke services. + + +#### 31. System.Runtime.Numerics +_'nuget' package by Microsoft_ + +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + +#### 32. System.Runtime +_'nuget' package by Microsoft_ + +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + +#### 33. System.Security.Cryptography.Algorithms +_'nuget' package by Microsoft_ + +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + +#### 34. System.Security.Cryptography.Encoding +_'nuget' package by Microsoft_ + +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + +#### 35. System.Security.Cryptography.Primitives +_'nuget' package by Microsoft_ + +Provides common types for the cryptographic libraries. + + +#### 36. System.Security.Cryptography.X509Certificates +_'nuget' package by Microsoft_ + +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + +#### 37. System.Text.Encoding.Extensions +_'nuget' package by Microsoft_ + +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + +#### 38. System.Text.Encoding +_'nuget' package by Microsoft_ + +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + +#### 39. System.Text.RegularExpressions +_'nuget' package by Microsoft_ + +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + +#### 40. System.Threading.Tasks +_'nuget' package by Microsoft_ + +Provides types that simplify the work of writing concurrent and asynchronous code. + + +#### 41. System.Threading.Timer +_'nuget' package by Microsoft_ + +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + +#### 42. System.Threading +_'nuget' package by Microsoft_ + +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + +#### 43. System.Xml.ReaderWriter +_'nuget' package by Microsoft_ + +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + +#### 44. System.Xml.XDocument +_'nuget' package by Microsoft_ + +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/Logos/LICENSE.ES.MD b/1.5 'Kruger 60'/Logos/LICENSE.ES.MD new file mode 100644 index 00000000..f732a0fe --- /dev/null +++ b/1.5 'Kruger 60'/Logos/LICENSE.ES.MD @@ -0,0 +1,210 @@ +# Programa 'PackLogos' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este PROGRAMA (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios, incluyendo, en su caso, al Grupo Teléfonica. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. PackLogos +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.EpgDiscovery +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Common +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.Configuration +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.DvbStpClient +_Componente por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Logos/LICENSE.MD b/1.5 'Kruger 60'/Logos/LICENSE.MD new file mode 100644 index 00000000..bcbcd53f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/LICENSE.MD @@ -0,0 +1,182 @@ +# Program 'PackLogos' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Microsoft® Exception Message Box License Terms] + * [The MIT License (MIT)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. Etsi.Ts102034 +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. IpTViewr.IpTvServices +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. PackLogos +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. Services.EpgDiscovery +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. UiServices.Common +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. UiServices.Configuration +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. UiServices.DvbStpClient +_Component by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 3. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + diff --git a/1.5 'Kruger 60'/Logos/License.txt b/1.5 'Kruger 60'/Logos/License.txt index b5c6b871..03a6e5a8 100644 --- a/1.5 'Kruger 60'/Logos/License.txt +++ b/1.5 'Kruger 60'/Logos/License.txt @@ -1,45 +1,190 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -The logos for most/all movistar+ channels broadcasting at the time of writing this software, are provided in this package. These logos are the property of the respective channels and businesses. -Logos are provided in "good faith", in order to identify the different channels and no copyright infringment is intended. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions. \ No newline at end of file +############################################################################## +## +## Program 'PackLogos' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This PROGRAM (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including, in some instances, Grupo Telefónica. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Microsoft® Exception Message Box License Terms + * The MIT License (MIT) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. Etsi.Ts102034 +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. IpTViewr.IpTvServices +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. PackLogos +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. Services.EpgDiscovery +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. UiServices.Common +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. UiServices.Configuration +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. UiServices.DvbStpClient +------------------------------ +Component by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +3. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + diff --git a/1.5 'Kruger 60'/Logos/Logos.csproj b/1.5 'Kruger 60'/Logos/Logos.csproj index ced610e2..c29e024a 100644 --- a/1.5 'Kruger 60'/Logos/Logos.csproj +++ b/1.5 'Kruger 60'/Logos/Logos.csproj @@ -5,11 +5,11 @@ Debug AnyCPU {65DD367D-A89D-4F89-9231-2009EF0B31AF} - Library + Exe Properties - Logos - Logos - v4.5.2 + IpTViewr.Setup.Logos + PackLogos + v4.6.2 512 SAK SAK @@ -41,1884 +41,2367 @@ + + Resources\PackLogos.ico + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + ResXFileCodeGenerator + Texts.Designer.cs + + + + + Properties\AssemblySolutionInfo.cs + + + + + + + True + True + Resources.resx + + + True + True + Texts.resx + + + + + + + + + + + {8da15060-5a78-4f89-a9f1-7aa56b0d622c} + IpTviewr.Common + + + {8986CD52-0C65-42D6-9C47-20FF47CF87BB} + IpTviewr.Native + + + {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} + UiServices.Discovery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\PackLogos.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + +
\ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Logos/Properties/Texts.Designer.cs new file mode 100644 index 00000000..5ef6b53e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Properties/Texts.Designer.cs @@ -0,0 +1,162 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +namespace IpTViewr.Setup.Logos.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Texts { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Texts() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTViewr.Setup.Logos.Properties.Texts", typeof(Texts).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to {0}: error {1}: {2}. + /// + internal static string DisplayErrorFormat { + get { + return ResourceManager.GetString("DisplayErrorFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}: {1} error: {2}. + /// + internal static string DisplayExceptionFormat { + get { + return ResourceManager.GetString("DisplayExceptionFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}: fatal error {1}: {2}. + /// + internal static string DisplayFatalErrorFormat { + get { + return ResourceManager.GetString("DisplayFatalErrorFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}: fatal {1} error: {2}. + /// + internal static string DisplayFatalExceptionFormat { + get { + return ResourceManager.GetString("DisplayFatalExceptionFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ERROR: No arguments have been specified. + ///Use /HELP for more information.. + /// + internal static string ErrorNoArguments { + get { + return ResourceManager.GetString("ErrorNoArguments", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ERROR: Invalid argument format. + ///Use /HELP for more information.. + /// + internal static string InvalidArgumentFormat { + get { + return ResourceManager.GetString("InvalidArgumentFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} /input:folder [/output:folder] + ///{0} /help | /h | /? | -help | -h | -? + /// + ////input: Specifies the folder where the logos are located + /// DEBUG builds will try to autolocate the logos folder + ////output: Specifies the output folder for the packed logos and index XML + /// If not specified, files are created in the current directory + ////help Displays this help message. + /// + ///-- General options -- + ////nologo Supresses the banner. + ///Options and switches can be specified with '/' or with '-'. + /// + internal static string ProgramHelp { + get { + return ResourceManager.GetString("ProgramHelp", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IPTViewr logos packager utility. + /// + internal static string ProgramName { + get { + return ResourceManager.GetString("ProgramName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} + ///Version {1} + ///{2}. All rights reserved.. + /// + internal static string StartLogo { + get { + return ResourceManager.GetString("StartLogo", resourceCulture); + } + } + } +} diff --git a/1.5 'Kruger 60'/Logos/Properties/Texts.resx b/1.5 'Kruger 60'/Logos/Properties/Texts.resx new file mode 100644 index 00000000..0d0c84e3 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Properties/Texts.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0}: error {1}: {2} + + + {0}: {1} error: {2} + + + {0}: fatal error {1}: {2} + + + {0}: fatal {1} error: {2} + + + ERROR: No arguments have been specified. +Use /HELP for more information. + + + ERROR: Invalid argument format. +Use /HELP for more information. + + + {0} /input:folder [/output:folder] +{0} /help | /h | /? | -help | -h | -? + +/input: Specifies the folder where the logos are located + DEBUG builds will try to autolocate the logos folder +/output: Specifies the output folder for the packed logos and index XML + If not specified, files are created in the current directory +/help Displays this help message. + +-- General options -- +/nologo Supresses the banner. +Options and switches can be specified with '/' or with '-' + + + IPTViewr logos packager utility + + + {0} +Version {1} +{2}. All rights reserved. + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@128.png b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@128.png rename to 1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/128.png diff --git a/1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@256.png b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@256.png rename to 1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/256.png diff --git a/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/32.png b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/32.png new file mode 100644 index 00000000..b95553c8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/48.png b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/48.png new file mode 100644 index 00000000..5fee81de Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/64.png b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/64.png new file mode 100644 index 00000000..83c721a9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@96.png b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Providers/DVB-IPTV@96.png rename to 1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/96.png diff --git a/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/DVB-IPTV.ico b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/DVB-IPTV.ico new file mode 100644 index 00000000..2041d9da Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/(default)/DVB-IPTV/DVB-IPTV.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/DVB-IPTV.ico b/1.5 'Kruger 60'/Logos/Providers/DVB-IPTV.ico deleted file mode 100644 index 285a0cbf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/DVB-IPTV.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/128.png new file mode 100644 index 00000000..d568d433 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/256.png new file mode 100644 index 00000000..b29c40d8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/32.png new file mode 100644 index 00000000..49b34495 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/48.png new file mode 100644 index 00000000..3a6f9712 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/64.png new file mode 100644 index 00000000..45f3f9fa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/96.png new file mode 100644 index 00000000..d88368eb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/andalucia.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/andalucia.ico new file mode 100644 index 00000000..7afa187e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/andalucia/andalucia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/128.png new file mode 100644 index 00000000..c9993c5e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/256.png new file mode 100644 index 00000000..d7b8eff2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/32.png new file mode 100644 index 00000000..dc988144 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/48.png new file mode 100644 index 00000000..a27bc267 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/64.png new file mode 100644 index 00000000..d56ebf61 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/96.png new file mode 100644 index 00000000..a61454f7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/aragon.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/aragon.ico new file mode 100644 index 00000000..a7b2caa7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/aragon/aragon.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/128.png new file mode 100644 index 00000000..9dda7033 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/256.png new file mode 100644 index 00000000..e36569a9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/32.png new file mode 100644 index 00000000..4f8501d3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/48.png new file mode 100644 index 00000000..e41c3ccc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/64.png new file mode 100644 index 00000000..49d4de84 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/96.png new file mode 100644 index 00000000..5c1bc5d0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/asturias.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/asturias.ico new file mode 100644 index 00000000..b2567a16 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/asturias/asturias.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/128.png new file mode 100644 index 00000000..95dfc488 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/256.png new file mode 100644 index 00000000..27202858 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/32.png new file mode 100644 index 00000000..6e3cf89c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/48.png new file mode 100644 index 00000000..88104796 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/64.png new file mode 100644 index 00000000..286681de Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/96.png new file mode 100644 index 00000000..3c8c45e1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/baleares.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/baleares.ico new file mode 100644 index 00000000..7b72b740 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/baleares/baleares.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/128.png new file mode 100644 index 00000000..e8daf1c9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/256.png new file mode 100644 index 00000000..fa0fab9a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/32.png new file mode 100644 index 00000000..4bcc936d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/48.png new file mode 100644 index 00000000..9de6967e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/64.png new file mode 100644 index 00000000..981ceecb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/96.png new file mode 100644 index 00000000..c20bce3e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/canarias.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/canarias.ico new file mode 100644 index 00000000..a48111cb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/canarias/canarias.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/128.png new file mode 100644 index 00000000..bd20ad02 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/256.png new file mode 100644 index 00000000..a2da7787 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/32.png new file mode 100644 index 00000000..7c931689 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/48.png new file mode 100644 index 00000000..6f478bda Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/64.png new file mode 100644 index 00000000..556d2da1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/96.png new file mode 100644 index 00000000..4b074711 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/cantabria.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/cantabria.ico new file mode 100644 index 00000000..a3a2d98f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cantabria/cantabria.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/128.png new file mode 100644 index 00000000..045246e3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/256.png new file mode 100644 index 00000000..9f5c2878 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/32.png new file mode 100644 index 00000000..43b4dbfd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/48.png new file mode 100644 index 00000000..e40396c8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/64.png new file mode 100644 index 00000000..bb51b484 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/96.png new file mode 100644 index 00000000..0df742b9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/castilla-leon.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/castilla-leon.ico new file mode 100644 index 00000000..af7e1781 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-leon/castilla-leon.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/128.png new file mode 100644 index 00000000..da3cf5a7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/256.png new file mode 100644 index 00000000..8594858b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/32.png new file mode 100644 index 00000000..7cca26ed Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/48.png new file mode 100644 index 00000000..34db9de2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/64.png new file mode 100644 index 00000000..84738406 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/96.png new file mode 100644 index 00000000..847b6cee Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/castilla-mancha.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/castilla-mancha.ico new file mode 100644 index 00000000..04c2f64b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/castilla-mancha/castilla-mancha.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/128.png new file mode 100644 index 00000000..fa3e1e21 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/256.png new file mode 100644 index 00000000..051ff0cd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/32.png new file mode 100644 index 00000000..0c1aef9e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/48.png new file mode 100644 index 00000000..d283cab5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/64.png new file mode 100644 index 00000000..add3d971 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/96.png new file mode 100644 index 00000000..3ca5bce4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/cataluna.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/cataluna.ico new file mode 100644 index 00000000..7b9e1a60 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/cataluna/cataluna.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/128.png new file mode 100644 index 00000000..338985f7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/256.png new file mode 100644 index 00000000..53138320 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/32.png new file mode 100644 index 00000000..3105d6a2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/48.png new file mode 100644 index 00000000..3f8dee43 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/64.png new file mode 100644 index 00000000..831e8c90 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/96.png new file mode 100644 index 00000000..f1795bb8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/extremadura.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/extremadura.ico new file mode 100644 index 00000000..b486fe5e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/extremadura/extremadura.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/128.png new file mode 100644 index 00000000..6090f8a0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/256.png new file mode 100644 index 00000000..3c8c1037 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/32.png new file mode 100644 index 00000000..dfd035e8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/48.png new file mode 100644 index 00000000..ed727423 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/64.png new file mode 100644 index 00000000..ab329fde Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/96.png new file mode 100644 index 00000000..e2d26d24 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/galicia.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/galicia.ico new file mode 100644 index 00000000..1a182716 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/galicia/galicia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/128.png new file mode 100644 index 00000000..2a912108 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/256.png new file mode 100644 index 00000000..b7341912 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/32.png new file mode 100644 index 00000000..70477ab1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/48.png new file mode 100644 index 00000000..cc55a325 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/64.png new file mode 100644 index 00000000..e882edce Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/96.png new file mode 100644 index 00000000..ff3f0d7a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/madrid.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/madrid.ico new file mode 100644 index 00000000..e314e86d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/madrid/madrid.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/128.png new file mode 100644 index 00000000..f43fea03 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/256.png new file mode 100644 index 00000000..9f5b485a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/32.png new file mode 100644 index 00000000..d419add9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/48.png new file mode 100644 index 00000000..5dfeb71d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/64.png new file mode 100644 index 00000000..b1c312c2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/96.png new file mode 100644 index 00000000..9badcb81 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/movistar+.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/movistar+.ico new file mode 100644 index 00000000..27861281 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/movistar+/movistar+.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/128.png new file mode 100644 index 00000000..a140c826 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/256.png new file mode 100644 index 00000000..31079361 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/32.png new file mode 100644 index 00000000..03d01131 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/48.png new file mode 100644 index 00000000..86819e03 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/64.png new file mode 100644 index 00000000..d9da1aa3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/96.png new file mode 100644 index 00000000..0ef061a4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/murcia.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/murcia.ico new file mode 100644 index 00000000..b2ab7d68 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/murcia/murcia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/128.png new file mode 100644 index 00000000..753b341c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/256.png new file mode 100644 index 00000000..5d8de167 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/32.png new file mode 100644 index 00000000..7b02012a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/48.png new file mode 100644 index 00000000..1d7cd7e5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/64.png new file mode 100644 index 00000000..ef15b7b4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/96.png new file mode 100644 index 00000000..e166295f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/navarra.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/navarra.ico new file mode 100644 index 00000000..6e6886ad Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/navarra/navarra.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/128.png new file mode 100644 index 00000000..d82beb45 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/256.png new file mode 100644 index 00000000..1d6a3ff4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/32.png new file mode 100644 index 00000000..b518aa4f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/48.png new file mode 100644 index 00000000..0a53ff16 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/64.png new file mode 100644 index 00000000..875f680b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/96.png new file mode 100644 index 00000000..62c1fbc2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/rioja.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/rioja.ico new file mode 100644 index 00000000..f4691d52 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/rioja/rioja.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/128.png new file mode 100644 index 00000000..5f2719eb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/256.png new file mode 100644 index 00000000..fa16d38a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/32.png new file mode 100644 index 00000000..064b4d20 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/48.png new file mode 100644 index 00000000..7b4734e2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/64.png new file mode 100644 index 00000000..5cc75f86 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/96.png new file mode 100644 index 00000000..3f891344 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/spain.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/spain.ico new file mode 100644 index 00000000..0fb163db Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/spain/spain.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/128.png new file mode 100644 index 00000000..404d140a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/256.png new file mode 100644 index 00000000..e368e4a8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/32.png new file mode 100644 index 00000000..ffc55dcb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/48.png new file mode 100644 index 00000000..18e658e7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/64.png new file mode 100644 index 00000000..6ed25808 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/96.png new file mode 100644 index 00000000..3d1a563d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/valencia.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/valencia.ico new file mode 100644 index 00000000..b1ed2f8f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/valencia/valencia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/128.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/128.png new file mode 100644 index 00000000..5f7dd5f2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/256.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/256.png new file mode 100644 index 00000000..db441df1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/32.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/32.png new file mode 100644 index 00000000..6571a556 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/48.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/48.png new file mode 100644 index 00000000..05ee5b1c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/64.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/64.png new file mode 100644 index 00000000..b1a44824 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/96.png b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/96.png new file mode 100644 index 00000000..a5ccf69f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/vasco.ico b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/vasco.ico new file mode 100644 index 00000000..b66455d2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Providers/movistar+/vasco/vasco.ico differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia.ico deleted file mode 100644 index 2c0aeaa3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@128.png deleted file mode 100644 index 87477eda..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@256.png deleted file mode 100644 index b06c6910..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@32.png deleted file mode 100644 index dc40d773..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@48.png deleted file mode 100644 index 6100c200..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@64.png deleted file mode 100644 index 31f85e76..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@96.png deleted file mode 100644 index 1cd90ba7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Andalucia@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon.ico deleted file mode 100644 index ce45a2b4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@128.png deleted file mode 100644 index f9735790..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@256.png deleted file mode 100644 index 8800992f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@32.png deleted file mode 100644 index 0fa788db..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@48.png deleted file mode 100644 index 2e6040f9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@64.png deleted file mode 100644 index 1f003231..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@96.png deleted file mode 100644 index 03d96bbe..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Aragon@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias.ico deleted file mode 100644 index 381eec1e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@128.png deleted file mode 100644 index 70d477a5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@256.png deleted file mode 100644 index a6c9368c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@32.png deleted file mode 100644 index 1409ded9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@48.png deleted file mode 100644 index 50d62e65..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@64.png deleted file mode 100644 index 93c7dc66..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@96.png deleted file mode 100644 index afabc3cd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Asturias@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares.ico deleted file mode 100644 index de0e83c9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@128.png deleted file mode 100644 index b72b5c75..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@256.png deleted file mode 100644 index 58b1706e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@32.png deleted file mode 100644 index edb63cd1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@48.png deleted file mode 100644 index 0e7098c7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@64.png deleted file mode 100644 index df50c18a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@96.png deleted file mode 100644 index 6f185517..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Baleares@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias.ico deleted file mode 100644 index 52f19cc7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@128.png deleted file mode 100644 index 912edf4d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@256.png deleted file mode 100644 index 7b2919b9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@32.png deleted file mode 100644 index a47a2dc3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@48.png deleted file mode 100644 index bc2a0d5d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@64.png deleted file mode 100644 index 4268bd1a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@96.png deleted file mode 100644 index 21462cbc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Canarias@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria.ico deleted file mode 100644 index 3bc6c960..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@128.png deleted file mode 100644 index c7be3d3a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@256.png deleted file mode 100644 index beb14ea3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@32.png deleted file mode 100644 index 1de3fea3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@48.png deleted file mode 100644 index 0155d1eb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@64.png deleted file mode 100644 index 020824ee..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@96.png deleted file mode 100644 index a5b6a0ec..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cantabria@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna.ico deleted file mode 100644 index 45c25565..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@128.png deleted file mode 100644 index e1963d83..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@256.png deleted file mode 100644 index 695b0fb3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@32.png deleted file mode 100644 index 18e0a0be..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@48.png deleted file mode 100644 index 11492c82..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@64.png deleted file mode 100644 index 4f8844ee..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@96.png deleted file mode 100644 index 8fcb38e0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Cataluna@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura.ico deleted file mode 100644 index 5b82f8a2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@128.png deleted file mode 100644 index 01deb6f9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@256.png deleted file mode 100644 index c0664cb7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@32.png deleted file mode 100644 index 42fc657f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@48.png deleted file mode 100644 index 37f6c1b1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@64.png deleted file mode 100644 index 456ca2c1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@96.png deleted file mode 100644 index ce4ac218..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Extremadura@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia.ico deleted file mode 100644 index 6129a540..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@128.png deleted file mode 100644 index 43ca5350..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@256.png deleted file mode 100644 index 8489b6f4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@32.png deleted file mode 100644 index dfee519f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@48.png deleted file mode 100644 index 76cb951c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@64.png deleted file mode 100644 index f09e2fe3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@96.png deleted file mode 100644 index 830d2e2c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Galicia@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon.ico deleted file mode 100644 index af597296..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@128.png deleted file mode 100644 index 7fe1c78c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@256.png deleted file mode 100644 index 8aebb648..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@32.png deleted file mode 100644 index 5d3999d4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@48.png deleted file mode 100644 index 28f98a50..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@64.png deleted file mode 100644 index b7a04622..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@96.png deleted file mode 100644 index 2cc58871..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Leon@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid.ico deleted file mode 100644 index 474e9e2a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@128.png deleted file mode 100644 index 91ee04c7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@256.png deleted file mode 100644 index c8f88695..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@32.png deleted file mode 100644 index 22807e12..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@48.png deleted file mode 100644 index ba277755..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@64.png deleted file mode 100644 index 1efce2e9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@96.png deleted file mode 100644 index fbdc39b2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Madrid@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha.ico deleted file mode 100644 index 819dafe7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@128.png deleted file mode 100644 index 9ffbced0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@256.png deleted file mode 100644 index 5c1cd443..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@32.png deleted file mode 100644 index 005839c5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@48.png deleted file mode 100644 index e84485d3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@64.png deleted file mode 100644 index c0f84ee6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@96.png deleted file mode 100644 index 49dcf9e2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Mancha@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia.ico deleted file mode 100644 index 6cdc54a5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@128.png deleted file mode 100644 index 1032b03a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@256.png deleted file mode 100644 index 6fd26af1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@32.png deleted file mode 100644 index 044eaaf2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@48.png deleted file mode 100644 index 04e898c8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@64.png deleted file mode 100644 index 1fd09731..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@96.png deleted file mode 100644 index 15459674..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Murcia@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra.ico deleted file mode 100644 index aba77479..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@128.png deleted file mode 100644 index bba2f243..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@256.png deleted file mode 100644 index 47bcdbea..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@32.png deleted file mode 100644 index 47a0e890..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@48.png deleted file mode 100644 index 1536667f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@64.png deleted file mode 100644 index c36feb44..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@96.png deleted file mode 100644 index a8e8c76f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Navarra@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja.ico deleted file mode 100644 index 3bbb709c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@128.png deleted file mode 100644 index 82b4707f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@256.png deleted file mode 100644 index f39c8790..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@32.png deleted file mode 100644 index 411b6b0f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@48.png deleted file mode 100644 index 73617d58..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@64.png deleted file mode 100644 index 9005eef8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@96.png deleted file mode 100644 index 9ea43436..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Rioja@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain.ico deleted file mode 100644 index a8d20148..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@128.png deleted file mode 100644 index 560d314e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@256.png deleted file mode 100644 index 0ad06dd5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@32.png deleted file mode 100644 index 57ec5d33..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@48.png deleted file mode 100644 index 472e453f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@64.png deleted file mode 100644 index 734eb29f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@96.png deleted file mode 100644 index bdedcc16..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Spain@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia.ico deleted file mode 100644 index c3b683b5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@128.png deleted file mode 100644 index b868e370..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@256.png deleted file mode 100644 index 341d806c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@32.png deleted file mode 100644 index ad0f8c8c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@48.png deleted file mode 100644 index 416ec113..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@64.png deleted file mode 100644 index 81b8e59a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@96.png deleted file mode 100644 index 0710038b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Valencia@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco.ico deleted file mode 100644 index a56c2818..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@128.png deleted file mode 100644 index d8210e92..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@256.png deleted file mode 100644 index ba50b8a0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@32.png deleted file mode 100644 index 21150590..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@48.png deleted file mode 100644 index 359d7634..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@64.png deleted file mode 100644 index ac3a5a03..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@96.png deleted file mode 100644 index b41b8457..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV-Vasco@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV.ico b/1.5 'Kruger 60'/Logos/Providers/movistarTV.ico deleted file mode 100644 index 2dc85c51..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV@128.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV@128.png deleted file mode 100644 index dae03c3b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV@256.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV@256.png deleted file mode 100644 index d7a89d5b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV@32.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV@32.png deleted file mode 100644 index 195d9df4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV@48.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV@48.png deleted file mode 100644 index b53743d5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV@64.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV@64.png deleted file mode 100644 index 29898cd3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/movistarTV@96.png b/1.5 'Kruger 60'/Logos/Providers/movistarTV@96.png deleted file mode 100644 index af97a155..00000000 Binary files a/1.5 'Kruger 60'/Logos/Providers/movistarTV@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Providers/provider-mappings.xml b/1.5 'Kruger 60'/Logos/Providers/provider-mappings.xml index f4540b33..04b21ac3 100644 --- a/1.5 'Kruger 60'/Logos/Providers/provider-mappings.xml +++ b/1.5 'Kruger 60'/Logos/Providers/provider-mappings.xml @@ -1,29 +1,40 @@ - + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Resources/PackLogos.ico b/1.5 'Kruger 60'/Logos/Resources/PackLogos.ico new file mode 100644 index 00000000..c102778f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Resources/PackLogos.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/domain-mappings.xml b/1.5 'Kruger 60'/Logos/Services/domain-mappings.xml index 5b3806c4..6c71075e 100644 --- a/1.5 'Kruger 60'/Logos/Services/domain-mappings.xml +++ b/1.5 'Kruger 60'/Logos/Services/domain-mappings.xml @@ -1,13 +1,23 @@ - + - - - generic - - + + + DVB-IPTV + + imagenio.es imagenio.es imagenio.es @@ -25,5 +35,5 @@ All rights reserved, except those granted by the governing license of this softw imagenio.es imagenio.es imagenio.es - - \ No newline at end of file + + diff --git a/1.5 'Kruger 60'/Logos/Services/generic/data@128.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/data@128.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/data@24.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/data@24.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/data@256.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/data@256.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/data@32.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/data@32.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/data@48.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/data@48.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/data@64.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/data@64.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/data@96.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/data@96.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/data.ico b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/data.ico new file mode 100644 index 00000000..2b0a94e7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/data/(default)/data.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@128.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@128.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@24.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@24.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@256.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@256.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@32.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@32.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@48.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@48.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@64.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@64.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@96.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv@96.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/dvb-iptv.ico b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/dvb-iptv.ico new file mode 100644 index 00000000..efba3d5e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/dvb-iptv/(default)/dvb-iptv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/mhp@128.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/mhp@128.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/mhp@24.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/mhp@24.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/mhp@256.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/mhp@256.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/mhp@32.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/mhp@32.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/mhp@48.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/mhp@48.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/mhp@64.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/mhp@64.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/mhp@96.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/mhp@96.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/mhp.ico b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/mhp.ico new file mode 100644 index 00000000..55d16f66 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/mhp/(default)/mhp.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/radio@128.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/radio@128.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/radio@24.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/radio@24.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/radio@256.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/radio@256.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/radio@32.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/radio@32.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/radio@48.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/radio@48.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/radio@64.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/radio@64.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/radio@96.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/radio@96.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/radio.ico b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/radio.ico new file mode 100644 index 00000000..13cd695e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/(default)/radio.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_radio@128.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_radio@128.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_radio@24.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_radio@24.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_radio@256.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_radio@256.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_radio@32.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_radio@32.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_radio@48.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_radio@48.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_radio@64.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_radio@64.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_radio@96.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_radio@96.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/radio.ico b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/radio.ico new file mode 100644 index 00000000..92a3d7b9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/radio/HD/radio.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/teletext@128.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/teletext@128.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/teletext@24.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/teletext@24.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/teletext@256.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/teletext@256.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/teletext@32.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/teletext@32.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/teletext@48.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/teletext@48.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/teletext@64.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/teletext@64.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/teletext@96.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/teletext@96.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/teletext.ico b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/teletext.ico new file mode 100644 index 00000000..97526f6e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/teletext/(default)/teletext.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/tv@128.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/tv@128.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/tv@24.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/tv@24.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/tv@256.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/tv@256.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/tv@32.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/tv@32.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/tv@48.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/tv@48.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/tv@64.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/tv@64.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/tv@96.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/tv@96.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/tv.ico b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/tv.ico new file mode 100644 index 00000000..58663e1c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/(default)/tv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_tv@128.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_tv@128.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_tv@24.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_tv@24.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_tv@256.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_tv@256.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_tv@32.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_tv@32.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_tv@48.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_tv@48.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_tv@64.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_tv@64.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_tv@96.png b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/generic/hd_tv@96.png rename to 1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/tv.ico b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/tv.ico new file mode 100644 index 00000000..d301c368 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/generic/DVB-IPTV/tv/HD/tv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/data.ico b/1.5 'Kruger 60'/Logos/Services/generic/data.ico deleted file mode 100644 index ddecbb70..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/generic/data.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv.ico b/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv.ico deleted file mode 100644 index 6589e8d1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/generic/dvb-iptv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_radio.ico b/1.5 'Kruger 60'/Logos/Services/generic/hd_radio.ico deleted file mode 100644 index ed112882..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/generic/hd_radio.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/hd_tv.ico b/1.5 'Kruger 60'/Logos/Services/generic/hd_tv.ico deleted file mode 100644 index 06cda9bb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/generic/hd_tv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/mhp.ico b/1.5 'Kruger 60'/Logos/Services/generic/mhp.ico deleted file mode 100644 index 69c2c4f8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/generic/mhp.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/radio.ico b/1.5 'Kruger 60'/Logos/Services/generic/radio.ico deleted file mode 100644 index e63f70d4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/generic/radio.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/teletext.ico b/1.5 'Kruger 60'/Logos/Services/generic/teletext.ico deleted file mode 100644 index f82e2ef5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/generic/teletext.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/generic/tv.ico b/1.5 'Kruger 60'/Logos/Services/generic/tv.ico deleted file mode 100644 index 2514ddc9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/generic/tv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv.ico deleted file mode 100644 index 68831c3d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@128.png deleted file mode 100644 index 52148663..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@256.png deleted file mode 100644 index 76bd7f20..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@32.png deleted file mode 100644 index a70375c3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@48.png deleted file mode 100644 index d89f7e30..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@64.png deleted file mode 100644 index a47e5660..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@96.png deleted file mode 100644 index 46205db8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/13tv@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv.ico deleted file mode 100644 index a33b2807..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@128.png deleted file mode 100644 index 492321cf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@256.png deleted file mode 100644 index 324d28b7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@32.png deleted file mode 100644 index 0b97d60c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@48.png deleted file mode 100644 index 55eef1ca..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@64.png deleted file mode 100644 index f218efa1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@96.png deleted file mode 100644 index e20f20b2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/40tv@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e.ico deleted file mode 100644 index d0445e32..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@128.png deleted file mode 100644 index 1c6e27c2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@256.png deleted file mode 100644 index e31f1c3e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@32.png deleted file mode 100644 index 844369fe..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@48.png deleted file mode 100644 index cb07fcd0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@64.png deleted file mode 100644 index ef96acfe..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@96.png deleted file mode 100644 index 43b7e4e5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/a-and-e@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera.ico deleted file mode 100644 index 2777fc32..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/amc.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/amc.ico deleted file mode 100644 index d17f64f9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/amc.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3.ico deleted file mode 100644 index 84617b5b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@128.png deleted file mode 100644 index bb506c2f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@256.png deleted file mode 100644 index 504501d9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@32.png deleted file mode 100644 index c7e5b39c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@48.png deleted file mode 100644 index 547de75a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@64.png deleted file mode 100644 index daa6bd24..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@96.png deleted file mode 100644 index 79f11f7e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/antena3@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries.ico deleted file mode 100644 index da22e583..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega.ico deleted file mode 100644 index a093a6a8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@128.png deleted file mode 100644 index c51581e1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@256.png deleted file mode 100644 index fd55687c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@32.png deleted file mode 100644 index 42291ecb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@48.png deleted file mode 100644 index 7ba1fead..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@64.png deleted file mode 100644 index 3235e06d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@96.png deleted file mode 100644 index 4bd34608..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atresmedia_mega@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia.ico deleted file mode 100644 index db89c918..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2.ico deleted file mode 100644 index 27b2cfb3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat.ico deleted file mode 100644 index db89c918..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon.ico deleted file mode 100644 index 92cdd183..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int.ico deleted file mode 100644 index 7af52336..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias.ico deleted file mode 100644 index e65134bb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares.ico deleted file mode 100644 index 8fcf8099..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias.ico deleted file mode 100644 index ead7b793..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon.ico deleted file mode 100644 index 5aba20a2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha.ico deleted file mode 100644 index bbd21b1f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna.ico deleted file mode 100644 index 6f709d63..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2.ico deleted file mode 100644 index 62f93c10..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24.ico deleted file mode 100644 index c58708f2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv.ico deleted file mode 100644 index 69d04b53..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3.ico deleted file mode 100644 index 40f349a0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat.ico deleted file mode 100644 index 7f3617f8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura.ico deleted file mode 100644 index b41ab4ca..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@128.png deleted file mode 100644 index fc4fa301..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@256.png deleted file mode 100644 index 5e064d5a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@32.png deleted file mode 100644 index 0b21c5d9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@48.png deleted file mode 100644 index f7697f89..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@64.png deleted file mode 100644 index 62b55fd6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@96.png deleted file mode 100644 index 9a8f1b3a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_extremadura@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia.ico deleted file mode 100644 index 908dd921..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa.ico deleted file mode 100644 index 6d726d22..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid.ico deleted file mode 100644 index 8a6fb7a7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@128.png deleted file mode 100644 index fa60e6ad..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@256.png deleted file mode 100644 index 84bb613a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@32.png deleted file mode 100644 index 87d67370..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@48.png deleted file mode 100644 index e513069c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@64.png deleted file mode 100644 index 12d32b27..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@96.png deleted file mode 100644 index 3325ce13..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2.ico deleted file mode 100644 index 23ba8524..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@128.png deleted file mode 100644 index 76338d3b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@256.png deleted file mode 100644 index e651885c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@32.png deleted file mode 100644 index 212ae9b7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@48.png deleted file mode 100644 index 36f85d6e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@64.png deleted file mode 100644 index 611c32c9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@96.png deleted file mode 100644 index 82f915f7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_madrid_2@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia.ico deleted file mode 100644 index ae9434a7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo.ico deleted file mode 100644 index 083e1ff6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco.ico deleted file mode 100644 index 9eeb6580..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@128.png deleted file mode 100644 index 3c4c8631..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@256.png deleted file mode 100644 index c7ec500f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@32.png deleted file mode 100644 index 9c07763e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@48.png deleted file mode 100644 index 602c2fb0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@64.png deleted file mode 100644 index 25077d44..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@96.png deleted file mode 100644 index 098aca85..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2.ico deleted file mode 100644 index dd65f435..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@128.png deleted file mode 100644 index 6a7bb3b3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@256.png deleted file mode 100644 index c8a72def..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@32.png deleted file mode 100644 index 3fc95bb1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@48.png deleted file mode 100644 index 77a3159c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@64.png deleted file mode 100644 index a814d6d8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@96.png deleted file mode 100644 index e2011bad..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_2@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat.ico deleted file mode 100644 index a9094e19..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@128.png deleted file mode 100644 index cbffa493..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@256.png deleted file mode 100644 index 28882374..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@32.png deleted file mode 100644 index fb5383c8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@48.png deleted file mode 100644 index ec2b6946..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@64.png deleted file mode 100644 index a383f543..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@96.png deleted file mode 100644 index c29c1b0c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_vasco_sat@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn.ico deleted file mode 100644 index 60ee4f08..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white.ico deleted file mode 100644 index 867ddf77..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv.ico deleted file mode 100644 index ed2864b4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv.ico deleted file mode 100644 index ddb10cf0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@128.png deleted file mode 100644 index d1488d63..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@256.png deleted file mode 100644 index b38c344e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@32.png deleted file mode 100644 index 614d2b51..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@48.png deleted file mode 100644 index a8b7f0df..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@64.png deleted file mode 100644 index 62c4edee..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@96.png deleted file mode 100644 index 1c9a8a39..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/barca_tv@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world.ico deleted file mode 100644 index 2f44513f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@128.png deleted file mode 100644 index 075d6fa7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@256.png deleted file mode 100644 index bdde9981..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@32.png deleted file mode 100644 index d2b31a13..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@48.png deleted file mode 100644 index 00448d56..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@64.png deleted file mode 100644 index d0e34756..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@96.png deleted file mode 100644 index f69225ab..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bbc_world@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports.ico deleted file mode 100644 index b6c4f47b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@128.png deleted file mode 100644 index e211e707..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@256.png deleted file mode 100644 index 108f10ad..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@32.png deleted file mode 100644 index be4fb996..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@48.png deleted file mode 100644 index cc9a1f7e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@64.png deleted file mode 100644 index 171d198e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@96.png deleted file mode 100644 index 1972aac7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga.ico deleted file mode 100644 index dec2a152..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1.ico deleted file mode 100644 index 94294049..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@128.png deleted file mode 100644 index 0657784c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@256.png deleted file mode 100644 index a22d4ff7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@32.png deleted file mode 100644 index f6737d8a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@48.png deleted file mode 100644 index 7ab306ab..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@64.png deleted file mode 100644 index 7bf73a9f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@96.png deleted file mode 100644 index bcbbc02a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_1@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2.ico deleted file mode 100644 index 5689d375..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@128.png deleted file mode 100644 index c7b671b7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@256.png deleted file mode 100644 index f8da6d26..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@32.png deleted file mode 100644 index 95d306d6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@48.png deleted file mode 100644 index d5dea7e9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@64.png deleted file mode 100644 index c35a5a09..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@96.png deleted file mode 100644 index 2263c5a3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_2@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3.ico deleted file mode 100644 index fb27ec4c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@128.png deleted file mode 100644 index dc356fc4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@256.png deleted file mode 100644 index 26b31a17..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@32.png deleted file mode 100644 index b6da7b36..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@48.png deleted file mode 100644 index fe42814e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@64.png deleted file mode 100644 index 58740087..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@96.png deleted file mode 100644 index c9a5e45a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_3@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4.ico deleted file mode 100644 index c19f4845..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@128.png deleted file mode 100644 index 14f179d2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@256.png deleted file mode 100644 index 43ea511d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@32.png deleted file mode 100644 index 0779a8f9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@48.png deleted file mode 100644 index 19a3e736..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@64.png deleted file mode 100644 index 3e9692d0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@96.png deleted file mode 100644 index 43b6f6bb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga_4@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max.ico deleted file mode 100644 index 5e99baee..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@128.png deleted file mode 100644 index d44cd613..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@256.png deleted file mode 100644 index 5e77720c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@32.png deleted file mode 100644 index a4feab32..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@48.png deleted file mode 100644 index 6ea2ca6d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@64.png deleted file mode 100644 index 91d00e9a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@96.png deleted file mode 100644 index 2739e587..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2.ico deleted file mode 100644 index af88b987..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@128.png deleted file mode 100644 index 16f7c922..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@256.png deleted file mode 100644 index 9fe3fef1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@32.png deleted file mode 100644 index db9c6508..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@48.png deleted file mode 100644 index f8e47c3d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@64.png deleted file mode 100644 index 3aa49589..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@96.png deleted file mode 100644 index 7906f7d7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_2@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3.ico deleted file mode 100644 index 5e5c6086..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@128.png deleted file mode 100644 index c372ee92..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@256.png deleted file mode 100644 index fb89a849..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@32.png deleted file mode 100644 index 5204b29d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@48.png deleted file mode 100644 index aa7e8501..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@64.png deleted file mode 100644 index 4aabc336..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@96.png deleted file mode 100644 index a66d7d49..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_3@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4.ico deleted file mode 100644 index db2ac3a0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@128.png deleted file mode 100644 index 0f42f0cf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@256.png deleted file mode 100644 index a8417402..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@32.png deleted file mode 100644 index 11f3675d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@48.png deleted file mode 100644 index ed020d09..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@64.png deleted file mode 100644 index 070664ec..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@96.png deleted file mode 100644 index 2b995da7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_4@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5.ico deleted file mode 100644 index cef49b31..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@128.png deleted file mode 100644 index 73a36ced..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@256.png deleted file mode 100644 index cce409d6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@32.png deleted file mode 100644 index 69060943..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@48.png deleted file mode 100644 index dab6a176..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@64.png deleted file mode 100644 index 24d5b1d7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@96.png deleted file mode 100644 index 2f6f2495..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_5@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6.ico deleted file mode 100644 index 84dab2b2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@128.png deleted file mode 100644 index 44e57806..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@256.png deleted file mode 100644 index efd80c83..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@32.png deleted file mode 100644 index 201cd715..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@48.png deleted file mode 100644 index fd6b7acb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@64.png deleted file mode 100644 index 96465157..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@96.png deleted file mode 100644 index 4f35e30a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_6@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7.ico deleted file mode 100644 index 9ae3a7a7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@128.png deleted file mode 100644 index 34adda64..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@256.png deleted file mode 100644 index 56caa2dc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@32.png deleted file mode 100644 index ed250f99..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@48.png deleted file mode 100644 index efc908da..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@64.png deleted file mode 100644 index 50be5563..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@96.png deleted file mode 100644 index c81f1010..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_7@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8.ico deleted file mode 100644 index d38f77e0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@128.png deleted file mode 100644 index 3da6c30b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@256.png deleted file mode 100644 index e233f922..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@32.png deleted file mode 100644 index 3f1a25d1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@48.png deleted file mode 100644 index 324c93c5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@64.png deleted file mode 100644 index 1f694394..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@96.png deleted file mode 100644 index 210d6331..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_max_8@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg.ico deleted file mode 100644 index 72c7a1ff..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@128.png deleted file mode 100644 index b8cbb051..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@256.png deleted file mode 100644 index 578f0fd0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@32.png deleted file mode 100644 index cd21d974..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@48.png deleted file mode 100644 index 7fa2801a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@64.png deleted file mode 100644 index 716ccd02..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@96.png deleted file mode 100644 index 223af0ed..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bloomberg@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/boing.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/boing.ico deleted file mode 100644 index 385d8816..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/boing.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13.ico deleted file mode 100644 index f894a3df..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca.ico deleted file mode 100644 index 4cc2dcb3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@128.png deleted file mode 100644 index 10eeb7c4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@256.png deleted file mode 100644 index 0943b01c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@32.png deleted file mode 100644 index 2d2aee29..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@48.png deleted file mode 100644 index 4cccaabf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@64.png deleted file mode 100644 index 340b9fb2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@96.png deleted file mode 100644 index 444cb714..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/caza-pesca@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve.ico deleted file mode 100644 index cbfc1a2b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@128.png deleted file mode 100644 index 1aa0c9a3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@256.png deleted file mode 100644 index 58b395a5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@32.png deleted file mode 100644 index 42e49ab7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@48.png deleted file mode 100644 index 15107368..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@64.png deleted file mode 100644 index 98b7889c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@96.png deleted file mode 100644 index d33e9da0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cctve@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc.ico deleted file mode 100644 index dda4b561..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@128.png deleted file mode 100644 index c93f6d4a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@256.png deleted file mode 100644 index c8eb4372..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@32.png deleted file mode 100644 index a62420a5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@48.png deleted file mode 100644 index 6fd771e6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@64.png deleted file mode 100644 index a7d97d77..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@96.png deleted file mode 100644 index a62c982b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnbc@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world.ico deleted file mode 100644 index fe07a6e4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni.ico deleted file mode 100644 index 0a5642bf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@128.png deleted file mode 100644 index dc10006a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@256.png deleted file mode 100644 index 5c2141ad..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@32.png deleted file mode 100644 index 3a968d2c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@48.png deleted file mode 100644 index 2de341f0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@64.png deleted file mode 100644 index c420f22c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@96.png deleted file mode 100644 index cf9b8635..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnni@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina.ico deleted file mode 100644 index 6b0515d4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@128.png deleted file mode 100644 index 335ea4ef..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@256.png deleted file mode 100644 index 71561646..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@32.png deleted file mode 100644 index 51ab4008..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@48.png deleted file mode 100644 index 16f21576..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@64.png deleted file mode 100644 index 72dfd6d9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@96.png deleted file mode 100644 index ef1fadf4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cocina@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral.ico deleted file mode 100644 index aa545984..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@128.png deleted file mode 100644 index 70d2ec78..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@256.png deleted file mode 100644 index 2258e06f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@32.png deleted file mode 100644 index a2079812..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@48.png deleted file mode 100644 index 4477a31b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@64.png deleted file mode 100644 index 17a83546..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@96.png deleted file mode 100644 index 48e668f7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/comedycentral@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo.ico deleted file mode 100644 index 2a79a095..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@128.png deleted file mode 100644 index 3273501c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@256.png deleted file mode 100644 index 4c804abd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@32.png deleted file mode 100644 index 31e70696..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@48.png deleted file mode 100644 index aceff12c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@64.png deleted file mode 100644 index d72b36a3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@96.png deleted file mode 100644 index 95d0931b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cosmo@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion.ico deleted file mode 100644 index 1f04558b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@128.png deleted file mode 100644 index bff68915..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@256.png deleted file mode 100644 index bd0408f6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@32.png deleted file mode 100644 index 0e905d02..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@48.png deleted file mode 100644 index 6f88acd6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@64.png deleted file mode 100644 index 326ec540..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@96.png deleted file mode 100644 index 92830377..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/crimen-investigacion@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro.ico deleted file mode 100644 index adf5754b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision.ico deleted file mode 100644 index f33e7435..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@128.png deleted file mode 100644 index bf3bc5b6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@256.png deleted file mode 100644 index 0d4c8f38..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@32.png deleted file mode 100644 index 2e7ec225..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@48.png deleted file mode 100644 index d3c714f5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@64.png deleted file mode 100644 index f542adc7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@96.png deleted file mode 100644 index d88974e2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cubavision@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa.ico deleted file mode 100644 index 2eae3d9a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@128.png deleted file mode 100644 index 600311a7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@256.png deleted file mode 100644 index b8789cf8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@32.png deleted file mode 100644 index 5cd5fac1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@48.png deleted file mode 100644 index cb43e794..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@64.png deleted file mode 100644 index 2c599e1c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@96.png deleted file mode 100644 index 7c88675a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/decasa@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery.ico deleted file mode 100644 index 611ae2f1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@128.png deleted file mode 100644 index 5d05d11b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@24.png deleted file mode 100644 index 46783517..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@256.png deleted file mode 100644 index c7077f53..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@32.png deleted file mode 100644 index d5585fc1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@48.png deleted file mode 100644 index ffd6ab0e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@64.png deleted file mode 100644 index aa0539a6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@96.png deleted file mode 100644 index d7d71c2b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss.ico deleted file mode 100644 index 149d715f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@128.png deleted file mode 100644 index 0737efdb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@24.png deleted file mode 100644 index 9a6a8c7c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@256.png deleted file mode 100644 index 5d4ab527..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@32.png deleted file mode 100644 index fc8c183a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@48.png deleted file mode 100644 index e612503a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@64.png deleted file mode 100644 index 4c28b838..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@96.png deleted file mode 100644 index 5ce8cdda..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_kiss@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max.ico deleted file mode 100644 index 3402c7d7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@128.png deleted file mode 100644 index 5274d6ee..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@256.png deleted file mode 100644 index 4faa5480..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@32.png deleted file mode 100644 index 6c1faa98..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@48.png deleted file mode 100644 index ee053442..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@64.png deleted file mode 100644 index 75f7b791..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@96.png deleted file mode 100644 index 0a8df6b5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/discovery_max@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel.ico deleted file mode 100644 index a7cb3cdb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@128.png deleted file mode 100644 index 6ff2f379..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@256.png deleted file mode 100644 index 794b3dd8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@32.png deleted file mode 100644 index e30a30b3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@48.png deleted file mode 100644 index 9cd67ded..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@64.png deleted file mode 100644 index f861b7b8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@96.png deleted file mode 100644 index ad52f4e7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_channel@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior.ico deleted file mode 100644 index fec3335b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@128.png deleted file mode 100644 index b3e0f9c5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@256.png deleted file mode 100644 index ac6b7b8b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@32.png deleted file mode 100644 index a93e0cb9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@48.png deleted file mode 100644 index e415aeb4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@64.png deleted file mode 100644 index ec7513ee..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@96.png deleted file mode 100644 index 10b83842..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_junior@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd.ico deleted file mode 100644 index 2cf0e046..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity.ico deleted file mode 100644 index ba7a3c84..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@128.png deleted file mode 100644 index f343d661..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@256.png deleted file mode 100644 index 6bf649fb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@32.png deleted file mode 100644 index 4b6c41c5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@48.png deleted file mode 100644 index 0ef90ad9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@64.png deleted file mode 100644 index d231c849..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@96.png deleted file mode 100644 index bb3ac096..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/divinity@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy.ico deleted file mode 100644 index 9de37f9d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@128.png deleted file mode 100644 index 0f13792e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@256.png deleted file mode 100644 index 0663d71d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@32.png deleted file mode 100644 index 33143ae2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@48.png deleted file mode 100644 index 3aa32bdb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@64.png deleted file mode 100644 index 42d52fdb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@96.png deleted file mode 100644 index 62b9919e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/energy@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas.ico deleted file mode 100644 index 40189223..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@128.png deleted file mode 100644 index b63197ca..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@256.png deleted file mode 100644 index 929c003e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@32.png deleted file mode 100644 index e1c0da22..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@48.png deleted file mode 100644 index 9a57f6c7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@64.png deleted file mode 100644 index e7c59cce..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@96.png deleted file mode 100644 index bd3b31ef..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/estrellas@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews.ico deleted file mode 100644 index 0f7d7a5e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@128.png deleted file mode 100644 index 3042ce09..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@256.png deleted file mode 100644 index 287e38f9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@32.png deleted file mode 100644 index affd381c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@48.png deleted file mode 100644 index 1afdbf7d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@64.png deleted file mode 100644 index 28b511d7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@96.png deleted file mode 100644 index 2ae8cebe..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/euronews@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1.ico deleted file mode 100644 index d985186c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@128.png deleted file mode 100644 index bb99e5f1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@24.png deleted file mode 100644 index 09c17685..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@256.png deleted file mode 100644 index d2fd7d80..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@32.png deleted file mode 100644 index 81ca9ea4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@48.png deleted file mode 100644 index b1a43b8b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@64.png deleted file mode 100644 index 8325a07f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@96.png deleted file mode 100644 index 9aa91d4f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_1@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2.ico deleted file mode 100644 index e609e4f1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@128.png deleted file mode 100644 index fdbb0687..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@24.png deleted file mode 100644 index 6fb0c8f8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@256.png deleted file mode 100644 index d63900fb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@32.png deleted file mode 100644 index 328d7aff..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@48.png deleted file mode 100644 index 54c5fd88..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@64.png deleted file mode 100644 index 1643b6d3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@96.png deleted file mode 100644 index 01b6f814..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/eurosport_2@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn.ico deleted file mode 100644 index 3985cc76..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@128.png deleted file mode 100644 index db0a9f0f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@24.png deleted file mode 100644 index 87f663db..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@256.png deleted file mode 100644 index 63e9536f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@32.png deleted file mode 100644 index d4e5d57f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@48.png deleted file mode 100644 index 4541c49f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@64.png deleted file mode 100644 index 1c5e3ee6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@96.png deleted file mode 100644 index 7c69644f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ewtn@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf.ico deleted file mode 100644 index e2829d7b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox.ico deleted file mode 100644 index 75b58ddb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@128.png deleted file mode 100644 index 6c89ca8c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@256.png deleted file mode 100644 index 016c9781..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@32.png deleted file mode 100644 index 3e797a46..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@48.png deleted file mode 100644 index 50d72411..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@64.png deleted file mode 100644 index cd1c8eb1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@96.png deleted file mode 100644 index 3189e884..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life.ico deleted file mode 100644 index edcc4fb3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@128.png deleted file mode 100644 index d1b99bef..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@256.png deleted file mode 100644 index 72d4ffb7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@32.png deleted file mode 100644 index ab9e2bb9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@48.png deleted file mode 100644 index cfc5bae6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@64.png deleted file mode 100644 index 02a88d92..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@96.png deleted file mode 100644 index 8b9e213c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_life@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news.ico deleted file mode 100644 index d3f7db62..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@128.png deleted file mode 100644 index 1171f1fa..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@256.png deleted file mode 100644 index 50fd0f8a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@32.png deleted file mode 100644 index 5ea2cc9f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@48.png deleted file mode 100644 index 11cabef0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@64.png deleted file mode 100644 index 76d643c9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@96.png deleted file mode 100644 index fa9959fe..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fox_news@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24.ico deleted file mode 100644 index 0022bc9d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@128.png deleted file mode 100644 index 5ef0c756..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@256.png deleted file mode 100644 index df37015e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@32.png deleted file mode 100644 index a374ee02..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@48.png deleted file mode 100644 index e0c6f262..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@64.png deleted file mode 100644 index b363b27e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@96.png deleted file mode 100644 index 25817502..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/france24@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay.ico deleted file mode 100644 index 7621ec53..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@128.png deleted file mode 100644 index 701d044d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@256.png deleted file mode 100644 index b0216c2a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@32.png deleted file mode 100644 index 359b9426..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@48.png deleted file mode 100644 index b6f0ca76..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@64.png deleted file mode 100644 index 8c2a48c0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@96.png deleted file mode 100644 index 7b22149f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/futbol-replay@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/garage.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/garage.ico deleted file mode 100644 index c0d1743b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/garage.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol.ico deleted file mode 100644 index 154539dc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@128.png deleted file mode 100644 index 324400c0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@24.png deleted file mode 100644 index b7481d5f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@256.png deleted file mode 100644 index a69513a6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@32.png deleted file mode 100644 index 59c911bf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@48.png deleted file mode 100644 index 8f133c1b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@64.png deleted file mode 100644 index 566e6707..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@96.png deleted file mode 100644 index 212d2777..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/gol@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc.ico deleted file mode 100644 index e5f1a5fb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3.ico deleted file mode 100644 index 42ff3a9b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@128.png deleted file mode 100644 index c2c148fa..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@256.png deleted file mode 100644 index 0269e69c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@32.png deleted file mode 100644 index 4c7b961d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@48.png deleted file mode 100644 index d16f46b3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@64.png deleted file mode 100644 index db67d1e7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@96.png deleted file mode 100644 index f043e6fb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_antena3@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries.ico deleted file mode 100644 index da22e583..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna.ico deleted file mode 100644 index a9e3b0c4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn.ico deleted file mode 100644 index 602091ec..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white.ico deleted file mode 100644 index e26cb341..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports.ico deleted file mode 100644 index 38216185..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@128.png deleted file mode 100644 index 6c4d4166..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@256.png deleted file mode 100644 index 78ba88b0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@32.png deleted file mode 100644 index 33bbac5d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@48.png deleted file mode 100644 index 82ef713c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@64.png deleted file mode 100644 index be675831..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@96.png deleted file mode 100644 index 63ba98df..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga.ico deleted file mode 100644 index 5e9f8ad1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1.ico deleted file mode 100644 index 382a1365..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@128.png deleted file mode 100644 index 872c3e17..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@256.png deleted file mode 100644 index 471178fc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@32.png deleted file mode 100644 index 15370dc0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@48.png deleted file mode 100644 index 10205920..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@64.png deleted file mode 100644 index c47317fa..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@96.png deleted file mode 100644 index d21246e1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_1@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2.ico deleted file mode 100644 index 73f445a0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@128.png deleted file mode 100644 index 12149c4b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@256.png deleted file mode 100644 index e3d7e93d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@32.png deleted file mode 100644 index 6a8f370f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@48.png deleted file mode 100644 index 45315ea6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@64.png deleted file mode 100644 index 16fa854e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@96.png deleted file mode 100644 index facf8d4b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_2@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3.ico deleted file mode 100644 index 42f06a45..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@128.png deleted file mode 100644 index 9aea9795..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@256.png deleted file mode 100644 index 4686b5ea..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@32.png deleted file mode 100644 index 5df46282..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@48.png deleted file mode 100644 index d0469d3f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@64.png deleted file mode 100644 index b23c4662..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@96.png deleted file mode 100644 index 29e6638b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga_3@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max.ico deleted file mode 100644 index d4d857f4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@128.png deleted file mode 100644 index 89780240..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@256.png deleted file mode 100644 index cc4e697a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@32.png deleted file mode 100644 index 25fe549c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@48.png deleted file mode 100644 index 222685b1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@64.png deleted file mode 100644 index 5f335468..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@96.png deleted file mode 100644 index ebc8fa83..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_max@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13.ico deleted file mode 100644 index 1bd0914e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca.ico deleted file mode 100644 index 4cc2dcb3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@128.png deleted file mode 100644 index e8866c9e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@256.png deleted file mode 100644 index 55f4af02..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@32.png deleted file mode 100644 index f308b35c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@48.png deleted file mode 100644 index c56c46e4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@64.png deleted file mode 100644 index 967b185a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@96.png deleted file mode 100644 index 869ddb2c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_caza-pesca@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral.ico deleted file mode 100644 index dc130ea3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@128.png deleted file mode 100644 index 71e47e73..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@256.png deleted file mode 100644 index 479ae096..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@32.png deleted file mode 100644 index 8188e6b3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@48.png deleted file mode 100644 index 1768dcef..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@64.png deleted file mode 100644 index cbc85344..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@96.png deleted file mode 100644 index 3616c63f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_comedycentral@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo.ico deleted file mode 100644 index 1b13d9bf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@128.png deleted file mode 100644 index 0b217b7f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@256.png deleted file mode 100644 index c2ec4e77..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@32.png deleted file mode 100644 index 746b2263..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@48.png deleted file mode 100644 index 6f2b890c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@64.png deleted file mode 100644 index bd2600e9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@96.png deleted file mode 100644 index 287542fa..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cosmo@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro.ico deleted file mode 100644 index aa20d03e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery.ico deleted file mode 100644 index 084ed7d6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@128.png deleted file mode 100644 index e0bdd326..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@24.png deleted file mode 100644 index 521c4905..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@256.png deleted file mode 100644 index 99e56fbd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@32.png deleted file mode 100644 index c88f9df8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@48.png deleted file mode 100644 index 1aaef519..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@64.png deleted file mode 100644 index 16d9d8b2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@96.png deleted file mode 100644 index e988fca6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_discovery@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel.ico deleted file mode 100644 index 586c81e7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@128.png deleted file mode 100644 index d0562cac..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@256.png deleted file mode 100644 index 080fa244..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@32.png deleted file mode 100644 index c9a49923..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@48.png deleted file mode 100644 index 4302c4bd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@64.png deleted file mode 100644 index cd1041e1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@96.png deleted file mode 100644 index da94c2c3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_disney_channel@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1.ico deleted file mode 100644 index 282cdf34..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@128.png deleted file mode 100644 index 3c765190..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@24.png deleted file mode 100644 index eed314b3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@256.png deleted file mode 100644 index ae1650cf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@32.png deleted file mode 100644 index f89d7b32..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@48.png deleted file mode 100644 index 8add9e8b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@64.png deleted file mode 100644 index faa31b1c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@96.png deleted file mode 100644 index aec1a38b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_1@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2.ico deleted file mode 100644 index 9158b84c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@128.png deleted file mode 100644 index 2027114b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@24.png deleted file mode 100644 index 44fc63b6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@256.png deleted file mode 100644 index 66807096..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@32.png deleted file mode 100644 index 3507026c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@48.png deleted file mode 100644 index fb9c073a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@64.png deleted file mode 100644 index e57dcb82..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@96.png deleted file mode 100644 index d6dbe875..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_eurosport_2@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox.ico deleted file mode 100644 index 076a9ae0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@128.png deleted file mode 100644 index 691a3d26..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@256.png deleted file mode 100644 index 03da743b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@32.png deleted file mode 100644 index 25d850d4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@48.png deleted file mode 100644 index ab62666f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@64.png deleted file mode 100644 index 7ade332c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@96.png deleted file mode 100644 index 47771eef..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life.ico deleted file mode 100644 index dd0dc939..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@128.png deleted file mode 100644 index 20d69223..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@256.png deleted file mode 100644 index 989e1f3a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@32.png deleted file mode 100644 index d1ddf867..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@48.png deleted file mode 100644 index ec558ade..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@64.png deleted file mode 100644 index 0f989448..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@96.png deleted file mode 100644 index 566bbd58..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_fox_life@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood.ico deleted file mode 100644 index 32a6be6e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@128.png deleted file mode 100644 index faf213b9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@256.png deleted file mode 100644 index 3cd67519..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@32.png deleted file mode 100644 index 23c13020..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@48.png deleted file mode 100644 index f7e63677..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@64.png deleted file mode 100644 index 6a957eb9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@96.png deleted file mode 100644 index cfa80e49..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_hollywood@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia.ico deleted file mode 100644 index 4a57c105..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta.ico deleted file mode 100644 index a5222f32..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo.ico deleted file mode 100644 index e295deed..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@128.png deleted file mode 100644 index 36cffb92..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@256.png deleted file mode 100644 index a0673e68..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@32.png deleted file mode 100644 index 4e8beada..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@48.png deleted file mode 100644 index 4c897f6e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@64.png deleted file mode 100644 index a255ea2b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@96.png deleted file mode 100644 index 2204a4fc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_mezzo@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero.ico deleted file mode 100644 index 3e144758..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@128.png deleted file mode 100644 index 085e8f49..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@24.png deleted file mode 100644 index bacde808..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@256.png deleted file mode 100644 index b5d6747c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@32.png deleted file mode 100644 index 68d92a2a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@48.png deleted file mode 100644 index 63c16dec..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@64.png deleted file mode 100644 index 2a518174..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@96.png deleted file mode 100644 index dae575c4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cero@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion.ico deleted file mode 100644 index debc1e19..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia.ico deleted file mode 100644 index f4c33acc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine.ico deleted file mode 100644 index 87e8039b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@128.png deleted file mode 100644 index 5c4abb09..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@256.png deleted file mode 100644 index cb84f66e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@32.png deleted file mode 100644 index ecc707b1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@48.png deleted file mode 100644 index 60445160..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@64.png deleted file mode 100644 index c315f88c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@96.png deleted file mode 100644 index 29057887..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_dcine@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos.ico deleted file mode 100644 index 0d4e4d23..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra.ico deleted file mode 100644 index c82a3367..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@128.png deleted file mode 100644 index a661fa70..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@256.png deleted file mode 100644 index 06bada9c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@32.png deleted file mode 100644 index b44f3dc0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@48.png deleted file mode 100644 index 843b5dc5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@64.png deleted file mode 100644 index f0bcbcda..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@96.png deleted file mode 100644 index e61cc660..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_xtra@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1.ico deleted file mode 100644 index e88dcd89..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2.ico deleted file mode 100644 index 32359410..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1.ico deleted file mode 100644 index 863da09e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@128.png deleted file mode 100644 index e84cd1d2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@256.png deleted file mode 100644 index 4cb7327f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@32.png deleted file mode 100644 index aaca2fd6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@48.png deleted file mode 100644 index 8ebf8ff5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@64.png deleted file mode 100644 index 59dac37d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@96.png deleted file mode 100644 index edd4346a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_f1@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol.ico deleted file mode 100644 index 51a6222a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@128.png deleted file mode 100644 index 2fba6f76..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@256.png deleted file mode 100644 index e220172e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@32.png deleted file mode 100644 index 522ccd33..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@48.png deleted file mode 100644 index 868949f9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@64.png deleted file mode 100644 index 6313c283..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@96.png deleted file mode 100644 index 03ea3a91..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_futbol@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico.ico deleted file mode 100644 index 85636b88..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine.ico deleted file mode 100644 index d14f923e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1.ico deleted file mode 100644 index 6f18b0b7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol.ico deleted file mode 100644 index a70e679b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp.ico deleted file mode 100644 index 42fa4b1c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf.ico deleted file mode 100644 index e4458025..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@128.png deleted file mode 100644 index 7b5df730..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@256.png deleted file mode 100644 index 7fcacb89..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@32.png deleted file mode 100644 index 773e60ff..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@48.png deleted file mode 100644 index 21fccc14..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@64.png deleted file mode 100644 index 28194644..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@96.png deleted file mode 100644 index 7cc02b94..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_golf@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp.ico deleted file mode 100644 index 0af8e262..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@128.png deleted file mode 100644 index f8b811d9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@256.png deleted file mode 100644 index 248239b3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@32.png deleted file mode 100644 index 5e620aa7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@48.png deleted file mode 100644 index 99c56e31..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@64.png deleted file mode 100644 index 3b3a3258..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@96.png deleted file mode 100644 index f051ce18..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_motogp@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo.ico deleted file mode 100644 index f02267b2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@128.png deleted file mode 100644 index c48d0406..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@256.png deleted file mode 100644 index 785bf449..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@32.png deleted file mode 100644 index 862939d5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@48.png deleted file mode 100644 index 5a977fd8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@64.png deleted file mode 100644 index ac7672c3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@96.png deleted file mode 100644 index 648f149d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_partidazo@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series.ico deleted file mode 100644 index acc8ac8d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra.ico deleted file mode 100644 index c31570fa..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@128.png deleted file mode 100644 index d949b143..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@256.png deleted file mode 100644 index 9d77d7ae..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@32.png deleted file mode 100644 index 6b2c688f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@48.png deleted file mode 100644 index 6bb5b14d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@64.png deleted file mode 100644 index 2dc8012d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@96.png deleted file mode 100644 index 817e3b93..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series_xtra@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus.ico deleted file mode 100644 index e181d964..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine.ico deleted file mode 100644 index 2205b165..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@128.png deleted file mode 100644 index 1b54fa46..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@256.png deleted file mode 100644 index 0a876e80..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@32.png deleted file mode 100644 index 5156eb1d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@48.png deleted file mode 100644 index a76415c5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@64.png deleted file mode 100644 index afbde9d1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@96.png deleted file mode 100644 index de11ae44..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_cine@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes.ico deleted file mode 100644 index 082e9821..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series.ico deleted file mode 100644 index aef9de20..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@128.png deleted file mode 100644 index 7a1c0461..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@256.png deleted file mode 100644 index 5e34b406..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@32.png deleted file mode 100644 index 6a697a3d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@48.png deleted file mode 100644 index a5eecebc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@64.png deleted file mode 100644 index 6986be36..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@96.png deleted file mode 100644 index b3ae4fda..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_series@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo.ico deleted file mode 100644 index 87b32241..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild.ico deleted file mode 100644 index 47d05ba6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople.ico deleted file mode 100644 index 52215d49..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@128.png deleted file mode 100644 index c4013874..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@24.png deleted file mode 100644 index c2b341c4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@256.png deleted file mode 100644 index 971419f4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@32.png deleted file mode 100644 index 7943c27e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@48.png deleted file mode 100644 index 76745a69..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@64.png deleted file mode 100644 index 0537921e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@96.png deleted file mode 100644 index 91e3ae2c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_nonstoppeople@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea.ico deleted file mode 100644 index d1d7bd61..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv.ico deleted file mode 100644 index 087eb29e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@128.png deleted file mode 100644 index 783e5c00..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@256.png deleted file mode 100644 index 0cec219e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@32.png deleted file mode 100644 index eabbcad5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@48.png deleted file mode 100644 index b963bb5e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@64.png deleted file mode 100644 index fabda536..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@96.png deleted file mode 100644 index 9e434ff8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_realmadridtv@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance.ico deleted file mode 100644 index 56f18b01..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy.ico deleted file mode 100644 index 70d17a37..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@128.png deleted file mode 100644 index 98b02750..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@256.png deleted file mode 100644 index 82f4e3cd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@32.png deleted file mode 100644 index 75e5ebc3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@48.png deleted file mode 100644 index e178a6d5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@64.png deleted file mode 100644 index 6f0b6a3b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@96.png deleted file mode 100644 index 4d44de03..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_syfy@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm.ico deleted file mode 100644 index f5cf7817..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@128.png deleted file mode 100644 index ea5c18b2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@256.png deleted file mode 100644 index 2f2d6c38..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@32.png deleted file mode 100644 index 80b49241..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@48.png deleted file mode 100644 index 56220ea9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@64.png deleted file mode 100644 index b822db19..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@96.png deleted file mode 100644 index 5df93618..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tcm@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5.ico deleted file mode 100644 index f7f1818a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten.ico deleted file mode 100644 index 99d59f23..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt.ico deleted file mode 100644 index 2e62c139..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@128.png deleted file mode 100644 index 7e6b99b9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@256.png deleted file mode 100644 index 7726a028..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@32.png deleted file mode 100644 index e63a8928..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@48.png deleted file mode 100644 index 24c3434d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@64.png deleted file mode 100644 index dbef02fc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@96.png deleted file mode 100644 index a864e156..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tnt@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv.ico deleted file mode 100644 index ff81b424..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@128.png deleted file mode 100644 index 1bdb60cf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@256.png deleted file mode 100644 index 767f9ee6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@32.png deleted file mode 100644 index 582b09b7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@48.png deleted file mode 100644 index 59e269a3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@64.png deleted file mode 100644 index 3f98d1f8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@96.png deleted file mode 100644 index fa6931c1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_torostv@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1.ico deleted file mode 100644 index 907b3757..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@128.png deleted file mode 100644 index 9840f4ae..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@256.png deleted file mode 100644 index 7eb1c2fc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@32.png deleted file mode 100644 index 10ba160a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@48.png deleted file mode 100644 index 31de03d3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@64.png deleted file mode 100644 index 91878c91..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@96.png deleted file mode 100644 index 138aa6db..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_1@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte.ico deleted file mode 100644 index 12f0565b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@128.png deleted file mode 100644 index 9707a85b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@256.png deleted file mode 100644 index 1489502f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@32.png deleted file mode 100644 index e596a879..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@48.png deleted file mode 100644 index 3b87752e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@64.png deleted file mode 100644 index 15539549..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@96.png deleted file mode 100644 index bb0182ed..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tve_teledeporte@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica.ico deleted file mode 100644 index cc714e6f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@128.png deleted file mode 100644 index 72385e2d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@256.png deleted file mode 100644 index dd308f9e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@32.png deleted file mode 100644 index 0527a57f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@48.png deleted file mode 100644 index bfcca81a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@64.png deleted file mode 100644 index f03cac24..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@96.png deleted file mode 100644 index 71078892..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_unitel_classica@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar.ico deleted file mode 100644 index b7e6a815..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia.ico deleted file mode 100644 index 0de16896..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@128.png deleted file mode 100644 index e46c888e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@256.png deleted file mode 100644 index 25828139..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@32.png deleted file mode 100644 index 7f213a90..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@48.png deleted file mode 100644 index 82ddb315..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@64.png deleted file mode 100644 index bf5e5b30..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@96.png deleted file mode 100644 index ca174acc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/historia@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood.ico deleted file mode 100644 index 40d35d5e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@128.png deleted file mode 100644 index 90f85b7d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@256.png deleted file mode 100644 index 728f8aad..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@32.png deleted file mode 100644 index a3c64f92..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@48.png deleted file mode 100644 index d9a5d442..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@64.png deleted file mode 100644 index 3eaec94a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@96.png deleted file mode 100644 index 19b313c4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hollywood@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news.ico deleted file mode 100644 index c6a33aed..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@128.png deleted file mode 100644 index f8409cd8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@256.png deleted file mode 100644 index 03a9d69f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@32.png deleted file mode 100644 index 225daf6e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@48.png deleted file mode 100644 index e2480968..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@64.png deleted file mode 100644 index 9c873871..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@96.png deleted file mode 100644 index 519a6b32..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/i24news@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia.ico deleted file mode 100644 index 8b1c466d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews.ico deleted file mode 100644 index 8d1bc2ae..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@128.png deleted file mode 100644 index f32617c1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@256.png deleted file mode 100644 index 6b6d9a4c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@32.png deleted file mode 100644 index 2f071ed9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@48.png deleted file mode 100644 index d7869e8b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@64.png deleted file mode 100644 index b85e4b32..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@96.png deleted file mode 100644 index 3175a0f2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/infonews@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia.ico deleted file mode 100644 index 11e56da7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta.ico deleted file mode 100644 index 2d7b6299..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions.ico deleted file mode 100644 index 2e959b29..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@128.png deleted file mode 100644 index feb12959..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@24.png deleted file mode 100644 index ca9411df..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@256.png deleted file mode 100644 index e04763ec..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@32.png deleted file mode 100644 index 6f8cadb1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@48.png deleted file mode 100644 index e1663221..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@64.png deleted file mode 100644 index 1c7616cd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@96.png deleted file mode 100644 index 9d6e5543..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/laxarxa-televisions@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv.ico deleted file mode 100644 index eb1120f6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc.ico deleted file mode 100644 index aaf9303d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@128.png deleted file mode 100644 index ccdbdf62..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@256.png deleted file mode 100644 index 09c41762..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@32.png deleted file mode 100644 index e2336dbf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@48.png deleted file mode 100644 index e9512378..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@64.png deleted file mode 100644 index 0442d1b4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@96.png deleted file mode 100644 index 9c1db066..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/ltc@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo.ico deleted file mode 100644 index 9ba7fb2e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@128.png deleted file mode 100644 index 860dc88c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@256.png deleted file mode 100644 index d8860fe1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@32.png deleted file mode 100644 index 9f4a6de1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@48.png deleted file mode 100644 index bd4ff069..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@64.png deleted file mode 100644 index ed486226..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@96.png deleted file mode 100644 index a5fd5363..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mezzo@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero.ico deleted file mode 100644 index 3e144758..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@128.png deleted file mode 100644 index 085e8f49..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@24.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@24.png deleted file mode 100644 index bacde808..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@24.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@256.png deleted file mode 100644 index b5d6747c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@32.png deleted file mode 100644 index 68d92a2a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@48.png deleted file mode 100644 index 63c16dec..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@64.png deleted file mode 100644 index 2a518174..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@96.png deleted file mode 100644 index dae575c4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cero@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion.ico deleted file mode 100644 index 5dda0754..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n.ico deleted file mode 100644 index 776c62b5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia.ico deleted file mode 100644 index 0258a946..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine.ico deleted file mode 100644 index 79ea889c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@128.png deleted file mode 100644 index ffd6a5f0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@256.png deleted file mode 100644 index b9f9517d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@32.png deleted file mode 100644 index 20a03e45..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@48.png deleted file mode 100644 index 969dcb32..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@64.png deleted file mode 100644 index 2a5a9a1c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@96.png deleted file mode 100644 index 34300ae2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_dcine@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos.ico deleted file mode 100644 index 6aa2df02..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra.ico deleted file mode 100644 index 74f88667..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@128.png deleted file mode 100644 index aa5f1237..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@256.png deleted file mode 100644 index f12da2a9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@32.png deleted file mode 100644 index ab018509..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@48.png deleted file mode 100644 index 5caff872..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@64.png deleted file mode 100644 index 6d54460f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@96.png deleted file mode 100644 index 8fdb4199..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_xtra@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1.ico deleted file mode 100644 index 9bfd1506..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2.ico deleted file mode 100644 index f7f5ff4f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1.ico deleted file mode 100644 index 9d05049e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@128.png deleted file mode 100644 index fd7680fd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@256.png deleted file mode 100644 index a8ab948c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@32.png deleted file mode 100644 index f305f7fa..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@48.png deleted file mode 100644 index 3c05f411..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@64.png deleted file mode 100644 index 8d06b957..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@96.png deleted file mode 100644 index 2d4a6a58..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_f1@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol.ico deleted file mode 100644 index b55b5f92..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@128.png deleted file mode 100644 index 8d8cd851..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@256.png deleted file mode 100644 index 6d3d015d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@32.png deleted file mode 100644 index c2a287cc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@48.png deleted file mode 100644 index 56e92029..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@64.png deleted file mode 100644 index 8a473bc9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@96.png deleted file mode 100644 index ab99cfbd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_futbol@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico.ico deleted file mode 100644 index 85d06b07..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine.ico deleted file mode 100644 index 430e70b7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1.ico deleted file mode 100644 index ebbac078..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol.ico deleted file mode 100644 index ff38fba3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp.ico deleted file mode 100644 index 8e8a2738..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf.ico deleted file mode 100644 index f123a9a5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@128.png deleted file mode 100644 index 62a4e0da..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@256.png deleted file mode 100644 index 922d60d0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@32.png deleted file mode 100644 index 69bc8583..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@48.png deleted file mode 100644 index 678b53e4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@64.png deleted file mode 100644 index 38c177e9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@96.png deleted file mode 100644 index 7cd6ce0d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_golf@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp.ico deleted file mode 100644 index 8ba72424..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@128.png deleted file mode 100644 index 4ef23753..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@256.png deleted file mode 100644 index 8a9fc732..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@32.png deleted file mode 100644 index a6f43f9d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@48.png deleted file mode 100644 index e40ed60d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@64.png deleted file mode 100644 index 3d328dd4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@96.png deleted file mode 100644 index 0d855519..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_motogp@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo.ico deleted file mode 100644 index 726537f8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@128.png deleted file mode 100644 index 54d319a9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@256.png deleted file mode 100644 index 66e43548..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@32.png deleted file mode 100644 index 07b41c29..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@48.png deleted file mode 100644 index 6b13d276..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@64.png deleted file mode 100644 index 84ae6f2b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@96.png deleted file mode 100644 index ff31801f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar.ico deleted file mode 100644 index 974c8171..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series.ico deleted file mode 100644 index 64abe0d1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra.ico deleted file mode 100644 index 0a6d4d66..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@128.png deleted file mode 100644 index f47ed7d1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@256.png deleted file mode 100644 index 115c80c6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@32.png deleted file mode 100644 index 26a8bc18..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@48.png deleted file mode 100644 index 41b7ad98..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@64.png deleted file mode 100644 index b9639edf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@96.png deleted file mode 100644 index 79750301..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series_xtra@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus.ico deleted file mode 100644 index e181d964..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte.ico deleted file mode 100644 index ceeb57f5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@128.png deleted file mode 100644 index 84167fac..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@256.png deleted file mode 100644 index 217eb16a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@32.png deleted file mode 100644 index 6236958c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@48.png deleted file mode 100644 index 51192333..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@64.png deleted file mode 100644 index 5f48d4c4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@96.png deleted file mode 100644 index ed76225e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multideporte@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol.ico deleted file mode 100644 index 9a773d8d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@128.png deleted file mode 100644 index 06390f7b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@256.png deleted file mode 100644 index b86a3a70..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@32.png deleted file mode 100644 index 707ac67e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@48.png deleted file mode 100644 index 38932ec7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@64.png deleted file mode 100644 index 01f247aa..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@96.png deleted file mode 100644 index 95978a36..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_multifutbol@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine.ico deleted file mode 100644 index 2205b165..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@128.png deleted file mode 100644 index 1b54fa46..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@256.png deleted file mode 100644 index 0a876e80..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@32.png deleted file mode 100644 index 5156eb1d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@48.png deleted file mode 100644 index a76415c5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@64.png deleted file mode 100644 index afbde9d1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@96.png deleted file mode 100644 index de11ae44..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_cine@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes.ico deleted file mode 100644 index 082e9821..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series.ico deleted file mode 100644 index aef9de20..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@128.png deleted file mode 100644 index 7a1c0461..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@256.png deleted file mode 100644 index 5e34b406..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@32.png deleted file mode 100644 index 6a697a3d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@48.png deleted file mode 100644 index a5eecebc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@64.png deleted file mode 100644 index 6986be36..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@96.png deleted file mode 100644 index b3ae4fda..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_series@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain.ico deleted file mode 100644 index 12bbcf1d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo.ico deleted file mode 100644 index 927c5406..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild.ico deleted file mode 100644 index 9ba8f7e6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox.ico deleted file mode 100644 index 71865d52..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@128.png deleted file mode 100644 index 36968f91..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@256.png deleted file mode 100644 index 0a57ab69..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@32.png deleted file mode 100644 index 248b6936..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@48.png deleted file mode 100644 index b31b9ffb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@64.png deleted file mode 100644 index eae3f672..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@96.png deleted file mode 100644 index 16c80eee..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/neox@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon.ico deleted file mode 100644 index 20d84ef9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@128.png deleted file mode 100644 index 7c200ffb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@256.png deleted file mode 100644 index 665153b8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@32.png deleted file mode 100644 index c908885a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@48.png deleted file mode 100644 index c8795a77..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@64.png deleted file mode 100644 index 1ba5c023..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@96.png deleted file mode 100644 index 23bac225..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr.ico deleted file mode 100644 index 4371c1cf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@128.png deleted file mode 100644 index 079ee204..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@256.png deleted file mode 100644 index 8768cd4a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@32.png deleted file mode 100644 index 74430a97..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@48.png deleted file mode 100644 index 4840c5c7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@64.png deleted file mode 100644 index d3b1dc2b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@96.png deleted file mode 100644 index 1f307f89..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nickelodeon_jr@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople.ico deleted file mode 100644 index 0d162adc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@128.png deleted file mode 100644 index 3db1874b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@256.png deleted file mode 100644 index 6e4fefe4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@32.png deleted file mode 100644 index 05733b6c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@48.png deleted file mode 100644 index b35566e3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@64.png deleted file mode 100644 index f9760fd9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@96.png deleted file mode 100644 index f22ad437..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nonstoppeople@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova.ico deleted file mode 100644 index 1e43e30b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@128.png deleted file mode 100644 index 42952171..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@256.png deleted file mode 100644 index 625a1d78..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@32.png deleted file mode 100644 index 014bdd8b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@48.png deleted file mode 100644 index ab1eeb4d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@64.png deleted file mode 100644 index 6cde7165..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@96.png deleted file mode 100644 index b9a40097..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/nova@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea.ico deleted file mode 100644 index 7514c10e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21.ico deleted file mode 100644 index 2b4fdafb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda.ico deleted file mode 100644 index 6fb56f89..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel.ico deleted file mode 100644 index 04e5f655..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@128.png deleted file mode 100644 index 79aaae34..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@256.png deleted file mode 100644 index 431a3f8e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@32.png deleted file mode 100644 index 132b0d46..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@48.png deleted file mode 100644 index f8194e34..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@64.png deleted file mode 100644 index a616f8f6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@96.png deleted file mode 100644 index 4e271a33..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/paramountchannel@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne.ico deleted file mode 100644 index e57d0f3b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@128.png deleted file mode 100644 index bda2317b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@256.png deleted file mode 100644 index efffa448..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@32.png deleted file mode 100644 index 1ffb053b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@48.png deleted file mode 100644 index 30eedaaa..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@64.png deleted file mode 100644 index 6783cd7b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@96.png deleted file mode 100644 index a77b3cc2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/phoenix-cne@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy.ico deleted file mode 100644 index 37a7ab7c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@128.png deleted file mode 100644 index 795add47..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@256.png deleted file mode 100644 index 4d9b52c3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@32.png deleted file mode 100644 index a7313967..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@48.png deleted file mode 100644 index f8b9e4dd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@64.png deleted file mode 100644 index aa814edf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@96.png deleted file mode 100644 index 467bcfba..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/playboy@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv.ico deleted file mode 100644 index 61237a41..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@128.png deleted file mode 100644 index 71d15c1c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@256.png deleted file mode 100644 index 4d358148..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@32.png deleted file mode 100644 index 982ce3cc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@48.png deleted file mode 100644 index 2becf56e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@64.png deleted file mode 100644 index 9509cb23..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@96.png deleted file mode 100644 index 0fb10154..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/realmadridtv@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday.ico deleted file mode 100644 index 0244d466..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@128.png deleted file mode 100644 index dbc44fe0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@256.png deleted file mode 100644 index 5108ec44..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@32.png deleted file mode 100644 index 676ab9fb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@48.png deleted file mode 100644 index dd0d5654..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@64.png deleted file mode 100644 index b806dc2d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@96.png deleted file mode 100644 index 3f3e5915..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/russiatoday@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica.ico deleted file mode 100644 index 3bb8dceb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@128.png deleted file mode 100644 index 7fd5b082..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@256.png deleted file mode 100644 index 0772eced..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@32.png deleted file mode 100644 index 027a198e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@48.png deleted file mode 100644 index 86e458c7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@64.png deleted file mode 100644 index 3867b1e8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@96.png deleted file mode 100644 index e89facee..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/solmusica@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance.ico deleted file mode 100644 index 12d79711..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy.ico deleted file mode 100644 index 5da8f821..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@128.png deleted file mode 100644 index 799cd664..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@256.png deleted file mode 100644 index cb59e4c8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@32.png deleted file mode 100644 index e85391f7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@48.png deleted file mode 100644 index e7436c6c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@64.png deleted file mode 100644 index 21fdda87..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@96.png deleted file mode 100644 index 53fe5dfc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/syfy@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm.ico deleted file mode 100644 index b846698e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@128.png deleted file mode 100644 index 5ef8d01b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@256.png deleted file mode 100644 index e2e43b77..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@32.png deleted file mode 100644 index 73415067..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@48.png deleted file mode 100644 index a5b189b1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@64.png deleted file mode 100644 index 0201988c..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@96.png deleted file mode 100644 index 8f594b13..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tcm@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5.ico deleted file mode 100644 index 05b47a4f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe.ico deleted file mode 100644 index 6c38cf87..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados.ico deleted file mode 100644 index a11a56bc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur.ico deleted file mode 100644 index 23075f18..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@128.png deleted file mode 100644 index afe54210..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@256.png deleted file mode 100644 index cf155e19..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@32.png deleted file mode 100644 index 7d9b202f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@48.png deleted file mode 100644 index 970eb086..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@64.png deleted file mode 100644 index 88a2a37a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@96.png deleted file mode 100644 index 4f98a51b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telesur@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt.ico deleted file mode 100644 index 1b1533b7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@128.png deleted file mode 100644 index 754bba88..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@256.png deleted file mode 100644 index e6bdccd3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@32.png deleted file mode 100644 index c118a20d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@48.png deleted file mode 100644 index 7888f3ce..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@64.png deleted file mode 100644 index d3be772f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@96.png deleted file mode 100644 index d01e6954..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tnt@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv.ico deleted file mode 100644 index ff81b424..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@128.png deleted file mode 100644 index 1bdb60cf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@256.png deleted file mode 100644 index 767f9ee6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@32.png deleted file mode 100644 index 582b09b7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@48.png deleted file mode 100644 index 59e269a3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@64.png deleted file mode 100644 index 3f98d1f8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@96.png deleted file mode 100644 index fa6931c1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/torostv@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde.ico deleted file mode 100644 index 0f9c4c91..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@128.png deleted file mode 100644 index efa7bc4e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@256.png deleted file mode 100644 index 63845fdd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@32.png deleted file mode 100644 index 3de36dae..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@48.png deleted file mode 100644 index fa1bf57e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@64.png deleted file mode 100644 index 10470e2b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@96.png deleted file mode 100644 index fb4e5c68..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tv5monde@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca.ico deleted file mode 100644 index 04001430..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@128.png deleted file mode 100644 index 005ed1f9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@256.png deleted file mode 100644 index 8aacacdf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@32.png deleted file mode 100644 index 3d2a5391..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@48.png deleted file mode 100644 index 108566d8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@64.png deleted file mode 100644 index c238caa6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@96.png deleted file mode 100644 index d33427e1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvazteca@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol.ico deleted file mode 100644 index 48c1383b..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@128.png deleted file mode 100644 index aba5c2f0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@256.png deleted file mode 100644 index 098848cd..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@32.png deleted file mode 100644 index cc5b3630..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@48.png deleted file mode 100644 index 7de9dd71..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@64.png deleted file mode 100644 index a8083497..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@96.png deleted file mode 100644 index 52da48a9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcaracol@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile.ico deleted file mode 100644 index 4ce3f2c2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@128.png deleted file mode 100644 index 67435327..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@256.png deleted file mode 100644 index 5545816e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@32.png deleted file mode 100644 index 03ce6cf1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@48.png deleted file mode 100644 index f62c6015..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@64.png deleted file mode 100644 index 15e251a3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@96.png deleted file mode 100644 index 1eea5fa8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvchile@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia.ico deleted file mode 100644 index 05e0a795..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@128.png deleted file mode 100644 index 18ff8b33..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@256.png deleted file mode 100644 index 67762c52..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@32.png deleted file mode 100644 index 3fcafbc4..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@48.png deleted file mode 100644 index d7b0c413..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@64.png deleted file mode 100644 index 55d2a350..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@96.png deleted file mode 100644 index 021a75e0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvcolombia@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1.ico deleted file mode 100644 index a4038419..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@128.png deleted file mode 100644 index b92bcd1a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@256.png deleted file mode 100644 index 2c3519f7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@32.png deleted file mode 100644 index a3aa3017..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@48.png deleted file mode 100644 index d4ee3fc6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@64.png deleted file mode 100644 index 47679a3e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@96.png deleted file mode 100644 index 93f8f4e5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_1@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2.ico deleted file mode 100644 index c476d7a5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h.ico deleted file mode 100644 index 029982ea..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@128.png deleted file mode 100644 index 485b92e6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@256.png deleted file mode 100644 index 4e07c5fe..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@32.png deleted file mode 100644 index 82566a04..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@48.png deleted file mode 100644 index 392d6c84..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@64.png deleted file mode 100644 index 7192aba7..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@96.png deleted file mode 100644 index 43109724..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_24h@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@128.png deleted file mode 100644 index f200cefc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@256.png deleted file mode 100644 index 97bf0ab3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@32.png deleted file mode 100644 index b02b23c1..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@48.png deleted file mode 100644 index 20656468..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@64.png deleted file mode 100644 index 04cf0cac..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@96.png deleted file mode 100644 index 8000de2e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_2@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan.ico deleted file mode 100644 index b6522ae9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@128.png deleted file mode 100644 index 70b031cc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@256.png deleted file mode 100644 index 256272db..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@32.png deleted file mode 100644 index 96418a18..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@48.png deleted file mode 100644 index 37639916..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@64.png deleted file mode 100644 index 4a6673c9..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@96.png deleted file mode 100644 index f5db7ee8..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_clan@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte.ico deleted file mode 100644 index ac1e2364..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@128.png deleted file mode 100644 index e4b0ae5d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@256.png deleted file mode 100644 index 267dce70..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@32.png deleted file mode 100644 index eba9c34f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@48.png deleted file mode 100644 index e29f3aeb..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@64.png deleted file mode 100644 index f14ec129..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@96.png deleted file mode 100644 index f8c47e4e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tve_teledeporte@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord.ico deleted file mode 100644 index 5fd39256..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@128.png deleted file mode 100644 index 3edb33f3..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@256.png deleted file mode 100644 index cfec1a1d..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@32.png deleted file mode 100644 index 7d704ee0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@48.png deleted file mode 100644 index da89ead6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@64.png deleted file mode 100644 index 5f1fe9fc..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@96.png deleted file mode 100644 index 93966123..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tvrecord@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica.ico deleted file mode 100644 index 4bbf8e6f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@128.png deleted file mode 100644 index cecb74b0..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@256.png deleted file mode 100644 index 1c6c93a5..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@32.png deleted file mode 100644 index ff97c42f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@48.png deleted file mode 100644 index dc564728..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@64.png deleted file mode 100644 index 3ba25d9f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@96.png deleted file mode 100644 index 7d993950..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/unitel_classica@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1.ico deleted file mode 100644 index 996faa8e..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@128.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@128.png deleted file mode 100644 index a6fbd5c2..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@256.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@256.png deleted file mode 100644 index 1365d4ae..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@32.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@32.png deleted file mode 100644 index 80110d1a..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@48.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@48.png deleted file mode 100644 index 2c1ce88f..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@64.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@64.png deleted file mode 100644 index 864834cf..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@96.png b/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@96.png deleted file mode 100644 index a380e5e6..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/vh1@96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar.ico b/1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar.ico deleted file mode 100644 index 364b5791..00000000 Binary files a/1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar.ico and /dev/null differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/aljazeera@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/aljazeera.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/aljazeera.ico new file mode 100644 index 00000000..f78c0aca Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/aljazeera/(default)/aljazeera.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/amc@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/amc.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/amc.ico new file mode 100644 index 00000000..71bd4dde Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/(default)/amc.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_amc@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/amc.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/amc.ico new file mode 100644 index 00000000..9a3bc81b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/amc/HD/amc.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/128.png new file mode 100644 index 00000000..33a482a1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/24.png new file mode 100644 index 00000000..12640578 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/256.png new file mode 100644 index 00000000..ea7c6511 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/32.png new file mode 100644 index 00000000..220fa175 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/48.png new file mode 100644 index 00000000..3e384c03 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/64.png new file mode 100644 index 00000000..5578587b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/96.png new file mode 100644 index 00000000..cdcb1266 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/antena3.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/antena3.ico new file mode 100644 index 00000000..5b05d003 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/(default)/antena3.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/128.png new file mode 100644 index 00000000..28536948 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/24.png new file mode 100644 index 00000000..35596b91 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/256.png new file mode 100644 index 00000000..5110edda Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/32.png new file mode 100644 index 00000000..780c38cb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/48.png new file mode 100644 index 00000000..0784d496 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/64.png new file mode 100644 index 00000000..bdca64c8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/96.png new file mode 100644 index 00000000..d72e8b5d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/antena3.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/antena3.ico new file mode 100644 index 00000000..d03b9795 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/antena3/HD/antena3.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/atreseries@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/atreseries.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/atreseries.ico new file mode 100644 index 00000000..f11569fe Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/(default)/atreseries.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_atreseries@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/atreseries.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/atreseries.ico new file mode 100644 index 00000000..f11569fe Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/atreseries/HD/atreseries.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/autonomico_andalucia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/autonomico_andalucia.ico new file mode 100644 index 00000000..ff1fb6d4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia/(default)/autonomico_andalucia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_2@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/autonomico_andalucia_2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/autonomico_andalucia_2.ico new file mode 100644 index 00000000..f417cbd5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_2/(default)/autonomico_andalucia_2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_andalucia_sat@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/autonomico_andalucia_sat.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/autonomico_andalucia_sat.ico new file mode 100644 index 00000000..ff1fb6d4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_andalucia_sat/(default)/autonomico_andalucia_sat.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/autonomico_aragon.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/autonomico_aragon.ico new file mode 100644 index 00000000..d1f35b89 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon/(default)/autonomico_aragon.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_aragon_int@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/autonomico_aragon_int.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/autonomico_aragon_int.ico new file mode 100644 index 00000000..b9a1855d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_aragon_int/(default)/autonomico_aragon_int.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_asturias@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/autonomico_asturias.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/autonomico_asturias.ico new file mode 100644 index 00000000..485317d9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_asturias/(default)/autonomico_asturias.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_baleares@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/autonomico_baleares.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/autonomico_baleares.ico new file mode 100644 index 00000000..abf0af22 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_baleares/(default)/autonomico_baleares.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_canarias@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/autonomico_canarias.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/autonomico_canarias.ico new file mode 100644 index 00000000..8ac7f5fa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_canarias/(default)/autonomico_canarias.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-leon@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/autonomico_castilla-leon.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/autonomico_castilla-leon.ico new file mode 100644 index 00000000..cb0954e8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-leon/(default)/autonomico_castilla-leon.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_castilla-mancha@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/autonomico_castilla-mancha.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/autonomico_castilla-mancha.ico new file mode 100644 index 00000000..fc28f3f7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_castilla-mancha/(default)/autonomico_castilla-mancha.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/autonomico_cataluna.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/autonomico_cataluna.ico new file mode 100644 index 00000000..b31af4af Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/(default)/autonomico_cataluna.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_autonomico_cataluna@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/autonomico_cataluna.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/autonomico_cataluna.ico new file mode 100644 index 00000000..d1bedc33 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna/HD/autonomico_cataluna.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_2@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/autonomico_cataluna_2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/autonomico_cataluna_2.ico new file mode 100644 index 00000000..917e93fa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_2/(default)/autonomico_cataluna_2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_3-24@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/autonomico_cataluna_3-24.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/autonomico_cataluna_3-24.ico new file mode 100644 index 00000000..227dbe5c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_3-24/(default)/autonomico_cataluna_3-24.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_8tv@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/autonomico_cataluna_8tv.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/autonomico_cataluna_8tv.ico new file mode 100644 index 00000000..68a47195 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_8tv/(default)/autonomico_cataluna_8tv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_esport3@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/autonomico_cataluna_esport3.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/autonomico_cataluna_esport3.ico new file mode 100644 index 00000000..883a2563 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_esport3/(default)/autonomico_cataluna_esport3.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_cataluna_sat@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/autonomico_cataluna_sat.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/autonomico_cataluna_sat.ico new file mode 100644 index 00000000..acf6302e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_cataluna_sat/(default)/autonomico_cataluna_sat.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/128.png new file mode 100644 index 00000000..6605266e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/24.png new file mode 100644 index 00000000..4a18f120 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/256.png new file mode 100644 index 00000000..a2f640d6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/32.png new file mode 100644 index 00000000..43284203 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/48.png new file mode 100644 index 00000000..4d54d673 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/64.png new file mode 100644 index 00000000..01acc232 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/96.png new file mode 100644 index 00000000..80f73cf1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/autonomico_extremadura.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/autonomico_extremadura.ico new file mode 100644 index 00000000..3a89f032 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura/(default)/autonomico_extremadura.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/128.png new file mode 100644 index 00000000..b61c3e21 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/24.png new file mode 100644 index 00000000..bb45f776 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/256.png new file mode 100644 index 00000000..d6da5bee Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/32.png new file mode 100644 index 00000000..52708b5f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/48.png new file mode 100644 index 00000000..39bb8de6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/64.png new file mode 100644 index 00000000..a65a05fb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/96.png new file mode 100644 index 00000000..5e037ec8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/autonomico_extremadura_sat.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/autonomico_extremadura_sat.ico new file mode 100644 index 00000000..bd39390b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_extremadura_sat/(default)/autonomico_extremadura_sat.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/autonomico_galicia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/autonomico_galicia.ico new file mode 100644 index 00000000..2b9c21b5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia/(default)/autonomico_galicia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_galicia_europa@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/autonomico_galicia_europa.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/autonomico_galicia_europa.ico new file mode 100644 index 00000000..f808a927 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_galicia_europa/(default)/autonomico_galicia_europa.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_murcia@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/autonomico_murcia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/autonomico_murcia.ico new file mode 100644 index 00000000..25d596d9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_murcia/(default)/autonomico_murcia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/autonomico_valencia_mediterraneo@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/autonomico_valencia_mediterraneo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/autonomico_valencia_mediterraneo.ico new file mode 100644 index 00000000..d6517e1c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/autonomico_valencia_mediterraneo/(default)/autonomico_valencia_mediterraneo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/axn.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/axn.ico new file mode 100644 index 00000000..f622c937 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/(default)/axn.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/axn.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/axn.ico new file mode 100644 index 00000000..47e1623d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn/HD/axn.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/axn_white@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/axn_white.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/axn_white.ico new file mode 100644 index 00000000..d585f355 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/(default)/axn_white.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_axn_white@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/axn_white.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/axn_white.ico new file mode 100644 index 00000000..3943816b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/axn_white/HD/axn_white.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/baby_tv@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/baby_tv.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/baby_tv.ico new file mode 100644 index 00000000..508f6aa5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/baby_tv/(default)/baby_tv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/128.png new file mode 100644 index 00000000..2fac2457 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/24.png new file mode 100644 index 00000000..9d47d18e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/256.png new file mode 100644 index 00000000..53158e7a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/32.png new file mode 100644 index 00000000..f086be48 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/48.png new file mode 100644 index 00000000..43cf856d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/64.png new file mode 100644 index 00000000..a9ad0315 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/96.png new file mode 100644 index 00000000..da15d31e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/barca_tv.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/barca_tv.ico new file mode 100644 index 00000000..46de418c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/(default)/barca_tv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/128.png new file mode 100644 index 00000000..020e4e98 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/24.png new file mode 100644 index 00000000..2b8ad108 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/256.png new file mode 100644 index 00000000..d2bbd6fc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/32.png new file mode 100644 index 00000000..456fe243 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/48.png new file mode 100644 index 00000000..52114c28 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/64.png new file mode 100644 index 00000000..a4fccbf2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/96.png new file mode 100644 index 00000000..a60742ca Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/barca_tv.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/barca_tv.ico new file mode 100644 index 00000000..be9ae5c4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/barca_tv/HD/barca_tv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/128.png new file mode 100644 index 00000000..76b82f95 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/256.png new file mode 100644 index 00000000..81374f3b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/32.png new file mode 100644 index 00000000..abeb5187 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/48.png new file mode 100644 index 00000000..480f663d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/64.png new file mode 100644 index 00000000..54cf7015 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/96.png new file mode 100644 index 00000000..52a59f14 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/bbc_world.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/bbc_world.ico new file mode 100644 index 00000000..51984bb2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bbc_world/(default)/bbc_world.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/bein_sports_laliga@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/bein_sports_laliga.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/bein_sports_laliga.ico new file mode 100644 index 00000000..a667b49a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/(default)/bein_sports_laliga.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_bein_sports_laliga@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/bein_sports_laliga.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/bein_sports_laliga.ico new file mode 100644 index 00000000..d32abc65 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bein_sports_laliga/HD/bein_sports_laliga.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/128.png new file mode 100644 index 00000000..6d758135 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/24.png new file mode 100644 index 00000000..bf410e65 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/256.png new file mode 100644 index 00000000..74b7633b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/32.png new file mode 100644 index 00000000..3c6a23cd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/48.png new file mode 100644 index 00000000..0fb9e1d1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/64.png new file mode 100644 index 00000000..874a6baa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/96.png new file mode 100644 index 00000000..b2a768c9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/blaze.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/blaze.ico new file mode 100644 index 00000000..c33f6bbc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/(default)/blaze.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/128.png new file mode 100644 index 00000000..0801db27 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/24.png new file mode 100644 index 00000000..754043d5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/256.png new file mode 100644 index 00000000..76c3209d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/32.png new file mode 100644 index 00000000..ce4b74a4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/48.png new file mode 100644 index 00000000..80c9acd1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/64.png new file mode 100644 index 00000000..2199e726 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/96.png new file mode 100644 index 00000000..db430fd7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/blaze.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/blaze.ico new file mode 100644 index 00000000..9f6e9fa1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/blaze/HD/blaze.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/128.png new file mode 100644 index 00000000..06237d9c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/256.png new file mode 100644 index 00000000..52a1e2c3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/32.png new file mode 100644 index 00000000..f3c4fa99 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/48.png new file mode 100644 index 00000000..76b7cd8c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/64.png new file mode 100644 index 00000000..be2de36b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/96.png new file mode 100644 index 00000000..3e31a8ab Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/bloomberg.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/bloomberg.ico new file mode 100644 index 00000000..a712f4e9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/bloomberg/(default)/bloomberg.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/boing@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/boing.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/boing.ico new file mode 100644 index 00000000..c14ef81b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/boing/(default)/boing.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/calle13@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/calle13.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/calle13.ico new file mode 100644 index 00000000..50033716 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/(default)/calle13.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_calle13@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/calle13.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/calle13.ico new file mode 100644 index 00000000..fcd36dd9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/calle13/HD/calle13.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/128.png new file mode 100644 index 00000000..0a707518 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/24.png new file mode 100644 index 00000000..829494c6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/256.png new file mode 100644 index 00000000..d2298705 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/32.png new file mode 100644 index 00000000..f3405ac4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/48.png new file mode 100644 index 00000000..2063cbc2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/64.png new file mode 100644 index 00000000..02e99062 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/96.png new file mode 100644 index 00000000..1fa590ab Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/cataluna_beteve.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/cataluna_beteve.ico new file mode 100644 index 00000000..667d318a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cataluna_beteve/(default)/cataluna_beteve.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/128.png new file mode 100644 index 00000000..2eaf2c55 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/256.png new file mode 100644 index 00000000..23adb6f2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/32.png new file mode 100644 index 00000000..0d9db0aa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/48.png new file mode 100644 index 00000000..276d4e9a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/64.png new file mode 100644 index 00000000..3ef7fec7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/96.png new file mode 100644 index 00000000..6076ac9a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/caza-pesca.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/caza-pesca.ico new file mode 100644 index 00000000..3d16e9f9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/(default)/caza-pesca.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/128.png new file mode 100644 index 00000000..692af9e5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/256.png new file mode 100644 index 00000000..825dbaca Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/32.png new file mode 100644 index 00000000..c0497e62 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/48.png new file mode 100644 index 00000000..e710b4ea Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/64.png new file mode 100644 index 00000000..b2a2b959 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/96.png new file mode 100644 index 00000000..f312dc04 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/caza-pesca.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/caza-pesca.ico new file mode 100644 index 00000000..00467cc3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/caza-pesca/HD/caza-pesca.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/128.png new file mode 100644 index 00000000..eb986b79 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/256.png new file mode 100644 index 00000000..502989c9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/32.png new file mode 100644 index 00000000..34fe86df Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/48.png new file mode 100644 index 00000000..5989bd4c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/64.png new file mode 100644 index 00000000..dab76883 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/96.png new file mode 100644 index 00000000..3800ad80 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/cnbc.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/cnbc.ico new file mode 100644 index 00000000..0b0152dc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnbc/(default)/cnbc.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cnc_world@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/cnc_world.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/cnc_world.ico new file mode 100644 index 00000000..b789da24 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cnc_world/(default)/cnc_world.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/128.png new file mode 100644 index 00000000..38f7b3bd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/256.png new file mode 100644 index 00000000..ca1b8e63 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/32.png new file mode 100644 index 00000000..c7637a3b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/48.png new file mode 100644 index 00000000..9ab3351f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/64.png new file mode 100644 index 00000000..1214a103 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/96.png new file mode 100644 index 00000000..fff6ec07 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/cocina.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/cocina.ico new file mode 100644 index 00000000..6c36e792 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cocina/(default)/cocina.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/128.png new file mode 100644 index 00000000..27fbc4d2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/256.png new file mode 100644 index 00000000..00e3958b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/32.png new file mode 100644 index 00000000..8cb09c08 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/48.png new file mode 100644 index 00000000..deb7c50d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/64.png new file mode 100644 index 00000000..596a2a80 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/96.png new file mode 100644 index 00000000..b1e862e6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/comedycentral.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/comedycentral.ico new file mode 100644 index 00000000..1538d6cb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/(default)/comedycentral.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/128.png new file mode 100644 index 00000000..52fb4b93 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/256.png new file mode 100644 index 00000000..72b18dd9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/32.png new file mode 100644 index 00000000..c6595934 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/48.png new file mode 100644 index 00000000..6feb5129 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/64.png new file mode 100644 index 00000000..cd87d62b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/96.png new file mode 100644 index 00000000..e8d121b9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/comedycentral.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/comedycentral.ico new file mode 100644 index 00000000..b44550ad Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/comedycentral/HD/comedycentral.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/128.png new file mode 100644 index 00000000..c1cbed20 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/24.png new file mode 100644 index 00000000..218eb48a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/256.png new file mode 100644 index 00000000..e60358b3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/32.png new file mode 100644 index 00000000..eef2743c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/48.png new file mode 100644 index 00000000..0db469c4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/64.png new file mode 100644 index 00000000..a5470634 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/96.png new file mode 100644 index 00000000..97e9add7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/cosmo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/cosmo.ico new file mode 100644 index 00000000..4c12b544 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/(default)/cosmo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/128.png new file mode 100644 index 00000000..61c9088b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/24.png new file mode 100644 index 00000000..a5e808ba Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/256.png new file mode 100644 index 00000000..2d7aa65c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/32.png new file mode 100644 index 00000000..07599563 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/48.png new file mode 100644 index 00000000..0d090143 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/64.png new file mode 100644 index 00000000..2216e612 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/96.png new file mode 100644 index 00000000..96606921 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/cosmo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/cosmo.ico new file mode 100644 index 00000000..ec7d0ddd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cosmo/HD/cosmo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/128.png new file mode 100644 index 00000000..046511e2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/256.png new file mode 100644 index 00000000..5999331a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/32.png new file mode 100644 index 00000000..df80d1b6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/48.png new file mode 100644 index 00000000..e6908239 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/64.png new file mode 100644 index 00000000..1a99cb1a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/96.png new file mode 100644 index 00000000..eebf0a7d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/crimen-investigacion.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/crimen-investigacion.ico new file mode 100644 index 00000000..6a636f01 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/crimen-investigacion/(default)/crimen-investigacion.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/cuatro@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/cuatro.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/cuatro.ico new file mode 100644 index 00000000..bfa1896e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/(default)/cuatro.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_cuatro@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/cuatro.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/cuatro.ico new file mode 100644 index 00000000..0697e1e7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cuatro/HD/cuatro.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/128.png new file mode 100644 index 00000000..5c4da726 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/256.png new file mode 100644 index 00000000..218accc7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/32.png new file mode 100644 index 00000000..cb150e2c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/48.png new file mode 100644 index 00000000..2de7fb01 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/64.png new file mode 100644 index 00000000..037ee0df Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/96.png new file mode 100644 index 00000000..62894893 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/cubavision.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/cubavision.ico new file mode 100644 index 00000000..53531d48 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/cubavision/(default)/cubavision.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/128.png new file mode 100644 index 00000000..8fb538b1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/24.png new file mode 100644 index 00000000..c8a9474c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/256.png new file mode 100644 index 00000000..75424725 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/32.png new file mode 100644 index 00000000..73608fa4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/48.png new file mode 100644 index 00000000..f0fbb270 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/64.png new file mode 100644 index 00000000..8794891c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/96.png new file mode 100644 index 00000000..971cd32c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/dark.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/dark.ico new file mode 100644 index 00000000..7758bdb9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/dark/(default)/dark.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/128.png new file mode 100644 index 00000000..43ffc3d5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/256.png new file mode 100644 index 00000000..36c410de Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/32.png new file mode 100644 index 00000000..13497ee7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/48.png new file mode 100644 index 00000000..54104b2f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/64.png new file mode 100644 index 00000000..a6e471d6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/96.png new file mode 100644 index 00000000..12632e22 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/decasa.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/decasa.ico new file mode 100644 index 00000000..201ebf4e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/decasa/(default)/decasa.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/128.png new file mode 100644 index 00000000..4fd4f0e6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/24.png new file mode 100644 index 00000000..01140f93 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/256.png new file mode 100644 index 00000000..3eff035a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/32.png new file mode 100644 index 00000000..23a1e6f6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/48.png new file mode 100644 index 00000000..fff93bfb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/64.png new file mode 100644 index 00000000..b9871ca7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/96.png new file mode 100644 index 00000000..1c3441eb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/discovery.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/discovery.ico new file mode 100644 index 00000000..70bb6d74 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/(default)/discovery.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/128.png new file mode 100644 index 00000000..1fcb8ae4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/24.png new file mode 100644 index 00000000..c1165d46 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/256.png new file mode 100644 index 00000000..da89c2ed Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/32.png new file mode 100644 index 00000000..8319a254 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/48.png new file mode 100644 index 00000000..e0975294 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/64.png new file mode 100644 index 00000000..f438861c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/96.png new file mode 100644 index 00000000..787e3cea Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/discovery.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/discovery.ico new file mode 100644 index 00000000..281c75d2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery/HD/discovery.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/128.png new file mode 100644 index 00000000..a75fdf03 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/24.png new file mode 100644 index 00000000..fe2809fb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/256.png new file mode 100644 index 00000000..d042e1c6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/32.png new file mode 100644 index 00000000..56f98633 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/48.png new file mode 100644 index 00000000..8d57f39f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/64.png new file mode 100644 index 00000000..b3ddf5d6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/96.png new file mode 100644 index 00000000..ad74c08f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/discovery_kiss.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/discovery_kiss.ico new file mode 100644 index 00000000..e1a6c64b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_kiss/(default)/discovery_kiss.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/128.png new file mode 100644 index 00000000..64a9cced Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/256.png new file mode 100644 index 00000000..c263a1ce Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/32.png new file mode 100644 index 00000000..3e2e7edb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/48.png new file mode 100644 index 00000000..1eafc44c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/64.png new file mode 100644 index 00000000..60d54b4d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/96.png new file mode 100644 index 00000000..831980fa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/discovery_max.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/discovery_max.ico new file mode 100644 index 00000000..0bcb2a46 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/discovery_max/(default)/discovery_max.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/128.png new file mode 100644 index 00000000..bcd6f6ae Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/256.png new file mode 100644 index 00000000..727c0d1c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/32.png new file mode 100644 index 00000000..400ff73b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/48.png new file mode 100644 index 00000000..bb9813e3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/64.png new file mode 100644 index 00000000..0ada190a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/96.png new file mode 100644 index 00000000..ef251392 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/disney_channel.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/disney_channel.ico new file mode 100644 index 00000000..98477373 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/(default)/disney_channel.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/128.png new file mode 100644 index 00000000..57aa46a6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/256.png new file mode 100644 index 00000000..2aa775f2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/32.png new file mode 100644 index 00000000..c6f9a4b5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/48.png new file mode 100644 index 00000000..84af04d1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/64.png new file mode 100644 index 00000000..bad3cb1c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/96.png new file mode 100644 index 00000000..c286957b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/disney_channel.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/disney_channel.ico new file mode 100644 index 00000000..33dfab85 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_channel/HD/disney_channel.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/128.png new file mode 100644 index 00000000..c68ea445 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/256.png new file mode 100644 index 00000000..72df0592 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/32.png new file mode 100644 index 00000000..27a1f7ce Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/48.png new file mode 100644 index 00000000..c3982fc0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/64.png new file mode 100644 index 00000000..ddb6b539 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/96.png new file mode 100644 index 00000000..81404c69 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/disney_junior.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/disney_junior.ico new file mode 100644 index 00000000..5bd768f2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_junior/(default)/disney_junior.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/disney_xd@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/disney_xd.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/disney_xd.ico new file mode 100644 index 00000000..f998518e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/disney_xd/(default)/disney_xd.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/128.png new file mode 100644 index 00000000..2a051522 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/256.png new file mode 100644 index 00000000..459a3486 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/32.png new file mode 100644 index 00000000..dc19715b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/48.png new file mode 100644 index 00000000..13de9109 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/64.png new file mode 100644 index 00000000..01fa2b5f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/96.png new file mode 100644 index 00000000..42001f96 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/divinity.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/divinity.ico new file mode 100644 index 00000000..d8b725a1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/divinity/(default)/divinity.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/128.png new file mode 100644 index 00000000..c7da7a39 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/24.png new file mode 100644 index 00000000..e99667dd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/256.png new file mode 100644 index 00000000..2d960c5a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/32.png new file mode 100644 index 00000000..504fde7d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/48.png new file mode 100644 index 00000000..e3dc2d39 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/64.png new file mode 100644 index 00000000..515a9ac1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/96.png new file mode 100644 index 00000000..3587375f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/energy.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/energy.ico new file mode 100644 index 00000000..94072f7c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/energy/(default)/energy.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/128.png new file mode 100644 index 00000000..777935a4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/256.png new file mode 100644 index 00000000..8c5ad342 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/32.png new file mode 100644 index 00000000..5894aa01 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/48.png new file mode 100644 index 00000000..7c96d689 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/64.png new file mode 100644 index 00000000..17192e43 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/96.png new file mode 100644 index 00000000..9b3b0272 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/estrellas.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/estrellas.ico new file mode 100644 index 00000000..8ae02d18 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/estrellas/(default)/estrellas.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/128.png new file mode 100644 index 00000000..745429a5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/256.png new file mode 100644 index 00000000..cd077d2a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/32.png new file mode 100644 index 00000000..2e7e543d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/48.png new file mode 100644 index 00000000..5d3655d1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/64.png new file mode 100644 index 00000000..a28a5e63 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/96.png new file mode 100644 index 00000000..214238f0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/euronews.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/euronews.ico new file mode 100644 index 00000000..9920ba92 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/euronews/(default)/euronews.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/128.png new file mode 100644 index 00000000..21ad4df0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/24.png new file mode 100644 index 00000000..68cf32dc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/256.png new file mode 100644 index 00000000..8b3b562f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/32.png new file mode 100644 index 00000000..e1ef8081 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/48.png new file mode 100644 index 00000000..e9af6883 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/64.png new file mode 100644 index 00000000..d5a906fd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/96.png new file mode 100644 index 00000000..534db8a6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/eurosport_1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/eurosport_1.ico new file mode 100644 index 00000000..fa4247b3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/(default)/eurosport_1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/128.png new file mode 100644 index 00000000..c9419f1c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/24.png new file mode 100644 index 00000000..b1bd9ac4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/256.png new file mode 100644 index 00000000..d3698d79 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/32.png new file mode 100644 index 00000000..45d24e37 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/48.png new file mode 100644 index 00000000..8c6c023b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/64.png new file mode 100644 index 00000000..0d9fe2f9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/96.png new file mode 100644 index 00000000..d0f41440 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/eurosport_1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/eurosport_1.ico new file mode 100644 index 00000000..63e92937 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_1/HD/eurosport_1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/128.png new file mode 100644 index 00000000..fc342c1d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/24.png new file mode 100644 index 00000000..96c57f4b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/256.png new file mode 100644 index 00000000..61c0af12 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/32.png new file mode 100644 index 00000000..2d393fdf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/48.png new file mode 100644 index 00000000..169df0b7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/64.png new file mode 100644 index 00000000..2f85351f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/96.png new file mode 100644 index 00000000..8ef10e3a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/eurosport_2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/eurosport_2.ico new file mode 100644 index 00000000..3da43aca Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/(default)/eurosport_2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/128.png new file mode 100644 index 00000000..4338e870 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/24.png new file mode 100644 index 00000000..bce89be2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/256.png new file mode 100644 index 00000000..4e3e4354 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/32.png new file mode 100644 index 00000000..5470c11c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/48.png new file mode 100644 index 00000000..fa322f95 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/64.png new file mode 100644 index 00000000..7b048071 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/96.png new file mode 100644 index 00000000..5ad7606c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/eurosport_2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/eurosport_2.ico new file mode 100644 index 00000000..6e8dabc7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/eurosport_2/HD/eurosport_2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/128.png new file mode 100644 index 00000000..ff83dde1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/24.png new file mode 100644 index 00000000..64b0795e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/256.png new file mode 100644 index 00000000..87761d0b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/32.png new file mode 100644 index 00000000..8b317595 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/48.png new file mode 100644 index 00000000..08477e98 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/64.png new file mode 100644 index 00000000..6c613bca Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/96.png new file mode 100644 index 00000000..4ca71e2a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/ewtn.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/ewtn.ico new file mode 100644 index 00000000..5a38f988 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ewtn/(default)/ewtn.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/fdf@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/fdf.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/fdf.ico new file mode 100644 index 00000000..52d7aba7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fdf/(default)/fdf.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/128.png new file mode 100644 index 00000000..a0b21d60 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/256.png new file mode 100644 index 00000000..69a0e297 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/32.png new file mode 100644 index 00000000..fc1b3dd4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/48.png new file mode 100644 index 00000000..36d824e1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/64.png new file mode 100644 index 00000000..4eb9d7c6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/96.png new file mode 100644 index 00000000..ec2c471c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/fox.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/fox.ico new file mode 100644 index 00000000..fda10980 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/(default)/fox.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/128.png new file mode 100644 index 00000000..991aaa0c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/256.png new file mode 100644 index 00000000..abf878e6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/32.png new file mode 100644 index 00000000..a3d6e93e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/48.png new file mode 100644 index 00000000..7787a032 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/64.png new file mode 100644 index 00000000..b7362dc9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/96.png new file mode 100644 index 00000000..fc68add3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/fox.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/fox.ico new file mode 100644 index 00000000..2b4814b0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox/HD/fox.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/128.png new file mode 100644 index 00000000..106a2fff Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/256.png new file mode 100644 index 00000000..b0c2a3dc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/32.png new file mode 100644 index 00000000..50c45592 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/48.png new file mode 100644 index 00000000..098a4267 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/64.png new file mode 100644 index 00000000..f2fcb0f8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/96.png new file mode 100644 index 00000000..5f5d507a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/fox_life.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/fox_life.ico new file mode 100644 index 00000000..b7e78e47 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/(default)/fox_life.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/128.png new file mode 100644 index 00000000..140c6cf8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/256.png new file mode 100644 index 00000000..664fe8f2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/32.png new file mode 100644 index 00000000..bf9cd5c0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/48.png new file mode 100644 index 00000000..ac872ab1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/64.png new file mode 100644 index 00000000..0f14c422 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/96.png new file mode 100644 index 00000000..0a0155b6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/fox_life.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/fox_life.ico new file mode 100644 index 00000000..37cb9bad Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_life/HD/fox_life.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/128.png new file mode 100644 index 00000000..1ef7281c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/256.png new file mode 100644 index 00000000..2b6dbaaa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/32.png new file mode 100644 index 00000000..8ee2a3a1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/48.png new file mode 100644 index 00000000..3c589259 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/64.png new file mode 100644 index 00000000..bda67804 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/96.png new file mode 100644 index 00000000..79c9c829 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/fox_news.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/fox_news.ico new file mode 100644 index 00000000..b70fe685 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/fox_news/(default)/fox_news.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/128.png new file mode 100644 index 00000000..dc8d8de2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/256.png new file mode 100644 index 00000000..dd204cd0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/32.png new file mode 100644 index 00000000..5bb1c2ac Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/48.png new file mode 100644 index 00000000..f8c0b8b5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/64.png new file mode 100644 index 00000000..8ac8c2a6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/96.png new file mode 100644 index 00000000..5c84f233 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/france24.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/france24.ico new file mode 100644 index 00000000..ac72d004 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/france24/(default)/france24.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/128.png new file mode 100644 index 00000000..21d35857 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/256.png new file mode 100644 index 00000000..000efbba Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/32.png new file mode 100644 index 00000000..626fcbe8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/48.png new file mode 100644 index 00000000..13747b60 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/64.png new file mode 100644 index 00000000..cd99be10 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/96.png new file mode 100644 index 00000000..ff9543a8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/futbol-replay.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/futbol-replay.ico new file mode 100644 index 00000000..a9305064 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/futbol-replay/(default)/futbol-replay.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/garage@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/garage.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/garage.ico new file mode 100644 index 00000000..7d6c0a40 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/garage/(default)/garage.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/128.png new file mode 100644 index 00000000..e082f7ca Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/24.png new file mode 100644 index 00000000..00b33385 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/256.png new file mode 100644 index 00000000..bc638c17 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/32.png new file mode 100644 index 00000000..b3415dad Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/48.png new file mode 100644 index 00000000..0a39eb86 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/64.png new file mode 100644 index 00000000..93f4f0a9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/96.png new file mode 100644 index 00000000..9108a927 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/gol.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/gol.ico new file mode 100644 index 00000000..37f0a07b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/(default)/gol.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/128.png new file mode 100644 index 00000000..c6126e59 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/24.png new file mode 100644 index 00000000..7ea1fd8c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/256.png new file mode 100644 index 00000000..86a1ec95 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/32.png new file mode 100644 index 00000000..c339341b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/48.png new file mode 100644 index 00000000..3ed67528 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/64.png new file mode 100644 index 00000000..9aac8af0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/96.png new file mode 100644 index 00000000..ba920083 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/gol.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/gol.ico new file mode 100644 index 00000000..46630158 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/gol/HD/gol.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/128.png new file mode 100644 index 00000000..87c30d50 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/256.png new file mode 100644 index 00000000..501be0c8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/32.png new file mode 100644 index 00000000..5ef0b8eb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/48.png new file mode 100644 index 00000000..5d4a6b06 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/64.png new file mode 100644 index 00000000..aae3bcf3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/96.png new file mode 100644 index 00000000..e8a9a0d8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/historia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/historia.ico new file mode 100644 index 00000000..9f9f4b89 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/historia/(default)/historia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/iberalia@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/iberalia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/iberalia.ico new file mode 100644 index 00000000..6e52e036 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/(default)/iberalia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_iberalia@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/iberalia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/iberalia.ico new file mode 100644 index 00000000..b9be8a29 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/iberalia/HD/iberalia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/intereconomia@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/intereconomia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/intereconomia.ico new file mode 100644 index 00000000..b8390724 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/intereconomia/(default)/intereconomia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/128.png new file mode 100644 index 00000000..6821d601 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/24.png new file mode 100644 index 00000000..14fdeafb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/256.png new file mode 100644 index 00000000..b691831c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/32.png new file mode 100644 index 00000000..79407744 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/48.png new file mode 100644 index 00000000..196fa4a4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/64.png new file mode 100644 index 00000000..21690c42 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/96.png new file mode 100644 index 00000000..218a2af7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/laliga_tv.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/laliga_tv.ico new file mode 100644 index 00000000..aa123022 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/laliga_tv/(default)/laliga_tv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/lasexta@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/lasexta.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/lasexta.ico new file mode 100644 index 00000000..3c283771 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/(default)/lasexta.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_lasexta@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/lasexta.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/lasexta.ico new file mode 100644 index 00000000..c306be74 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/lasexta/HD/lasexta.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/libertad-digital-tv@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/libertad-digital-tv.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/libertad-digital-tv.ico new file mode 100644 index 00000000..b32f27f7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/libertad-digital-tv/(default)/libertad-digital-tv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/128.png new file mode 100644 index 00000000..cd467865 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/24.png new file mode 100644 index 00000000..e36f563c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/256.png new file mode 100644 index 00000000..065f4ec8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/32.png new file mode 100644 index 00000000..c9b9c37c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/48.png new file mode 100644 index 00000000..ba3976ef Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/64.png new file mode 100644 index 00000000..b20f499d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/96.png new file mode 100644 index 00000000..d4634b95 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/madrid_laotra.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/madrid_laotra.ico new file mode 100644 index 00000000..47127139 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_laotra/(default)/madrid_laotra.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/128.png new file mode 100644 index 00000000..2c33188c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/24.png new file mode 100644 index 00000000..4c524eb0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/256.png new file mode 100644 index 00000000..69ee7719 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/32.png new file mode 100644 index 00000000..e03dea03 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/48.png new file mode 100644 index 00000000..3167af4f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/64.png new file mode 100644 index 00000000..c3fec96f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/96.png new file mode 100644 index 00000000..42e50cf3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/madrid_telemadrid.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/madrid_telemadrid.ico new file mode 100644 index 00000000..1fbd2503 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/madrid_telemadrid/(default)/madrid_telemadrid.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/128.png new file mode 100644 index 00000000..9ac2531b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/24.png new file mode 100644 index 00000000..119403e9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/256.png new file mode 100644 index 00000000..f4060065 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/32.png new file mode 100644 index 00000000..4e9b7c23 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/48.png new file mode 100644 index 00000000..6ffe1af9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/64.png new file mode 100644 index 00000000..bd2f49c6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/96.png new file mode 100644 index 00000000..b33a15f0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/mega.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/mega.ico new file mode 100644 index 00000000..c2f1f54e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/(default)/mega.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/128.png new file mode 100644 index 00000000..66365528 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/24.png new file mode 100644 index 00000000..573d5a3d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/256.png new file mode 100644 index 00000000..bb643f74 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/32.png new file mode 100644 index 00000000..a7b50dc8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/48.png new file mode 100644 index 00000000..0f3802ce Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/64.png new file mode 100644 index 00000000..2957b035 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/96.png new file mode 100644 index 00000000..95d7453b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/mega.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/mega.ico new file mode 100644 index 00000000..debade20 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mega/HD/mega.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/128.png new file mode 100644 index 00000000..c3bbd9bd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/24.png new file mode 100644 index 00000000..15708e75 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/256.png new file mode 100644 index 00000000..c4d98dc8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/32.png new file mode 100644 index 00000000..217750a5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/48.png new file mode 100644 index 00000000..decc8ac4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/64.png new file mode 100644 index 00000000..112675e4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/96.png new file mode 100644 index 00000000..66623744 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/mezzo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/mezzo.ico new file mode 100644 index 00000000..e8e88046 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/(default)/mezzo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/128.png new file mode 100644 index 00000000..e7893496 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/24.png new file mode 100644 index 00000000..77990297 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/256.png new file mode 100644 index 00000000..30689f8b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/32.png new file mode 100644 index 00000000..e3387edf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/48.png new file mode 100644 index 00000000..8f7a9ea9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/64.png new file mode 100644 index 00000000..83462b08 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/96.png new file mode 100644 index 00000000..1a49e305 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/mezzo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/mezzo.ico new file mode 100644 index 00000000..710822b6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo/HD/mezzo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/128.png new file mode 100644 index 00000000..2187f2fa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/24.png new file mode 100644 index 00000000..7a5082e6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/256.png new file mode 100644 index 00000000..0e16f8f5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/32.png new file mode 100644 index 00000000..11d2ab70 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/48.png new file mode 100644 index 00000000..d7a56500 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/64.png new file mode 100644 index 00000000..bfce9555 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/96.png new file mode 100644 index 00000000..dcca87ca Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/mezzo_live.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/mezzo_live.ico new file mode 100644 index 00000000..d1680d3b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/(default)/mezzo_live.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/128.png new file mode 100644 index 00000000..601254b8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/24.png new file mode 100644 index 00000000..ba6f6ed4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/256.png new file mode 100644 index 00000000..3ce2b2d6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/32.png new file mode 100644 index 00000000..d399b7b4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/48.png new file mode 100644 index 00000000..7bd470a6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/64.png new file mode 100644 index 00000000..6356780b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/96.png new file mode 100644 index 00000000..d1b04c3b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/mezzo_live.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/mezzo_live.ico new file mode 100644 index 00000000..ed008d9e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mezzo_live/HD/mezzo_live.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/128.png new file mode 100644 index 00000000..943cd2f0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/24.png new file mode 100644 index 00000000..0bf996e3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/256.png new file mode 100644 index 00000000..c81c35d2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/32.png new file mode 100644 index 00000000..9e978302 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/48.png new file mode 100644 index 00000000..86f37526 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/64.png new file mode 100644 index 00000000..65c7eb0c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/96.png new file mode 100644 index 00000000..ec304d5b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/movistar_cero.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/movistar_cero.ico new file mode 100644 index 00000000..646c42d0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/(default)/movistar_cero.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/128.png new file mode 100644 index 00000000..095c4ccf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/24.png new file mode 100644 index 00000000..75a709b3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/256.png new file mode 100644 index 00000000..7b90bde4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/32.png new file mode 100644 index 00000000..f18b42fd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/48.png new file mode 100644 index 00000000..e790d209 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/64.png new file mode 100644 index 00000000..ea4d4260 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/96.png new file mode 100644 index 00000000..06d480a1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/movistar_cero.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/movistar_cero.ico new file mode 100644 index 00000000..e7456704 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cero/HD/movistar_cero.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_accion@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/movistar_cine_accion.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/movistar_cine_accion.ico new file mode 100644 index 00000000..7e9b3b9d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/(default)/movistar_cine_accion.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_accion@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/movistar_cine_accion.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/movistar_cine_accion.ico new file mode 100644 index 00000000..52116d45 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_accion/HD/movistar_cine_accion.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_cine_n@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/movistar_cine_cine_n.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/movistar_cine_cine_n.ico new file mode 100644 index 00000000..d1406fb6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_cine_n/(default)/movistar_cine_cine_n.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_comedia@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/movistar_cine_comedia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/movistar_cine_comedia.ico new file mode 100644 index 00000000..f09f95f5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/(default)/movistar_cine_comedia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_comedia@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/movistar_cine_comedia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/movistar_cine_comedia.ico new file mode 100644 index 00000000..9a1c945a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_comedia/HD/movistar_cine_comedia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/128.png new file mode 100644 index 00000000..6e37868a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/24.png new file mode 100644 index 00000000..fa0914d1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/256.png new file mode 100644 index 00000000..89ca6d81 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/32.png new file mode 100644 index 00000000..ac4b5fea Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/48.png new file mode 100644 index 00000000..422a0f57 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/64.png new file mode 100644 index 00000000..7a30a898 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/96.png new file mode 100644 index 00000000..fe11ce13 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/movistar_cine_doc_roll.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/movistar_cine_doc_roll.ico new file mode 100644 index 00000000..c8a9a073 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/(default)/movistar_cine_doc_roll.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/128.png new file mode 100644 index 00000000..3e7c9231 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/24.png new file mode 100644 index 00000000..1aa7c21f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/256.png new file mode 100644 index 00000000..980e7236 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/32.png new file mode 100644 index 00000000..e1680cb4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/48.png new file mode 100644 index 00000000..ab045e32 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/64.png new file mode 100644 index 00000000..b6c12c34 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/96.png new file mode 100644 index 00000000..34803e56 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/movistar_cine_doc_roll.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/movistar_cine_doc_roll.ico new file mode 100644 index 00000000..a8a459dc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_doc_roll/HD/movistar_cine_doc_roll.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/128.png new file mode 100644 index 00000000..145e09bb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/24.png new file mode 100644 index 00000000..4a42dc6f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/256.png new file mode 100644 index 00000000..7ccc38e2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/32.png new file mode 100644 index 00000000..227a330b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/48.png new file mode 100644 index 00000000..d6e002ac Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/64.png new file mode 100644 index 00000000..f01b22c4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/96.png new file mode 100644 index 00000000..3adc6aed Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/movistar_cine_espanol.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/movistar_cine_espanol.ico new file mode 100644 index 00000000..752ddd97 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/(default)/movistar_cine_espanol.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/128.png new file mode 100644 index 00000000..8e413411 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/24.png new file mode 100644 index 00000000..b5a99c40 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/256.png new file mode 100644 index 00000000..aca63cd5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/32.png new file mode 100644 index 00000000..ff1ef3e0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/48.png new file mode 100644 index 00000000..29a508ca Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/64.png new file mode 100644 index 00000000..04c0f924 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/96.png new file mode 100644 index 00000000..d571a434 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/movistar_cine_espanol.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/movistar_cine_espanol.ico new file mode 100644 index 00000000..89908f0b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_espanol/HD/movistar_cine_espanol.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_cine_estrenos@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/movistar_cine_estrenos.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/movistar_cine_estrenos.ico new file mode 100644 index 00000000..131b0295 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/(default)/movistar_cine_estrenos.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_cine_estrenos@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/movistar_cine_estrenos.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/movistar_cine_estrenos.ico new file mode 100644 index 00000000..b4659c70 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_cine_estrenos/HD/movistar_cine_estrenos.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/128.png new file mode 100644 index 00000000..14ea29f6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/24.png new file mode 100644 index 00000000..43297fc5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/256.png new file mode 100644 index 00000000..f5bb33e9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/32.png new file mode 100644 index 00000000..619151fb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/48.png new file mode 100644 index 00000000..49456102 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/64.png new file mode 100644 index 00000000..370f81fd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/96.png new file mode 100644 index 00000000..a8e8627e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/movistar_deportes.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/movistar_deportes.ico new file mode 100644 index 00000000..8bd44677 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/(default)/movistar_deportes.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/128.png new file mode 100644 index 00000000..d56ef717 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/24.png new file mode 100644 index 00000000..15f5909a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/256.png new file mode 100644 index 00000000..a5353479 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/32.png new file mode 100644 index 00000000..bb9d6a69 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/48.png new file mode 100644 index 00000000..6b3767da Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/64.png new file mode 100644 index 00000000..294ce246 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/96.png new file mode 100644 index 00000000..1b067937 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/movistar_deportes.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/movistar_deportes.ico new file mode 100644 index 00000000..d86f72f9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes/HD/movistar_deportes.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_1@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/movistar_deportes_1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/movistar_deportes_1.ico new file mode 100644 index 00000000..f5a5f14e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/(default)/movistar_deportes_1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_1@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/movistar_deportes_1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/movistar_deportes_1.ico new file mode 100644 index 00000000..f6ed3aa2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_1/HD/movistar_deportes_1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_deportes_2@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/movistar_deportes_2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/movistar_deportes_2.ico new file mode 100644 index 00000000..2fc07717 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/(default)/movistar_deportes_2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_deportes_2@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/movistar_deportes_2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/movistar_deportes_2.ico new file mode 100644 index 00000000..6de7819b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_deportes_2/HD/movistar_deportes_2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/128.png new file mode 100644 index 00000000..815760b3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/24.png new file mode 100644 index 00000000..878decf5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/256.png new file mode 100644 index 00000000..0315cfbc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/32.png new file mode 100644 index 00000000..118e3d27 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/48.png new file mode 100644 index 00000000..e53c8f02 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/64.png new file mode 100644 index 00000000..b1c813fa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/96.png new file mode 100644 index 00000000..dbf18c80 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/movistar_disney.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/movistar_disney.ico new file mode 100644 index 00000000..232b0a41 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/(default)/movistar_disney.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/128.png new file mode 100644 index 00000000..f4dcce94 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/24.png new file mode 100644 index 00000000..53a59cff Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/256.png new file mode 100644 index 00000000..36b58b1c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/32.png new file mode 100644 index 00000000..e24a994f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/48.png new file mode 100644 index 00000000..5a4acc32 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/64.png new file mode 100644 index 00000000..109d3c9d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/96.png new file mode 100644 index 00000000..7995c80b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/movistar_disney.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/movistar_disney.ico new file mode 100644 index 00000000..2562d0b6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_disney/HD/movistar_disney.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/128.png new file mode 100644 index 00000000..0d132f8e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/24.png new file mode 100644 index 00000000..7317023c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/256.png new file mode 100644 index 00000000..227118eb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/32.png new file mode 100644 index 00000000..192d8985 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/48.png new file mode 100644 index 00000000..537808d0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/64.png new file mode 100644 index 00000000..a5869257 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/96.png new file mode 100644 index 00000000..537008f1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/movistar_drama.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/movistar_drama.ico new file mode 100644 index 00000000..e9e27a58 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/(default)/movistar_drama.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/128.png new file mode 100644 index 00000000..6c38da16 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/24.png new file mode 100644 index 00000000..beff0ad8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/256.png new file mode 100644 index 00000000..33189b70 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/32.png new file mode 100644 index 00000000..f90ab8c8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/48.png new file mode 100644 index 00000000..4e14f9b7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/64.png new file mode 100644 index 00000000..26fa7fe7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/96.png new file mode 100644 index 00000000..7ece2b28 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/movistar_drama.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/movistar_drama.ico new file mode 100644 index 00000000..a054c1e7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_drama/HD/movistar_drama.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/128.png new file mode 100644 index 00000000..68d9347d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/256.png new file mode 100644 index 00000000..29577979 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/32.png new file mode 100644 index 00000000..312613cc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/48.png new file mode 100644 index 00000000..75659e22 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/64.png new file mode 100644 index 00000000..8c99989d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/96.png new file mode 100644 index 00000000..140e1c35 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/movistar_f1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/movistar_f1.ico new file mode 100644 index 00000000..365667cb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/(default)/movistar_f1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/128.png new file mode 100644 index 00000000..ac581a94 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/256.png new file mode 100644 index 00000000..c64ced32 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/32.png new file mode 100644 index 00000000..a82bc232 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/48.png new file mode 100644 index 00000000..9dd7ace8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/64.png new file mode 100644 index 00000000..75134bb7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/96.png new file mode 100644 index 00000000..2521be2e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/movistar_f1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/movistar_f1.ico new file mode 100644 index 00000000..049951a6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_f1/HD/movistar_f1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/movistar_generico.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/movistar_generico.ico new file mode 100644 index 00000000..0064d79d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/(default)/movistar_generico.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/movistar_generico.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/movistar_generico.ico new file mode 100644 index 00000000..c0b8ad4e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico/HD/movistar_generico.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_cine@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/movistar_generico_cine.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/movistar_generico_cine.ico new file mode 100644 index 00000000..8e0f55f1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/(default)/movistar_generico_cine.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_cine@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/movistar_generico_cine.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/movistar_generico_cine.ico new file mode 100644 index 00000000..9ce80c68 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_cine/HD/movistar_generico_cine.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_f1@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/movistar_generico_f1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/movistar_generico_f1.ico new file mode 100644 index 00000000..b46a486e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/(default)/movistar_generico_f1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_f1@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/movistar_generico_f1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/movistar_generico_f1.ico new file mode 100644 index 00000000..17b5da44 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_f1/HD/movistar_generico_f1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_futbol@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/movistar_generico_futbol.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/movistar_generico_futbol.ico new file mode 100644 index 00000000..acf02427 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/(default)/movistar_generico_futbol.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_futbol@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/movistar_generico_futbol.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/movistar_generico_futbol.ico new file mode 100644 index 00000000..d809a161 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_futbol/HD/movistar_generico_futbol.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_generico_motogp@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/movistar_generico_motogp.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/movistar_generico_motogp.ico new file mode 100644 index 00000000..a08dc0c1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/(default)/movistar_generico_motogp.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_generico_motogp@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/movistar_generico_motogp.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/movistar_generico_motogp.ico new file mode 100644 index 00000000..c5cdd6e2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_generico_motogp/HD/movistar_generico_motogp.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/128.png new file mode 100644 index 00000000..10b15581 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/24.png new file mode 100644 index 00000000..9319d316 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/256.png new file mode 100644 index 00000000..dedb3a52 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/32.png new file mode 100644 index 00000000..273e6b2d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/48.png new file mode 100644 index 00000000..39da4183 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/64.png new file mode 100644 index 00000000..8131271f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/96.png new file mode 100644 index 00000000..8c70ca64 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/movistar_golf.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/movistar_golf.ico new file mode 100644 index 00000000..8c9f2269 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/(default)/movistar_golf.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/128.png new file mode 100644 index 00000000..bb1ce655 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/24.png new file mode 100644 index 00000000..39e1f0e6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/256.png new file mode 100644 index 00000000..5cbb9626 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/32.png new file mode 100644 index 00000000..36614c61 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/48.png new file mode 100644 index 00000000..ba2fd43e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/64.png new file mode 100644 index 00000000..8d758bcf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/96.png new file mode 100644 index 00000000..58cd9090 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/movistar_golf.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/movistar_golf.ico new file mode 100644 index 00000000..15a05a63 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_golf/HD/movistar_golf.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/128.png new file mode 100644 index 00000000..202a19c4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/24.png new file mode 100644 index 00000000..5ccb9831 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/256.png new file mode 100644 index 00000000..7a00abb2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/32.png new file mode 100644 index 00000000..5252ba43 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/48.png new file mode 100644 index 00000000..2e4e9f47 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/64.png new file mode 100644 index 00000000..8f6b2215 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/96.png new file mode 100644 index 00000000..615adbae Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/movistar_liga.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/movistar_liga.ico new file mode 100644 index 00000000..edb35f32 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/(default)/movistar_liga.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/128.png new file mode 100644 index 00000000..ca485f97 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/24.png new file mode 100644 index 00000000..06cd58f6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/256.png new file mode 100644 index 00000000..713d4783 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/32.png new file mode 100644 index 00000000..223cc145 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/48.png new file mode 100644 index 00000000..0600878b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/64.png new file mode 100644 index 00000000..13ed79b2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/96.png new file mode 100644 index 00000000..c3834295 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/movistar_liga.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/movistar_liga.ico new file mode 100644 index 00000000..be5eb60f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/4K/movistar_liga.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/128.png new file mode 100644 index 00000000..10cfa104 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/24.png new file mode 100644 index 00000000..1c6a7c87 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/256.png new file mode 100644 index 00000000..637cfe82 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/32.png new file mode 100644 index 00000000..2715dd4f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/48.png new file mode 100644 index 00000000..817e850c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/64.png new file mode 100644 index 00000000..1f8f7688 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/96.png new file mode 100644 index 00000000..7db51363 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/movistar_liga.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/movistar_liga.ico new file mode 100644 index 00000000..fc192894 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga/HD/movistar_liga.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/128.png new file mode 100644 index 00000000..fada30ce Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/24.png new file mode 100644 index 00000000..f56c6220 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/256.png new file mode 100644 index 00000000..30d61699 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/32.png new file mode 100644 index 00000000..1e4e0459 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/48.png new file mode 100644 index 00000000..7139748b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/64.png new file mode 100644 index 00000000..aaab377b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/96.png new file mode 100644 index 00000000..d328d015 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/movistar_liga_campeones.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/movistar_liga_campeones.ico new file mode 100644 index 00000000..eeb23e31 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/(default)/movistar_liga_campeones.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/128.png new file mode 100644 index 00000000..7aa512ce Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/24.png new file mode 100644 index 00000000..1f097b2a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/256.png new file mode 100644 index 00000000..cf6df35e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/32.png new file mode 100644 index 00000000..31de3baf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/48.png new file mode 100644 index 00000000..5b8c3b03 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/64.png new file mode 100644 index 00000000..78623907 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/96.png new file mode 100644 index 00000000..7de23b66 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/movistar_liga_campeones.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/movistar_liga_campeones.ico new file mode 100644 index 00000000..ac8c8684 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/4K/movistar_liga_campeones.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/128.png new file mode 100644 index 00000000..a68e2961 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/24.png new file mode 100644 index 00000000..3ecb7a65 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/256.png new file mode 100644 index 00000000..28af4db9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/32.png new file mode 100644 index 00000000..13b49535 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/48.png new file mode 100644 index 00000000..e928cadf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/64.png new file mode 100644 index 00000000..74c7299c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/96.png new file mode 100644 index 00000000..b439757d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/movistar_liga_campeones.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/movistar_liga_campeones.ico new file mode 100644 index 00000000..3e6374a5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_liga_campeones/HD/movistar_liga_campeones.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/128.png new file mode 100644 index 00000000..85445b0b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/24.png new file mode 100644 index 00000000..c4706e3d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/256.png new file mode 100644 index 00000000..60518baf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/32.png new file mode 100644 index 00000000..6087cc44 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/48.png new file mode 100644 index 00000000..e580d880 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/64.png new file mode 100644 index 00000000..1fe5b58d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/96.png new file mode 100644 index 00000000..2f7baaea Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/movistar_partidazo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/movistar_partidazo.ico new file mode 100644 index 00000000..5f1774f7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/(default)/movistar_partidazo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/128.png new file mode 100644 index 00000000..e2676390 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/24.png new file mode 100644 index 00000000..54fe42d5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/256.png new file mode 100644 index 00000000..8d02054d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/32.png new file mode 100644 index 00000000..58671e9d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/48.png new file mode 100644 index 00000000..f18e8f1f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/64.png new file mode 100644 index 00000000..86fc0fcc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/96.png new file mode 100644 index 00000000..f96a8d8e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/movistar_partidazo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/movistar_partidazo.ico new file mode 100644 index 00000000..480e1e6c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/4K/movistar_partidazo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/128.png new file mode 100644 index 00000000..4d958f81 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/24.png new file mode 100644 index 00000000..7a7f1c98 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/256.png new file mode 100644 index 00000000..b670ce3b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/32.png new file mode 100644 index 00000000..ed0da2fb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/48.png new file mode 100644 index 00000000..f24ab0a3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/64.png new file mode 100644 index 00000000..00b4e024 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/96.png new file mode 100644 index 00000000..b820afda Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/movistar_partidazo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/movistar_partidazo.ico new file mode 100644 index 00000000..7cbc6d44 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo/HD/movistar_partidazo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_partidazo_bar@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/movistar_partidazo_bar.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/movistar_partidazo_bar.ico new file mode 100644 index 00000000..57307ccb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_partidazo_bar/(default)/movistar_partidazo_bar.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistar_series@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/movistar_series.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/movistar_series.ico new file mode 100644 index 00000000..84ead914 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/(default)/movistar_series.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistar_series@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/movistar_series.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/movistar_series.ico new file mode 100644 index 00000000..12243592 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_series/HD/movistar_series.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/128.png new file mode 100644 index 00000000..a9824874 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/24.png new file mode 100644 index 00000000..1f7b8b82 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/256.png new file mode 100644 index 00000000..19c6334e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/32.png new file mode 100644 index 00000000..5949d3e9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/48.png new file mode 100644 index 00000000..bbc4ba6b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/64.png new file mode 100644 index 00000000..9045c4c7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/96.png new file mode 100644 index 00000000..93edf0bf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/movistar_vamos.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/movistar_vamos.ico new file mode 100644 index 00000000..5530f324 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/(default)/movistar_vamos.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/128.png new file mode 100644 index 00000000..23b4b586 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/24.png new file mode 100644 index 00000000..e9910c6a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/256.png new file mode 100644 index 00000000..7af43cd7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/32.png new file mode 100644 index 00000000..f365fca9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/48.png new file mode 100644 index 00000000..3b3485e4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/64.png new file mode 100644 index 00000000..0943bd32 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/96.png new file mode 100644 index 00000000..c4919747 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/movistar_vamos.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/movistar_vamos.ico new file mode 100644 index 00000000..50d23a6e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistar_vamos/HD/movistar_vamos.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/movistarplus.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/movistarplus.ico new file mode 100644 index 00000000..8bac64dc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/(default)/movistarplus.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/movistarplus.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/movistarplus.ico new file mode 100644 index 00000000..8bac64dc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus/HD/movistarplus.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_movistarplus_tematicos_deportes@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/movistarplus_tematicos_deportes.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/movistarplus_tematicos_deportes.ico new file mode 100644 index 00000000..a0836408 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/(default)/movistarplus_tematicos_deportes.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/movistarplus_tematicos_deportes@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/movistarplus_tematicos_deportes.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/movistarplus_tematicos_deportes.ico new file mode 100644 index 00000000..a0836408 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/movistarplus_tematicos_deportes/HD/movistarplus_tematicos_deportes.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/mtv_spain@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/mtv_spain.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/mtv_spain.ico new file mode 100644 index 00000000..e3dfef8f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/mtv_spain/(default)/mtv_spain.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/natgeo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/natgeo.ico new file mode 100644 index 00000000..39bc80a7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/(default)/natgeo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/natgeo.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/natgeo.ico new file mode 100644 index 00000000..67344996 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo/HD/natgeo.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/natgeo_wild@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/natgeo_wild.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/natgeo_wild.ico new file mode 100644 index 00000000..42f3a557 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/(default)/natgeo_wild.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_natgeo_wild@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/natgeo_wild.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/natgeo_wild.ico new file mode 100644 index 00000000..c00120ab Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/natgeo_wild/HD/natgeo_wild.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/128.png new file mode 100644 index 00000000..d8da7ff5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/24.png new file mode 100644 index 00000000..cf5376f9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/256.png new file mode 100644 index 00000000..6edeb77c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/32.png new file mode 100644 index 00000000..a476b8e1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/48.png new file mode 100644 index 00000000..751879d7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/64.png new file mode 100644 index 00000000..526cb8d9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/96.png new file mode 100644 index 00000000..2e2c7cdf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/neox.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/neox.ico new file mode 100644 index 00000000..79ab92f2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/(default)/neox.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/128.png new file mode 100644 index 00000000..b7d7aa16 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/24.png new file mode 100644 index 00000000..9defe568 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/256.png new file mode 100644 index 00000000..a02cf74d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/32.png new file mode 100644 index 00000000..8876277d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/48.png new file mode 100644 index 00000000..e34bf380 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/64.png new file mode 100644 index 00000000..28b049a9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/96.png new file mode 100644 index 00000000..3dfbf536 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/neox.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/neox.ico new file mode 100644 index 00000000..2c648f5e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/neox/HD/neox.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/128.png new file mode 100644 index 00000000..d56f4de4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/24.png new file mode 100644 index 00000000..b3a067a2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/256.png new file mode 100644 index 00000000..8bf33968 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/32.png new file mode 100644 index 00000000..97a72c65 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/48.png new file mode 100644 index 00000000..a2306830 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/64.png new file mode 100644 index 00000000..7c53b9d8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/96.png new file mode 100644 index 00000000..8f990e09 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/netflix.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/netflix.ico new file mode 100644 index 00000000..46b1438d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/netflix/(default)/netflix.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/128.png new file mode 100644 index 00000000..06d6fba5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/24.png new file mode 100644 index 00000000..e18ba70e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/256.png new file mode 100644 index 00000000..62822a7c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/32.png new file mode 100644 index 00000000..6a3f892a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/48.png new file mode 100644 index 00000000..5f0c5cf8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/64.png new file mode 100644 index 00000000..e9b3ef0c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/96.png new file mode 100644 index 00000000..cecf0bab Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/nickelodeon.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/nickelodeon.ico new file mode 100644 index 00000000..6b7cee09 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/(default)/nickelodeon.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/128.png new file mode 100644 index 00000000..ba691f98 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/24.png new file mode 100644 index 00000000..af94c125 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/256.png new file mode 100644 index 00000000..021e5b83 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/32.png new file mode 100644 index 00000000..8159fbc4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/48.png new file mode 100644 index 00000000..1b4421fd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/64.png new file mode 100644 index 00000000..fdea5d7e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/96.png new file mode 100644 index 00000000..2d434386 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/nickelodeon.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/nickelodeon.ico new file mode 100644 index 00000000..b7d4a275 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon/HD/nickelodeon.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/128.png new file mode 100644 index 00000000..0bfb19da Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/24.png new file mode 100644 index 00000000..197879bd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/256.png new file mode 100644 index 00000000..9e6c29a5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/32.png new file mode 100644 index 00000000..ba97796f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/48.png new file mode 100644 index 00000000..7b4cd71d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/64.png new file mode 100644 index 00000000..4a86850e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/96.png new file mode 100644 index 00000000..3dd3d3e9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/nickelodeon_jr.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/nickelodeon_jr.ico new file mode 100644 index 00000000..23b13f36 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/(default)/nickelodeon_jr.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/128.png new file mode 100644 index 00000000..376dd8db Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/24.png new file mode 100644 index 00000000..d642074a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/256.png new file mode 100644 index 00000000..357d3d33 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/32.png new file mode 100644 index 00000000..64b8c686 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/48.png new file mode 100644 index 00000000..f7d3d846 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/64.png new file mode 100644 index 00000000..a1b55aa9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/96.png new file mode 100644 index 00000000..376c7983 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/nickelodeon_jr.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/nickelodeon_jr.ico new file mode 100644 index 00000000..6b303b1a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nickelodeon_jr/HD/nickelodeon_jr.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/128.png new file mode 100644 index 00000000..36269fbf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/24.png new file mode 100644 index 00000000..f7d5625d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/256.png new file mode 100644 index 00000000..934d6a2f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/32.png new file mode 100644 index 00000000..268efb3f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/48.png new file mode 100644 index 00000000..8033e68d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/64.png new file mode 100644 index 00000000..a78a9c8f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/96.png new file mode 100644 index 00000000..ba41f281 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/nova.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/nova.ico new file mode 100644 index 00000000..6561edd7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/(default)/nova.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/128.png new file mode 100644 index 00000000..f2fb9a56 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/24.png new file mode 100644 index 00000000..cfba91bb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/256.png new file mode 100644 index 00000000..30c9b31c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/32.png new file mode 100644 index 00000000..9bae95a2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/48.png new file mode 100644 index 00000000..a67f13c1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/64.png new file mode 100644 index 00000000..46ae2048 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/96.png new file mode 100644 index 00000000..7bd5e162 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/nova.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/nova.ico new file mode 100644 index 00000000..c8110dcf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/nova/HD/nova.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/odisea@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/odisea.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/odisea.ico new file mode 100644 index 00000000..1195b552 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/(default)/odisea.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_odisea@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/odisea.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/odisea.ico new file mode 100644 index 00000000..6a66da4d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/odisea/HD/odisea.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/orbe21@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/orbe21.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/orbe21.ico new file mode 100644 index 00000000..69b9d3d7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/orbe21/(default)/orbe21.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/panda@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/panda.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/panda.ico new file mode 100644 index 00000000..f1abe254 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/panda/(default)/panda.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/128.png new file mode 100644 index 00000000..fce6ca5d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/256.png new file mode 100644 index 00000000..a5305e5d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/32.png new file mode 100644 index 00000000..87fb6efe Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/48.png new file mode 100644 index 00000000..ec0ecdc5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/64.png new file mode 100644 index 00000000..256cbd71 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/96.png new file mode 100644 index 00000000..1729e97e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/playboy.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/playboy.ico new file mode 100644 index 00000000..2ef6a820 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/playboy/(default)/playboy.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/128.png new file mode 100644 index 00000000..7d035cb0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/24.png new file mode 100644 index 00000000..c9c67250 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/256.png new file mode 100644 index 00000000..971d1cce Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/32.png new file mode 100644 index 00000000..0abe16e8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/48.png new file mode 100644 index 00000000..6d9a2303 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/64.png new file mode 100644 index 00000000..f3e78f53 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/96.png new file mode 100644 index 00000000..f22f595f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/realmadridtv.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/realmadridtv.ico new file mode 100644 index 00000000..784428b6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/(default)/realmadridtv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/128.png new file mode 100644 index 00000000..e46453d3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/24.png new file mode 100644 index 00000000..a6fe46e5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/256.png new file mode 100644 index 00000000..58df8dae Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/32.png new file mode 100644 index 00000000..6bec9b76 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/48.png new file mode 100644 index 00000000..c444ba61 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/64.png new file mode 100644 index 00000000..769ed24e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/96.png new file mode 100644 index 00000000..11dda64a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/realmadridtv.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/realmadridtv.ico new file mode 100644 index 00000000..4a924f67 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/realmadridtv/HD/realmadridtv.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/128.png new file mode 100644 index 00000000..10ce16c9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/256.png new file mode 100644 index 00000000..515a94cd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/32.png new file mode 100644 index 00000000..0be251be Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/48.png new file mode 100644 index 00000000..fee8cc60 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/64.png new file mode 100644 index 00000000..2f445545 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/96.png new file mode 100644 index 00000000..8cfa8c76 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/russiatoday.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/russiatoday.ico new file mode 100644 index 00000000..fa615e31 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/russiatoday/(default)/russiatoday.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/128.png new file mode 100644 index 00000000..6704e07e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/24.png new file mode 100644 index 00000000..b5fb2bac Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/256.png new file mode 100644 index 00000000..129121e6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/32.png new file mode 100644 index 00000000..4cee3acb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/48.png new file mode 100644 index 00000000..06f1ebf9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/64.png new file mode 100644 index 00000000..544b4f7c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/96.png new file mode 100644 index 00000000..02d21683 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/stingray_classica.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/stingray_classica.ico new file mode 100644 index 00000000..1a07b65c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/(default)/stingray_classica.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/128.png new file mode 100644 index 00000000..3e87c1d6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/24.png new file mode 100644 index 00000000..bc8a09ec Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/256.png new file mode 100644 index 00000000..41671ea7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/32.png new file mode 100644 index 00000000..287dd1ca Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/48.png new file mode 100644 index 00000000..b15acd75 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/64.png new file mode 100644 index 00000000..d6617223 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/96.png new file mode 100644 index 00000000..bfb66afe Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/stingray_classica.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/stingray_classica.ico new file mode 100644 index 00000000..5b3e66be Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/stingray_classica/HD/stingray_classica.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/sundance@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/sundance.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/sundance.ico new file mode 100644 index 00000000..d8edf2ac Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/(default)/sundance.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/24.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@24.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/24.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_sundance@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/sundance.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/sundance.ico new file mode 100644 index 00000000..8b8409a5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/sundance/HD/sundance.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/128.png new file mode 100644 index 00000000..9589c44c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/24.png new file mode 100644 index 00000000..8a79b7f5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/256.png new file mode 100644 index 00000000..cb075565 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/32.png new file mode 100644 index 00000000..2c031969 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/48.png new file mode 100644 index 00000000..a387015c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/64.png new file mode 100644 index 00000000..76df307d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/96.png new file mode 100644 index 00000000..dafdf8e5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/syfy.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/syfy.ico new file mode 100644 index 00000000..82c510ba Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/(default)/syfy.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/128.png new file mode 100644 index 00000000..ab7c23ab Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/256.png new file mode 100644 index 00000000..3ff0c88d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/32.png new file mode 100644 index 00000000..684870d7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/48.png new file mode 100644 index 00000000..d55f8c09 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/64.png new file mode 100644 index 00000000..7a2b5650 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/96.png new file mode 100644 index 00000000..0a1f256a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/syfy.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/syfy.ico new file mode 100644 index 00000000..0c31ad9f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/syfy/HD/syfy.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/128.png new file mode 100644 index 00000000..d2ccfa2b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/256.png new file mode 100644 index 00000000..da9365f1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/32.png new file mode 100644 index 00000000..4ea4369e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/48.png new file mode 100644 index 00000000..dcf7c4fa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/64.png new file mode 100644 index 00000000..5a076dd3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/96.png new file mode 100644 index 00000000..9336b57e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/tcm.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/tcm.ico new file mode 100644 index 00000000..796a00e8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/(default)/tcm.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/128.png new file mode 100644 index 00000000..a224e059 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/256.png new file mode 100644 index 00000000..fa207fdf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/32.png new file mode 100644 index 00000000..61b63b08 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/48.png new file mode 100644 index 00000000..5296fead Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/64.png new file mode 100644 index 00000000..4cae1adc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/96.png new file mode 100644 index 00000000..28019cfd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/tcm.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/tcm.ico new file mode 100644 index 00000000..d1c36b18 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tcm/HD/tcm.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/tele5@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/tele5.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/tele5.ico new file mode 100644 index 00000000..5eb0edec Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/(default)/tele5.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_tele5@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/tele5.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/tele5.ico new file mode 100644 index 00000000..de49003c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tele5/HD/tele5.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefe@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/telefe.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/telefe.ico new file mode 100644 index 00000000..b4038147 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefe/(default)/telefe.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/telefonica_empleados@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/telefonica_empleados.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/telefonica_empleados.ico new file mode 100644 index 00000000..8b8813bb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telefonica_empleados/(default)/telefonica_empleados.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/128.png new file mode 100644 index 00000000..752f2462 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/256.png new file mode 100644 index 00000000..c12aeb8f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/32.png new file mode 100644 index 00000000..28fc7d6a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/48.png new file mode 100644 index 00000000..5e7b63a8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/64.png new file mode 100644 index 00000000..516fd950 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/96.png new file mode 100644 index 00000000..8d7096e3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/telesur.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/telesur.ico new file mode 100644 index 00000000..75b6271a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/telesur/(default)/telesur.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_ten@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/ten.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/ten.ico new file mode 100644 index 00000000..518ec4f6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ten/HD/ten.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/128.png new file mode 100644 index 00000000..53b10b46 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/256.png new file mode 100644 index 00000000..bb110aaf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/32.png new file mode 100644 index 00000000..5c5e5c56 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/48.png new file mode 100644 index 00000000..8caa8889 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/64.png new file mode 100644 index 00000000..3c45e1d1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/96.png new file mode 100644 index 00000000..8444d754 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/tnt.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/tnt.ico new file mode 100644 index 00000000..0e028202 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/(default)/tnt.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/128.png new file mode 100644 index 00000000..0bf2d22f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/256.png new file mode 100644 index 00000000..e5200f2b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/32.png new file mode 100644 index 00000000..0f6adb4f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/48.png new file mode 100644 index 00000000..59d18a74 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/64.png new file mode 100644 index 00000000..936c4e7f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/96.png new file mode 100644 index 00000000..dfc70c8f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/tnt.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/tnt.ico new file mode 100644 index 00000000..1abd0470 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tnt/HD/tnt.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/128.png new file mode 100644 index 00000000..eb93af2f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/24.png new file mode 100644 index 00000000..df5312ee Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/256.png new file mode 100644 index 00000000..8ce89b21 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/32.png new file mode 100644 index 00000000..1a6bf2fe Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/48.png new file mode 100644 index 00000000..31a77b07 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/64.png new file mode 100644 index 00000000..d84a2b2e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/96.png new file mode 100644 index 00000000..2091314c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/toros.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/toros.ico new file mode 100644 index 00000000..17d7e2b1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/(default)/toros.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/128.png new file mode 100644 index 00000000..2d135942 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/24.png new file mode 100644 index 00000000..39c95272 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/256.png new file mode 100644 index 00000000..6c49faae Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/32.png new file mode 100644 index 00000000..2382728b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/48.png new file mode 100644 index 00000000..41749177 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/64.png new file mode 100644 index 00000000..e3e4e01e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/96.png new file mode 100644 index 00000000..5e6d1467 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/toros.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/toros.ico new file mode 100644 index 00000000..e09d8d93 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/toros/HD/toros.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/128.png new file mode 100644 index 00000000..ce1ec7c0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/24.png new file mode 100644 index 00000000..e66f7fbf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/256.png new file mode 100644 index 00000000..17148492 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/32.png new file mode 100644 index 00000000..457612bc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/48.png new file mode 100644 index 00000000..6a0ffde9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/64.png new file mode 100644 index 00000000..ca18497d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/96.png new file mode 100644 index 00000000..71554c33 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/trece.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/trece.ico new file mode 100644 index 00000000..96891fc8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/trece/(default)/trece.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/128.png new file mode 100644 index 00000000..cdb3a3ae Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/256.png new file mode 100644 index 00000000..18416717 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/32.png new file mode 100644 index 00000000..9f1a83ee Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/48.png new file mode 100644 index 00000000..7bba694d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/64.png new file mode 100644 index 00000000..4dbe6e18 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/96.png new file mode 100644 index 00000000..4a7e514b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/tv5monde.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/tv5monde.ico new file mode 100644 index 00000000..609b0d5f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tv5monde/(default)/tv5monde.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/128.png new file mode 100644 index 00000000..8074c388 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/256.png new file mode 100644 index 00000000..71f99f45 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/32.png new file mode 100644 index 00000000..80a5295c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/48.png new file mode 100644 index 00000000..15b814d4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/64.png new file mode 100644 index 00000000..ad3db30f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/96.png new file mode 100644 index 00000000..46b11833 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/tvchile.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/tvchile.ico new file mode 100644 index 00000000..b242eb54 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvchile/(default)/tvchile.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/128.png new file mode 100644 index 00000000..071da0dd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/256.png new file mode 100644 index 00000000..f860ce6a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/32.png new file mode 100644 index 00000000..1295e1ee Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/48.png new file mode 100644 index 00000000..0e37d0e5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/64.png new file mode 100644 index 00000000..e246e821 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/96.png new file mode 100644 index 00000000..ae5c3563 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/tvcolombia.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/tvcolombia.ico new file mode 100644 index 00000000..4cc15531 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvcolombia/(default)/tvcolombia.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/128.png new file mode 100644 index 00000000..e1312633 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/24.png new file mode 100644 index 00000000..cdbd8025 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/256.png new file mode 100644 index 00000000..df0f49b7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/32.png new file mode 100644 index 00000000..c5247ed7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/48.png new file mode 100644 index 00000000..71e3346d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/64.png new file mode 100644 index 00000000..95dfde3f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/96.png new file mode 100644 index 00000000..7b423801 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/tve_1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/tve_1.ico new file mode 100644 index 00000000..434f6989 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/(default)/tve_1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/128.png new file mode 100644 index 00000000..2040fb69 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/24.png new file mode 100644 index 00000000..2881a8ab Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/256.png new file mode 100644 index 00000000..4ef33442 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/32.png new file mode 100644 index 00000000..70f04909 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/48.png new file mode 100644 index 00000000..1681470d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/64.png new file mode 100644 index 00000000..71a0a1dc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/96.png new file mode 100644 index 00000000..8fbb2642 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/tve_1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/tve_1.ico new file mode 100644 index 00000000..667eb245 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_1/HD/tve_1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/128.png new file mode 100644 index 00000000..79389f19 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/24.png new file mode 100644 index 00000000..a86eb640 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/256.png new file mode 100644 index 00000000..2ab8aa84 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/32.png new file mode 100644 index 00000000..53af68bc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/48.png new file mode 100644 index 00000000..a9b5e6d7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/64.png new file mode 100644 index 00000000..e3aedd93 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/96.png new file mode 100644 index 00000000..700089da Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/tve_2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/tve_2.ico new file mode 100644 index 00000000..27492394 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/(default)/tve_2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/128.png new file mode 100644 index 00000000..67f95458 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/24.png new file mode 100644 index 00000000..2eee295a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/256.png new file mode 100644 index 00000000..9eb5f290 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/32.png new file mode 100644 index 00000000..67b194ea Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/48.png new file mode 100644 index 00000000..a1ffbaf5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/64.png new file mode 100644 index 00000000..be9b8b80 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/96.png new file mode 100644 index 00000000..8d762ea1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/tve_2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/tve_2.ico new file mode 100644 index 00000000..b358cdd7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_2/HD/tve_2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/128.png new file mode 100644 index 00000000..b631046d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/24.png new file mode 100644 index 00000000..2c09bc04 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/256.png new file mode 100644 index 00000000..5e959d67 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/32.png new file mode 100644 index 00000000..916d887f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/48.png new file mode 100644 index 00000000..bb360278 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/64.png new file mode 100644 index 00000000..ff8c625e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/96.png new file mode 100644 index 00000000..69de960b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/tve_24h.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/tve_24h.ico new file mode 100644 index 00000000..ba51b8d4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_24h/(default)/tve_24h.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/128.png new file mode 100644 index 00000000..1a8ab758 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/24.png new file mode 100644 index 00000000..74dd093d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/256.png new file mode 100644 index 00000000..ed085dd9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/32.png new file mode 100644 index 00000000..e9838051 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/48.png new file mode 100644 index 00000000..9f3fc9f7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/64.png new file mode 100644 index 00000000..108aed53 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/96.png new file mode 100644 index 00000000..bb7aecb6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/tve_clan.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/tve_clan.ico new file mode 100644 index 00000000..355f7ed1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/(default)/tve_clan.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/128.png new file mode 100644 index 00000000..4111c8d6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/24.png new file mode 100644 index 00000000..be2bf48b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/256.png new file mode 100644 index 00000000..55c47a17 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/32.png new file mode 100644 index 00000000..157fafc9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/48.png new file mode 100644 index 00000000..398fa97e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/64.png new file mode 100644 index 00000000..41d651e1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/96.png new file mode 100644 index 00000000..9f9e2563 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/tve_clan.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/tve_clan.ico new file mode 100644 index 00000000..f5b3bce0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_clan/HD/tve_clan.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/128.png new file mode 100644 index 00000000..ded4a2f8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/24.png new file mode 100644 index 00000000..10dc4800 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/256.png new file mode 100644 index 00000000..4a1b409f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/32.png new file mode 100644 index 00000000..9dd5ffda Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/48.png new file mode 100644 index 00000000..c97b13a3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/64.png new file mode 100644 index 00000000..360faef3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/96.png new file mode 100644 index 00000000..d1f8bdea Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/tve_teledeporte.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/tve_teledeporte.ico new file mode 100644 index 00000000..86994914 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/(default)/tve_teledeporte.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/128.png new file mode 100644 index 00000000..0d114866 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/24.png new file mode 100644 index 00000000..4ba352f7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/256.png new file mode 100644 index 00000000..eb056b26 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/32.png new file mode 100644 index 00000000..7d2bb904 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/48.png new file mode 100644 index 00000000..6e66a6bc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/64.png new file mode 100644 index 00000000..a9615911 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/96.png new file mode 100644 index 00000000..52c2988a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/tve_teledeporte.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/tve_teledeporte.ico new file mode 100644 index 00000000..f914304c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tve_teledeporte/HD/tve_teledeporte.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/128.png new file mode 100644 index 00000000..46cf688c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/256.png new file mode 100644 index 00000000..c4b4e591 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/32.png new file mode 100644 index 00000000..423decb2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/48.png new file mode 100644 index 00000000..d96ca5c6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/64.png new file mode 100644 index 00000000..bf3040f9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/96.png new file mode 100644 index 00000000..ad3c898b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/tvrecord.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/tvrecord.ico new file mode 100644 index 00000000..dacab3af Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/tvrecord/(default)/tvrecord.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/128.png new file mode 100644 index 00000000..9dbcd957 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/24.png new file mode 100644 index 00000000..db0d194c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/256.png new file mode 100644 index 00000000..403ab4ec Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/32.png new file mode 100644 index 00000000..6b8b717a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/48.png new file mode 100644 index 00000000..a4f43929 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/64.png new file mode 100644 index 00000000..dc9faa8f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/96.png new file mode 100644 index 00000000..f71b1a64 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/ubeat.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/ubeat.ico new file mode 100644 index 00000000..d7f64844 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/(default)/ubeat.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/128.png new file mode 100644 index 00000000..248c6ccf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/24.png new file mode 100644 index 00000000..0c7bffd7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/256.png new file mode 100644 index 00000000..58b61816 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/32.png new file mode 100644 index 00000000..8d960b90 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/48.png new file mode 100644 index 00000000..3f7463d5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/64.png new file mode 100644 index 00000000..73189959 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/96.png new file mode 100644 index 00000000..be4ee717 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/ubeat.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/ubeat.ico new file mode 100644 index 00000000..e0b63190 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/ubeat/HD/ubeat.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/128.png new file mode 100644 index 00000000..fc6b5e50 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/24.png new file mode 100644 index 00000000..a87410fe Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/256.png new file mode 100644 index 00000000..ec948f40 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/32.png new file mode 100644 index 00000000..818cddb4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/48.png new file mode 100644 index 00000000..8eadaf2d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/64.png new file mode 100644 index 00000000..96e69722 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/96.png new file mode 100644 index 00000000..bdbe037f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/valencia_apunt.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/valencia_apunt.ico new file mode 100644 index 00000000..7d6b8b00 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/valencia_apunt/(default)/valencia_apunt.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/128.png new file mode 100644 index 00000000..8b4f5f01 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/24.png new file mode 100644 index 00000000..ac3eb554 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/256.png new file mode 100644 index 00000000..02e8105e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/32.png new file mode 100644 index 00000000..bb6db6c8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/48.png new file mode 100644 index 00000000..1101beaf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/64.png new file mode 100644 index 00000000..5aecf5d7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/96.png new file mode 100644 index 00000000..435cbfee Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/vasco_etb1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/vasco_etb1.ico new file mode 100644 index 00000000..9444b758 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/(default)/vasco_etb1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/128.png new file mode 100644 index 00000000..a3854368 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/24.png new file mode 100644 index 00000000..1a379d06 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/256.png new file mode 100644 index 00000000..1606fe58 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/32.png new file mode 100644 index 00000000..698ec684 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/48.png new file mode 100644 index 00000000..30bb935a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/64.png new file mode 100644 index 00000000..61ae953a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/96.png new file mode 100644 index 00000000..bc95e423 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/vasco_etb1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/vasco_etb1.ico new file mode 100644 index 00000000..dc1248cd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb1/HD/vasco_etb1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/128.png new file mode 100644 index 00000000..e7375757 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/24.png new file mode 100644 index 00000000..c945730b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/256.png new file mode 100644 index 00000000..e08be4bf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/32.png new file mode 100644 index 00000000..7c8d5643 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/48.png new file mode 100644 index 00000000..35233da8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/64.png new file mode 100644 index 00000000..aa15eb07 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/96.png new file mode 100644 index 00000000..7fbadac8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/vasco_etb2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/vasco_etb2.ico new file mode 100644 index 00000000..11269ef9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/(default)/vasco_etb2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/128.png new file mode 100644 index 00000000..3f36832c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/24.png new file mode 100644 index 00000000..f8477a40 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/256.png new file mode 100644 index 00000000..efcbcb11 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/32.png new file mode 100644 index 00000000..992bf768 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/48.png new file mode 100644 index 00000000..15c4b939 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/64.png new file mode 100644 index 00000000..50c75b5c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/96.png new file mode 100644 index 00000000..c9965609 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/vasco_etb2.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/vasco_etb2.ico new file mode 100644 index 00000000..a821d1b7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb2/HD/vasco_etb2.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/128.png new file mode 100644 index 00000000..9e821019 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/24.png new file mode 100644 index 00000000..c73a2767 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/256.png new file mode 100644 index 00000000..e31ceb09 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/32.png new file mode 100644 index 00000000..fb4bcef4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/48.png new file mode 100644 index 00000000..62dfe573 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/64.png new file mode 100644 index 00000000..40d0d639 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/96.png new file mode 100644 index 00000000..7d114c64 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/vasco_etb3.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/vasco_etb3.ico new file mode 100644 index 00000000..e3e130e1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb3/(default)/vasco_etb3.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/128.png new file mode 100644 index 00000000..7c29cdfc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/24.png new file mode 100644 index 00000000..c131a945 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/256.png new file mode 100644 index 00000000..04d8b904 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/32.png new file mode 100644 index 00000000..54e504bd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/48.png new file mode 100644 index 00000000..c77d0990 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/64.png new file mode 100644 index 00000000..eb8f34d3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/96.png new file mode 100644 index 00000000..dc48b81f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/vasco_etb_sat.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/vasco_etb_sat.ico new file mode 100644 index 00000000..c9eaa41f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vasco_etb_sat/(default)/vasco_etb_sat.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/128.png new file mode 100644 index 00000000..555e1367 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/24.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/24.png new file mode 100644 index 00000000..9a7dfed9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/256.png new file mode 100644 index 00000000..d8d65f49 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/32.png new file mode 100644 index 00000000..2458fa14 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/48.png new file mode 100644 index 00000000..58eae967 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/64.png new file mode 100644 index 00000000..cb3a2ab7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/96.png new file mode 100644 index 00000000..0dfc2b0a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/vh1.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/vh1.ico new file mode 100644 index 00000000..0fae6f2e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/vh1/(default)/vh1.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/viajar@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/viajar.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/viajar.ico new file mode 100644 index 00000000..4eeb5799 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/(default)/viajar.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@128.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/128.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@128.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/128.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@256.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/256.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@256.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/256.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@32.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/32.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@32.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/32.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@48.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/48.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@48.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/48.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@64.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/64.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@64.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/64.png diff --git a/1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@96.png b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/96.png similarity index 100% rename from 1.5 'Kruger 60'/Logos/Services/imagenio.es/hd_viajar@96.png rename to 1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/96.png diff --git a/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/viajar.ico b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/viajar.ico new file mode 100644 index 00000000..e781bb3f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Services/movistar+/imagenio.es/viajar/HD/viajar.ico differ diff --git a/1.5 'Kruger 60'/Logos/Services/service-mappings.xml b/1.5 'Kruger 60'/Logos/Services/service-mappings.xml index 3df2c08a..8459a760 100644 --- a/1.5 'Kruger 60'/Logos/Services/service-mappings.xml +++ b/1.5 'Kruger 60'/Logos/Services/service-mappings.xml @@ -1,26 +1,36 @@ - + - - - + + + - + - + - + - - + + @@ -33,7 +43,7 @@ All rights reserved, except those granted by the governing license of this softw - + @@ -46,9 +56,9 @@ All rights reserved, except those granted by the governing license of this softw - - - + + + @@ -56,7 +66,7 @@ All rights reserved, except those granted by the governing license of this softw - + @@ -64,19 +74,17 @@ All rights reserved, except those granted by the governing license of this softw - - + - - - + + @@ -86,253 +94,325 @@ All rights reserved, except those granted by the governing license of this softw - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - + + + - - + + - - - - - - - + + - - - - - - + + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + @@ -346,10 +426,11 @@ All rights reserved, except those granted by the governing license of this softw + - - + + @@ -361,8 +442,11 @@ All rights reserved, except those granted by the governing license of this softw - - + + + + + @@ -370,5 +454,5 @@ All rights reserved, except those granted by the governing license of this softw - - \ No newline at end of file + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/0_Movistar+.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/0_Movistar+.svg new file mode 100644 index 00000000..4a317754 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/0_Movistar+.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/1024px-CEXMA_new.png b/1.5 'Kruger 60'/Logos/Sources/Originals/1024px-CEXMA_new.png new file mode 100644 index 00000000..707e239e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/1024px-CEXMA_new.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/2019_Discovery_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/2019_Discovery_logo.svg new file mode 100644 index 00000000..30743a22 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/2019_Discovery_logo.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/4k.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/4k.svg new file mode 100644 index 00000000..a1f3f388 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/4k.svg @@ -0,0 +1,110 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + 4K + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Antena_3_(2017).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Antena_3_(2017).svg new file mode 100644 index 00000000..103d47f0 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Antena_3_(2017).svg @@ -0,0 +1,20 @@ + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Antena_3_2017.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Antena_3_2017.svg new file mode 100644 index 00000000..383fe658 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Antena_3_2017.svg @@ -0,0 +1,126 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/AtreseriesLogo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/AtreseriesLogo.svg new file mode 100644 index 00000000..8093e346 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/AtreseriesLogo.svg @@ -0,0 +1,73 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/BBC_World_News_2019.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/BBC_World_News_2019.svg new file mode 100644 index 00000000..8edcf3b8 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/BBC_World_News_2019.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Be_Mad_TV.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Be_Mad_TV.svg new file mode 100644 index 00000000..20a29bea --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Be_Mad_TV.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Blaze_-_2016_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Blaze_-_2016_logo.svg new file mode 100644 index 00000000..d5ced51b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Blaze_-_2016_logo.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Bloomberg_Television_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Bloomberg_Television_logo.svg new file mode 100644 index 00000000..e27925a1 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Bloomberg_Television_logo.svg @@ -0,0 +1,57 @@ + + + + +]> + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Boing.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Boing.svg new file mode 100644 index 00000000..1f8a3b4a --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Boing.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/CEXMA_new.png b/1.5 'Kruger 60'/Logos/Sources/Originals/CEXMA_new.png new file mode 100644 index 00000000..28821a0c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/CEXMA_new.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/CNBC_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/CNBC_logo.svg new file mode 100644 index 00000000..56af578e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/CNBC_logo.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/CNN_(2014).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/CNN_(2014).svg new file mode 100644 index 00000000..a4df43b1 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/CNN_(2014).svg @@ -0,0 +1,61 @@ + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Canal_Cocina.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Canal_Cocina.svg new file mode 100644 index 00000000..f3e3fef9 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Canal_Cocina.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Canal_Hollywood.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Canal_Hollywood.svg new file mode 100644 index 00000000..3847d1ae --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Canal_Hollywood.svg @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Canal_de_las_Estrellas_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Canal_de_las_Estrellas_logo.svg new file mode 100644 index 00000000..3c0a81e2 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Canal_de_las_Estrellas_logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Caza-y-Pesca-Logotipo-2016.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Caza-y-Pesca-Logotipo-2016.png new file mode 100644 index 00000000..75e38927 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Caza-y-Pesca-Logotipo-2016.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Cgtn_cn_espanol.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Cgtn_cn_espanol.png new file mode 100644 index 00000000..59bd7b72 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Cgtn_cn_espanol.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Comedy_Central_2018.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Comedy_Central_2018.svg new file mode 100644 index 00000000..5529460d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Comedy_Central_2018.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Cosmo_TV_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Cosmo_TV_logo.svg new file mode 100644 index 00000000..c83f9726 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Cosmo_TV_logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Crime_and_Investigation_logo.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Crime_and_Investigation_logo.png new file mode 100644 index 00000000..c8eb189d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Crime_and_Investigation_logo.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Cuatro.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Cuatro.svg new file mode 100644 index 00000000..032f0253 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Cuatro.svg @@ -0,0 +1,37 @@ + + + + + + + + + + +]> + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/CuatroHD.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/CuatroHD.svg new file mode 100644 index 00000000..3c6ab1f1 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/CuatroHD.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/DKISS_2019_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/DKISS_2019_logo.svg new file mode 100644 index 00000000..50331f22 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/DKISS_2019_logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/DMAX_Spain.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/DMAX_Spain.svg new file mode 100644 index 00000000..cab69f54 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/DMAX_Spain.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/1.5 'Kruger 60'/Logos/Sources/Originals/DMax_Espa\303\261a.svg" "b/1.5 'Kruger 60'/Logos/Sources/Originals/DMax_Espa\303\261a.svg" new file mode 100644 index 00000000..c818c9ef --- /dev/null +++ "b/1.5 'Kruger 60'/Logos/Sources/Originals/DMax_Espa\303\261a.svg" @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Dark_Teuve_2.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Dark_Teuve_2.png new file mode 100644 index 00000000..5fe928d2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Dark_Teuve_2.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Discovery_Channel_2019.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Discovery_Channel_2019.svg new file mode 100644 index 00000000..30743a22 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Discovery_Channel_2019.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Discovery_HD_2009.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Discovery_HD_2009.png new file mode 100644 index 00000000..d0d8e305 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Discovery_HD_2009.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_Channel_2017.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_Channel_2017.svg new file mode 100644 index 00000000..ef11bb1f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_Channel_2017.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_Channel_HD_2017.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_Channel_HD_2017.svg new file mode 100644 index 00000000..a5704f46 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_Channel_HD_2017.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_Junior.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_Junior.svg new file mode 100644 index 00000000..c0ef0bdf --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_Junior.svg @@ -0,0 +1,113 @@ + + Disney Junior.svg + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Layer 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_channel_2019.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_channel_2019.svg new file mode 100644 index 00000000..23231184 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Disney_channel_2019.svg @@ -0,0 +1,1310 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 +v/yHv8g/GcPfvv3lT3948z8BehLU + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Divinity.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Divinity.svg new file mode 100644 index 00000000..b5666833 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Divinity.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/ETB1_Spain.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/ETB1_Spain.svg new file mode 100644 index 00000000..5db3ea30 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/ETB1_Spain.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/ETB2_Spain.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/ETB2_Spain.svg new file mode 100644 index 00000000..435b045d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/ETB2_Spain.svg @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/ETB3_Spain.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/ETB3_Spain.svg new file mode 100644 index 00000000..d54543c6 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/ETB3_Spain.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/ETBSat_Spain.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/ETBSat_Spain.svg new file mode 100644 index 00000000..67846cef --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/ETBSat_Spain.svg @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/EWTN_Logo_and_Wordmark_(2016).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/EWTN_Logo_and_Wordmark_(2016).svg new file mode 100644 index 00000000..2f88bc9e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/EWTN_Logo_and_Wordmark_(2016).svg @@ -0,0 +1,156 @@ + +image/svg+xml \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Energy.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Energy.svg new file mode 100644 index 00000000..6b4c87c3 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Energy.svg @@ -0,0 +1,69 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Eurosport_1_Logo_2015.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Eurosport_1_Logo_2015.svg new file mode 100644 index 00000000..0b31e138 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Eurosport_1_Logo_2015.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Eurosport_2_(2015).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Eurosport_2_(2015).svg new file mode 100644 index 00000000..d6d1855b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Eurosport_2_(2015).svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/FC_Barcelona_(crest).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/FC_Barcelona_(crest).svg new file mode 100644 index 00000000..2cdadcbd --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/FC_Barcelona_(crest).svg @@ -0,0 +1,61 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/FOX_HD.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/FOX_HD.svg new file mode 100644 index 00000000..fbde68f9 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/FOX_HD.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/FOX_wordmark-orange.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/FOX_wordmark-orange.svg new file mode 100644 index 00000000..d5f746f0 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/FOX_wordmark-orange.svg @@ -0,0 +1,71 @@ + + + +image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/FUTREP.png b/1.5 'Kruger 60'/Logos/Sources/Originals/FUTREP.png new file mode 100644 index 00000000..415fea75 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/FUTREP.png differ diff --git "a/1.5 'Kruger 60'/Logos/Sources/Originals/Factor\303\255a_de_Ficci\303\263n.svg" "b/1.5 'Kruger 60'/Logos/Sources/Originals/Factor\303\255a_de_Ficci\303\263n.svg" new file mode 100644 index 00000000..7892315e --- /dev/null +++ "b/1.5 'Kruger 60'/Logos/Sources/Originals/Factor\303\255a_de_Ficci\303\263n.svg" @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Fox_News_Channel_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Fox_News_Channel_logo.svg new file mode 100644 index 00000000..25c8427d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Fox_News_Channel_logo.svg @@ -0,0 +1,45 @@ + + + + +fnc-primary + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Fox_life_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Fox_life_logo.svg new file mode 100644 index 00000000..a71acaa5 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Fox_life_logo.svg @@ -0,0 +1,98 @@ + +2017 Fox life logoimage/svg+xml2017 Fox life logo \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/France_24.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/France_24.svg new file mode 100644 index 00000000..e859a127 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/France_24.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/1.5 'Kruger 60'/Logos/Sources/Originals/F\303\272tbol_Replay_2018.png" "b/1.5 'Kruger 60'/Logos/Sources/Originals/F\303\272tbol_Replay_2018.png" new file mode 100644 index 00000000..889dddb3 Binary files /dev/null and "b/1.5 'Kruger 60'/Logos/Sources/Originals/F\303\272tbol_Replay_2018.png" differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Gol.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Gol.svg new file mode 100644 index 00000000..02006b4b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Gol.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Historia_CMYKblack.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Historia_CMYKblack.png new file mode 100644 index 00000000..ede928c6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Historia_CMYKblack.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Historia_Logo_2015.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Historia_Logo_2015.svg new file mode 100644 index 00000000..9493f719 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Historia_Logo_2015.svg @@ -0,0 +1,1702 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Intereconomia-tv.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Intereconomia-tv.png new file mode 100644 index 00000000..4e8359af Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Intereconomia-tv.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/La2HD.png b/1.5 'Kruger 60'/Logos/Sources/Originals/La2HD.png new file mode 100644 index 00000000..a40df077 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/La2HD.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/LaLiga_Santander_H_2018.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/LaLiga_Santander_H_2018.svg new file mode 100644 index 00000000..903d473e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/LaLiga_Santander_H_2018.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/LaOtra.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/LaOtra.svg new file mode 100644 index 00000000..9850799d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/LaOtra.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/LaSextaHD.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/LaSextaHD.svg new file mode 100644 index 00000000..b046a910 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/LaSextaHD.svg @@ -0,0 +1,42 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/La_1_HD_TVE.png b/1.5 'Kruger 60'/Logos/Sources/Originals/La_1_HD_TVE.png new file mode 100644 index 00000000..bbf972db Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/La_1_HD_TVE.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/La_2_HD.png b/1.5 'Kruger 60'/Logos/Sources/Originals/La_2_HD.png new file mode 100644 index 00000000..e7e874d5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/La_2_HD.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/La_Otra_logo_(2017).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/La_Otra_logo_(2017).svg new file mode 100644 index 00000000..2924bb2e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/La_Otra_logo_(2017).svg @@ -0,0 +1,56 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/La_Sexta_(A3M).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/La_Sexta_(A3M).svg new file mode 100644 index 00000000..c4049dcc --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/La_Sexta_(A3M).svg @@ -0,0 +1,375 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Logo_TVE-1.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Logo_TVE-1.svg new file mode 100644 index 00000000..17995180 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Logo_TVE-1.svg @@ -0,0 +1,255 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Logo_TVE-2.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Logo_TVE-2.svg new file mode 100644 index 00000000..599d865a --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Logo_TVE-2.svg @@ -0,0 +1,291 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Logo_TVE-24h.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Logo_TVE-24h.svg new file mode 100644 index 00000000..d716c6a8 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Logo_TVE-24h.svg @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + diff --git "a/1.5 'Kruger 60'/Logos/Sources/Originals/Logotip_d'\303\200_Punt_(2017-).svg" "b/1.5 'Kruger 60'/Logos/Sources/Originals/Logotip_d'\303\200_Punt_(2017-).svg" new file mode 100644 index 00000000..8850c7d8 --- /dev/null +++ "b/1.5 'Kruger 60'/Logos/Sources/Originals/Logotip_d'\303\200_Punt_(2017-).svg" @@ -0,0 +1,76 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/MEGA.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/MEGA.svg new file mode 100644 index 00000000..13ea82cf --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/MEGA.svg @@ -0,0 +1,25 @@ + +image/svg+xml + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/MTV_(2010).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/MTV_(2010).svg new file mode 100644 index 00000000..c021040a --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/MTV_(2010).svg @@ -0,0 +1,71 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/MTV_Logo_2010.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/MTV_Logo_2010.svg new file mode 100644 index 00000000..261a20de --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/MTV_Logo_2010.svg @@ -0,0 +1,80 @@ + + + +image/svg+xml + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/MegaHD.png b/1.5 'Kruger 60'/Logos/Sources/Originals/MegaHD.png new file mode 100644 index 00000000..8516a8a3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/MegaHD.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Mezzo_Live_HD.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Mezzo_Live_HD.svg new file mode 100644 index 00000000..2313721d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Mezzo_Live_HD.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Mezzo_Logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Mezzo_Logo.svg new file mode 100644 index 00000000..30e815cc --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Mezzo_Logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar+ (alt).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar+ (alt).svg new file mode 100644 index 00000000..8f616503 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar+ (alt).svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar+ (top).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar+ (top).svg new file mode 100644 index 00000000..638cf33e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar+ (top).svg @@ -0,0 +1,153 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar+.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar+.svg new file mode 100644 index 00000000..2413d69f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar+.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_CineDoc&Roll.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_CineDoc&Roll.svg new file mode 100644 index 00000000..dc448692 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_CineDoc&Roll.svg @@ -0,0 +1,1983 @@ + + + + diff --git "a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Cine_Espa\303\261ol.svg" "b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Cine_Espa\303\261ol.svg" new file mode 100644 index 00000000..ef02779b --- /dev/null +++ "b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Cine_Espa\303\261ol.svg" @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Deportes.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Deportes.svg new file mode 100644 index 00000000..7c7bdc04 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Deportes.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Deportes_1.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Deportes_1.svg new file mode 100644 index 00000000..bc661ba4 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Deportes_1.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Deportes_2.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Deportes_2.svg new file mode 100644 index 00000000..dc18f02e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Deportes_2.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Disney.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Disney.svg new file mode 100644 index 00000000..5b0df5e5 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Disney.svg @@ -0,0 +1,1166 @@ + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Formula_1_2016.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Formula_1_2016.svg new file mode 100644 index 00000000..f4493e0b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Formula_1_2016.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Golf.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Golf.svg new file mode 100644 index 00000000..da4669f7 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Golf.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Seriesman\303\255a.svg" "b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Seriesman\303\255a.svg" new file mode 100644 index 00000000..b0d51563 --- /dev/null +++ "b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_Seriesman\303\255a.svg" @@ -0,0 +1,1812 @@ + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_TV.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_TV.svg new file mode 100644 index 00000000..6917d21a --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_TV.svg @@ -0,0 +1,253 @@ + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_eSports.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_eSports.png new file mode 100644 index 00000000..dc3e83ba Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Movistar_eSports.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Neox.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Neox.svg new file mode 100644 index 00000000..15363ac7 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Neox.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/NeoxHD.png b/1.5 'Kruger 60'/Logos/Sources/Originals/NeoxHD.png new file mode 100644 index 00000000..f92a6b75 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/NeoxHD.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Netflix_2015_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Netflix_2015_logo.svg new file mode 100644 index 00000000..0ce1bf48 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Netflix_2015_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Nick_Jr._logo_2009.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Nick_Jr._logo_2009.svg new file mode 100644 index 00000000..421dc133 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Nick_Jr._logo_2009.svg @@ -0,0 +1,98 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Nickelodeon_2009_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Nickelodeon_2009_logo.svg new file mode 100644 index 00000000..92618bb8 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Nickelodeon_2009_logo.svg @@ -0,0 +1,99 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Nova.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Nova.svg new file mode 100644 index 00000000..3a45da46 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Nova.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/NuestraTeleInternacional2019.png b/1.5 'Kruger 60'/Logos/Sources/Originals/NuestraTeleInternacional2019.png new file mode 100644 index 00000000..2e330329 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/NuestraTeleInternacional2019.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Paramount_Network.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Paramount_Network.svg new file mode 100644 index 00000000..cb2df9a8 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Paramount_Network.svg @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Paramount_Network_blue.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Paramount_Network_blue.svg new file mode 100644 index 00000000..da19378a --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Paramount_Network_blue.svg @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Play_Boy_TV_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Play_Boy_TV_logo.svg new file mode 100644 index 00000000..5c8ed809 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Play_Boy_TV_logo.svg @@ -0,0 +1,96 @@ + + + PlayBoy TV logo + + + +Created by potrace 1.10, written by Peter Selinger 2001-2011 + + + image/svg+xml + + PlayBoy TV logo + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Playboy_TV_Logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Playboy_TV_Logo.svg new file mode 100644 index 00000000..f830053f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Playboy_TV_Logo.svg @@ -0,0 +1,133 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/RT_ESPANOL_2018.png b/1.5 'Kruger 60'/Logos/Sources/Originals/RT_ESPANOL_2018.png new file mode 100644 index 00000000..8ace5a7d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/RT_ESPANOL_2018.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Real_Madrid_CF.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Real_Madrid_CF.svg new file mode 100644 index 00000000..78584652 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Real_Madrid_CF.svg @@ -0,0 +1,355 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Record_logo_2016.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Record_logo_2016.png new file mode 100644 index 00000000..4791bbfa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Record_logo_2016.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Russia-today-logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Russia-today-logo.svg new file mode 100644 index 00000000..84364d85 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Russia-today-logo.svg @@ -0,0 +1,151 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Stingray-classica-alternative-logo.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Stingray-classica-alternative-logo.png new file mode 100644 index 00000000..07992b9b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Stingray-classica-alternative-logo.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Stingray_Classica_RGB-02.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Stingray_Classica_RGB-02.svg new file mode 100644 index 00000000..ed34fcd2 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Stingray_Classica_RGB-02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017).png b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017).png new file mode 100644 index 00000000..9e17f2c0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017).png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017).svg new file mode 100644 index 00000000..75c80dd5 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017).svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017)_(Stacked).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017)_(Stacked).svg new file mode 100644 index 00000000..675c8218 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017)_(Stacked).svg @@ -0,0 +1,47 @@ + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017)_Stacked.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017)_Stacked.png new file mode 100644 index 00000000..81e4cb45 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_(2017)_Stacked.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_2017_horizontal_logo_2.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_2017_horizontal_logo_2.svg new file mode 100644 index 00000000..54893cb2 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_2017_horizontal_logo_2.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_2017_vertical_logo_2.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_2017_vertical_logo_2.svg new file mode 100644 index 00000000..a8a4dfb6 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_2017_vertical_logo_2.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_HD_(2017).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_HD_(2017).svg new file mode 100644 index 00000000..20219240 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_HD_(2017).svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_HD_(2017)_(Stacked).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_HD_(2017)_(Stacked).svg new file mode 100644 index 00000000..2680ecec --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_HD_(2017)_(Stacked).svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_HD_(2017)_Stacked.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_HD_(2017)_Stacked.png new file mode 100644 index 00000000..be9f205d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Syfy_HD_(2017)_Stacked.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/TCM_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/TCM_logo.svg new file mode 100644 index 00000000..24bf2ed9 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/TCM_logo.svg @@ -0,0 +1,130 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/TNT_(2001).svg b/1.5 'Kruger 60'/Logos/Sources/Originals/TNT_(2001).svg new file mode 100644 index 00000000..198b8762 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/TNT_(2001).svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/TV5Monde_logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/TV5Monde_logo.svg new file mode 100644 index 00000000..495cc984 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/TV5Monde_logo.svg @@ -0,0 +1,486 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/TVChile_logo_2016.png b/1.5 'Kruger 60'/Logos/Sources/Originals/TVChile_logo_2016.png new file mode 100644 index 00000000..0893645a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/TVChile_logo_2016.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Tdp_HD.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Tdp_HD.png new file mode 100644 index 00000000..76b9c0bf Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Tdp_HD.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/TeleMadrid.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/TeleMadrid.svg new file mode 100644 index 00000000..81bdb662 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/TeleMadrid.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/TeleSUR-Logo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/TeleSUR-Logo.svg new file mode 100644 index 00000000..7157b741 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/TeleSUR-Logo.svg @@ -0,0 +1,106 @@ + + + + + Telesur logo + + + + + image/svg+xml + + Telesur logo + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Telecinco.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Telecinco.svg new file mode 100644 index 00000000..09422908 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Telecinco.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Teledeporte.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Teledeporte.svg new file mode 100644 index 00000000..19e48561 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Teledeporte.svg @@ -0,0 +1,2331 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Telesur2014-2.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Telesur2014-2.png new file mode 100644 index 00000000..db654670 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Telesur2014-2.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/The_Oscars.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/The_Oscars.svg new file mode 100644 index 00000000..8d5cec29 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/The_Oscars.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Toros.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Toros.svg new file mode 100644 index 00000000..b487f9aa --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Toros.svg @@ -0,0 +1,191 @@ + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Toros_TV.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Toros_TV.png new file mode 100644 index 00000000..3bd7812a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Toros_TV.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Trece.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Trece.svg new file mode 100644 index 00000000..1ee94173 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Trece.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Tve_clan.png b/1.5 'Kruger 60'/Logos/Sources/Originals/Tve_clan.png new file mode 100644 index 00000000..04983d46 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/Tve_clan.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/U-Beat.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/U-Beat.svg new file mode 100644 index 00000000..fdef6e61 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/U-Beat.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/VH1_logonew.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/VH1_logonew.svg new file mode 100644 index 00000000..f2b1b1a0 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/VH1_logonew.svg @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Vamos movistar.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Vamos movistar.svg new file mode 100644 index 00000000..fddf60b3 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Vamos movistar.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/Vamos.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/Vamos.svg new file mode 100644 index 00000000..fddf60b3 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/Vamos.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/babytvlogo.png b/1.5 'Kruger 60'/Logos/Sources/Originals/babytvlogo.png new file mode 100644 index 00000000..91bfcd22 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/babytvlogo.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/babytvlogo.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/babytvlogo.svg new file mode 100644 index 00000000..7b60aa4f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/babytvlogo.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/cubavision_internacional.png b/1.5 'Kruger 60'/Logos/Sources/Originals/cubavision_internacional.png new file mode 100644 index 00000000..f3f909f8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/cubavision_internacional.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/cubavision_internacional_mosca.png b/1.5 'Kruger 60'/Logos/Sources/Originals/cubavision_internacional_mosca.png new file mode 100644 index 00000000..41af2076 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/cubavision_internacional_mosca.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/hd.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/hd.svg new file mode 100644 index 00000000..9663d42f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/hd.svg @@ -0,0 +1,114 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/kisspng-babytv-enchanted-babyfirsttv-television-logo-gua-de-canales-totalplay-paquete-familiar-5be3a1c46c8609.2994533315416447404445.png b/1.5 'Kruger 60'/Logos/Sources/Originals/kisspng-babytv-enchanted-babyfirsttv-television-logo-gua-de-canales-totalplay-paquete-familiar-5be3a1c46c8609.2994533315416447404445.png new file mode 100644 index 00000000..530b658a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/kisspng-babytv-enchanted-babyfirsttv-television-logo-gua-de-canales-totalplay-paquete-familiar-5be3a1c46c8609.2994533315416447404445.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/laliga.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/laliga.svg new file mode 100644 index 00000000..15b5c925 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/laliga.svg @@ -0,0 +1,140 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/logo-baby-tv-png-babytv-television-channel-clipart-75494c480bbf8d87.png b/1.5 'Kruger 60'/Logos/Sources/Originals/logo-baby-tv-png-babytv-television-channel-clipart-75494c480bbf8d87.png new file mode 100644 index 00000000..dd3f14f9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/logo-baby-tv-png-babytv-television-channel-clipart-75494c480bbf8d87.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/mediaset.svg b/1.5 'Kruger 60'/Logos/Sources/Originals/mediaset.svg new file mode 100644 index 00000000..b019bfe4 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Originals/mediaset.svg @@ -0,0 +1 @@ +Recurso 4 \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Originals/telesur_glass.png b/1.5 'Kruger 60'/Logos/Sources/Originals/telesur_glass.png new file mode 100644 index 00000000..10f453ce Binary files /dev/null and b/1.5 'Kruger 60'/Logos/Sources/Originals/telesur_glass.png differ diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/andalucia.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/andalucia.svg new file mode 100644 index 00000000..34306b2c --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/andalucia.svg @@ -0,0 +1,854 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/aragon.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/aragon.svg new file mode 100644 index 00000000..e6210670 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/aragon.svg @@ -0,0 +1,1952 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/asturias.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/asturias.svg new file mode 100644 index 00000000..d1bfe98a --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/asturias.svg @@ -0,0 +1,109 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/baleares.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/baleares.svg new file mode 100644 index 00000000..857b774d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/baleares.svg @@ -0,0 +1,452 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/canarias.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/canarias.svg new file mode 100644 index 00000000..e66ce69d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/canarias.svg @@ -0,0 +1,1262 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/cantabria.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/cantabria.svg new file mode 100644 index 00000000..548e35c9 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/cantabria.svg @@ -0,0 +1,1947 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/castilla-leon.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/castilla-leon.svg new file mode 100644 index 00000000..3d0bd418 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/castilla-leon.svg @@ -0,0 +1,877 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/castilla-mancha.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/castilla-mancha.svg new file mode 100644 index 00000000..06db3f17 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/castilla-mancha.svg @@ -0,0 +1,557 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/cataluna.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/cataluna.svg new file mode 100644 index 00000000..c4799100 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/cataluna.svg @@ -0,0 +1,89 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/extremadura.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/extremadura.svg new file mode 100644 index 00000000..14d47a17 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/extremadura.svg @@ -0,0 +1,1770 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PLVS + VLTRA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/galicia.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/galicia.svg new file mode 100644 index 00000000..d937da7c --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/galicia.svg @@ -0,0 +1,993 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/madrid.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/madrid.svg new file mode 100644 index 00000000..f7a76b98 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/madrid.svg @@ -0,0 +1,123 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/movistar+.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/movistar+.svg new file mode 100644 index 00000000..87a38a3f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/movistar+.svg @@ -0,0 +1,119 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/murcia.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/murcia.svg new file mode 100644 index 00000000..2bf89b62 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/murcia.svg @@ -0,0 +1,193 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/navarra.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/navarra.svg new file mode 100644 index 00000000..e6449ca8 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/navarra.svg @@ -0,0 +1,3182 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/rioja.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/rioja.svg new file mode 100644 index 00000000..20c5500f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/rioja.svg @@ -0,0 +1,3522 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/spain.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/spain.svg new file mode 100644 index 00000000..937f5c3c --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/spain.svg @@ -0,0 +1,1877 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/valencia.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/valencia.svg new file mode 100644 index 00000000..0e48dd2e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/valencia.svg @@ -0,0 +1,642 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/vasco.svg b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/vasco.svg new file mode 100644 index 00000000..c45e6d1e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Providers/movistar+/vasco.svg @@ -0,0 +1,117 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_f1.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_f1.svg new file mode 100644 index 00000000..a84068d6 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_f1.svg @@ -0,0 +1,204 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + 4K + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_liga.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_liga.svg new file mode 100644 index 00000000..45c1e49f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_liga.svg @@ -0,0 +1,228 @@ + + + + + + + + + + +image/svg+xml + + +4K + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_liga_campeones.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_liga_campeones.svg new file mode 100644 index 00000000..3da90b20 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_liga_campeones.svg @@ -0,0 +1,102 @@ + +image/svg+xml 4K + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_partidazo.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_partidazo.svg new file mode 100644 index 00000000..1633dd73 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/4k_movistar_partidazo.svg @@ -0,0 +1,210 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + 4K + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/EWTN.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/EWTN.svg new file mode 100644 index 00000000..6e2eb132 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/EWTN.svg @@ -0,0 +1,179 @@ + +image/svg+xml \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/antena3.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/antena3.svg new file mode 100644 index 00000000..531139de --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/antena3.svg @@ -0,0 +1,73 @@ + + + +image/svg+xml + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/autonomico_extremadura.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/autonomico_extremadura.svg new file mode 100644 index 00000000..9c61c054 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/autonomico_extremadura.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/autonomico_extremadura_sat.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/autonomico_extremadura_sat.svg new file mode 100644 index 00000000..ddd1a805 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/autonomico_extremadura_sat.svg @@ -0,0 +1,80 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + SATÉLITE + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/barca_tv.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/barca_tv.svg new file mode 100644 index 00000000..a462aa8d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/barca_tv.svg @@ -0,0 +1,256 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/bbc_world.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/bbc_world.svg new file mode 100644 index 00000000..aed3415c --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/bbc_world.svg @@ -0,0 +1,111 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/bemad.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/bemad.svg new file mode 100644 index 00000000..0da26343 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/bemad.svg @@ -0,0 +1,91 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/blaze.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/blaze.svg new file mode 100644 index 00000000..b08b97ad --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/blaze.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/bloomberg.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/bloomberg.svg new file mode 100644 index 00000000..382bf5d9 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/bloomberg.svg @@ -0,0 +1,148 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/canal-hollywood.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/canal-hollywood.svg new file mode 100644 index 00000000..a5defefe --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/canal-hollywood.svg @@ -0,0 +1,65 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cataluna_beteve.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cataluna_beteve.svg new file mode 100644 index 00000000..019747cd --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cataluna_beteve.svg @@ -0,0 +1,100 @@ + + + +image/svg+xml + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/caza-pesca.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/caza-pesca.svg new file mode 100644 index 00000000..a0ac9def --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/caza-pesca.svg @@ -0,0 +1,3582 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cgtn.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cgtn.svg new file mode 100644 index 00000000..0cfe6745 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cgtn.svg @@ -0,0 +1,612 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cnbc.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cnbc.svg new file mode 100644 index 00000000..895c3c23 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cnbc.svg @@ -0,0 +1,106 @@ + + + +image/svg+xml + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cnn_international.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cnn_international.svg new file mode 100644 index 00000000..92418e02 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cnn_international.svg @@ -0,0 +1,66 @@ + + + +image/svg+xml + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cocina.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cocina.svg new file mode 100644 index 00000000..b999368d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cocina.svg @@ -0,0 +1,155 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/comedycentral.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/comedycentral.svg new file mode 100644 index 00000000..da771caf --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/comedycentral.svg @@ -0,0 +1,124 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cosmo.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cosmo.svg new file mode 100644 index 00000000..369bfb54 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cosmo.svg @@ -0,0 +1,138 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/crimen-investigacion.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/crimen-investigacion.svg new file mode 100644 index 00000000..9b03203d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/crimen-investigacion.svg @@ -0,0 +1,189 @@ + + + + + + image/svg+xml + + Crimen + Investigación 2017 + + + + + + + + Crimen + Investigación 2017 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cubavision.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cubavision.svg new file mode 100644 index 00000000..a14a9b14 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/cubavision.svg @@ -0,0 +1,759 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/dark.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/dark.svg new file mode 100644 index 00000000..8f12cb0b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/dark.svg @@ -0,0 +1,74 @@ + + + + + + image/svg+xml + + Serbia + + + + + + Serbia + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/decasa.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/decasa.svg new file mode 100644 index 00000000..77bf0c76 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/decasa.svg @@ -0,0 +1,151 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/discovery.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/discovery.svg new file mode 100644 index 00000000..7bca2201 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/discovery.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/discovery_kiss.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/discovery_kiss.svg new file mode 100644 index 00000000..87a81e70 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/discovery_kiss.svg @@ -0,0 +1,85 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/discovery_max.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/discovery_max.svg new file mode 100644 index 00000000..52516b6a --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/discovery_max.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/disney_channel.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/disney_channel.svg new file mode 100644 index 00000000..0579f739 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/disney_channel.svg @@ -0,0 +1,147 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/disney_junior.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/disney_junior.svg new file mode 100644 index 00000000..814623a1 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/disney_junior.svg @@ -0,0 +1,437 @@ + + + + Disney Junior.svg + image/svg+xml + + image/svg+xml + + Disney Junior.svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Layer 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/divinity.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/divinity.svg new file mode 100644 index 00000000..59e3d8b7 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/divinity.svg @@ -0,0 +1,313 @@ + + + + + + image/svg+xml + + Recurso 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Recurso 4 + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/energy.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/energy.svg new file mode 100644 index 00000000..c5925e2e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/energy.svg @@ -0,0 +1,76 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/estrellas.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/estrellas.svg new file mode 100644 index 00000000..71df8f3f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/estrellas.svg @@ -0,0 +1,81 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/euronews.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/euronews.svg new file mode 100644 index 00000000..449eb5a6 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/euronews.svg @@ -0,0 +1,6317 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/eurosport_1.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/eurosport_1.svg new file mode 100644 index 00000000..f5dad8ff --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/eurosport_1.svg @@ -0,0 +1,96 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/eurosport_2.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/eurosport_2.svg new file mode 100644 index 00000000..152c5c3a --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/eurosport_2.svg @@ -0,0 +1,95 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/fox.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/fox.svg new file mode 100644 index 00000000..66777325 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/fox.svg @@ -0,0 +1,73 @@ + + + +image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/fox_life.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/fox_life.svg new file mode 100644 index 00000000..a3ebd1fa --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/fox_life.svg @@ -0,0 +1,102 @@ + +2017 Fox life logoimage/svg+xml2017 Fox life logo \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/fox_news.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/fox_news.svg new file mode 100644 index 00000000..b3fed2e7 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/fox_news.svg @@ -0,0 +1,90 @@ + + + +image/svg+xmlfnc-primary + +fnc-primary + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/france24.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/france24.svg new file mode 100644 index 00000000..35bab1be --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/france24.svg @@ -0,0 +1,145 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/futbol-replay.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/futbol-replay.svg new file mode 100644 index 00000000..84c759cd --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/futbol-replay.svg @@ -0,0 +1,539 @@ + + + +image/svg+xml + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/gol.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/gol.svg new file mode 100644 index 00000000..3bf06324 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/gol.svg @@ -0,0 +1,61 @@ + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_antena3.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_antena3.svg new file mode 100644 index 00000000..4b9a5486 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_antena3.svg @@ -0,0 +1,122 @@ + + + +image/svg+xml + + + + + + + +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_barca_tv.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_barca_tv.svg new file mode 100644 index 00000000..377952b4 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_barca_tv.svg @@ -0,0 +1,314 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_blaze.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_blaze.svg new file mode 100644 index 00000000..18571df5 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_blaze.svg @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + HD + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_canal-hollywood.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_canal-hollywood.svg new file mode 100644 index 00000000..17c5a3ac --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_canal-hollywood.svg @@ -0,0 +1,127 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + HD + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_caza-pesca.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_caza-pesca.svg new file mode 100644 index 00000000..dbaf7d25 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_caza-pesca.svg @@ -0,0 +1,122 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + HD + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_comedycentral.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_comedycentral.svg new file mode 100644 index 00000000..94715bcf --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_comedycentral.svg @@ -0,0 +1,174 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_cosmo.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_cosmo.svg new file mode 100644 index 00000000..74c99fb0 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_cosmo.svg @@ -0,0 +1,200 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + HD + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_discovery.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_discovery.svg new file mode 100644 index 00000000..bb8cf9a7 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_discovery.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + HD + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_disney_channel.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_disney_channel.svg new file mode 100644 index 00000000..72faa51b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_disney_channel.svg @@ -0,0 +1,164 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_eurosport_1.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_eurosport_1.svg new file mode 100644 index 00000000..1a249ef7 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_eurosport_1.svg @@ -0,0 +1,146 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_eurosport_2.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_eurosport_2.svg new file mode 100644 index 00000000..36f3daa8 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_eurosport_2.svg @@ -0,0 +1,145 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_fox.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_fox.svg new file mode 100644 index 00000000..ac81eab2 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_fox.svg @@ -0,0 +1,123 @@ + + + +image/svg+xml +HD + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_fox_life.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_fox_life.svg new file mode 100644 index 00000000..f03aea6e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_fox_life.svg @@ -0,0 +1,152 @@ + +2017 Fox life logoimage/svg+xml2017 Fox life logoHD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_gol.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_gol.svg new file mode 100644 index 00000000..6bfbedea --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_gol.svg @@ -0,0 +1,123 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + HD + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_mega.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_mega.svg new file mode 100644 index 00000000..cc2b3b57 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_mega.svg @@ -0,0 +1,102 @@ + +image/svg+xml + +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_mezzo.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_mezzo.svg new file mode 100644 index 00000000..c2d21412 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_mezzo.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_mezzo_live.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_mezzo_live.svg new file mode 100644 index 00000000..8a266b25 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_mezzo_live.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_cero.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_cero.svg new file mode 100644 index 00000000..06e94612 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_cero.svg @@ -0,0 +1,162 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_cine_doc_roll.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_cine_doc_roll.svg new file mode 100644 index 00000000..88109c26 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_cine_doc_roll.svg @@ -0,0 +1,101 @@ + +image/svg+xml +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_cine_espanol.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_cine_espanol.svg new file mode 100644 index 00000000..5498529e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_cine_espanol.svg @@ -0,0 +1,306 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + HD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_deportes.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_deportes.svg new file mode 100644 index 00000000..1d72aa93 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_deportes.svg @@ -0,0 +1,245 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_disney.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_disney.svg new file mode 100644 index 00000000..79cf77e0 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_disney.svg @@ -0,0 +1,101 @@ + +image/svg+xml +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_drama.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_drama.svg new file mode 100644 index 00000000..b39160b3 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_drama.svg @@ -0,0 +1,103 @@ + +image/svg+xml +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_f1.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_f1.svg new file mode 100644 index 00000000..afebc73f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_f1.svg @@ -0,0 +1,208 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_golf.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_golf.svg new file mode 100644 index 00000000..369e3d60 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_golf.svg @@ -0,0 +1,163 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_liga.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_liga.svg new file mode 100644 index 00000000..e5f10e73 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_liga.svg @@ -0,0 +1,229 @@ + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_liga_campeones.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_liga_campeones.svg new file mode 100644 index 00000000..ea935f67 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_liga_campeones.svg @@ -0,0 +1,103 @@ + +image/svg+xml +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_partidazo.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_partidazo.svg new file mode 100644 index 00000000..8066cf22 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_partidazo.svg @@ -0,0 +1,211 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_vamos.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_vamos.svg new file mode 100644 index 00000000..2de716c7 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_movistar_vamos.svg @@ -0,0 +1,208 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + HD + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_neox.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_neox.svg new file mode 100644 index 00000000..e1b135d5 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_neox.svg @@ -0,0 +1,138 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + HD + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_nickelodeon.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_nickelodeon.svg new file mode 100644 index 00000000..94ea1395 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_nickelodeon.svg @@ -0,0 +1,150 @@ + + + +image/svg+xmlHD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_nickelodeon_jr.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_nickelodeon_jr.svg new file mode 100644 index 00000000..06cf02ef --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_nickelodeon_jr.svg @@ -0,0 +1,168 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_nova.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_nova.svg new file mode 100644 index 00000000..3803b8ff --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_nova.svg @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + HD + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_realmadridtv.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_realmadridtv.svg new file mode 100644 index 00000000..3c40032e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_realmadridtv.svg @@ -0,0 +1,411 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +HD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_stingray_classica.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_stingray_classica.svg new file mode 100644 index 00000000..ad23e30f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_stingray_classica.svg @@ -0,0 +1,199 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + HD + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_syfy.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_syfy.svg new file mode 100644 index 00000000..e07317d5 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_syfy.svg @@ -0,0 +1,178 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tcm.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tcm.svg new file mode 100644 index 00000000..47204457 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tcm.svg @@ -0,0 +1,111 @@ + + + +image/svg+xmlHD + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tnt.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tnt.svg new file mode 100644 index 00000000..ba341a99 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tnt.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_toros.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_toros.svg new file mode 100644 index 00000000..206ee23e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_toros.svg @@ -0,0 +1,101 @@ + +image/svg+xml HD + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_1.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_1.svg new file mode 100644 index 00000000..8f808692 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_1.svg @@ -0,0 +1,342 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_2.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_2.svg new file mode 100644 index 00000000..a940ed27 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_2.svg @@ -0,0 +1,390 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_clan.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_clan.svg new file mode 100644 index 00000000..61f4b822 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_clan.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + HD + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_teledeporte.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_teledeporte.svg new file mode 100644 index 00000000..7ecea943 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_tve_teledeporte.svg @@ -0,0 +1,124 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_ubeat.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_ubeat.svg new file mode 100644 index 00000000..1f2f843f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_ubeat.svg @@ -0,0 +1,224 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HD + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_vasco_etb1.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_vasco_etb1.svg new file mode 100644 index 00000000..b43c3f90 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_vasco_etb1.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + HD + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_vasco_etb2.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_vasco_etb2.svg new file mode 100644 index 00000000..e862d604 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/hd_vasco_etb2.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + HD + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/historia.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/historia.svg new file mode 100644 index 00000000..9e9a2eec --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/historia.svg @@ -0,0 +1,5907 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/laliga_tv.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/laliga_tv.svg new file mode 100644 index 00000000..43047f38 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/laliga_tv.svg @@ -0,0 +1,154 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TV + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/madrid_laotra.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/madrid_laotra.svg new file mode 100644 index 00000000..f7575b7b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/madrid_laotra.svg @@ -0,0 +1,75 @@ + +image/svg+xml + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/madrid_telemadrid.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/madrid_telemadrid.svg new file mode 100644 index 00000000..512e6d6f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/madrid_telemadrid.svg @@ -0,0 +1,81 @@ + + + +image/svg+xml + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/mega.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/mega.svg new file mode 100644 index 00000000..10d3f062 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/mega.svg @@ -0,0 +1,52 @@ + +image/svg+xml + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/mezzo.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/mezzo.svg new file mode 100644 index 00000000..a80259df --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/mezzo.svg @@ -0,0 +1,88 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/mezzo_live.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/mezzo_live.svg new file mode 100644 index 00000000..c8f7fcdc --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/mezzo_live.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_cero.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_cero.svg new file mode 100644 index 00000000..ac5a6104 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_cero.svg @@ -0,0 +1,108 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_cine_doc_roll.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_cine_doc_roll.svg new file mode 100644 index 00000000..9d8f7471 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_cine_doc_roll.svg @@ -0,0 +1,52 @@ + +image/svg+xml + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_cine_espanol.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_cine_espanol.svg new file mode 100644 index 00000000..183c5b6b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_cine_espanol.svg @@ -0,0 +1,244 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_deportes.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_deportes.svg new file mode 100644 index 00000000..cf5a5e9e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_deportes.svg @@ -0,0 +1,183 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_disney.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_disney.svg new file mode 100644 index 00000000..d2b325b6 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_disney.svg @@ -0,0 +1,52 @@ + +image/svg+xml + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_drama.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_drama.svg new file mode 100644 index 00000000..3784275b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_drama.svg @@ -0,0 +1,54 @@ + +image/svg+xml + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_f1.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_f1.svg new file mode 100644 index 00000000..9af1aa22 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_f1.svg @@ -0,0 +1,146 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_golf.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_golf.svg new file mode 100644 index 00000000..2ddfc0e6 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_golf.svg @@ -0,0 +1,101 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_liga.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_liga.svg new file mode 100644 index 00000000..2b903152 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_liga.svg @@ -0,0 +1,179 @@ + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_liga_campeones.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_liga_campeones.svg new file mode 100644 index 00000000..56efe92d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_liga_campeones.svg @@ -0,0 +1,54 @@ + +image/svg+xml + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_oscars.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_oscars.svg new file mode 100644 index 00000000..322a212f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_oscars.svg @@ -0,0 +1,99 @@ + + + +image/svg+xml + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_partidazo.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_partidazo.svg new file mode 100644 index 00000000..e8a9f34d --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_partidazo.svg @@ -0,0 +1,149 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_seriesmania.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_seriesmania.svg new file mode 100644 index 00000000..1b4a8b26 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_seriesmania.svg @@ -0,0 +1,52 @@ + +image/svg+xml + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_vamos.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_vamos.svg new file mode 100644 index 00000000..005f1497 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/movistar_vamos.svg @@ -0,0 +1,146 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/neox.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/neox.svg new file mode 100644 index 00000000..eb440f9b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/neox.svg @@ -0,0 +1,76 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/netflix.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/netflix.svg new file mode 100644 index 00000000..32f7a0aa --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/netflix.svg @@ -0,0 +1,57 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/nickelodeon.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/nickelodeon.svg new file mode 100644 index 00000000..bca2acb2 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/nickelodeon.svg @@ -0,0 +1,100 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/nickelodeon_jr.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/nickelodeon_jr.svg new file mode 100644 index 00000000..1760516e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/nickelodeon_jr.svg @@ -0,0 +1,107 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/nova.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/nova.svg new file mode 100644 index 00000000..22782fb5 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/nova.svg @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/paramount_network.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/paramount_network.svg new file mode 100644 index 00000000..f6fbb3bf --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/paramount_network.svg @@ -0,0 +1,259 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/playboy.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/playboy.svg new file mode 100644 index 00000000..1e3369a2 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/playboy.svg @@ -0,0 +1,112 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/realmadridtv.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/realmadridtv.svg new file mode 100644 index 00000000..19b13baa --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/realmadridtv.svg @@ -0,0 +1,358 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/russiatoday.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/russiatoday.svg new file mode 100644 index 00000000..01228c2c --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/russiatoday.svg @@ -0,0 +1,165 @@ + + + +image/svg+xmlESPAÑOL + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/stingray_classica.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/stingray_classica.svg new file mode 100644 index 00000000..8f4bc451 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/stingray_classica.svg @@ -0,0 +1,137 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/syfy.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/syfy.svg new file mode 100644 index 00000000..225958b0 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/syfy.svg @@ -0,0 +1,184 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tcm.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tcm.svg new file mode 100644 index 00000000..ef679d7a --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tcm.svg @@ -0,0 +1,61 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/telesur.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/telesur.svg new file mode 100644 index 00000000..29c692a4 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/telesur.svg @@ -0,0 +1,2886 @@ + + + + + Telesur logo + + + + + image/svg+xml + + Telesur logo + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tnt.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tnt.svg new file mode 100644 index 00000000..7272b492 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tnt.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/toros.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/toros.svg new file mode 100644 index 00000000..c9ce317b --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/toros.svg @@ -0,0 +1,52 @@ + +image/svg+xml + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/trece.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/trece.svg new file mode 100644 index 00000000..ce0a51fa --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/trece.svg @@ -0,0 +1,101 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tv5monde.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tv5monde.svg new file mode 100644 index 00000000..dc0e2240 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tv5monde.svg @@ -0,0 +1,541 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tvchile.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tvchile.svg new file mode 100644 index 00000000..23d1ca79 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tvchile.svg @@ -0,0 +1,69 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tvcolombia.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tvcolombia.svg new file mode 100644 index 00000000..52ff2e3f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tvcolombia.svg @@ -0,0 +1,75 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tve_1.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tve_1.svg new file mode 100644 index 00000000..ee8a8d5e --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tve_1.svg @@ -0,0 +1,282 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tve_2.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tve_2.svg new file mode 100644 index 00000000..98296dc4 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tve_2.svg @@ -0,0 +1,330 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tve_24h.svg b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tve_24h.svg new file mode 100644 index 00000000..74644be8 --- /dev/null +++ b/1.5 'Kruger 60'/Logos/Sources/Services/movistar+/imagenio.es/tve_24h.svg @@ -0,0 +1,278 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Logos/app.config b/1.5 'Kruger 60'/Logos/app.config new file mode 100644 index 00000000..c76c89bb --- /dev/null +++ b/1.5 'Kruger 60'/Logos/app.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/1.5 'Kruger 60'/Logos/licensing.xml b/1.5 'Kruger 60'/Logos/licensing.xml new file mode 100644 index 00000000..015d796f --- /dev/null +++ b/1.5 'Kruger 60'/Logos/licensing.xml @@ -0,0 +1,224 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Unknown + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Unknown + + + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + + + + + + + diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/andalucia/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/andalucia/24.png new file mode 100644 index 00000000..5e16aa63 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/andalucia/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/aragon/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/aragon/24.png new file mode 100644 index 00000000..0d3e3584 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/aragon/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/asturias/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/asturias/24.png new file mode 100644 index 00000000..e73810ee Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/asturias/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/baleares/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/baleares/24.png new file mode 100644 index 00000000..b6b31861 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/baleares/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/canarias/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/canarias/24.png new file mode 100644 index 00000000..fd7d12f3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/canarias/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/cantabria/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/cantabria/24.png new file mode 100644 index 00000000..c32b7f32 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/cantabria/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/castilla-leon/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/castilla-leon/24.png new file mode 100644 index 00000000..1c8a659b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/castilla-leon/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/castilla-mancha/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/castilla-mancha/24.png new file mode 100644 index 00000000..9dce3c2a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/castilla-mancha/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/cataluna/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/cataluna/24.png new file mode 100644 index 00000000..a48bd6fe Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/cataluna/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/extremadura/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/extremadura/24.png new file mode 100644 index 00000000..03d51131 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/extremadura/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/galicia/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/galicia/24.png new file mode 100644 index 00000000..c0a8c1f7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/galicia/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/madrid/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/madrid/24.png new file mode 100644 index 00000000..b45e1fef Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/madrid/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/movistar+/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/movistar+/24.png new file mode 100644 index 00000000..8d6e8bce Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/movistar+/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/murcia/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/murcia/24.png new file mode 100644 index 00000000..e4a71007 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/murcia/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/navarra/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/navarra/24.png new file mode 100644 index 00000000..68b91dfe Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/navarra/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/rioja/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/rioja/24.png new file mode 100644 index 00000000..805179d6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/rioja/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/spain/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/spain/24.png new file mode 100644 index 00000000..1981cd90 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/spain/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/valencia/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/valencia/24.png new file mode 100644 index 00000000..0d22ed7c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/valencia/24.png differ diff --git a/1.5 'Kruger 60'/Logos/providers/movistar+/vasco/24.png b/1.5 'Kruger 60'/Logos/providers/movistar+/vasco/24.png new file mode 100644 index 00000000..fdcadc30 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/providers/movistar+/vasco/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bbc_world/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bbc_world/(default)/24.png new file mode 100644 index 00000000..cccb22d9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bbc_world/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/128.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/128.png new file mode 100644 index 00000000..aa98586a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/24.png new file mode 100644 index 00000000..ea84708b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/256.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/256.png new file mode 100644 index 00000000..e7885d93 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/32.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/32.png new file mode 100644 index 00000000..9c72147c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/48.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/48.png new file mode 100644 index 00000000..c68e0555 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/64.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/64.png new file mode 100644 index 00000000..5e8b0b59 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/96.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/96.png new file mode 100644 index 00000000..cc44452e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/bemad.ico b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/bemad.ico new file mode 100644 index 00000000..d4b545f5 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bemad/(default)/bemad.ico differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bloomberg/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bloomberg/(default)/24.png new file mode 100644 index 00000000..67a05f40 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/bloomberg/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/128.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/128.png new file mode 100644 index 00000000..437b9948 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/24.png new file mode 100644 index 00000000..ad90c328 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/256.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/256.png new file mode 100644 index 00000000..1a9913d7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/32.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/32.png new file mode 100644 index 00000000..4fa3437d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/48.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/48.png new file mode 100644 index 00000000..7326c2c1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/64.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/64.png new file mode 100644 index 00000000..820da61a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/96.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/96.png new file mode 100644 index 00000000..a2b2c593 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/canal-hollywood.ico b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/canal-hollywood.ico new file mode 100644 index 00000000..dbc77a58 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/(default)/canal-hollywood.ico differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/128.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/128.png new file mode 100644 index 00000000..758f87b4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/128.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/24.png new file mode 100644 index 00000000..c773ffd4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/256.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/256.png new file mode 100644 index 00000000..3634f3d6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/256.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/32.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/32.png new file mode 100644 index 00000000..f554c023 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/32.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/48.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/48.png new file mode 100644 index 00000000..2badd09a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/48.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/64.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/64.png new file mode 100644 index 00000000..6c44e133 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/64.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/96.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/96.png new file mode 100644 index 00000000..8226aaa0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/96.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/canal-hollywood.ico b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/canal-hollywood.ico new file mode 100644 index 00000000..9116baee Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/canal-hollywood/HD/canal-hollywood.ico differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/caza-pesca/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/caza-pesca/(default)/24.png new file mode 100644 index 00000000..d232b9dc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/caza-pesca/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/caza-pesca/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/caza-pesca/HD/24.png new file mode 100644 index 00000000..72226182 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/caza-pesca/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/128.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/128.png new file mode 100644 index 00000000..60664ba9 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/24.png new file mode 100644 index 00000000..ea45bbe3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/256.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/256.png new file mode 100644 index 00000000..1af20ba0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/32.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/32.png new file mode 100644 index 00000000..7d7a3cd2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/48.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/48.png new file mode 100644 index 00000000..f93518a1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/64.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/64.png new file mode 100644 index 00000000..3cc486e6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/96.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/96.png new file mode 100644 index 00000000..0bd4ef9d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/cgtn.ico b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/cgtn.ico new file mode 100644 index 00000000..98b05d13 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cgtn/(default)/cgtn.ico differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnbc/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnbc/(default)/24.png new file mode 100644 index 00000000..71ddb259 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnbc/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/128.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/128.png new file mode 100644 index 00000000..2ec319e4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/24.png new file mode 100644 index 00000000..f0129923 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/256.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/256.png new file mode 100644 index 00000000..0b48fd2e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/32.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/32.png new file mode 100644 index 00000000..a8a16b31 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/48.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/48.png new file mode 100644 index 00000000..5b4eeed4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/64.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/64.png new file mode 100644 index 00000000..b0fd88ec Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/96.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/96.png new file mode 100644 index 00000000..8674b7b1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/cnn_international.ico b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/cnn_international.ico new file mode 100644 index 00000000..8439eb6b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cnn_international/(default)/cnn_international.ico differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cocina/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cocina/(default)/24.png new file mode 100644 index 00000000..c0720960 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cocina/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/comedycentral/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/comedycentral/(default)/24.png new file mode 100644 index 00000000..413d0020 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/comedycentral/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/comedycentral/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/comedycentral/HD/24.png new file mode 100644 index 00000000..118e877b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/comedycentral/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/crimen-investigacion/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/crimen-investigacion/(default)/24.png new file mode 100644 index 00000000..3d04bc5c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/crimen-investigacion/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cubavision/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cubavision/(default)/24.png new file mode 100644 index 00000000..714903c0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/cubavision/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/decasa/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/decasa/(default)/24.png new file mode 100644 index 00000000..54431671 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/decasa/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/discovery_max/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/discovery_max/(default)/24.png new file mode 100644 index 00000000..f77e4902 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/discovery_max/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/disney_channel/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/disney_channel/(default)/24.png new file mode 100644 index 00000000..df49dc29 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/disney_channel/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/disney_channel/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/disney_channel/HD/24.png new file mode 100644 index 00000000..66ef9f2e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/disney_channel/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/disney_junior/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/disney_junior/(default)/24.png new file mode 100644 index 00000000..be1624af Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/disney_junior/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/divinity/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/divinity/(default)/24.png new file mode 100644 index 00000000..af0ad12c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/divinity/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/estrellas/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/estrellas/(default)/24.png new file mode 100644 index 00000000..db70dc0b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/estrellas/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/euronews/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/euronews/(default)/24.png new file mode 100644 index 00000000..eebcc282 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/euronews/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox/(default)/24.png new file mode 100644 index 00000000..6b42293d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox/HD/24.png new file mode 100644 index 00000000..1ef0d691 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox_life/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox_life/(default)/24.png new file mode 100644 index 00000000..4981feba Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox_life/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox_life/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox_life/HD/24.png new file mode 100644 index 00000000..c3f4f8b3 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox_life/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox_news/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox_news/(default)/24.png new file mode 100644 index 00000000..9b08cc5c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/fox_news/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/france24/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/france24/(default)/24.png new file mode 100644 index 00000000..942489bc Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/france24/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/futbol-replay/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/futbol-replay/(default)/24.png new file mode 100644 index 00000000..2c2b3efa Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/futbol-replay/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/historia/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/historia/(default)/24.png new file mode 100644 index 00000000..5466ab77 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/historia/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/(default)/24.png new file mode 100644 index 00000000..7ce6ad71 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/128.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/128.png new file mode 100644 index 00000000..b0cfc91b Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/128.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/24.png new file mode 100644 index 00000000..2ac0c380 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/256.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/256.png new file mode 100644 index 00000000..38860517 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/256.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/32.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/32.png new file mode 100644 index 00000000..8b8db61d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/32.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/48.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/48.png new file mode 100644 index 00000000..552f88b7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/48.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/64.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/64.png new file mode 100644 index 00000000..244b9742 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/64.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/96.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/96.png new file mode 100644 index 00000000..6f0e3d79 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/96.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/movistar_f1.ico b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/movistar_f1.ico new file mode 100644 index 00000000..2844be92 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/4K/movistar_f1.ico differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/HD/24.png new file mode 100644 index 00000000..33d6f379 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_f1/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/128.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/128.png new file mode 100644 index 00000000..5a08c2ba Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/24.png new file mode 100644 index 00000000..b0aff939 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/256.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/256.png new file mode 100644 index 00000000..85773d72 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/32.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/32.png new file mode 100644 index 00000000..e77879e4 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/48.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/48.png new file mode 100644 index 00000000..ce21c08e Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/64.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/64.png new file mode 100644 index 00000000..0652d3eb Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/96.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/96.png new file mode 100644 index 00000000..aa25e294 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/movistar_oscars.ico b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/movistar_oscars.ico new file mode 100644 index 00000000..c90ea9c6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_oscars/(default)/movistar_oscars.ico differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/128.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/128.png new file mode 100644 index 00000000..cc7094db Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/24.png new file mode 100644 index 00000000..a9268279 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/256.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/256.png new file mode 100644 index 00000000..00a151c1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/32.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/32.png new file mode 100644 index 00000000..8d83aa61 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/48.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/48.png new file mode 100644 index 00000000..be62ecc8 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/64.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/64.png new file mode 100644 index 00000000..4b5f1f99 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/96.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/96.png new file mode 100644 index 00000000..9f0edf90 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/movistar_seriesmania.ico b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/movistar_seriesmania.ico new file mode 100644 index 00000000..ba8ec660 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/movistar_seriesmania/(default)/movistar_seriesmania.ico differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/128.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/128.png new file mode 100644 index 00000000..d110433f Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/128.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/24.png new file mode 100644 index 00000000..2ef02109 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/256.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/256.png new file mode 100644 index 00000000..bd0e4355 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/256.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/32.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/32.png new file mode 100644 index 00000000..53eb31b7 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/32.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/48.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/48.png new file mode 100644 index 00000000..18d6c17a Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/48.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/64.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/64.png new file mode 100644 index 00000000..bab340b6 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/64.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/96.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/96.png new file mode 100644 index 00000000..c02ba4e1 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/96.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/paramount_network.ico b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/paramount_network.ico new file mode 100644 index 00000000..be68e5dd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/paramount_network/(default)/paramount_network.ico differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/playboy/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/playboy/(default)/24.png new file mode 100644 index 00000000..17ff41cd Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/playboy/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/russiatoday/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/russiatoday/(default)/24.png new file mode 100644 index 00000000..105cba33 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/russiatoday/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/syfy/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/syfy/HD/24.png new file mode 100644 index 00000000..c1c4e290 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/syfy/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tcm/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tcm/(default)/24.png new file mode 100644 index 00000000..1f39e55d Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tcm/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tcm/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tcm/HD/24.png new file mode 100644 index 00000000..a3f9c747 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tcm/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/telesur/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/telesur/(default)/24.png new file mode 100644 index 00000000..c28e3200 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/telesur/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tnt/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tnt/(default)/24.png new file mode 100644 index 00000000..b18b2d31 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tnt/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tnt/HD/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tnt/HD/24.png new file mode 100644 index 00000000..a7e89ff0 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tnt/HD/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tv5monde/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tv5monde/(default)/24.png new file mode 100644 index 00000000..00df4e67 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tv5monde/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tvchile/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tvchile/(default)/24.png new file mode 100644 index 00000000..1ce9b60c Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tvchile/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tvcolombia/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tvcolombia/(default)/24.png new file mode 100644 index 00000000..52d3bf17 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tvcolombia/(default)/24.png differ diff --git a/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tvrecord/(default)/24.png b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tvrecord/(default)/24.png new file mode 100644 index 00000000..fab62bb2 Binary files /dev/null and b/1.5 'Kruger 60'/Logos/services/movistar+/imagenio.es/tvrecord/(default)/24.png differ diff --git a/1.5 'Kruger 60'/MovistarTV.LICENSE.ES.MD b/1.5 'Kruger 60'/MovistarTV.LICENSE.ES.MD new file mode 100644 index 00000000..eee4a2f1 --- /dev/null +++ b/1.5 'Kruger 60'/MovistarTV.LICENSE.ES.MD @@ -0,0 +1,914 @@ +# IPTViewr v1.5 +Decodificador virtual IPTV para movistar+ 1.5 “Kruger 60” beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Los COMPONENTES y/o PROGRAMAS (el “SOFTWARE”), ya sea en forma de código binario o fuente, están **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, salvo que se indique lo contrario. \ +En particular, prevalecerán sobre estos términos de licencia, los especificados expresamente en el correspondiente archivo “LICENSE” de cada proyecto y/o carpeta. \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**El SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +**AVISO IMPORTANTE: El presente software _NO ESTÁ SOPORTADO NI RESPALDADO_ por Movistar ni por Telefónica**. \ +El software puede dejar de funcionar en cualquier momento si movistar+ realiza cambios tecnológicos en su plataforma. + +**NO DEBE LLAMARSE NUNCA al 1002 o al 1004** si desaparecen canales de la lista o no pueden verse o cualquier otra anomalía relaciona con el uso de este software. \ +movistar+ sólo proporciona ayuda y soporte técnico para su decodificador físico y únicamente para los servicios contratados. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + + +### “Microsoft Reciprocal License” (_Licencia recíproca de Microsoft_) (Ms-RL) + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +[]: + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + * [Apache License Version 2.0, January 2004] + * [The MIT License (MIT)] + * [Microsoft .NET Library License Terms] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. AlphaCentaury.Licensing.Data +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data.Ui +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. Etsi.Ts102034 +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. FirstTimeConfig +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IPTViewr +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. IpTviewr.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. IpTViewr.Core +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. IpTViewr.IpTvServices +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. IpTViewr.MovistarPlus +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. IpTViewr.Native +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. IpTviewr.Telemetry +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. IPTViewr_Movistar+_1-5_beta-1 +_Instalador por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. IpTvRecorderLauncher +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. MovistarTV.sln +_Solución VS por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 16. PackLogos +_Programa por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 17. Services.EpgDiscovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 18. Services.Record +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 19. Services.Record.Serialization +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 20. Services.SqlServerCE +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 21. UiServices.Common +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 22. UiServices.Configuration +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 23. UiServices.Discovery +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 24. UiServices.DvbStpClient +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 25. UiServices.EPG +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 26. UiServices.Forms +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 27. UiServices.Record +_Biblioteca por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Apache License Version 2.0, January 2004 + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + + +> **'Apache License Version 2.0, January 2004'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. SQLitePCLRaw.bundle_green +_Paquete 'nuget' por Eric Sink_ + +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + +#### 2. SQLitePCLRaw.core +_Paquete 'nuget' por Eric Sink, et al_ + +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + +#### 3. SQLitePCLRaw.lib.e_sqlite3.linux +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 4. SQLitePCLRaw.lib.e_sqlite3.osx +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +_Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 6. SQLitePCLRaw.provider.e_sqlite3.net45 +_Paquete 'nuget' por Eric Sink et al_ + +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. JetBrains.Annotations +_Paquete 'nuget' por JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Microsoft.AppCenter.Analytics +_Paquete 'nuget' por Microsoft_ + +This package contains functionalities to collect session, device properties, events etc… for your application. + + +#### 3. Microsoft.AppCenter.Crashes +_Paquete 'nuget' por Microsoft_ + +This package contains functionalities to collect crash reports for your application. + + +#### 4. Microsoft.AppCenter +_Paquete 'nuget' por Microsoft_ + +This package contains the basic functionalities that all App Center services use to communicate with the backend. + + +#### 5. Microsoft.NETCore.Platforms +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + +#### 6. NETStandard.Library +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +A set of standard .NET APIs that are prescribed to be used and supported together. + + +#### 7. Newtonsoft.Json +_Paquete 'nuget' por James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 8. sqlite-net-pcl +_Paquete 'nuget' por Frank A. Krueger_ + +**Copyright (c) Krueger Systems, Inc.** + +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + +#### 9. System.ValueTuple +_Paquete 'nuget' por Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + +#### 10. TaskScheduler +_Paquete 'nuget' por David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft .NET Library License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at [https://go.microsoft.com/fwlink/?LinkID=824704](https://go.microsoft.com/fwlink/?LinkID=824704). You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at [https://docs.microsoft.com/en-us/legal/gdpr](https://docs.microsoft.com/en-us/legal/gdpr). + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft .NET Library License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft.Win32.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for Win32-based libraries. + + +#### 2. System.AppContext +_Paquete 'nuget' por Microsoft_ + +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + +#### 3. System.Collections.Concurrent +_Paquete 'nuget' por Microsoft_ + +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + +#### 4. System.Collections +_Paquete 'nuget' por Microsoft_ + +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + +#### 5. System.Console +_Paquete 'nuget' por Microsoft_ + +Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + +#### 6. System.Diagnostics.Debug +_Paquete 'nuget' por Microsoft_ + +Provides classes and attributes that allows basic interaction with a debugger. + + +#### 7. System.Diagnostics.DiagnosticSource +_Paquete 'nuget' por Microsoft_ + +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + +#### 8. System.Diagnostics.Tools +_Paquete 'nuget' por Microsoft_ + +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + +#### 9. System.Diagnostics.Tracing +_Paquete 'nuget' por Microsoft_ + +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + +#### 10. System.Globalization.Calendars +_Paquete 'nuget' por Microsoft_ + +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + +#### 11. System.Globalization +_Paquete 'nuget' por Microsoft_ + +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + +#### 12. System.IO.Compression.ZipFile +_Paquete 'nuget' por Microsoft_ + +Provides classes that support the compression and decompression of streams using file system paths. + + +#### 13. System.IO.Compression +_Paquete 'nuget' por Microsoft_ + +Provides classes that support the compression and decompression of streams. + + +#### 14. System.IO.FileSystem.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common enumerations and exceptions for path-based I/O libraries. + + +#### 15. System.IO.FileSystem +_Paquete 'nuget' por Microsoft_ + +Provides types that allow reading and writing to files and types that provide basic file and directory support. + + +#### 16. System.IO +_Paquete 'nuget' por Microsoft_ + +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + +#### 17. System.Linq.Expressions +_Paquete 'nuget' por Microsoft_ + +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + +#### 18. System.Linq +_Paquete 'nuget' por Microsoft_ + +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + +#### 19. System.Net.Http +_Paquete 'nuget' por Microsoft_ + +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + +#### 20. System.Net.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + +#### 21. System.Net.Sockets +_Paquete 'nuget' por Microsoft_ + +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + +#### 22. System.ObjectModel +_Paquete 'nuget' por Microsoft_ + +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + +#### 23. System.Reflection.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides custom attribute extension methods for System.Reflection types. + + +#### 24. System.Reflection.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common enumerations for reflection-based libraries. + + +#### 25. System.Reflection +_Paquete 'nuget' por Microsoft_ + +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + +#### 26. System.Resources.ResourceManager +_Paquete 'nuget' por Microsoft_ + +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + +#### 27. System.Runtime.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + +#### 28. System.Runtime.Handles +_Paquete 'nuget' por Microsoft_ + +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + +#### 29. System.Runtime.InteropServices.RuntimeInformation +_Paquete 'nuget' por Microsoft_ + +Provides APIs to query about runtime and OS information. + + +#### 30. System.Runtime.InteropServices +_Paquete 'nuget' por Microsoft_ + +Provides types that support COM interop and platform invoke services. + + +#### 31. System.Runtime.Numerics +_Paquete 'nuget' por Microsoft_ + +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + +#### 32. System.Runtime +_Paquete 'nuget' por Microsoft_ + +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + +#### 33. System.Security.Cryptography.Algorithms +_Paquete 'nuget' por Microsoft_ + +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + +#### 34. System.Security.Cryptography.Encoding +_Paquete 'nuget' por Microsoft_ + +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + +#### 35. System.Security.Cryptography.Primitives +_Paquete 'nuget' por Microsoft_ + +Provides common types for the cryptographic libraries. + + +#### 36. System.Security.Cryptography.X509Certificates +_Paquete 'nuget' por Microsoft_ + +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + +#### 37. System.Text.Encoding.Extensions +_Paquete 'nuget' por Microsoft_ + +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + +#### 38. System.Text.Encoding +_Paquete 'nuget' por Microsoft_ + +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + +#### 39. System.Text.RegularExpressions +_Paquete 'nuget' por Microsoft_ + +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + +#### 40. System.Threading.Tasks +_Paquete 'nuget' por Microsoft_ + +Provides types that simplify the work of writing concurrent and asynchronous code. + + +#### 41. System.Threading.Timer +_Paquete 'nuget' por Microsoft_ + +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + +#### 42. System.Threading +_Paquete 'nuget' por Microsoft_ + +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + +#### 43. System.Xml.ReaderWriter +_Paquete 'nuget' por Microsoft_ + +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + +#### 44. System.Xml.XDocument +_Paquete 'nuget' por Microsoft_ + +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® Exception Message Box +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** aplica a los siguientes **componentes de terceros _(“THIRD-PARTY”)_:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Biblioteca por Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/MovistarTV.LICENSE.MD b/1.5 'Kruger 60'/MovistarTV.LICENSE.MD new file mode 100644 index 00000000..cca643e6 --- /dev/null +++ b/1.5 'Kruger 60'/MovistarTV.LICENSE.MD @@ -0,0 +1,882 @@ +# IPTViewr v1.5 +IPTV Virtual Decoder for movistar+ v1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +The COMPONENTS and/or PROGRAMS (“SOFWARE”), either in binary or source code form, are **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_**, unless otherwise stated. \ +In particular, those specified in the corresponding “LICENSE” file of each project and/or folder will prevail over these license terms. \ +All other rights are reserved by the author(s) of the software. + +_**The SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +**IMPORTANT NOTICE: This software is _NOT SUPPORTED NOR ENDORSED_ by Movistar or Telefónica.** \ +This software may stop working at any time if movistar+ makes technological changes to its platform. + +**DO NOT EVER CALL 1002 nor 1004** if channels disappear from the list or cannot be seen or if you experience any other anomaly related to the use of this software. \ +movistar+ only provides help and support for their physical decoder and only for the contracted services. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + * [Apache License Version 2.0, January 2004] + * [The MIT License (MIT)] + * [Microsoft .NET Library License Terms] + * [Microsoft® Exception Message Box License Terms] + * [Microsoft® SQL Server Compact® 4.0 SP1 License Terms] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. AlphaCentaury.Licensing.Data +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 2. AlphaCentaury.Licensing.Data.Ui +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 3. DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 4. Etsi.Ts102034 +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 5. FirstTimeConfig +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 6. IPTViewr +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 7. IpTviewr.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 8. IpTViewr.Core +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 9. IpTViewr.IpTvServices +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 10. IpTViewr.MovistarPlus +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 11. IpTViewr.Native +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 12. IpTviewr.Telemetry +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 13. IPTViewr_Movistar+_1-5_beta-1 +_Installer by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 14. IpTvRecorderLauncher +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 15. MovistarTV.sln +_VS Solution by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 16. PackLogos +_Program by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 17. Services.EpgDiscovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 18. Services.Record +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 19. Services.Record.Serialization +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 20. Services.SqlServerCE +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 21. UiServices.Common +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 22. UiServices.Configuration +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 23. UiServices.Discovery +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 24. UiServices.DvbStpClient +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 25. UiServices.EPG +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 26. UiServices.Forms +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + +#### 27. UiServices.Record +_Library by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + +### Apache License Version 2.0, January 2004 + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + + +> **'Apache License Version 2.0, January 2004'** applies to the following **third-party components:** + +#### 1. SQLitePCLRaw.bundle_green +_'nuget' package by Eric Sink_ + +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + +#### 2. SQLitePCLRaw.core +_'nuget' package by Eric Sink, et al_ + +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + +#### 3. SQLitePCLRaw.lib.e_sqlite3.linux +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 4. SQLitePCLRaw.lib.e_sqlite3.osx +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +_'nuget' package by Eric Sink, D. Richard Hipp, et al_ + +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + +#### 6. SQLitePCLRaw.provider.e_sqlite3.net45 +_'nuget' package by Eric Sink et al_ + +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +### The MIT License (MIT) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +> **'The MIT License (MIT)'** applies to the following **third-party components:** + +#### 1. JetBrains.Annotations +_'nuget' package by JetBrains_ + +**Copyright (c) 2016 JetBrains http://www.jetbrains.com** + +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + +#### 2. Microsoft.AppCenter.Analytics +_'nuget' package by Microsoft_ + +This package contains functionalities to collect session, device properties, events etc… for your application. + + +#### 3. Microsoft.AppCenter.Crashes +_'nuget' package by Microsoft_ + +This package contains functionalities to collect crash reports for your application. + + +#### 4. Microsoft.AppCenter +_'nuget' package by Microsoft_ + +This package contains the basic functionalities that all App Center services use to communicate with the backend. + + +#### 5. Microsoft.NETCore.Platforms +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + +#### 6. NETStandard.Library +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +A set of standard .NET APIs that are prescribed to be used and supported together. + + +#### 7. Newtonsoft.Json +_'nuget' package by James Newton-King_ + +**Copyright (c) 2007 James Newton-King** + +Json.NET is a popular high-performance JSON framework for .NET + + +#### 8. sqlite-net-pcl +_'nuget' package by Frank A. Krueger_ + +**Copyright (c) Krueger Systems, Inc.** + +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + +#### 9. System.ValueTuple +_'nuget' package by Microsoft_ + +**Copyright (c) .NET Foundation and Contributors** + +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + +#### 10. TaskScheduler +_'nuget' package by David Hall_ + +**Copyright (c) 2003-2010 David Hall** + +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +### Microsoft .NET Library License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at [https://go.microsoft.com/fwlink/?LinkID=824704](https://go.microsoft.com/fwlink/?LinkID=824704). You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at [https://docs.microsoft.com/en-us/legal/gdpr](https://docs.microsoft.com/en-us/legal/gdpr). + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft .NET Library License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft.Win32.Primitives +_'nuget' package by Microsoft_ + +Provides common types for Win32-based libraries. + + +#### 2. System.AppContext +_'nuget' package by Microsoft_ + +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + +#### 3. System.Collections.Concurrent +_'nuget' package by Microsoft_ + +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + +#### 4. System.Collections +_'nuget' package by Microsoft_ + +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + +#### 5. System.Console +_'nuget' package by Microsoft_ + +Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + +#### 6. System.Diagnostics.Debug +_'nuget' package by Microsoft_ + +Provides classes and attributes that allows basic interaction with a debugger. + + +#### 7. System.Diagnostics.DiagnosticSource +_'nuget' package by Microsoft_ + +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + +#### 8. System.Diagnostics.Tools +_'nuget' package by Microsoft_ + +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + +#### 9. System.Diagnostics.Tracing +_'nuget' package by Microsoft_ + +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + +#### 10. System.Globalization.Calendars +_'nuget' package by Microsoft_ + +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + +#### 11. System.Globalization +_'nuget' package by Microsoft_ + +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + +#### 12. System.IO.Compression.ZipFile +_'nuget' package by Microsoft_ + +Provides classes that support the compression and decompression of streams using file system paths. + + +#### 13. System.IO.Compression +_'nuget' package by Microsoft_ + +Provides classes that support the compression and decompression of streams. + + +#### 14. System.IO.FileSystem.Primitives +_'nuget' package by Microsoft_ + +Provides common enumerations and exceptions for path-based I/O libraries. + + +#### 15. System.IO.FileSystem +_'nuget' package by Microsoft_ + +Provides types that allow reading and writing to files and types that provide basic file and directory support. + + +#### 16. System.IO +_'nuget' package by Microsoft_ + +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + +#### 17. System.Linq.Expressions +_'nuget' package by Microsoft_ + +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + +#### 18. System.Linq +_'nuget' package by Microsoft_ + +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + +#### 19. System.Net.Http +_'nuget' package by Microsoft_ + +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + +#### 20. System.Net.Primitives +_'nuget' package by Microsoft_ + +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + +#### 21. System.Net.Sockets +_'nuget' package by Microsoft_ + +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + +#### 22. System.ObjectModel +_'nuget' package by Microsoft_ + +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + +#### 23. System.Reflection.Extensions +_'nuget' package by Microsoft_ + +Provides custom attribute extension methods for System.Reflection types. + + +#### 24. System.Reflection.Primitives +_'nuget' package by Microsoft_ + +Provides common enumerations for reflection-based libraries. + + +#### 25. System.Reflection +_'nuget' package by Microsoft_ + +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + +#### 26. System.Resources.ResourceManager +_'nuget' package by Microsoft_ + +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + +#### 27. System.Runtime.Extensions +_'nuget' package by Microsoft_ + +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + +#### 28. System.Runtime.Handles +_'nuget' package by Microsoft_ + +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + +#### 29. System.Runtime.InteropServices.RuntimeInformation +_'nuget' package by Microsoft_ + +Provides APIs to query about runtime and OS information. + + +#### 30. System.Runtime.InteropServices +_'nuget' package by Microsoft_ + +Provides types that support COM interop and platform invoke services. + + +#### 31. System.Runtime.Numerics +_'nuget' package by Microsoft_ + +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + +#### 32. System.Runtime +_'nuget' package by Microsoft_ + +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + +#### 33. System.Security.Cryptography.Algorithms +_'nuget' package by Microsoft_ + +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + +#### 34. System.Security.Cryptography.Encoding +_'nuget' package by Microsoft_ + +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + +#### 35. System.Security.Cryptography.Primitives +_'nuget' package by Microsoft_ + +Provides common types for the cryptographic libraries. + + +#### 36. System.Security.Cryptography.X509Certificates +_'nuget' package by Microsoft_ + +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + +#### 37. System.Text.Encoding.Extensions +_'nuget' package by Microsoft_ + +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + +#### 38. System.Text.Encoding +_'nuget' package by Microsoft_ + +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + +#### 39. System.Text.RegularExpressions +_'nuget' package by Microsoft_ + +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + +#### 40. System.Threading.Tasks +_'nuget' package by Microsoft_ + +Provides types that simplify the work of writing concurrent and asynchronous code. + + +#### 41. System.Threading.Timer +_'nuget' package by Microsoft_ + +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + +#### 42. System.Threading +_'nuget' package by Microsoft_ + +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + +#### 43. System.Xml.ReaderWriter +_'nuget' package by Microsoft_ + +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + +#### 44. System.Xml.XDocument +_'nuget' package by Microsoft_ + +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +### Microsoft® Exception Message Box License Terms + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + + +> **'Microsoft® Exception Message Box License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® Exception Message Box +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) \ + x86: ENU\x86\SQLServer2005_EMB.msi \ + x64: ENU\x64\SQLServer2005_EMB.msi + +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +### Microsoft® SQL Server Compact® 4.0 SP1 License Terms + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + +- **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +- **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + + +> **'Microsoft® SQL Server Compact® 4.0 SP1 License Terms'** applies to the following **third-party components:** + +#### 1. Microsoft® SQL Server Compact® 4.0 SP1 +_Library by Microsoft_ + + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) \ + x86: ENU\SSCERuntime_x86-ENU.exe; \ + x64: ENU\SSCERuntime_x64-ENU.exe.msi + +Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + diff --git a/1.5 'Kruger 60'/MovistarTV.licensing.xml b/1.5 'Kruger 60'/MovistarTV.licensing.xml new file mode 100644 index 00000000..39d6ca46 --- /dev/null +++ b/1.5 'Kruger 60'/MovistarTV.licensing.xml @@ -0,0 +1,866 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: IPTV Virtual Decoder for movistar+ v1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + AlphaCentaury.Licensing.Data + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + AlphaCentaury.Licensing.Data.Ui + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Core + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.MovistarPlus + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTvRecorderLauncher + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record.Serialization + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.SqlServerCE + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + PackLogos + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Telemetry + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + FirstTimeConfig + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.EPG + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Forms + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Record + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr_Movistar+_1-5_beta-1 + Installer + + + + + Apache-2.0 + Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + + Apache-2.0 + Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + + + MIT + Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + + + MIT + Microsoft + This package contains functionalities to collect crash reports for your application. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Frank A. Krueger + Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MIT + David Hall + Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + MS.NET + Microsoft + Provides common types for Win32-based libraries. + + + MS.NET + Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + + MS.NET + Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + + MS.NET + Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + + MS.NET + Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + + MS.NET + Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + + + MS.NET + Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + + MS.NET + Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + + MS.NET + Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + + MS.NET + Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + + MS.NET + Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + + MS.NET + Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + + + MS.NET + Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + + + MS.NET + Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + + + MS.NET + Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + + MS.NET + Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + + MS.NET + Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + + MS.NET + Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + + MS.NET + Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + + MS.NET + Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + + MS.NET + Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + + MS.NET + Microsoft + Provides custom attribute extension methods for System.Reflection types. + + + MS.NET + Microsoft + Provides common enumerations for reflection-based libraries. + + + MS.NET + Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + + MS.NET + Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + + MS.NET + Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + + MS.NET + Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + + MS.NET + Microsoft + Provides types that support COM interop and platform invoke services. + + + MS.NET + Microsoft + Provides APIs to query about runtime and OS information. + + + MS.NET + Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + + MS.NET + Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + + MS.NET + Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + + MS.NET + Microsoft + Provides common types for the cryptographic libraries. + + + MS.NET + Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + + MS.NET + Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + + MS.NET + Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + + MS.NET + Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + + MS.NET + Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + + MS.NET + Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + + + MS.NET + Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + + MS.NET + Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + + MS.NET + Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/MovistarTV.sln b/1.5 'Kruger 60'/MovistarTV.sln index 926cf82a..15b2ec77 100644 --- a/1.5 'Kruger 60'/MovistarTV.sln +++ b/1.5 'Kruger 60'/MovistarTV.sln @@ -1,14 +1,15 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28803.452 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChannelList", "ChannelList\ChannelList.csproj", "{3FB48C93-85EC-4894-8FE7-E035DDC0618C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DvbStpClient", "DvbStpClient\DvbStpClient.csproj", "{8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DvbStpClient", "Assemblies\DvbStpClient\DvbStpClient.csproj", "{8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Config", "UiServices.Config\UiServices.Config.csproj", "{A722DE9D-AE51-479C-825F-A19F4C69BD75}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Config", "Assemblies\UiServices.Config\UiServices.Config.csproj", "{A722DE9D-AE51-479C-825F-A19F4C69BD75}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Discovery", "UiServices.Discovery\UiServices.Discovery.csproj", "{7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Discovery", "Assemblies\UiServices.Discovery\UiServices.Discovery.csproj", "{7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTvRecorderLauncher", "IpTvRecorderLauncher\IpTvRecorderLauncher.csproj", "{DDA7264E-C003-4E3A-B657-27EE2543F101}" EndProject @@ -17,17 +18,35 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{227520B6-B11F-45B8-84B2-8FDF27A2492C}" ProjectSection(SolutionItems) = preProject AssemblySolutionInfo.cs = AssemblySolutionInfo.cs + InternalTools.LICENSE.ES.MD = InternalTools.LICENSE.ES.MD + internaltools.license.es.rtf = internaltools.license.es.rtf + internaltools.license.es.txt = internaltools.license.es.txt + InternalTools.LICENSE.MD = InternalTools.LICENSE.MD + internaltools.license.rtf = internaltools.license.rtf + internaltools.license.txt = internaltools.license.txt + InternalTools.licensing.xml = InternalTools.licensing.xml ..\LICENSE = ..\LICENSE + LICENSE.ES.MD = LICENSE.ES.MD + license.es.rtf = license.es.rtf + license.es.txt = license.es.txt + LICENSE.MD = LICENSE.MD + license.rtf = license.rtf + license.txt = license.txt ..\LICENSE_ES = ..\LICENSE_ES + licensing.xml = licensing.xml + movistarplus.json = movistarplus.json movistartv-config.xml = movistartv-config.xml + MovistarTV.LICENSE.ES.MD = MovistarTV.LICENSE.ES.MD + movistartv.license.es.rtf = movistartv.license.es.rtf + movistartv.license.es.txt = movistartv.license.es.txt + MovistarTV.LICENSE.MD = MovistarTV.LICENSE.MD + movistartv.license.rtf = movistartv.license.rtf + movistartv.license.txt = movistartv.license.txt + MovistarTV.licensing.xml = MovistarTV.licensing.xml ..\README.md = ..\README.md - solution-license.rtf = solution-license.rtf - solution-license.txt = solution-license.txt - solution-license_es.rtf = solution-license_es.rtf - solution-license_es.txt = solution-license_es.txt EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Forms", "UiServices.Forms\UiServices.Forms.csproj", "{90F750B3-64DB-493F-96A6-E68DE5EA60A1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Forms", "Assemblies\UiServices.Forms\UiServices.Forms.csproj", "{90F750B3-64DB-493F-96A6-E68DE5EA60A1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Setup", "Setup", "{B1F1A4A8-719B-4863-BEE0-EC79E7F06DEB}" EndProject @@ -35,13 +54,13 @@ Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "MainSetup", "Setup\MainSetu EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Logos", "Logos\Logos.csproj", "{65DD367D-A89D-4F89-9231-2009EF0B31AF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.Record.Serialization", "Services.Record.Serialization\Services.Record.Serialization.csproj", "{074C14ED-C574-46D2-B9DC-C1B5F65D9A69}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.Record.Serialization", "Assemblies\Services.Record.Serialization\Services.Record.Serialization.csproj", "{074C14ED-C574-46D2-B9DC-C1B5F65D9A69}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.DvbStpClient", "UiServices.DvbStpClient\UiServices.DvbStpClient.csproj", "{BA481E42-F570-4D2C-94D4-21C4CCE27762}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.DvbStpClient", "Assemblies\UiServices.DvbStpClient\UiServices.DvbStpClient.csproj", "{BA481E42-F570-4D2C-94D4-21C4CCE27762}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.Record", "Services.Record\Services.Record.csproj", "{A4172CDD-C8FD-4C91-9AAF-54A948F26273}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.Record", "Assemblies\Services.Record\Services.Record.csproj", "{A4172CDD-C8FD-4C91-9AAF-54A948F26273}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Record", "UiServices.Record\UiServices.Record.csproj", "{971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Record", "Assemblies\UiServices.Record\UiServices.Record.csproj", "{971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DB", "DB", "{21AADDF8-BB39-4D0F-A6EF-EFD64AB3BC16}" ProjectSection(SolutionItems) = preProject @@ -49,13 +68,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DB", "DB", "{21AADDF8-BB39- DB\RecordTasks.sdf = DB\RecordTasks.sdf EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "InternalTools", "InternalTools", "{C1DAEFDD-689E-4324-A05D-66FA30B574B5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTviewr.Common", "Assemblies\Project.Common\IpTviewr.Common.csproj", "{8DA15060-5A78-4F89-A9F1-7AA56B0D622C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleExperiments", "InternalTools\ConsoleExperiments\ConsoleExperiments.csproj", "{0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Project.Common", "Project.Common\Project.Common.csproj", "{8DA15060-5A78-4F89-A9F1-7AA56B0D622C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.SqlServerCE", "Services.SqlServerCE\Services.SqlServerCE.csproj", "{3A053F34-4EDF-4071-B966-923255A0AE14}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.SqlServerCE", "Assemblies\Services.SqlServerCE\Services.SqlServerCE.csproj", "{3A053F34-4EDF-4071-B966-923255A0AE14}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common.UI", "Common.UI", "{1A7A0EC8-D85A-4674-8DF7-89FF64D0A158}" EndProject @@ -150,28 +165,43 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Resources", "Resources", "{ Common.UI\Resources\WaitClock_Icon.ico = Common.UI\Resources\WaitClock_Icon.ico EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Common", "UiServices.Common\UiServices.Common.csproj", "{76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.Common", "Assemblies\UiServices.Common\UiServices.Common.csproj", "{76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etsi.Ts102034", "Assemblies\Etsi.Ts102034\Etsi.Ts102034.csproj", "{B91C438D-0333-4D06-86CD-74CE82DF6F40}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTviewr.IpTvServices", "Assemblies\Core.IpTvProvider\IpTviewr.IpTvServices.csproj", "{36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTv.MovistarPlus", "Assemblies\IpTv.MovistarPlus\IpTv.MovistarPlus.csproj", "{E1748F45-DD50-4479-96F6-F7EBA6F3E28B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etsi.Ts102034", "Etsi.Ts102034\Etsi.Ts102034.csproj", "{B91C438D-0333-4D06-86CD-74CE82DF6F40}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTviewr.Native", "Assemblies\Project.Native\IpTviewr.Native.csproj", "{8986CD52-0C65-42D6-9C47-20FF47CF87BB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpgDownloader", "InternalTools\EpgDownloader\EpgDownloader.csproj", "{BE376EFA-C7CC-44DB-B41E-506DBCB66A25}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.EpgDiscovery", "Assemblies\Services.EpgDiscovery\Services.EpgDiscovery.csproj", "{5A171DBB-855C-452B-93C6-229C7AA6C7A6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GuiTools", "InternalTools\GuiTools\GuiTools.csproj", "{9D077B2F-1E74-4031-B28D-3F6F97829BEC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.EPG", "Assemblies\UiServices.EPG\UiServices.EPG.csproj", "{004C3829-FED4-4084-B23B-871193AFA8C7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.IpTvProvider", "Core.IpTvProvider\Core.IpTvProvider.csproj", "{36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Services", "Services", "{8C20CFC3-5D3F-4176-989D-BE4E472200FE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTv.MovistarPlus", "IpTv.MovistarPlus\IpTv.MovistarPlus.csproj", "{E1748F45-DD50-4479-96F6-F7EBA6F3E28B}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UiServices", "UiServices", "{F477374C-E179-4991-BD4A-CAFCC42C69DC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Project.Native", "Project.Native\Project.Native.csproj", "{8986CD52-0C65-42D6-9C47-20FF47CF87BB}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DVB", "DVB", "{41D5EE58-70A5-432A-AD7E-7681522416DA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChannelLogos", "InternalTools\ChannelLogos\ChannelLogos.csproj", "{A51CC220-48C4-46F6-BF5D-3178CC317426}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{2E731243-64FA-4810-A67F-03538F9A4954}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services.EpgDiscovery", "Services.EpgDiscovery\Services.EpgDiscovery.csproj", "{5A171DBB-855C-452B-93C6-229C7AA6C7A6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTViewr.Core", "Core\IpTViewr.Core\IpTViewr.Core.csproj", "{968C6EEB-1E79-446A-96AE-69CB225E1C37}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UiServices.EPG", "UiServices.EPG\UiServices.EPG.csproj", "{004C3829-FED4-4084-B23B-871193AFA8C7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpTviewr.Telemetry", "Core\IpTviewr.Telemetry\IpTviewr.Telemetry.csproj", "{8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaCentaury.Licensing.Data", "Assemblies\AlphaCentaury.Licensing.Data\AlphaCentaury.Licensing.Data.csproj", "{42B71DB3-2E34-43BB-BF87-88F422BCF861}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaCentaury.Licensing.Data.Ui", "Assemblies\AlphaCentaury.Licensing.Data.Ui\AlphaCentaury.Licensing.Data.Ui.csproj", "{1293A5C4-478F-4EFD-8E53-D283B35E1A06}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoadNetFx35", "Setup\LoadNetFx35\LoadNetFx35.csproj", "{F4577356-279F-4BCC-82A4-30ED8B1FD66B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug + Setup|Any CPU = Debug + Setup|Any CPU + Debug + Setup|Mixed Platforms = Debug + Setup|Mixed Platforms + Debug + Setup|x86 = Debug + Setup|x86 Debug|Any CPU = Debug|Any CPU Debug|Mixed Platforms = Debug|Mixed Platforms Debug|x86 = Debug|x86 @@ -183,6 +213,11 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Any CPU.Build.0 = Debug|Any CPU {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -198,6 +233,11 @@ Global {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|Mixed Platforms.Build.0 = Release|Any CPU {3FB48C93-85EC-4894-8FE7-E035DDC0618C}.Release|x86.ActiveCfg = Release|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Any CPU.Build.0 = Debug|Any CPU {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -213,6 +253,11 @@ Global {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|Mixed Platforms.Build.0 = Release|Any CPU {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3}.Release|x86.ActiveCfg = Release|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Any CPU.Build.0 = Debug|Any CPU {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -228,6 +273,11 @@ Global {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|Mixed Platforms.Build.0 = Release|Any CPU {A722DE9D-AE51-479C-825F-A19F4C69BD75}.Release|x86.ActiveCfg = Release|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -243,6 +293,11 @@ Global {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|Mixed Platforms.Build.0 = Release|Any CPU {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C}.Release|x86.ActiveCfg = Release|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Any CPU.Build.0 = Debug|Any CPU {DDA7264E-C003-4E3A-B657-27EE2543F101}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -258,6 +313,11 @@ Global {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|Mixed Platforms.Build.0 = Release|Any CPU {DDA7264E-C003-4E3A-B657-27EE2543F101}.Release|x86.ActiveCfg = Release|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B23C0BE-C1CE-457A-B701-55870E355560}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -273,6 +333,11 @@ Global {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|Mixed Platforms.Build.0 = Release|Any CPU {6B23C0BE-C1CE-457A-B701-55870E355560}.Release|x86.ActiveCfg = Release|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Any CPU.Build.0 = Debug|Any CPU {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -288,11 +353,17 @@ Global {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU {90F750B3-64DB-493F-96A6-E68DE5EA60A1}.Release|x86.ActiveCfg = Release|Any CPU + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug + Setup|Any CPU.ActiveCfg = Debug|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug + Setup|Mixed Platforms.Build.0 = Debug|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug + Setup|x86.ActiveCfg = Debug|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug + Setup|x86.Build.0 = Debug|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|Any CPU.ActiveCfg = Debug|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|x86.ActiveCfg = Debug|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Debug|x86.Build.0 = Debug|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Any CPU.ActiveCfg = Release|x86 + {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Any CPU.Build.0 = Release|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Mixed Platforms.ActiveCfg = Release|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|Mixed Platforms.Build.0 = Release|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release + Setup|x86.ActiveCfg = Release|x86 @@ -301,6 +372,11 @@ Global {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|Mixed Platforms.ActiveCfg = Release|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|x86.ActiveCfg = Release|x86 {F3FC11C7-8850-4874-9CF3-8BA4DE43959A}.Release|x86.Build.0 = Release|x86 + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|Any CPU.Build.0 = Debug|Any CPU {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -314,6 +390,11 @@ Global {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|Any CPU.Build.0 = Release|Any CPU {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {65DD367D-A89D-4F89-9231-2009EF0B31AF}.Release|x86.ActiveCfg = Release|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Any CPU.Build.0 = Debug|Any CPU {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -329,6 +410,11 @@ Global {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|Mixed Platforms.Build.0 = Release|Any CPU {074C14ED-C574-46D2-B9DC-C1B5F65D9A69}.Release|x86.ActiveCfg = Release|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Any CPU.Build.0 = Debug|Any CPU {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -344,6 +430,11 @@ Global {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|Mixed Platforms.Build.0 = Release|Any CPU {BA481E42-F570-4D2C-94D4-21C4CCE27762}.Release|x86.ActiveCfg = Release|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Any CPU.Build.0 = Debug|Any CPU {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -359,6 +450,11 @@ Global {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|Mixed Platforms.Build.0 = Release|Any CPU {A4172CDD-C8FD-4C91-9AAF-54A948F26273}.Release|x86.ActiveCfg = Release|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Any CPU.Build.0 = Debug|Any CPU {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -374,19 +470,11 @@ Global {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|Mixed Platforms.Build.0 = Release|Any CPU {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743}.Release|x86.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Debug|x86.ActiveCfg = Debug|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Any CPU.Build.0 = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B}.Release|x86.ActiveCfg = Release|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Any CPU.Build.0 = Debug|Any CPU {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -402,6 +490,11 @@ Global {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|Mixed Platforms.Build.0 = Release|Any CPU {8DA15060-5A78-4F89-A9F1-7AA56B0D622C}.Release|x86.ActiveCfg = Release|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Any CPU.Build.0 = Debug|Any CPU {3A053F34-4EDF-4071-B966-923255A0AE14}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -417,6 +510,11 @@ Global {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|Mixed Platforms.Build.0 = Release|Any CPU {3A053F34-4EDF-4071-B966-923255A0AE14}.Release|x86.ActiveCfg = Release|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Any CPU.Build.0 = Debug|Any CPU {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -432,6 +530,11 @@ Global {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|Mixed Platforms.Build.0 = Release|Any CPU {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9}.Release|x86.ActiveCfg = Release|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Any CPU.Build.0 = Debug|Any CPU {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -447,31 +550,11 @@ Global {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|Mixed Platforms.Build.0 = Release|Any CPU {B91C438D-0333-4D06-86CD-74CE82DF6F40}.Release|x86.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Debug|x86.ActiveCfg = Debug|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|Any CPU.Build.0 = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25}.Release|x86.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Any CPU.Build.0 = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {9D077B2F-1E74-4031-B28D-3F6F97829BEC}.Release|x86.ActiveCfg = Release|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -487,6 +570,11 @@ Global {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|Mixed Platforms.Build.0 = Release|Any CPU {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA}.Release|x86.ActiveCfg = Release|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Any CPU.Build.0 = Debug|Any CPU {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -502,6 +590,11 @@ Global {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|Mixed Platforms.Build.0 = Release|Any CPU {E1748F45-DD50-4479-96F6-F7EBA6F3E28B}.Release|x86.ActiveCfg = Release|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Any CPU.Build.0 = Debug|Any CPU {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -517,22 +610,12 @@ Global {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|Mixed Platforms.Build.0 = Release|Any CPU {8986CD52-0C65-42D6-9C47-20FF47CF87BB}.Release|x86.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|x86.ActiveCfg = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Debug|x86.Build.0 = Debug|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|Any CPU.Build.0 = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|x86.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release + Setup|x86.Build.0 = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Any CPU.Build.0 = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|x86.ActiveCfg = Release|Any CPU - {A51CC220-48C4-46F6-BF5D-3178CC317426}.Release|x86.Build.0 = Release|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU + {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug + Setup|x86.Build.0 = Debug|Any CPU {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|Any CPU.Build.0 = Debug|Any CPU {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -551,6 +634,12 @@ Global {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|Mixed Platforms.Build.0 = Release|Any CPU {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|x86.ActiveCfg = Release|Any CPU {5A171DBB-855C-452B-93C6-229C7AA6C7A6}.Release|x86.Build.0 = Release|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU + {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug + Setup|x86.Build.0 = Debug|Any CPU {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug|Any CPU.Build.0 = Debug|Any CPU {004C3829-FED4-4084-B23B-871193AFA8C7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -569,18 +658,156 @@ Global {004C3829-FED4-4084-B23B-871193AFA8C7}.Release|Mixed Platforms.Build.0 = Release|Any CPU {004C3829-FED4-4084-B23B-871193AFA8C7}.Release|x86.ActiveCfg = Release|Any CPU {004C3829-FED4-4084-B23B-871193AFA8C7}.Release|x86.Build.0 = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug + Setup|x86.Build.0 = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug|x86.ActiveCfg = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Debug|x86.Build.0 = Debug|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release + Setup|x86.Build.0 = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release|Any CPU.ActiveCfg = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release|Any CPU.Build.0 = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release|x86.ActiveCfg = Release|Any CPU + {968C6EEB-1E79-446A-96AE-69CB225E1C37}.Release|x86.Build.0 = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug + Setup|x86.Build.0 = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug|x86.ActiveCfg = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Debug|x86.Build.0 = Debug|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release + Setup|x86.Build.0 = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release|Any CPU.Build.0 = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release|x86.ActiveCfg = Release|Any CPU + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4}.Release|x86.Build.0 = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug + Setup|x86.Build.0 = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug|x86.ActiveCfg = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Debug|x86.Build.0 = Debug|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release + Setup|x86.Build.0 = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release|Any CPU.Build.0 = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release|x86.ActiveCfg = Release|Any CPU + {42B71DB3-2E34-43BB-BF87-88F422BCF861}.Release|x86.Build.0 = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug + Setup|x86.Build.0 = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug|x86.ActiveCfg = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Debug|x86.Build.0 = Debug|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release + Setup|x86.Build.0 = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release|Any CPU.Build.0 = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release|x86.ActiveCfg = Release|Any CPU + {1293A5C4-478F-4EFD-8E53-D283B35E1A06}.Release|x86.Build.0 = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug + Setup|Any CPU.ActiveCfg = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug + Setup|Any CPU.Build.0 = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug + Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug + Setup|Mixed Platforms.Build.0 = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug + Setup|x86.ActiveCfg = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug + Setup|x86.Build.0 = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug|x86.ActiveCfg = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Debug|x86.Build.0 = Debug|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release + Setup|Any CPU.ActiveCfg = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release + Setup|Any CPU.Build.0 = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release + Setup|Mixed Platforms.ActiveCfg = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release + Setup|Mixed Platforms.Build.0 = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release + Setup|x86.ActiveCfg = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release + Setup|x86.Build.0 = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release|Any CPU.Build.0 = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release|x86.ActiveCfg = Release|Any CPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution + {8AD3C34B-A1D3-4385-A8A9-C429BD9A37D3} = {41D5EE58-70A5-432A-AD7E-7681522416DA} + {A722DE9D-AE51-479C-825F-A19F4C69BD75} = {F477374C-E179-4991-BD4A-CAFCC42C69DC} + {7E5E21B9-4BD6-4FB3-9055-9B09CC479C6C} = {F477374C-E179-4991-BD4A-CAFCC42C69DC} + {90F750B3-64DB-493F-96A6-E68DE5EA60A1} = {F477374C-E179-4991-BD4A-CAFCC42C69DC} {F3FC11C7-8850-4874-9CF3-8BA4DE43959A} = {B1F1A4A8-719B-4863-BEE0-EC79E7F06DEB} + {65DD367D-A89D-4F89-9231-2009EF0B31AF} = {B1F1A4A8-719B-4863-BEE0-EC79E7F06DEB} + {074C14ED-C574-46D2-B9DC-C1B5F65D9A69} = {8C20CFC3-5D3F-4176-989D-BE4E472200FE} + {BA481E42-F570-4D2C-94D4-21C4CCE27762} = {F477374C-E179-4991-BD4A-CAFCC42C69DC} + {A4172CDD-C8FD-4C91-9AAF-54A948F26273} = {8C20CFC3-5D3F-4176-989D-BE4E472200FE} + {971B720E-2AE8-4EA4-B5CE-7A1AF11C3743} = {F477374C-E179-4991-BD4A-CAFCC42C69DC} {21AADDF8-BB39-4D0F-A6EF-EFD64AB3BC16} = {227520B6-B11F-45B8-84B2-8FDF27A2492C} - {0BA7DA0C-3C45-4834-9927-C8CB5B49DD7B} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} + {8DA15060-5A78-4F89-A9F1-7AA56B0D622C} = {2E731243-64FA-4810-A67F-03538F9A4954} + {3A053F34-4EDF-4071-B966-923255A0AE14} = {8C20CFC3-5D3F-4176-989D-BE4E472200FE} {1A7A0EC8-D85A-4674-8DF7-89FF64D0A158} = {227520B6-B11F-45B8-84B2-8FDF27A2492C} {4B6AC9D7-14AF-4C52-9154-59F4B4A3EC0E} = {1A7A0EC8-D85A-4674-8DF7-89FF64D0A158} - {BE376EFA-C7CC-44DB-B41E-506DBCB66A25} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} - {9D077B2F-1E74-4031-B28D-3F6F97829BEC} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} - {A51CC220-48C4-46F6-BF5D-3178CC317426} = {C1DAEFDD-689E-4324-A05D-66FA30B574B5} + {76346905-AC2F-4F01-BA99-BBFFBB2A6FE9} = {F477374C-E179-4991-BD4A-CAFCC42C69DC} + {B91C438D-0333-4D06-86CD-74CE82DF6F40} = {41D5EE58-70A5-432A-AD7E-7681522416DA} + {36B8E0A1-F1B1-498D-8FE7-A39BB7FD68CA} = {2E731243-64FA-4810-A67F-03538F9A4954} + {8986CD52-0C65-42D6-9C47-20FF47CF87BB} = {2E731243-64FA-4810-A67F-03538F9A4954} + {5A171DBB-855C-452B-93C6-229C7AA6C7A6} = {8C20CFC3-5D3F-4176-989D-BE4E472200FE} + {004C3829-FED4-4084-B23B-871193AFA8C7} = {F477374C-E179-4991-BD4A-CAFCC42C69DC} + {968C6EEB-1E79-446A-96AE-69CB225E1C37} = {2E731243-64FA-4810-A67F-03538F9A4954} + {8C3814BF-9482-41C2-BA1A-CBA59F5C2ED4} = {2E731243-64FA-4810-A67F-03538F9A4954} + {42B71DB3-2E34-43BB-BF87-88F422BCF861} = {8C20CFC3-5D3F-4176-989D-BE4E472200FE} + {1293A5C4-478F-4EFD-8E53-D283B35E1A06} = {F477374C-E179-4991-BD4A-CAFCC42C69DC} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BD4FB631-D51C-4C53-8362-486D4851FCDE} EndGlobalSection EndGlobal diff --git a/1.5 'Kruger 60'/MovistarTV.sln.DotSettings b/1.5 'Kruger 60'/MovistarTV.sln.DotSettings new file mode 100644 index 00000000..e1478215 --- /dev/null +++ b/1.5 'Kruger 60'/MovistarTV.sln.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Common/CommandLineArguments.cs b/1.5 'Kruger 60'/Project.Common/CommandLineArguments.cs deleted file mode 100644 index 8dd5bb49..00000000 --- a/1.5 'Kruger 60'/Project.Common/CommandLineArguments.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.Common -{ - public class CommandLineArguments - { - public bool SpecialHelpArgument - { - get; - set; - } // SpecialHelpArgument - - public bool IsHelpRequested - { - get; - private set; - } // IsHelpRequested - - public bool IsOk - { - get; - private set; - } // IsOk - - public IDictionary Parse(string[] args) - { - string argName; - string argValue; - - IsHelpRequested = false; - IsOk = false; - - var arguments = new Dictionary(args.Length, StringComparer.InvariantCultureIgnoreCase); - - foreach (var arg in args) - { - if ((arg[0] == '/') || (arg[0] == '-')) - { - if (arg.Length < 2) // argument name expected - { - return arguments; - } // if - - if (SpecialHelpArgument) - { - var partialArg = arg.Substring(1, 1).ToLower(); - if ((partialArg.StartsWith("h")) || (partialArg.StartsWith("?"))) - { - IsHelpRequested = true; - break; - } // if - } // if - - argValue = null; - var pos = arg.IndexOf(':'); - if (pos == 0) // argument name expected - { - return arguments; - } - else if (pos > 0) - { - argName = arg.Substring(1, pos - 1); - argValue = arg.Substring(pos + 1); - } - else - { - argName = arg; - } // if-else - - arguments[argName] = argValue; - } - else - { - return arguments; - } // if-else - } // foreach arg - - IsOk = true; - return arguments; - } // Parse - } // class CommandLineArguments -} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs b/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs deleted file mode 100644 index 600da8dd..00000000 --- a/1.5 'Kruger 60'/Project.Common/DateTimeExtensions.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Common -{ - public static class DateTimeExtensions - { - /// - /// Truncates a given DateTime to minutes resolution, ignoring seconds and milliseconds - /// - /// The DateTime to truncate. The Kind is preserved after truncation - /// The truncated DateTime - public static DateTime TruncateToMinutes(this DateTime time) - { - return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0, time.Kind); // set seconds to 0 - } // TruncateToMinutes - - public static DateTime TruncateToSeconds(this DateTime time, int rounding = 1) - { - if (rounding < 1) throw new ArgumentOutOfRangeException(nameof(rounding)); - var seconds = (time.Second / rounding) * rounding; - return new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, seconds, time.Kind); - } // TruncateToSeconds - } // static class DateTimeExtensions -} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/ExceptionEventData.cs b/1.5 'Kruger 60'/Project.Common/ExceptionEventData.cs deleted file mode 100644 index 3f451254..00000000 --- a/1.5 'Kruger 60'/Project.Common/ExceptionEventData.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Common -{ - public class ExceptionEventData - { - public string Caption { get; set; } - public string Message { get; set; } - public Exception Exception { get; set; } - - public ExceptionEventData() - { - // no-op - } // default constructor - - public ExceptionEventData(Exception ex) - { - Exception = ex; - } // default constructor - - public ExceptionEventData(string message, Exception ex) - { - Message = message; - Exception = ex; - } // constructor - - public ExceptionEventData(string caption, string message, Exception ex) - { - Caption = caption; - Message = message; - Exception = ex; - } // constructor - } // class ExceptionEventData -} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/HandleExceptionEventArgs.cs b/1.5 'Kruger 60'/Project.Common/HandleExceptionEventArgs.cs deleted file mode 100644 index 0af8fb41..00000000 --- a/1.5 'Kruger 60'/Project.Common/HandleExceptionEventArgs.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.Common -{ - public class HandleExceptionEventArgs: EventArgs - { - public Form OwnerForm { get; set; } - public string Caption { get; set; } - public string Message { get; set; } - public Exception Exception { get; set; } - - public HandleExceptionEventArgs() - { - // no-op - } // default constructor - - public HandleExceptionEventArgs(Form ownerForm, string caption, string message, Exception ex) - { - OwnerForm = ownerForm; - Caption = caption; - Message = message; - Exception = ex; - } // constructor - } // class HandleExceptionEventArgs -} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/License.txt b/1.5 'Kruger 60'/Project.Common/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/Project.Common/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/Project.Common/Project.Common.csproj b/1.5 'Kruger 60'/Project.Common/Project.Common.csproj deleted file mode 100644 index 443ccf86..00000000 --- a/1.5 'Kruger 60'/Project.Common/Project.Common.csproj +++ /dev/null @@ -1,113 +0,0 @@ - - - - - Debug - AnyCPU - {8DA15060-5A78-4F89-A9F1-7AA56B0D622C} - Library - Properties - IpTviewr.Common - Project.Common - v4.5.2 - 512 - SAK - SAK - SAK - SAK - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - - - True - True - Resources.resx - - - - - - True - True - FormatStringTexts.resx - - - True - True - Texts.resx - - - - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - ResXFileCodeGenerator - FormatStringTexts.Designer.cs - - - - - ResXFileCodeGenerator - Texts.Designer.cs - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Common/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Project.Common/Properties/AssemblyInfo.cs deleted file mode 100644 index 06fe9044..00000000 --- a/1.5 'Kruger 60'/Project.Common/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Project.Common")] -[assembly: AssemblyDescription("IpTviewr.Common")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("554861bf-241d-400b-a46d-38cd9365e2ea")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs deleted file mode 100644 index 83f8d364..00000000 --- a/1.5 'Kruger 60'/Project.Common/Properties/Resources.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Common.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/1.5 'Kruger 60'/Project.Common/Properties/Resources.resx b/1.5 'Kruger 60'/Project.Common/Properties/Resources.resx deleted file mode 100644 index 5ea0895e..00000000 --- a/1.5 'Kruger 60'/Project.Common/Properties/Resources.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Common/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Project.Common/Properties/Texts.Designer.cs deleted file mode 100644 index f4766988..00000000 --- a/1.5 'Kruger 60'/Project.Common/Properties/Texts.Designer.cs +++ /dev/null @@ -1,72 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Common.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Unable to open an Internet browser to display this web page: '{0}'.. - /// - internal static string LauncherOpenUrlError { - get { - return ResourceManager.GetString("LauncherOpenUrlError", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/Project.Common/Properties/Texts.es.resx b/1.5 'Kruger 60'/Project.Common/Properties/Texts.es.resx deleted file mode 100644 index 05f1c1c4..00000000 --- a/1.5 'Kruger 60'/Project.Common/Properties/Texts.es.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - No ha sido posible abrir un navegador de Internet para mostrar la página web '{0}'. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Common/Properties/Texts.resx b/1.5 'Kruger 60'/Project.Common/Properties/Texts.resx deleted file mode 100644 index 10d4846d..00000000 --- a/1.5 'Kruger 60'/Project.Common/Properties/Texts.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Unable to open an Internet browser to display this web page: '{0}'. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs b/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs deleted file mode 100644 index d73e6bae..00000000 --- a/1.5 'Kruger 60'/Project.Common/Serialization/XmlSerialization.cs +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.Common.Serialization -{ - public static class XmlSerialization - { - #region Serialize - - public static object CloneObject(object data) - { - using (var buffer = new MemoryStream()) - { - XmlSerialization.SerializeObject(buffer, data); - buffer.Seek(0, SeekOrigin.Begin); - return XmlSerialization.Deserialize(buffer, data.GetType()); - } // using buffer - } // Clone - - public static T Clone(T data) where T : class - { - using (var buffer = new MemoryStream()) - { - XmlSerialization.Serialize(buffer, data); - buffer.Seek(0, SeekOrigin.Begin); - return XmlSerialization.Deserialize(buffer); - } // using buffer - } // CloneSettings - - public static void SerializeObject(Stream output, object o) - { - var serializer = new XmlSerializer(o.GetType()); - serializer.Serialize(output, o); - } // SerializeObject - - public static void Serialize(string filename, T o) - { - using (var output = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite)) - { - Serialize(output, o); - } // using output - } // Serialize - - public static void Serialize(string filename, Encoding encoding, T o) - { - using (var output = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite)) - { - Serialize(output, encoding, o); - } // using output - } // Serialize - - public static void Serialize(Stream output, T o) - { - var serializer = new XmlSerializer(typeof(T)); - serializer.Serialize(output, o); - } // Serialize - - public static void Serialize(Stream output, Encoding encoding, T o) - { - var serializer = new XmlSerializer(typeof(T)); - using (var outputWriter = new StreamWriter(output, encoding)) - { - serializer.Serialize(outputWriter, o); - } // using outputWriter - } // Serialize - - public static void Serialize(XmlWriter output, T o) - { - var serializer = new XmlSerializer(typeof(T)); - serializer.Serialize(output, o); - } // Serialize - - #endregion - - #region Deserialize - - public static object Deserialize(Stream input, Type type, bool trimExtraWhitespace = false, Func namespaceReplacer = null) - { - using (var reader = CreateXmlReader(input, trimExtraWhitespace, namespaceReplacer)) - { - return Deserialize(reader, type); - } // using reader - } // Deserialize - - public static object Deserialize(XmlReader reader, Type type) - { - var serializer = new XmlSerializer(type); - return serializer.Deserialize(reader); - } // Deserialize - - public static T DeserializeXmlText(string xmlText, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class - { - using (var input = new StringReader(xmlText)) - { - using (var reader = CreateXmlReader(input, trimExtraWhitespace, namespaceReplacer)) - { - return Deserialize(reader); - } // using reader - } // using input - } // Deserialize - - public static T Deserialize(XmlReader reader) where T : class - { - var serializer = new XmlSerializer(typeof(T)); - return serializer.Deserialize(reader) as T; - } // Deserialize - - public static T Deserialize(string filename, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class - { - using (var input = new FileStream(filename, FileMode.Open, FileAccess.Read)) - { - return Deserialize(input, trimExtraWhitespace, namespaceReplacer); - } // using input - } // XmlDeserialize - - public static T Deserialize(Stream input, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class - { - return Deserialize(input, typeof(T), trimExtraWhitespace, namespaceReplacer) as T; - } // Deserialize - - public static T Deserialize(byte[] data, bool trimExtraWhitespace = false, Func namespaceReplacer = null) where T : class - { - using (var input = new MemoryStream(data)) - { - return Deserialize(input, trimExtraWhitespace, namespaceReplacer); - } // using - } // Deserialize - - public static XmlReader CreateXmlReader(Stream input, bool trimExtraWhitespace, Func namespaceReplacer) - { - if (trimExtraWhitespace) - { - var readerSettings = new XmlReaderSettings() - { - IgnoreComments = true, - IgnoreWhitespace = true, - }; - - return new XmlTextReaderTrimExtraWhitespace(input, readerSettings, namespaceReplacer); - } - else - { - return XmlReader.Create(input); - } // if-else - } // CreateXmlReader - - public static XmlReader CreateXmlReader(TextReader input, bool trimExtraWhitespace, Func namespaceReplacer) - { - if (trimExtraWhitespace) - { - var readerSettings = new XmlReaderSettings() - { - IgnoreComments = true, - IgnoreWhitespace = true, - }; - - return new XmlTextReaderTrimExtraWhitespace(input, readerSettings, namespaceReplacer); - } - else - { - return XmlReader.Create(input); - } // if-else - } // CreateXmlReader - - #endregion - } // class XmlSerialization -} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs b/1.5 'Kruger 60'/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs deleted file mode 100644 index edc58e93..00000000 --- a/1.5 'Kruger 60'/Project.Common/Serialization/XmlTextReaderTrimExtraWhitespace.cs +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; - -namespace IpTviewr.Common.Serialization -{ - public class XmlTextReaderTrimExtraWhitespace : XmlTextReader - { - private XmlReaderSettings MySettings; - private Func NamespaceReplacer; - - public XmlTextReaderTrimExtraWhitespace(Stream input, Func namespaceReplacer) - : base(input) - { - NamespaceReplacer = namespaceReplacer; - } // constructor - - public XmlTextReaderTrimExtraWhitespace(Stream input, XmlReaderSettings settings, Func namespaceReplacer) - : base(input) - { - MySettings = settings; - NamespaceReplacer = namespaceReplacer; - } // constructor - - public XmlTextReaderTrimExtraWhitespace(TextReader input, Func namespaceReplacer) - : base(input) - { - NamespaceReplacer = namespaceReplacer; - } // constructor - - public XmlTextReaderTrimExtraWhitespace(TextReader input, XmlReaderSettings settings, Func namespaceReplacer) - : base(input) - { - MySettings = settings; - NamespaceReplacer = namespaceReplacer; - } // constructor - - public override XmlReaderSettings Settings - { - get { return MySettings ?? base.Settings; } - } // Settings - - public override string NamespaceURI - { - get - { - var ns = base.NamespaceURI; - - if (NamespaceReplacer == null) return ns; - if (string.IsNullOrEmpty(ns)) return ns; - - return NamespaceReplacer(ns); - } // get - } // NamespaceURI - - public override string ReadString() - { - return TrimExtraWhitespace(base.ReadString()); - } // ReadString - - public static string TrimExtraWhitespace(string input) - { - if (string.IsNullOrEmpty(input)) return input; - - var startIndex = 0; - for (int i = 0; i < input.Length; i++) - { - if (!char.IsWhiteSpace(input[i])) - { - startIndex = i; - break; - } // if - } // for - - var endIndex = input.Length; - for (int i = input.Length - 1; i >= startIndex; i--) - { - if (!char.IsWhiteSpace(input[i])) - { - endIndex = i + 1; - break; - } // if - } // for - - var buffer = new StringBuilder((endIndex - startIndex) + 1); - for (int i = startIndex; i < endIndex; i++) - { - var c = input[i]; - var isWhitespace = char.IsWhiteSpace(c); - if (isWhitespace) - { - c = ' '; - } // if - if ((i == startIndex) || !isWhitespace || (isWhitespace && !char.IsWhiteSpace(input[i - 1]))) - { - buffer.Append(c); - } // if - } // for - - return buffer.ToString(); - } // TrimExtraWhitespace - } // XmlTextReaderTrimExtraWhitespace -} // namespace diff --git a/1.5 'Kruger 60'/Project.Common/Telemetry/BasicGoogleTelemetry.cs b/1.5 'Kruger 60'/Project.Common/Telemetry/BasicGoogleTelemetry.cs deleted file mode 100644 index 6830b3ca..00000000 --- a/1.5 'Kruger 60'/Project.Common/Telemetry/BasicGoogleTelemetry.cs +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace IpTviewr.Common.Telemetry -{ - public class BasicGoogleTelemetry - { -#if DEBUG - private static Uri UrlEndpoint = new Uri("https://www.google-analytics.com/debug/collect"); -#else - private static Uri UrlEndpoint = new Uri("https://www.google-analytics.com/collect"); -#endif - private static string UserAgent; - private static string ApplicationName; - - public static bool Enabled - { - get; - private set; - } // Enabled - - public static bool Usage - { - get; - private set; - } // Usage - - public static bool Exceptions - { - get; - private set; - } // Exceptions - - public static string TrackingId - { - get; - private set; - } // TrackingId - - public static string ClientId - { - get; - private set; - } // ClientId - - public static void Init(string trackingId, string clientId, bool enabled, bool usage, bool exceptions) - { - UserAgent = BuildUserAgent(); - ApplicationName = Path.GetFileNameWithoutExtension(Application.ExecutablePath); - TrackingId = trackingId; - ClientId = clientId; - Enabled = enabled; - Usage = usage & enabled; - Exceptions = exceptions & enabled; - ManageSession(false); - //MessageBox.Show(string.Format("TrackingId: {0}\r\nClientId: {1}\r\nEnable: {2} {3} {4}", TrackingId, ClientId, Enabled, Usage, Exceptions), "Init Google Telemetry"); - } // Init - - public static void EnsureHitsSents() - { - // this is a nasty trick to give time to the ThreadPool to send any remaining hits - // TODO: create a true queue -#if !DEBUG - if (Enabled) - { - Thread.Sleep(5000); - } // if -#endif - } // EnsureHitsSents - - public static void ManageSession(bool end) - { - if (!Usage) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "event"); - bag.Add("ec", "Session"); - bag.Add("ea", end? "End" : "Start"); - bag.Add("sr", string.Format("{0}x{1}", Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)); - bag.Add("vp", string.Format("{0}x{1}", SystemInformation.WorkingArea.Width, SystemInformation.WorkingArea.Height)); - bag.Add("sd", string.Format("{0}-bits", Screen.PrimaryScreen.BitsPerPixel)); - bag.Add("ni", "1"); // non-interactive - bag.Add("cd<1>", Environment.OSVersion.ToString()); - Send(bag); - - bag = CreateProperyBag(); - bag.Add("sc", end ? "end" : "start"); - bag.Add("ni", "1"); // non-interactive - Send(bag); - }); - } // EndSession - - public static void SendScreenHit(string screenName) - { - if (!Usage) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "screenview"); - bag.Add("cd", screenName); - Send(bag); - }); - } // SendScreenHit - - public static void SendScreenHit(Form form, string status = null) - { - if (!Usage) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "screenview"); - if (status == null) - { - bag.Add("cd", form.GetType().Name); - } - else - { - bag.Add("cd", string.Format("{0}: {1}", form.GetType().Name, status)); - } // if-else - Send(bag); - }); - } // SendScreenHit - - public static void SendExceptionHit(Exception ex) - { - if (!Exceptions) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "exception"); - bag.Add("exd", ex.GetType().FullName); - bag.Add("ni", "1"); - Send(bag); - }); - } // SendExceptionHit - - public static void SendExtendedExceptionHit(Exception ex, bool sendBasic = true, string context = null, string screenName = null) - { - if (!Exceptions) return; - - ThreadPool.QueueUserWorkItem((o) => - { - if (sendBasic) - { - var basicBag = CreateProperyBag(); - basicBag.Add("t", "exception"); - basicBag.Add("exd", ex.GetType().FullName); - basicBag.Add("ni", "1"); - if (screenName != null) - { - basicBag.Add("cd", screenName); - } // if - Send(basicBag); - } // if - - var bag = CreateProperyBag(); - bag.Add("t", "event"); - bag.Add("ec", "Exception"); - bag.Add("ea", ex.GetType().FullName); - if (context != null) - { - bag.Add("el", context); - } // if - if (screenName != null) - { - bag.Add("cd", screenName); - } // if - bag.Add("ni", "1"); - Send(bag); - }); - } // SendExtendedExceptionHit - - public static void SendEventHit(string category, string action, string label = null, string screenName = null, int? value = null) - { - if (!Usage) return; - - ThreadPool.QueueUserWorkItem((o) => - { - var bag = CreateProperyBag(); - bag.Add("t", "event"); - bag.Add("ec", category); - bag.Add("ea", action); - if (label != null) - { - bag.Add("el", label); - } // if - if (value != null) - { - bag.Add("ev", value.Value.ToString(CultureInfo.InvariantCulture)); - } // if - if (screenName != null) - { - bag.Add("cd", screenName); - } // if - Send(bag); - }); - } // SendEventHit - - private static IDictionary CreateProperyBag() - { - var bag = new Dictionary(); - - bag.Add("v", "1"); - bag.Add("tid", TrackingId); - bag.Add("cid", ClientId); - bag.Add("ul", Thread.CurrentThread.CurrentUICulture.Name.ToLowerInvariant()); - bag.Add("an", ApplicationName); - bag.Add("av", SolutionVersion.AssemblyFileVersion); - - return bag; - } // CreateProperyBag - - private static void Send(IDictionary propertyBag) - { - try - { - var client = new WebClient(); - client.Headers.Add(HttpRequestHeader.UserAgent, UserAgent); - - var postData = GetPostData(propertyBag); - var binPostData = Encoding.UTF8.GetBytes(postData); -#if DEBUG - // Do NOT send hits in debug mode - // var result = client.UploadData(UrlEndpoint, binPostData); - // var json = Encoding.UTF8.GetString(result); -#else - //MessageBox.Show(UrlEndpoint.ToString() + "\r\n" + postData, "Basic Google Telemetry"); - client.UploadDataAsync(UrlEndpoint, binPostData); -#endif - } - catch - { - // ignore - } // try-catch - } // Send - - private static string GetPostData(IDictionary propertyBag) - { - var result = new StringBuilder(); - foreach (var property in propertyBag) - { - if (result.Length > 0) result.Append("&"); - result.Append(Uri.EscapeDataString(property.Key)); - result.Append("="); - result.Append(Uri.EscapeDataString(property.Value)); - } // foreach - - return result.ToString(); - } // GetPostData - - private static string BuildUserAgent() - { - string osName; - - var osInfo = Environment.OSVersion; - var osVersion = string.Format("{0}.{1}.{2}", osInfo.Version.Major, osInfo.Version.Minor, osInfo.Version.Build); - switch (osInfo.Platform) - { - case PlatformID.Win32NT: osName = "Windows NT"; break; - case PlatformID.Unix: osName = "Unix"; break; - case PlatformID.MacOSX: osName = "Macintosh"; break; - case PlatformID.Win32Windows: osName = "Windows"; break; - case PlatformID.Win32S: osName = "Windows"; break; - case PlatformID.WinCE: osName = "Windows CE"; break; - default: - osName = "Unknown"; break; - } // switch - - return string.Format("{0} ({1} {2})", "Mozilla/5.0", osName, osVersion); - } // BuildUserAgent - } // internal class BasicGoogleTelemetry -} // namespace diff --git a/1.5 'Kruger 60'/Project.Native/License.txt b/1.5 'Kruger 60'/Project.Native/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/Project.Native/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/Project.Native/Project.Native.csproj b/1.5 'Kruger 60'/Project.Native/Project.Native.csproj deleted file mode 100644 index c12ebb45..00000000 --- a/1.5 'Kruger 60'/Project.Native/Project.Native.csproj +++ /dev/null @@ -1,63 +0,0 @@ - - - - - Debug - AnyCPU - {8986CD52-0C65-42D6-9C47-20FF47CF87BB} - Library - Properties - IpTviewr.Native - Project.Native - v4.5.2 - 512 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Project.Native/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Project.Native/Properties/AssemblyInfo.cs deleted file mode 100644 index 62c6bfcf..00000000 --- a/1.5 'Kruger 60'/Project.Native/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Project.Native")] -[assembly: AssemblyDescription("IpTviewr.Native")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("b9724e24-10fb-45e0-8eee-e35975a9bb3f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Common.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/Common.cs deleted file mode 100644 index c30805f6..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/Common.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; - -namespace IpTviewr.Services.EpgDiscovery -{ - internal class Common - { - public const string XmlNamespace = "urn:AlphaCentaury:IpTViewr:2016:EPG"; - } // class Common -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgCodedValue.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgCodedValue.cs deleted file mode 100644 index 13afdc63..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgCodedValue.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = Common.XmlNamespace)] - public class EpgCodedValue - { - public string Code - { - get; - set; - } // Code - - public string Description - { - get; - set; - } // Description - - public static EpgCodedValue ToCodedValue(TvAnytime.TvaName name) - { - if (name == null) return null; - - return new EpgCodedValue() - { - Code = name.HRef, - Description = name.Name - }; - } // ToCodedValue - - public static EpgCodedValue ToCodedValue(TvAnytime.Mpeg7Name name) - { - if (name == null) return null; - - return new EpgCodedValue() - { - Code = name.HRef, - Description = name.Name - }; - } // ToCodedValue - - public override string ToString() - { - return Description; - } // ToString - } // class EpgCode -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.SegmentsProcessor.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.SegmentsProcessor.cs deleted file mode 100644 index 8a6a1ad1..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.SegmentsProcessor.cs +++ /dev/null @@ -1,113 +0,0 @@ -using IpTviewr.Common.Serialization; -using IpTviewr.Services.EpgDiscovery.TvAnytime; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace IpTviewr.Services.EpgDiscovery -{ - partial class EpgDownloader - { - private class SegmentsProcessor - { - ConcurrentQueue SegmentsQueue; - AutoResetEvent EnqueuedSegments; - AutoResetEvent ProcessSegmentsEnded; - bool NoMoreSegments; - EpgDatastore Datastore; - - public void Start(EpgDatastore datastore) - { - if (SegmentsQueue != null) throw new InvalidOperationException(); - - SegmentsQueue = new ConcurrentQueue(); - EnqueuedSegments = new AutoResetEvent(false); - ProcessSegmentsEnded = new AutoResetEvent(false); - NoMoreSegments = false; - Datastore = datastore; - - var worker = new Thread(ProcessSegments); - worker.Start(); - } // Start - - public void AddSegment(byte[] segmentPayload) - { - if (SegmentsQueue == null) throw new ObjectDisposedException(nameof(SegmentsProcessor)); - - Console.WriteLine("Enqueue"); - SegmentsQueue.Enqueue(segmentPayload); - EnqueuedSegments.Set(); - } // AddSegment - - public void WaitCompletion() - { - NoMoreSegments = true; - EnqueuedSegments.Set(); - ProcessSegmentsEnded.WaitOne(); - } // WaitCompletion - - public void Dispose() - { - if (SegmentsQueue == null) return; - - SegmentsQueue = null; - EnqueuedSegments.Dispose(); - ProcessSegmentsEnded.Dispose(); - Datastore = null; - } // Dispose - - private void ProcessSegments() - { - byte[] payload; - - while ((payload = GetNextSegment()) != null) - { - try - { - var item = XmlSerialization.Deserialize(payload, trimExtraWhitespace: true, namespaceReplacer: NamespaceUnification.Replacer) as ExtendedPurchaseItem; - var schedule = item?.ProgramDescription?.LocationTable?.Schedule; - if (schedule == null) - { - // TODO: log - continue; - } // if - var epgService = EpgService.FromSchedule(schedule); - Datastore.Add(epgService); - } - catch (Exception ex) - { - // TODO: log - Console.WriteLine("Unable to parse: {0}", ex.Message); - return; - } // try-catch - } // while - - ProcessSegmentsEnded.Set(); - } // ProcessSegments - - private byte[] GetNextSegment() - { - byte[] payload; - - while (true) - { - Console.WriteLine("Queue: {0} items", SegmentsQueue.Count); - if (SegmentsQueue.TryDequeue(out payload)) - { - Console.WriteLine("Dequeue.Ok"); - return payload; - } // if - - if (NoMoreSegments) return null; - - Console.WriteLine("Dequeue.Wait"); - EnqueuedSegments.WaitOne(); - } // while - } // GetNextPayload - } // SegmentsProcessor - } // partial class EpgDownloader -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.cs deleted file mode 100644 index 57ee0b41..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgDownloader.cs +++ /dev/null @@ -1,160 +0,0 @@ -using IpTviewr.Common.Serialization; -using IpTviewr.DvbStp.Client; -using IpTviewr.Services.EpgDiscovery.TvAnytime; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -// Please note: this code is designed to work ONLY with the p_f broadcast content guide of movistar+ -// It is not multitasking (meaning: reading from several sources at the same time) -// It also asumes the EPG data is in text-plain XML format -// movistar+ employs a custom compression method (DVBBINSTP) for all it EPG sources, save 'p_f' (present and following) - -namespace IpTviewr.Services.EpgDiscovery -{ - public sealed partial class EpgDownloader - { - private IPEndPoint Endpoint; - private DvbStpStreamClient StreamClient; - private SegmentsProcessor Processor; - - public IPAddress MulticastIpAddress - { - get; - private set; - } // MulticastIpAddress - - public int MulticastPort - { - get; - private set; - } // MulticastPort - - private EpgDatastore Datastore - { - get; - set; - } // Datastore - - public EpgDownloader(string multicastIpEndPoint) - { - var parts = multicastIpEndPoint.Split(':'); - if (parts.Length != 2) throw new ArgumentOutOfRangeException(); - - Init(parts[0], parts[1]); - } // constructor - - public EpgDownloader(string multicastIpAddress, string port) - { - Init(multicastIpAddress, port); - } // constructor - - public EpgDownloader(IPAddress multicastIpAddress, int port) - { - MulticastIpAddress = multicastIpAddress; - MulticastPort = port; - } // EpgDownloader - - private void Init(string ipAddress, string port) - { - MulticastIpAddress = IPAddress.Parse(ipAddress); - MulticastPort = int.Parse(port); - } // Init - - public EpgDownloader(IPEndPoint endpoint) - { - Endpoint = endpoint; - } // constructor - - public async Task StartAsync(EpgDatastore datastore) - { - Datastore = datastore; - await Task.Run((Action)Download); - } // StartAsync - - private void Download() - { - var retryIncrement = new TimeSpan(0, 0, 5); - var retryTime = new TimeSpan(0, 0, 0); - var maxRetryTime = new TimeSpan(0, 1, 0); - - try - { - Processor = new SegmentsProcessor(); - - // initialize DVB-STP client - StreamClient = new DvbStpStreamClient(MulticastIpAddress, MulticastPort); - StreamClient.NoDataTimeout = -1; // not implemented by DvbStpStreamClient - StreamClient.ReceiveDatagramTimeout = 60 * 1000; // 60 seconds - StreamClient.OperationTimeout = -1; // forever - StreamClient.SegmentPayloadReceived += SegmentPayloadReceived; - - while (retryTime <= maxRetryTime) - { - var retry = false; - try - { - Processor.Start(Datastore); - StreamClient.DownloadStream(); - break; - } - catch (SocketException) // reception error - { - retry = true; - } - catch (TimeoutException) // reception timedout - { - // took too much time to process the stream - }// try-catch - - // Safety check. If we asked to stop the download, but an exception is thrown in between, - // we can ignore it and end the reception; - if (StreamClient.CancelRequested) break; - - if (retry) - { - // wait and then retry, increasing wait time - retryTime += retryIncrement; - Thread.Sleep(retryTime); - continue; - } // if - } // while - - Processor.WaitCompletion(); - } - finally - { - if (StreamClient != null) - { - StreamClient.Close(); - StreamClient = null; - } // if - - if (Processor != null) - { - Processor.Dispose(); - Processor = null; - } // if - - Datastore = null; - } // try-finally - } // Download - - private void SegmentPayloadReceived(object sender, PayloadStorage.SegmentPayloadReceivedEventArgs e) - { - Console.WriteLine("{0}:{1} ({2} received)", e.SegmentIdentity, e.Payload.Length, StreamClient.DatagramCount); - Processor.AddSegment(e.Payload); - - // TODO: stop when EPG is complete - // Notify the caller. - // Give teh caller the option to download in a continuos loop - // or the restart the download after a given time - } // SegmentPayloadReceived - } // class EpgDownloader -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgEmptyLinkedList.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgEmptyLinkedList.cs deleted file mode 100644 index 1a6d1e99..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgEmptyLinkedList.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Services.EpgDiscovery -{ - public class EpgEmptyLinkedList : IEpgLinkedList, IEnumerable - { - public EpgEmptyLinkedList(string serviceIdRef) - { - ServiceIdRef = serviceIdRef; - } // constructor - - public int Count - { - get { return 0; } - } // Count - - public IEpgLinkedListNode First - { - get { return null; } - } // First - - public IEpgLinkedListNode Last - { - get { return null; } - } // Last - - public IEpgLinkedListNode Requested - { - get { return null; } - } // Requested - - public string ServiceIdRef - { - get; - private set; - } // ServiceIdRef - - public IEpgLinkedListNode GetMore(bool forward, int nodesCount, bool keepExistingData) - { - return null; - } // IEpgLinkedListNode - - public IEnumerator GetEnumerator() - { - yield break; - } // GetEnumerator - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } // GetEnumerator - } // class EpgEmptyLinkedList -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgLinkedListNodeWrapper.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgLinkedListNodeWrapper.cs deleted file mode 100644 index 01505e9e..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgLinkedListNodeWrapper.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Services.EpgDiscovery -{ - public sealed class EpgLinkedListNodeWrapper : IEpgLinkedListNode - { - private LinkedListNode Node; - private EpgLinkedListWrapper LinkedList; - - public EpgLinkedListNodeWrapper(EpgLinkedListWrapper list, LinkedListNode node) - { - LinkedList = list; - Node = node; - } // constructor - - public IEpgLinkedList List - { - get { return LinkedList; } - } // List - - public IEpgLinkedListNode Next - { - get - { - var next = Node.Next; - if (next == null) - { - if ((LinkedList.PhantomNode != null) && (LinkedList.PhantomNode.IsLast)) - { - return LinkedList.PhantomNode; - } - else - { - return null; - } // if-else - } - else - { - return new EpgLinkedListNodeWrapper(LinkedList, next); - } // if-else - } - } // Next - - public IEpgLinkedListNode Previous - { - get - { - var previous = Node.Previous; - if (previous == null) - { - if ((LinkedList.PhantomNode != null) && (LinkedList.PhantomNode.IsFirst)) - { - return LinkedList.PhantomNode; - } - else - { - return null; - } // if-else - } - else - { - return new EpgLinkedListNodeWrapper(LinkedList, previous); - } // if-else - } // get - } // Previous - - public EpgProgram Program - { - get { return Node.Value; } - } // Program - - public override int GetHashCode() - { - return Node.GetHashCode(); - } // GetHashCode - - public override bool Equals(object obj) - { - var wrappedNode = obj as EpgLinkedListNodeWrapper; - if (object.ReferenceEquals(wrappedNode, null)) return false; - - return (Node == wrappedNode.Node); - } // Equals - - public override string ToString() - { - return Node.Value.ToString(); - } // ToString - - public static bool operator == (EpgLinkedListNodeWrapper a, EpgLinkedListNodeWrapper b) - { - if ((a == null) || (b == null)) return false; - return (a.Node == b.Node); - } // operator == - - public static bool operator != (EpgLinkedListNodeWrapper a, EpgLinkedListNodeWrapper b) - { - if ((a == null) || (b == null)) return true; - return (a.Node != b.Node); - } // operator != - } // class EpgLinkedListNodeWrapper -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgLinkedListPhantomNode.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgLinkedListPhantomNode.cs deleted file mode 100644 index 33784271..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgLinkedListPhantomNode.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Services.EpgDiscovery -{ - public sealed class EpgLinkedListPhantomNode : IEpgLinkedListNode - { - private EpgLinkedListWrapper LinkedList; - - public EpgLinkedListPhantomNode(EpgLinkedListWrapper list, EpgProgram program, bool first) - { - LinkedList = list; - Program = program; - IsFirst = first; - if (first) - { - Previous = null; - Next = new EpgLinkedListNodeWrapper(list, list.List.First); - } - else - { - Previous = new EpgLinkedListNodeWrapper(list, list.List.Last); - Next = null; - } // if-else - } // constructor - - public IEpgLinkedList List - { - get { return LinkedList; } - } // List - - public IEpgLinkedListNode Next - { - get; - private set; - } // Next - - public IEpgLinkedListNode Previous - { - get; - private set; - } // Previous - - public EpgProgram Program - { - get; private set; - } // Program - - public bool IsFirst - { - get; - private set; - } // IsFirst - - public bool IsLast - { - get { return !IsFirst; } - } // IsLast - } // sealed class EpgLinkedListPhantomNode -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgLinkedListWrapper.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgLinkedListWrapper.cs deleted file mode 100644 index 0ab46806..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgLinkedListWrapper.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Services.EpgDiscovery -{ - public sealed class EpgLinkedListWrapper : IEpgLinkedList, IEnumerable - { - LinkedListNode RequestedNode; - - public EpgLinkedListWrapper(string serviceIdRef, LinkedList linkedList, LinkedListNode requested = null) - { - ServiceIdRef = serviceIdRef; - List = linkedList; - RequestedNode = requested; - } // constructor - - public EpgLinkedListWrapper(string serviceIdRef, LinkedList linkedList, EpgProgram phantomEmptyProgram, bool first = true) - { - ServiceIdRef = serviceIdRef; - List = linkedList; - PhantomNode = new EpgLinkedListPhantomNode(this, phantomEmptyProgram, first); - } // constructor - - public int Count - { - get { return (PhantomNode == null) ? List.Count : List.Count + 1; } - } // Count - - public IEpgLinkedListNode First - { - get - { - if ((PhantomNode != null) && (PhantomNode.IsFirst)) return PhantomNode; - - return new EpgLinkedListNodeWrapper(this, List.First); - } // get - } // First - - public IEpgLinkedListNode Last - { - get - { - if ((PhantomNode != null) && (!PhantomNode.IsFirst)) return PhantomNode; - - return new EpgLinkedListNodeWrapper(this, List.Last); - } // get - } // Last - - public IEpgLinkedListNode Requested - { - get - { - if (PhantomNode != null) return PhantomNode; - - return new EpgLinkedListNodeWrapper(this, RequestedNode ?? List.First); - } // get - } // Requested - - public string ServiceIdRef - { - get; - private set; - } // ServiceIdRef - - internal EpgLinkedListPhantomNode PhantomNode - { - get; - set; - } // PhantomNode - - public IEpgLinkedListNode GetMore(bool forward, int nodesCount, bool keepExistingData) - { - return null; - } // GetMore - - public IEnumerator GetEnumerator() - { - var current = First; - while (current != null) - { - yield return current.Program; - current = current.Next; - } // while - } // GetEnumerator - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } // IEnumerable.GetEnumerator - - internal LinkedList List - { - get; - set; - } // List - } // class EpgLinkedListWrapper -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgNullDatastore.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgNullDatastore.cs deleted file mode 100644 index e017b9af..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgNullDatastore.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Services.EpgDiscovery -{ - public sealed class EpgNullDatastore: EpgDatastore - { - protected override void AddEpgService(EpgService epgService) - { - // do nothing - } // Add - - public override ICollection GetServicesRefs() - { - return new string[0]; - } // GetServicesRefs - - public override IEpgLinkedList GetPrograms(string serviceIdRef, DateTime? localTime, int nodesBefore, int nodesAfter) - { - return new EpgEmptyLinkedList(serviceIdRef); - } // GetPrograms - - public override IDictionary GetAllPrograms(DateTime? localTime, int nodesBefore, int nodesAfter) - { - return new Dictionary(0); - } // GetAllPrograms - } // class EpgNullDatastore -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs deleted file mode 100644 index 8733cf2c..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgProgram.cs +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Runtime.Remoting.Metadata.W3cXsd2001; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery -{ - [Serializable()] - [DebuggerStepThrough] - [DesignerCategory("code")] - [XmlType(TypeName = "Program", Namespace = Common.XmlNamespace)] - public class EpgProgram - { - [XmlAttribute("crid")] - public string CRID - { - get; - set; - } // CRID - - [XmlElement("Title")] - public string Title - { - get; - set; - } // Tile - - [XmlElement("Genre")] - public EpgCodedValue Genre - { - get; - set; - } // Genre - - [XmlElement("ParentalRating")] - public EpgCodedValue ParentalRating - { - get; - set; - } // ParentalRating - - [XmlElement("StartTime")] - public DateTime UtcStartTime - { - get; - set; - } // UtcStartTime - - [XmlIgnore] - public DateTime LocalStartTime - { - get { return UtcStartTime.ToLocalTime(); } - } // LocalStartTime - - [XmlIgnore] - public DateTime UtcEndTime - { - get { return UtcStartTime + Duration; } - } // UtcEndTime - - [XmlIgnore] - public DateTime LocalEndTime - { - get { return UtcEndTime.ToLocalTime(); } - } // LocalEndTime - - [XmlIgnore] - public TimeSpan Duration - { - get; - set; - } // Duration - - [XmlAttribute("isBlank")] - public bool IsBlank - { - get; - set; - } // IsBlank - - [XmlElement("Duration")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlDuration - { - get { return SoapDuration.ToString(Duration); } - set { Duration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlDuration - - public bool IsCurrent(DateTime referenceTime) - { - if (referenceTime.Kind != DateTimeKind.Utc) - { - referenceTime = referenceTime.ToUniversalTime(); - } // if - - return (referenceTime >= UtcStartTime) && (referenceTime < UtcEndTime); - } // IsCurrent - - public bool IsOld(DateTime referenceTime) - { - if (referenceTime.Kind != DateTimeKind.Utc) - { - referenceTime = referenceTime.ToUniversalTime(); - } // if - - return (referenceTime >= UtcEndTime); - } // IsOld - - public bool IsAfter(DateTime referenceTime) - { - if (referenceTime.Kind != DateTimeKind.Utc) - { - referenceTime = referenceTime.ToUniversalTime(); - } // if - - return (referenceTime < UtcStartTime); - } // IsAfter - - public static EpgProgram FromScheduleEvent(TvAnytime.TvaScheduleEvent item) - { - if (item == null) return null; - - var utcStartTime = item.StartTime ?? item.PublishedStartTime; - if (utcStartTime == null) return null; - - var result = new EpgProgram() - { - CRID = item.Program.CRID, - Duration = (item.Duration.TotalSeconds > 0) ? item.Duration : item.PublishedDuration, - UtcStartTime = utcStartTime.Value - }; - - if (item.Description == null) - { - result.Title = Properties.Texts.EpgBlankTitle; - result.IsBlank = true; - return result; - } - - result.Title = item.Description.Title; - result.Genre = EpgCodedValue.ToCodedValue(item.Description.Genre); - result.ParentalRating = (item.Description.ParentalGuidance != null)? EpgCodedValue.ToCodedValue(item.Description.ParentalGuidance.ParentalRating) : null; - - return result; - } // FromScheduleEvent - - public override string ToString() - { - return Title; - } // ToString - } // EPGEvent -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgSingleServiceDatastore.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/EpgSingleServiceDatastore.cs deleted file mode 100644 index 43a3b3bc..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/EpgSingleServiceDatastore.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Services.EpgDiscovery -{ - public sealed class EpgSingleServiceDatastore: EpgDatastore - { - string FullServiceName; - IEpgLinkedList ServicePrograms; - - public EpgSingleServiceDatastore(string fullServiceName, IEpgLinkedList servicePrograms) - { - FullServiceName = fullServiceName; - ServicePrograms = servicePrograms; - } // constructor - - protected override void AddEpgService(EpgService epgService) - { - throw new InvalidOperationException(); - } // Add - - public override ICollection GetServicesRefs() - { - return new string[] { FullServiceName }; - } // GetServicesRefs - - public override IEpgLinkedList GetPrograms(string serviceIdRef, DateTime? localTime, int nodesBefore, int nodesAfter) - { - return ServicePrograms; - } // GetPrograms - - public override IDictionary GetAllPrograms(DateTime? localTime, int nodesBefore, int nodesAfter) - { - var result = new Dictionary(1); - result.Add(FullServiceName, ServicePrograms); - - return result; - } // GetAllPrograms - } // class EpgSingleServiceDatastore -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/IEpgLinkedList.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/IEpgLinkedList.cs deleted file mode 100644 index 0567a569..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/IEpgLinkedList.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Services.EpgDiscovery -{ - public interface IEpgLinkedList: IEnumerable - { - string ServiceIdRef { get; } - - IEpgLinkedListNode First { get; } - - IEpgLinkedListNode Requested { get; } - - IEpgLinkedListNode Last { get; } - - int Count { get; } - - IEpgLinkedListNode GetMore(bool forward, int nodesCount, bool keepExistingData); - } // public IEpgLinkedList -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/IEpgLinkedListNode.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/IEpgLinkedListNode.cs deleted file mode 100644 index 78fdf3ae..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/IEpgLinkedListNode.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IpTviewr.Services.EpgDiscovery -{ - public interface IEpgLinkedListNode - { - EpgProgram Program { get; } - - IEpgLinkedListNode Previous { get; } - - IEpgLinkedListNode Next { get; } - - IEpgLinkedList List { get; } - } // interface IEpgLinkedListNode -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/License.txt b/1.5 'Kruger 60'/Services.EpgDiscovery/License.txt deleted file mode 100644 index c9479ece..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/AssemblyInfo.cs deleted file mode 100644 index 07b9fc25..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Services.EPG.Serialization")] -[assembly: AssemblyDescription("IpTviewr services: EPG serialization")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("5a171dbb-855c-452b-93c6-229c7aa6c7a6")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/AssemblySolutionInfo.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/AssemblySolutionInfo.cs deleted file mode 100644 index c38297d5..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/AssemblySolutionInfo.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; - -[assembly: AssemblyFileVersion(SolutionVersion.AssemblyFileVersion)] -[assembly: AssemblyInformationalVersion(SolutionVersion.AssemblyInformationalVersion)] -[assembly: AssemblyProduct(SolutionVersion.AssemblyProduct)] -[assembly: AssemblyCompany("movistartv.codeplex.com")] - -internal static class SolutionVersion -{ - public const string DefaultAssemblyVersion = "1.5.1010.0"; - public const string AssemblyFileVersion = "1.5.1010.0"; - public const string AssemblyInformationalVersion = "1.5.1010.0"; - public const string AssemblyProduct = "IPTViewr: virtual decoder for movistar+" + " (v" + ProductVersion + ")"; - public const string ProductVersion = "1.5 \"Kruger 60\" Beta 1"; - public const string DefaultCopyright = "Copyright (C) 2014-2016, AlphaCentaury and contributors"; -} // class SolutionVersion \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.Designer.cs deleted file mode 100644 index 59ab5698..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/Properties/Texts.Designer.cs +++ /dev/null @@ -1,72 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.Services.EpgDiscovery.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.EpgDiscovery.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Insufficient information about the program. - /// - internal static string EpgBlankTitle { - get { - return ResourceManager.GetString("EpgBlankTitle", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/Common.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/Common.cs deleted file mode 100644 index f3e97231..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/Common.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - internal class Common - { - public const string DefaultXmlNamespace = "urn:tva:metadata:2007"; - public const string Mpeg7XmlNamespace = "urn:tva:mpeg7:2005"; - public const string TvaExtendedNamespace = "urn:tva:metadata:extended:2007"; - } // class Common -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/ExtendedPurchaseItem.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/ExtendedPurchaseItem.cs deleted file mode 100644 index cb89646e..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/ExtendedPurchaseItem.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [XmlType(TypeName= "ExtendedPurchaseItemType", Namespace = Common.TvaExtendedNamespace)] - public class ExtendedPurchaseItem: TvaMain - { - [XmlElement("ProgramDescription", Namespace = Common.DefaultXmlNamespace)] - public TvaProgramDescription ProgramDescription - { - get; - set; - } // ProgramDescription - } // ExtendedPurchaseItem -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/Mpeg7Name.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/Mpeg7Name.cs deleted file mode 100644 index 05889dbe..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/Mpeg7Name.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(AnonymousType=true, Namespace=Common.Mpeg7XmlNamespace)] - public class Mpeg7Name - { - [XmlAttribute("href")] - public string HRef - { - get; - set; - } // HRef - - [XmlElement("Name")] - public string Name - { - get; - set; - } // Name - - public override string ToString() - { - return Name; - } // ToString - } // class Mpeg7ActionType -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/NamespaceUnification.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/NamespaceUnification.cs deleted file mode 100644 index 7ff11e66..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/NamespaceUnification.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - /// - /// This class is intended to help in "unifying" the different TVAMain namespaces. - /// This allows to parse all XML documents from different version using the same - /// XML .Net objects, regardless of document version. This is possible as newer - /// versions are expected to be 100% backwards-compatible (at XML schema level, - /// but not at code level). - /// - public static class NamespaceUnification - { - /// - /// - /// - /// Original XML document namespace, possibly obsolete or not up-to-date - /// Equivalent up-to-date namespace - public static string Replacer(string ns) - { - switch (ns) - { - case "urn:tva:metadata:2005": return Common.DefaultXmlNamespace; - default: - return ns; - } // switch - } // Replacer - } // NamespaceUnification -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaBoolean.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaBoolean.cs deleted file mode 100644 index bacf0f4e..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaBoolean.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = Common.DefaultXmlNamespace)] - public class TvaBoolean - { - /// XmlValue member is used for XML serialization - [XmlIgnore] - public bool? Value - { - get; - set; - } // Value - - [XmlAttribute("value")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlValue - { - get { return (Value.HasValue) ? XmlConvert.ToString(Value.Value) : null; } - set { Value = (value != null) ? XmlConvert.ToBoolean(value) : (bool?)null; } - } // XmlValue - } // class TVABoolean -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaInstanceDescription.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaInstanceDescription.cs deleted file mode 100644 index 1a7bb31e..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaInstanceDescription.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "InstanceDescription", Namespace = Common.DefaultXmlNamespace)] - public class TvaInstanceDescription - { - public string Title - { - get; - set; - } // Title - - [XmlElement("Genre")] - public TvaName Genre - { - get; - set; - } // Genre - - [XmlElement("ParentalGuidance")] - public TvaParentalGuidance ParentalGuidance - { - get; - set; - } // ParentalGuidance - } // class TVAInstanceDescription -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaMain.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaMain.cs deleted file mode 100644 index dbd65c54..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaMain.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "TVAMain", Namespace = Common.DefaultXmlNamespace)] - [XmlRoot(ElementName = "TVAMain", Namespace = Common.DefaultXmlNamespace, IsNullable = false)] - [XmlInclude(typeof(ExtendedPurchaseItem))] - public class TvaMain - { - } // class TvaMain -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaName.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaName.cs deleted file mode 100644 index 244852e1..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaName.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(AnonymousType = true, Namespace = Common.DefaultXmlNamespace)] - public class TvaName - { - [XmlAttribute("href")] - public string HRef - { - get; - set; - } // HRef - - [XmlElement("Name")] - public string Name - { - get; - set; - } // Name - - public override string ToString() - { - return Name; - } // ToString - } // class TVAName -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaParentalGuidance.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaParentalGuidance.cs deleted file mode 100644 index c5a59f76..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaParentalGuidance.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "ParentalGuidance", Namespace = Common.DefaultXmlNamespace)] - public class TvaParentalGuidance - { - [XmlElement("ParentalRating", Namespace = Common.Mpeg7XmlNamespace)] - public Mpeg7Name ParentalRating - { - get; - set; - } // ParentalRating - } // class TVAParentalGuidance -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaProgram.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaProgram.cs deleted file mode 100644 index 54bcb30f..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaProgram.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "Program", Namespace = Common.DefaultXmlNamespace)] - public class TvaProgram - { - [XmlAttribute("crid", Namespace = Common.DefaultXmlNamespace)] - public string CRID - { - get; - set; - } // CRID - } // class TVAProgram -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaProgramDescription.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaProgramDescription.cs deleted file mode 100644 index a97106f3..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaProgramDescription.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "ProgramDescription", Namespace = Common.DefaultXmlNamespace)] - public class TvaProgramDescription - { - [XmlElement("ProgramLocationTable")] - public TvaProgramLocationTable LocationTable - { - get; - set; - } // ProgramLocationTable - } // class TVAProgramDescription -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaProgramLocationTable.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaProgramLocationTable.cs deleted file mode 100644 index aeac049d..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaProgramLocationTable.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "ProgramLocationTable", Namespace = Common.DefaultXmlNamespace)] - public class TvaProgramLocationTable - { - [XmlElement("Schedule")] - public TvaSchedule Schedule - { - get; - set; - } // Schedule - } // class TVAProgramLocationTable -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaSchedule.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaSchedule.cs deleted file mode 100644 index bf10c1f1..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaSchedule.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "Schedule", Namespace = Common.DefaultXmlNamespace)] - public class TvaSchedule - { - [XmlAttribute("Version")] - public string Version - { - get; - set; - } // Version - - [XmlAttribute("serviceIDRef")] - public string ServiceIdRef - { - get; - set; - } // ServiceIdRef - - [XmlElement("ScheduleEvent")] - public TvaScheduleEvent[] Events - { - get; - set; - } // Events - } // class TVASchedule -} // namespace diff --git a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaScheduleEvent.cs b/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaScheduleEvent.cs deleted file mode 100644 index bf24c186..00000000 --- a/1.5 'Kruger 60'/Services.EpgDiscovery/TvAnytime/TvaScheduleEvent.cs +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Runtime.Remoting.Metadata.W3cXsd2001; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.Services.EpgDiscovery.TvAnytime -{ - [Serializable()] - [DebuggerStepThrough()] - [DesignerCategory("code")] - [XmlType(TypeName = "ScheduleEvent", Namespace = Common.DefaultXmlNamespace)] - public class TvaScheduleEvent - { - [XmlElement("Program")] - public TvaProgram Program - { - get; - set; - } // Program - - [XmlElement("InstanceDescription")] - public TvaInstanceDescription Description - { - get; - set; - } // Description - - /// XmlPublishedStartTime member is used for XML serialization - [XmlIgnore] - public DateTime? PublishedStartTime - { - get; - set; - } // PublishedStartTime - - /// XmlPublishedDuration member is used for XML serialization - [XmlIgnore] - public TimeSpan PublishedDuration - { - get; - set; - } // PublishedDuration - - public TvaBoolean ImmediateViewing - { - get; - set; - } // ImmediateViewing - - public string NetworkRecordOperator - { - get; - set; - } // NetworkRecordOperator - - [XmlElement("UserActionList")] - public Mpeg7Name[] UserActionList - { - get; - set; - } // UserActionList - - /// XmlEventStartTime member is used for XML serialization - [XmlIgnore] - public DateTime? StartTime - { - get; - set; - } // EventStartTime - - /// XmlEventDuration member is used for XML serialization - [XmlIgnore] - public TimeSpan Duration - { - get; - set; - } // EventDuration - - [XmlElement("PublishedStartTime")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlPublishedStartTime - { - get - { - return (PublishedStartTime == null) ? null : XmlConvert.ToString(PublishedStartTime.Value, XmlDateTimeSerializationMode.RoundtripKind); - } // get - set - { - if (string.IsNullOrEmpty(value)) - { - PublishedStartTime = null; - } - else - { - var time = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); - PublishedStartTime = DateTime.SpecifyKind(time, DateTimeKind.Utc); - } // if-else - } // set - } // XmlPublishedStartTime - - [XmlElement("PublishedDuration")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlPublishedDuration - { - get { return SoapDuration.ToString(PublishedDuration); } - set { PublishedDuration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlPublishedDuration - - [XmlElement("EventStartTime")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlEventStartTime - { - get - { - return (StartTime == null) ? null : XmlConvert.ToString(StartTime.Value, XmlDateTimeSerializationMode.RoundtripKind); - } // get - set - { - if (string.IsNullOrEmpty(value)) - { - StartTime = null; - } - else - { - var time = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); - StartTime = DateTime.SpecifyKind(time, DateTimeKind.Utc); - } // if-else - } // set - } // XmlPublishedStartTime - - [XmlElement("EventDuration")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlEventDuration - { - get { return SoapDuration.ToString(Duration); } - set { Duration = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlPublishedDuration - - public XmlNode[] OutOfSchemaItems - { - get; - set; - } // OutOfSchemaItems - } // class TVAScheduleEvent -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/AssemblyInfo.cs deleted file mode 100644 index 7d26fa0e..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Services.Record.Serialization")] -[assembly: AssemblyDescription("IpTviewr.Services.Record.Serialization")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("938aa8d5-9245-4e17-8ad0-b610d75aa0f9")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/License.txt b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs deleted file mode 100644 index 3de5ca07..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.Designer.cs +++ /dev/null @@ -1,321 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.Services.Record.Serialization.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.Record.Serialization.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to >> Channel details << - ///TV Channel: {0} {1} - ///URL: {2} - ///IPTV service: {3}. - /// - internal static string BuildDescriptionChannel { - get { - return ResourceManager.GetString("BuildDescriptionChannel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scheduled recording duration is {0}, with a safety margin of {1} minutes. - ///Total recording time, including safety margins, is {2}.. - /// - internal static string BuildDescriptionDuration { - get { - return ResourceManager.GetString("BuildDescriptionDuration", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording will end the next day at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsNextDay { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsNextDay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording will end the same day at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsSameDay { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsSameDay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording ends today at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsToday { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsToday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording ends tomorrow at {0:T}.. - /// - internal static string BuildDescriptionDurationEndsTomorrow { - get { - return ResourceManager.GetString("BuildDescriptionDurationEndsTomorrow", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to >> Recording duration <<. - /// - internal static string BuildDescriptionDurationHeader { - get { - return ResourceManager.GetString("BuildDescriptionDurationHeader", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording duration is {0}, with a safety margin of {1} minutes. - ///Total recording time, including safety margins, will be {2}.. - /// - internal static string BuildDescriptionDurationPast { - get { - return ResourceManager.GetString("BuildDescriptionDurationPast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to >> Recording schedule <<. - /// - internal static string BuildDescriptionScheduleHeader { - get { - return ResourceManager.GetString("BuildDescriptionScheduleHeader", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task name: {0} - ///Task description: {1}. - /// - internal static string BuildDescriptionTaskDescription { - get { - return ResourceManager.GetString("BuildDescriptionTaskDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task name: {0}. - /// - internal static string BuildDescriptionTaskName { - get { - return ResourceManager.GetString("BuildDescriptionTaskName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} [{1:yyyy\-MM\-dd} {2:HH\-mm\-ss}]. - /// - internal static string RecordTaskNameSuggestedNameFormat { - get { - return ResourceManager.GetString("RecordTaskNameSuggestedNameFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Daily recording, every {0} days at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordDaily { - get { - return ResourceManager.GetString("VerbalizeRecordDaily", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Daily recording, everyday at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordDailyEveryday { - get { - return ResourceManager.GetString("VerbalizeRecordDailyEveryday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to One time recording at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordOneTime { - get { - return ResourceManager.GetString("VerbalizeRecordOneTime", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to One time recording, on {0:D} at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordOneTimePast { - get { - return ResourceManager.GetString("VerbalizeRecordOneTimePast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording right now.. - /// - internal static string VerbalizeRecordRightNow { - get { - return ResourceManager.GetString("VerbalizeRecordRightNow", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recording as soon as possible.. - /// - internal static string VerbalizeRecordRightNowPast { - get { - return ResourceManager.GetString("VerbalizeRecordRightNowPast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, {3} of every week at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeekly { - get { - return ResourceManager.GetString("VerbalizeRecordWeekly", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to every . - /// - internal static string VerbalizeRecordWeeklyDays { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDays", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to every . - /// - internal static string VerbalizeRecordWeeklyDaysPast { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDaysPast", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to , . - /// - internal static string VerbalizeRecordWeeklyDaysSeparator { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparator", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to and . - /// - internal static string VerbalizeRecordWeeklyDaysSeparatorFinal { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyDaysSeparatorFinal", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, everyday of every week at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeeklyEveryday { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyEveryday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, {3} every {0} weeks at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeeklyEveryWeeks { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeks", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weekly recording, everyday every {0} weeks at {1:T}, with a safety margin of {2} minutes.. - /// - internal static string VerbalizeRecordWeeklyEveryWeeksEveryday { - get { - return ResourceManager.GetString("VerbalizeRecordWeeklyEveryWeeksEveryday", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting on {0:D} with no expiry date.. - /// - internal static string VerbalizeStartDate { - get { - return ResourceManager.GetString("VerbalizeStartDate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting on {0:D} and ending on {1:D}.. - /// - internal static string VerbalizeStartExpiryDate { - get { - return ResourceManager.GetString("VerbalizeStartExpiryDate", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.es.resx b/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.es.resx deleted file mode 100644 index 0a97d26b..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/Properties/Texts.es.resx +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - >>> Detalles del canal <<< -Canal de TV: {0} {1} -URL: {2} -Servicio IPTV: {3} - - - La duración programada de la grabación era de {0}, con un margen de seguridad de {1} minutos. -El tiempo total de grabación, incluyendo los márgenes de seguridad, es de {2}. - - - La grabación finalizará al día siguiente a las {0:T}. - - - La grabación finalizará el mismo día a las {0:T}. - - - La grabación finalizará hoy a las {0:T}. - - - La grabación finalizará manaña a las {0:T}. - - - >>> Duración de la grabación <<< - - - La duración de la grabación es de {0}, con un margen de seguridad de {1} minutos. -El tiempo total de grabación, incluyendo márgenes de seguridad, será de {2}. - - - >>> Horario de grabación <<< - - - Nombre de la tarea: {0} -Descripción de la tarea: {1} - - - Nombre de la tarea: {0} - - - Grabación diaria, cada {0} días a las {1:T}, con un margen de seguridad de {2} minutos. - - - Grabación diaria, todos los días a las {1:T}, con un margen de seguridad de {2} minutos. - - - Grabación única a las {1:T}, con un margen de seguridad de {2} minutos. - - - Grabación única, el {0:D} a las {1:T}, con un margen de seguridad de {2} minutos. - - - Grabando ahora mismo. - - - Se grabará lo antes posible. - - - Grabación semanal, {3} de todas las semanas a las {1:T}, con un margen de seguridad de {2} minutos. - - - el - Keep trailing space! - - - y el - Keep start & end space! - - - el - Keep trailing space! - - - , el - Keep trailing space! - - - Grabación semanal, todos los días de todas las semanas a las {1:T}, con un margen de seguridad de {2} minutos. - - - Grabación semanal, {3} cada {0} semanas a las {1:T}, con un margen de seguridad de {2} minutos. - - - Grabación semanal, todos los días cada {0} semanas a las {1:T}, con un margen de seguridad de {2} minutos. - - - Comenzando a grabar el {0:D} sin fecha de finalización. - - - Comenzando a grabar el {0:D} y finalizando el {1:D}. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs deleted file mode 100644 index 7f109917..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordAction.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordAction - { - public string Filename - { - get; - set; - } // Filename - - public string FileExtension - { - get; - set; - } // FileExtension - - public string SaveLocationName - { - get; - set; - } // SaveLocationName - - public string SaveLocationPath - { - get; - set; - } // SaveLocationPath - - public RecordRecorder Recorder - { - get; - set; - } // Recorder - - public static RecordAction CreateWithDefaultValues() - { - RecordAction action; - - action = new RecordAction() - { - }; - - return action; - } // CreateWithDefaultValues - } // class RecordAction -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordChannel.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordChannel.cs deleted file mode 100644 index db727b87..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordChannel.cs +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordChannel - { - public string LogicalNumber - { - get; - set; - } // LogicalNumber - - public string Name - { - get; - set; - } // Name - - public string Description - { - get; - set; - } // Description - - public string ServiceName - { - get; - set; - } // ServiceName - - public string ServiceKey - { - get; - set; - } // ServiceKey - - public string ChannelUrl - { - get; - set; - } // ChannelUrl - } // class RecordChannel -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs deleted file mode 100644 index 5ebe0fa4..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDaily.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordDaily : RecordSchedule - { - public RecordDaily() - { - RecurEveryDays = 1; - } // constructor - - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.Daily; } - } // ScheduleKind - - public short RecurEveryDays - { - get; - set; - } // RecurEveryDays - - public override void SetDefaultValues() - { - base.SetDefaultValues(); - RecurEveryDays = 1; - } // SetDefaultValues - - public override void Verbalize(bool pastTime, StringBuilder builder) - { - string format; - - if (RecurEveryDays > 1) - { - format = Properties.Texts.VerbalizeRecordDaily; - } - else - { - format = Properties.Texts.VerbalizeRecordDailyEveryday; - } // if-else - builder.AppendFormat(format, RecurEveryDays, StartDate, SafetyMarginTimeSpan.TotalMinutes); - VerbalizeStartExpiryDate(pastTime, builder); - } // Verbalize - } // class RecordDaily -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs deleted file mode 100644 index d1fac208..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordDuration.cs +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Runtime.Remoting.Metadata.W3cXsd2001; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordDuration - { - /// - /// Default safety margin, in minutes - /// - public static int DefaultSafetyMargin - { - get { return 10; } - } // DefaultSafetyMargin - - /// - /// The duration of the recording, as a TimeSpan - /// - [XmlIgnore] - public TimeSpan Length - { - get; - set; - } // Length - - [XmlElement("Length")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlLength - { - get { return SoapDuration.ToString(Length); } - set { Length = string.IsNullOrEmpty(value) ? new TimeSpan() : SoapDuration.Parse(value); } - } // XmlTimeSpan - - [XmlIgnore] - public DateTime? EndDateTime - { - get; - set; - } // EndDateTime - - [XmlElement("EndDateTime")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlEndDateTime - { - get - { - return (EndDateTime == null) ? null : XmlConvert.ToString(EndDateTime.Value, XmlDateTimeSerializationMode.RoundtripKind); - } // get - set - { - if (string.IsNullOrEmpty(value)) - { - EndDateTime = null; - } - else - { - EndDateTime = XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); - } // if-else - } // set - } // EndDateTime - - /// - /// Safety margin, in minutes, or null if there is no margin - /// - [XmlIgnore] - public int? SafetyMargin - { - get; - set; - } // SafetyMargin - - [XmlElement("SafetyMargin")] - [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public string XmlSafetyMargin - { - get { return SafetyMargin.HasValue ? XmlConvert.ToString(SafetyMargin.Value) : null; } - set { SafetyMargin = string.IsNullOrEmpty(value) ? null : (int?)XmlConvert.ToInt32(value); } - } // XmlSafetyMargin - - /// - /// Gets the safety margin as a TimeSpan - /// - [XmlIgnore] - public TimeSpan SafetyMarginTimeSpan - { - get - { - return (SafetyMargin.HasValue) ? new TimeSpan(0, SafetyMargin.Value, 0) : TimeSpan.Zero; - } // get - } // SafetyMarginTimeSpan - - public TimeSpan GetDuration(DateTime startDateTime) - { - if (EndDateTime == null) return Length; - - return (EndDateTime.Value - startDateTime); - } // GetDuration - - public TimeSpan GetDuration(RecordSchedule schedule) - { - return GetDuration(schedule.GetStartDateTime()); - } // GetDuration - - /// - /// Creates a RecordDuration instance with default values - /// - /// An instance of a RecordDuration with default values - public static RecordDuration CreateWithDefaultValues() - { - return new RecordDuration() - { - SafetyMargin = DefaultSafetyMargin, - Length = new TimeSpan(1, 0, 0), - }; - } // CreateWithDefaultValues - } // RecordDuration -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs deleted file mode 100644 index c8194ccc..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMonthly.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordMonthly : RecordSchedule - { - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.Monthly; } - } // ScheduleKind - - public RecordYearMonths Months - { - get; - set; - } // Months - - public override void SetDefaultValues() - { - base.SetDefaultValues(); - throw new NotImplementedException(); - } // SetDefaultValues - - public override void Verbalize(bool pastTime, StringBuilder builder) - { - throw new NotImplementedException(); - } // Verbalize - } // class RecordMonthly -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMultipleInstances.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordMultipleInstances.cs deleted file mode 100644 index 2fc6c3cb..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordMultipleInstances.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public enum RecordMultipleInstances - { - [XmlEnum("Record-both")] - RecordBoth = 0, - - [XmlEnum("Do-not-record")] - DoNotRecord, - - [XmlEnum("Queue-and-wait")] - Queue, - - [XmlEnum("Stop-previous")] - StopPrevious - } // RecordMultipleInstances -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs deleted file mode 100644 index 5167b664..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordOneTime.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordOneTime : RecordSchedule - { - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.OneTime; } - } // King - - public override void Verbalize(bool pastTime, StringBuilder builder) - { - builder.AppendFormat(pastTime? Properties.Texts.VerbalizeRecordOneTimePast : Properties.Texts.VerbalizeRecordOneTime, - StartDate, StartDate, SafetyMarginTimeSpan.TotalMinutes); - } // Verbalize - } // class RecordOneTime -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordProgram.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordProgram.cs deleted file mode 100644 index a25cc4b3..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordProgram.cs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - - public class RecordProgram - { - public string Title - { - get; - set; - } // Title - - public DateTime UtcStartTime - { - get; - set; - } // UtcStartTime - - public DateTime UtcEndTime - { - get; - set; - } // UtcEndTime - - [XmlIgnore] - public DateTime LocalStartTime - { - get { return UtcStartTime.ToLocalTime(); } - } // LocalStartTime - - [XmlIgnore] - public DateTime LocalEndTime - { - get { return UtcEndTime.ToLocalTime(); } - } // LocalEndTime - - [XmlIgnore] - public TimeSpan Duration - { - get { return UtcEndTime - UtcStartTime; } - } // Duration - } // class RecordProgram -} // namespace \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRecorder.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRecorder.cs deleted file mode 100644 index 8033b6e1..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRecorder.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public class RecordRecorder - { - [XmlAttribute("name")] - public string Name - { - get; - set; - } // Name - - public string Path - { - get; - set; - } // Path - - [XmlArray("Arguments", Namespace = RecordTask.XmlNamespace)] - [XmlArrayItem("Arg")] - public string[] Arguments - { - get; - set; - } // Parameters - } // RecordRecorder -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs deleted file mode 100644 index 34c21e8f..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordRightNow.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public sealed class RecordRightNow: RecordSchedule - { - public override RecordScheduleKind Kind - { - get { return RecordScheduleKind.RightNow; } - } // ScheduleKind - - public override void SetDefaultValues() - { - // nothing to initialize - } // SetDefaultValues - - public override void Verbalize(bool pastTime, StringBuilder builder) - { - builder.AppendFormat(pastTime? Properties.Texts.VerbalizeRecordRightNowPast : Properties.Texts.VerbalizeRecordRightNow); - } // Verbalize - - public override DateTime GetStartDateTime() - { - return DateTime.Now.TruncateToSeconds(1); - } // GetStartDateTime - } // class RecordRightNow -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleKind.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleKind.cs deleted file mode 100644 index a16eace5..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordScheduleKind.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.Services.Record.Serialization -{ - public enum RecordScheduleKind - { - OneTime = 0, - Daily = 10, - Weekly = 20, - Monthly = 30, - MontlyDoW = 35, - RightNow = 90, - } // enum RecordScheduleKind -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekDays.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekDays.cs deleted file mode 100644 index 5085f98c..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordWeekDays.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Serializable] - [Flags] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public enum RecordWeekDays - { - Sunday = 0x01, - Monday = 0x02, - Tuesday = 0x04, - Wednesday = 0x08, - Thursday = 0x10, - Friday = 0x20, - Saturday = 0x40, - } // enum RecordWeekDays -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record.Serialization/RecordYearMonths.cs b/1.5 'Kruger 60'/Services.Record.Serialization/RecordYearMonths.cs deleted file mode 100644 index 992c7e98..00000000 --- a/1.5 'Kruger 60'/Services.Record.Serialization/RecordYearMonths.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.Services.Record.Serialization -{ - [Flags] - [Serializable] - [XmlType(Namespace = RecordTask.XmlNamespace)] - public enum RecordYearMonths - { - January = 0x001, - February = 0x002, - March = 0x004, - April = 0x008, - May = 0x010, - June = 0x020, - July = 0x040, - August = 0x080, - September = 0x100, - October = 0x200, - November = 0x400, - December = 0x800, - } // enum RecordYearMonths -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record/License.txt b/1.5 'Kruger 60'/Services.Record/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/Services.Record/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/Services.Record/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Services.Record/Properties/AssemblyInfo.cs deleted file mode 100644 index 76f2ad0b..00000000 --- a/1.5 'Kruger 60'/Services.Record/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Services.Record")] -[assembly: AssemblyDescription("IpTviewr.Services.Record")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3e4a840e-2302-44d0-9e8a-ea4ff39633d9")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs deleted file mode 100644 index c98dbda4..00000000 --- a/1.5 'Kruger 60'/Services.Record/Properties/Resources.Designer.cs +++ /dev/null @@ -1,101 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.Services.Record.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.Record.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to D57F4237-4AD5-4094-85CD-49E56D98DED5: IPTViewr Record Task - ///TaskId: {0} - ///Database: {1}. - /// - internal static string DefinitionRegistrationInfo_Documentation { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_Documentation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to D57F4237-4AD5-4094-85CD-49E56D98DED5: IPTViewr Record Task. - /// - internal static string DefinitionRegistrationInfo_Documentation_Begins { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_Documentation_Begins", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Application. - /// - internal static string DefinitionRegistrationInfo_Source { - get { - return ResourceManager.GetString("DefinitionRegistrationInfo_Source", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to RecordTasks.sdf. - /// - internal static string RecordTasksDatabaseFile { - get { - return ResourceManager.GetString("RecordTasksDatabaseFile", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs deleted file mode 100644 index f3f50122..00000000 --- a/1.5 'Kruger 60'/Services.Record/Properties/Texts.Designer.cs +++ /dev/null @@ -1,91 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.Services.Record.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.Services.Record.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to The folder does not exists.. - /// - internal static string FolderNotFoundException { - get { - return ResourceManager.GetString("FolderNotFoundException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unexpected error while contacting with the Windows Task Manager to create the recording task. - ///The recording task has not been created.. - /// - internal static string TaskCreationException { - get { - return ResourceManager.GetString("TaskCreationException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to run the 'Right now' recording task and no recording action will take place.. - /// - internal static string TaskRunException { - get { - return ResourceManager.GetString("TaskRunException", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Texts.es.resx b/1.5 'Kruger 60'/Services.Record/Properties/Texts.es.resx deleted file mode 100644 index 2146a40a..00000000 --- a/1.5 'Kruger 60'/Services.Record/Properties/Texts.es.resx +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - La carpeta especificada no existe. - - - Se ha producido un error al ponerse en contacto con el Programador de Tareas de Windows para crear la tarea de grabación. -La tarea de grabación no ha sido creada. - - - No se ha podido ejecutar la tarea de grabación 'Inmediata' y no se realizará grabación alguna. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record/Properties/Texts.resx b/1.5 'Kruger 60'/Services.Record/Properties/Texts.resx deleted file mode 100644 index a3f1644f..00000000 --- a/1.5 'Kruger 60'/Services.Record/Properties/Texts.resx +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - The folder does not exists. - - - Unexpected error while contacting with the Windows Task Manager to create the recording task. -The recording task has not been created. - - - Unable to run the 'Right now' recording task and no recording action will take place. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Services.Record/TaskAction.cs b/1.5 'Kruger 60'/Services.Record/TaskAction.cs deleted file mode 100644 index 6e0f96d9..00000000 --- a/1.5 'Kruger 60'/Services.Record/TaskAction.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.Services.Record -{ - public enum TaskAction - { - None = 0, - Default, - Delete, - Recreate, - } // enum TaskAction -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record/TaskData.cs b/1.5 'Kruger 60'/Services.Record/TaskData.cs deleted file mode 100644 index 66130ca0..00000000 --- a/1.5 'Kruger 60'/Services.Record/TaskData.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using IpTviewr.Services.Record.Serialization; - -namespace IpTviewr.Services.Record -{ - public class TaskData - { - public TaskStatus Status - { - get; - internal set; - } // Status - - public TaskAction Action - { - get; - set; - } // Action - - public Guid Id - { - get { return Task.TaskId; } - } // Id - - public string Name - { - get { return Task.Description.Name; } - } // Name - - public string SchedulerName - { - get; - internal set; - } // SchedulerName - - public string SchedulerPath - { - get; - internal set; - } // SchedulerPath - - public string XmlFilePath - { - get; - internal set; - } // XmlFilePath - - public int? NumberOfRecordings - { - get; - internal set; - } // NumberOfRecordings - - public RecordTask Task - { - get; - internal set; - } // Task - } // TaskData -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record/TaskListBuildOptions.cs b/1.5 'Kruger 60'/Services.Record/TaskListBuildOptions.cs deleted file mode 100644 index 1e913ee6..00000000 --- a/1.5 'Kruger 60'/Services.Record/TaskListBuildOptions.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.Services.Record -{ - public class TaskListBuildOptions - { - public string RecordTaskFolder - { - get; - set; - } // RecordTaskFolder - - public IEnumerable SchedulerFolders - { - get; - set; - } // SchedulerFolders - - public bool ScanAllWindowsSchedulerTasks - { - get; - set; - } // ScanAllWindowsSchedulerTasks - - public bool AddAllWindowsSchedulerTaks - { - get; - set; - } // AddAllWindowsSchedulerTaks - } // class TaskListBuildOptions -} // namespace diff --git a/1.5 'Kruger 60'/Services.Record/TaskStatus.cs b/1.5 'Kruger 60'/Services.Record/TaskStatus.cs deleted file mode 100644 index 71bb356f..00000000 --- a/1.5 'Kruger 60'/Services.Record/TaskStatus.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.Services.Record -{ - public enum TaskStatus - { - Ok = 0, - MissingXml, - XmlError, - WindowsTaskMissing, - WindowsTaskXmlError, - WindowsTaskMoved, - } // enum TaskStatus -} // namespace diff --git a/1.5 'Kruger 60'/Services.SqlServerCE/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Services.SqlServerCE/Properties/AssemblyInfo.cs deleted file mode 100644 index 1f917f81..00000000 --- a/1.5 'Kruger 60'/Services.SqlServerCE/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Services.SqlServerCE")] -[assembly: AssemblyDescription("IpTviewr.Services.SqlServerCE")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ffa1f30f-60ab-4ea3-93e3-e5e43a64c3a1")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Services.SqlServerCE/Properties/License.txt b/1.5 'Kruger 60'/Services.SqlServerCE/Properties/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/Services.SqlServerCE/Properties/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/Setup/LoadNetFx35/LoadNetFx35.csproj b/1.5 'Kruger 60'/Setup/LoadNetFx35/LoadNetFx35.csproj new file mode 100644 index 00000000..0b0f65d9 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/LoadNetFx35/LoadNetFx35.csproj @@ -0,0 +1,72 @@ + + + + + Debug + AnyCPU + {F4577356-279F-4BCC-82A4-30ED8B1FD66B} + WinExe + IPTviewr.FirstTimeConfig.LoadNetFx35 + LoadNetFx35 + v3.5 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + Properties\AssemblySolutionInfo.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Setup/LoadNetFx35/Program.cs b/1.5 'Kruger 60'/Setup/LoadNetFx35/Program.cs new file mode 100644 index 00000000..ad71b11d --- /dev/null +++ b/1.5 'Kruger 60'/Setup/LoadNetFx35/Program.cs @@ -0,0 +1,31 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System; + +namespace IPTviewr.FirstTimeConfig.LoadNetFx35 +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + private static void Main() + { + // This app does nothing + // It's used for forcing Windows 10 to prompt the user to install the .Net Framework 3.5 + // Both Microsoft Exception Message Box and SQL CE installers need NetFx 3.5 installed + } // Main + } // class Program +} // namespace diff --git a/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..42680478 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/AssemblyInfo.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IPTviewr.FirstTimeConfig.LoadNetFx35")] +[assembly: AssemblyDescription("Forces Windows 10 to install .Net 3.5 if not available")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f4577356-279f-4bcc-82a4-30ed8b1fd66b")] + +// Version information for an assembly consists of the following four parameters: +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Resources.Designer.cs new file mode 100644 index 00000000..6eecd58c --- /dev/null +++ b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Resources.Designer.cs @@ -0,0 +1,76 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IPTviewr.FirstTimeConfig.LoadNetFx35.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IPTviewr.FirstTimeConfig.LoadNetFx35.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Resources.resx b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Settings.Designer.cs b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Settings.Designer.cs new file mode 100644 index 00000000..7a20a581 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Settings.Designer.cs @@ -0,0 +1,39 @@ +// ============================================================================== +// +// Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury +// All rights reserved. +// +// See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root +// for complete license information. +// +// http://www.alphacentaury.org/movistartv +// https://github.com/AlphaCentaury +// +// ============================================================================== + +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace IPTviewr.FirstTimeConfig.LoadNetFx35.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Settings.settings b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/LoadNetFx35/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Common.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Common.wxs deleted file mode 100644 index 23ffb204..00000000 --- a/1.5 'Kruger 60'/Setup/MainSetup/Common.wxs +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.ContentProvider.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.ContentProvider.wxs new file mode 100644 index 00000000..045ac513 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.ContentProvider.wxs @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.Core.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.Core.wxs new file mode 100644 index 00000000..e442f7f4 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.Core.wxs @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.DVB.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.DVB.wxs new file mode 100644 index 00000000..28d65ee0 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.DVB.wxs @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.EPG.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.EPG.wxs new file mode 100644 index 00000000..7ccd8393 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.EPG.wxs @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.Logos.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.Logos.wxs new file mode 100644 index 00000000..2817666d --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.Logos.wxs @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.Product.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.Product.wxs new file mode 100644 index 00000000..19ce7246 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.Product.wxs @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.Record.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.Record.wxs new file mode 100644 index 00000000..431c2559 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.Record.wxs @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.Redist.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.Redist.wxs new file mode 100644 index 00000000..0d64059a --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.Redist.wxs @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.Services.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.Services.wxs new file mode 100644 index 00000000..4b5e9360 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.Services.wxs @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.Telemetry.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.Telemetry.wxs new file mode 100644 index 00000000..31083470 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.Telemetry.wxs @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.ThirdParty.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.ThirdParty.wxs new file mode 100644 index 00000000..6f9adf9b --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.ThirdParty.wxs @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.Tools.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.Tools.wxs new file mode 100644 index 00000000..6732c727 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.Tools.wxs @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.UIServices.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.UIServices.wxs new file mode 100644 index 00000000..6e65d1d8 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.UIServices.wxs @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.Uninstall.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.Uninstall.wxs new file mode 100644 index 00000000..7727f600 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Components.Uninstall.wxs @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Components.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Components.wxs deleted file mode 100644 index 924e0f2b..00000000 --- a/1.5 'Kruger 60'/Setup/MainSetup/Components.wxs +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Setup/MainSetup/EPG.wxs b/1.5 'Kruger 60'/Setup/MainSetup/EPG.wxs deleted file mode 100644 index cf70684d..00000000 --- a/1.5 'Kruger 60'/Setup/MainSetup/EPG.wxs +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Setup/MainSetup/LICENSE.ES.MD b/1.5 'Kruger 60'/Setup/MainSetup/LICENSE.ES.MD new file mode 100644 index 00000000..1cd7452a --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/LICENSE.ES.MD @@ -0,0 +1,87 @@ +# Instalador 'IPTViewr_Movistar+_1-5_beta-1' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Términos y condiciones de uso + +Este COMPONENTE (el “SOFTWARE”), ya sea en forma de código binario o fuente, está **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, excepto en lo relativo a componentes de terceras partes (“THIRD-PARTY”). \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +---------------------------------------------------------------------- + + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + +## Licencias de uso + + * [Microsoft Reciprocal License (Ms-RL)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** aplica a los siguientes componentes: + +#### 1. IPTViewr_Movistar+_1-5_beta-1 +_Instalador por Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/LICENSE.MD b/1.5 'Kruger 60'/Setup/MainSetup/LICENSE.MD new file mode 100644 index 00000000..4aa440ee --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/LICENSE.MD @@ -0,0 +1,59 @@ +# Installer 'IPTViewr_Movistar+_1-5_beta-1' +IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1\ +_by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + +_http://www.alphacentaury.org/movistartv \ +https://github.com/AlphaCentaury_ + +## Terms and conditions + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +## Licenses + + * [Microsoft Reciprocal License (Ms-RL)] + +### Microsoft Reciprocal License (Ms-RL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + + +> **'Microsoft Reciprocal License (Ms-RL)'** applies to the following components: + +#### 1. IPTViewr_Movistar+_1-5_beta-1 +_Installer by Codeplex/GitHub user AlphaCentaury_ + +**Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors** + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/License.txt b/1.5 'Kruger 60'/Setup/MainSetup/License.txt index 2e33d141..9d4115dc 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/License.txt +++ b/1.5 'Kruger 60'/Setup/MainSetup/License.txt @@ -1,39 +1,73 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions +############################################################################## +## +## Installer 'IPTViewr_Movistar+_1-5_beta-1' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +This COMPONENT (“SOFWARE”), either in binary or source code form, is **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_** except for “THIRD-PARTY” components. \ +All other rights are reserved by the author(s) of the software. + +_**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. IPTViewr_Movistar+_1-5_beta-1 +------------------------------ +Installer by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/MainSetup.wixproj b/1.5 'Kruger 60'/Setup/MainSetup/MainSetup.wixproj index c465a404..b0681c73 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/MainSetup.wixproj +++ b/1.5 'Kruger 60'/Setup/MainSetup/MainSetup.wixproj @@ -23,7 +23,7 @@ obj\$(Configuration)\ Debug es-es;en-us; - ICE38;ICE91;ICE64 + ICE38;ICE91 bin\$(Configuration)\ @@ -32,55 +32,112 @@ es-es;en-us; - - - + + + + + + + + + + + + + - - + + + - - ChannelList - {3fb48c93-85ec-4894-8fe7-e035ddc0618c} + + $(WixExtDir)\WixUtilExtension.dll + WixUtilExtension + + + $(WixExtDir)\WixNetFxExtension.dll + WixNetFxExtension + + + $(WixExtDir)\WixUIExtension.dll + WixUIExtension + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AlphaCentaury.Licensing.Data.Ui + {1293a5c4-478f-4efd-8e53-d283b35e1a06} True True Binaries;Content;Satellites INSTALLFOLDER - - Core.IpTvProvider - {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} + + AlphaCentaury.Licensing.Data + {42b71db3-2e34-43bb-bf87-88f422bcf861} True True Binaries;Content;Satellites INSTALLFOLDER - - DvbStpClient - {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} + + IpTviewr.IpTvServices + {36b8e0a1-f1b1-498d-8fe7-a39bb7fd68ca} True True Binaries;Content;Satellites INSTALLFOLDER - - Etsi.Ts102034 - {b91c438d-0333-4d06-86cd-74ce82df6f40} + + DvbStpClient + {8ad3c34b-a1d3-4385-a8a9-c429bd9a37d3} True True Binaries;Content;Satellites INSTALLFOLDER - - FirstTimeConfig - {6b23c0be-c1ce-457a-b701-55870e355560} + + Etsi.Ts102034 + {b91c438d-0333-4d06-86cd-74ce82df6f40} True True Binaries;Content;Satellites INSTALLFOLDER - + IpTv.MovistarPlus {e1748f45-dd50-4479-96f6-f7eba6f3e28b} True @@ -88,40 +145,23 @@ Binaries;Content;Satellites INSTALLFOLDER - - IpTvRecorderLauncher - {dda7264e-c003-4e3a-b657-27ee2543f101} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - - - Logos - {65dd367d-a89d-4f89-9231-2009ef0b31af} - True - - - Content - LogosFolder - - - Project.Common + + IpTviewr.Common {8da15060-5a78-4f89-a9f1-7aa56b0d622c} True True Binaries;Content;Satellites INSTALLFOLDER - - Project.Native + + IpTviewr.Native {8986cd52-0c65-42d6-9c47-20ff47cf87bb} True True Binaries;Content;Satellites INSTALLFOLDER - + Services.EpgDiscovery {5a171dbb-855c-452b-93c6-229c7aa6c7a6} True @@ -129,7 +169,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + Services.Record.Serialization {074c14ed-c574-46d2-b9dc-c1b5f65d9a69} True @@ -137,7 +177,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + Services.Record {a4172cdd-c8fd-4c91-9aaf-54a948f26273} True @@ -145,7 +185,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + Services.SqlServerCE {3a053f34-4edf-4071-b966-923255a0ae14} True @@ -153,7 +193,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + UiServices.Common {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} True @@ -161,7 +201,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + UiServices.Config {a722de9d-ae51-479c-825f-a19f4c69bd75} True @@ -169,7 +209,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + UiServices.Discovery {7e5e21b9-4bd6-4fb3-9055-9b09cc479c6c} True @@ -177,7 +217,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + UiServices.DvbStpClient {ba481e42-f570-4d2c-94d4-21c4cce27762} True @@ -185,7 +225,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + UiServices.EPG {004c3829-fed4-4084-b23b-871193afa8c7} True @@ -193,7 +233,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + UiServices.Forms {90f750b3-64db-493f-96a6-e68de5ea60a1} True @@ -201,7 +241,7 @@ Binaries;Content;Satellites INSTALLFOLDER - + UiServices.Record {971b720e-2ae8-4ea4-b5ce-7a1af11c3743} True @@ -209,50 +249,67 @@ Binaries;Content;Satellites INSTALLFOLDER - - - - $(WixExtDir)\WixUtilExtension.dll - WixUtilExtension - - - $(WixExtDir)\WixNetFxExtension.dll - WixNetFxExtension - - - $(WixExtDir)\WixUIExtension.dll - WixUIExtension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + ChannelList + {3fb48c93-85ec-4894-8fe7-e035ddc0618c} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + IpTViewr.Core + {968c6eeb-1e79-446a-96ae-69cb225e1c37} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + IpTviewr.Telemetry + {8c3814bf-9482-41c2-ba1a-cba59f5c2ed4} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + FirstTimeConfig + {6b23c0be-c1ce-457a-b701-55870e355560} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + IpTvRecorderLauncher + {dda7264e-c003-4e3a-b657-27ee2543f101} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + Logos + {65dd367d-a89d-4f89-9231-2009ef0b31af} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + LoadNetFx35 + {f4577356-279f-4bcc-82a4-30ed8b1fd66b} + True + True + Binaries;Content;Satellites + INSTALLFOLDER + + + "$(SolutionDir)Logos\bin\$(ConfigurationName)\PackLogos" "-from:$(SolutionDir)Logos" "-to:$(SolutionDir)Logos\bin\$(ConfigurationName)\logos" -nologo -verbose + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Product.Registry.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Product.Registry.wxs new file mode 100644 index 00000000..968369c0 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/Product.Registry.wxs @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs index 7f664461..5c655a8c 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs +++ b/1.5 'Kruger 60'/Setup/MainSetup/Product.wxs @@ -1,56 +1,45 @@ + Description="!(loc.PackageDescription)" Languages="!(loc.LANGUAGE)" Manufacturer="$(var.Manufacturer)" /> - - - + + - + - - - - - - - - - - - - - - - - - - - - - + - http://movistartv.codeplex.com/documentation/ - http://movistartv.codeplex.com/ - http://movistartv.codeplex.com/releases/ + https://www.alphacentaury.org/temas/movistartv/ + https://www.alphacentaury.org/movistartv + https://www.alphacentaury.org/movistartv/downloads @@ -60,58 +49,27 @@ All rights reserved, except those granted by the governing license of this softw - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Record.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Record.wxs deleted file mode 100644 index 05ef24d4..00000000 --- a/1.5 'Kruger 60'/Setup/MainSetup/Record.wxs +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Setup/MainSetup/Tools.wxs b/1.5 'Kruger 60'/Setup/MainSetup/Tools.wxs deleted file mode 100644 index 610706e3..00000000 --- a/1.5 'Kruger 60'/Setup/MainSetup/Tools.wxs +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/Setup/MainSetup/licensing.xml b/1.5 'Kruger 60'/Setup/MainSetup/licensing.xml new file mode 100644 index 00000000..1b26357c --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/licensing.xml @@ -0,0 +1,101 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + WiX Toolset + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/strings.guid.wxi b/1.5 'Kruger 60'/Setup/MainSetup/strings.guid.wxi new file mode 100644 index 00000000..ed7e5d18 --- /dev/null +++ b/1.5 'Kruger 60'/Setup/MainSetup/strings.guid.wxi @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi b/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi index d963a8fd..799ab4e8 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi +++ b/1.5 'Kruger 60'/Setup/MainSetup/strings.wxi @@ -1,28 +1,24 @@ - - - - - - - - +============================================================================== - + Copyright (C) 2014-2020, GitHub/Codeplex user AlphaCentaury + All rights reserved. - - - + See 'LICENSE.MD' file (or 'license.txt' if missing) in the project root + for complete license information. - - - + http://www.alphacentaury.org/movistartv + https://github.com/AlphaCentaury - - - +============================================================================== +--> + + + + + + + + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl b/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl index 7ee97688..68dcc830 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl +++ b/1.5 'Kruger 60'/Setup/MainSetup/texts_en-US.wxl @@ -1,19 +1,29 @@ 1033 ENU A new version of [ProductName] is already installed. - This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again + This application requires .NET Framework 4.6.2 or later. Please install the .NET Framework then run this installer again IPTViewr for movistar+ 1.5 “Kruger 60” Beta 1 IPTV Virtual Decoder for movistar+ v1.5 “Kruger 60” Beta 1 Launch “First-time Configuration Wizard” - solution-license + movistartv.license License agreement IPTViewr for movistar+ v1.5 “Kruger 60” Beta 1 - movistar+ channels + IPTViewr for movistar+ First-time Configuration Wizard - \ No newline at end of file + diff --git a/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl b/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl index d24a434e..75462f5c 100644 --- a/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl +++ b/1.5 'Kruger 60'/Setup/MainSetup/texts_es-ES.wxl @@ -1,19 +1,29 @@ 3082 ESN Ya está instalada una nueva versión de [ProductName]. - Esta aplicación requiere .NET Framework 4.5.2 o superior. Por favor, instale el .NET Framework y ejecute el instalador de nuevo. + Esta aplicación requiere .NET Framework 4.6.2 o superior. Por favor, instale el .NET Framework y ejecute el instalador de nuevo. IPTViewr para movistar+ 1.5 “Kruger 60” beta 1 Decodificador virtual IPTV para movistar+ 1.5 “Kruger 60” beta 1 Ejecutar “Asistente de configuración inicial” - solution-license_es + movistartv.license.es Acuerdo de licencia IPTVievr para movistar+ v1.5 “Kruger 60” beta 1 - Canales movistar+ + IPTViewr para movistar+ Asistente de configuración inicial - \ No newline at end of file + diff --git a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net35/Newtonsoft.Json.dll b/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net35/Newtonsoft.Json.dll deleted file mode 100644 index 5e8eb8ee..00000000 Binary files a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net35/Newtonsoft.Json.dll and /dev/null differ diff --git a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net35/Newtonsoft.Json.pdb b/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net35/Newtonsoft.Json.pdb deleted file mode 100644 index 7450de80..00000000 Binary files a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net35/Newtonsoft.Json.pdb and /dev/null differ diff --git a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net35/Newtonsoft.Json.xml b/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net35/Newtonsoft.Json.xml deleted file mode 100644 index 82fa7f0b..00000000 --- a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net35/Newtonsoft.Json.xml +++ /dev/null @@ -1,8582 +0,0 @@ - - - - Newtonsoft.Json - - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Initializes a new instance of the class with the specified . - - - - - Reads the next JSON token from the stream. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a []. - - A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the state based on current token type. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Releases unmanaged and - optionally - managed resources - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the to Closed. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the underlying stream or - should be closed when the reader is closed. - - - true to close the underlying stream or when - the reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Get or set how time zones are handling when reading JSON. - - - - - Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Get or set how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets The Common Language Runtime (CLR) type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Specifies the state of the reader. - - - - - The Read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The Close method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Initializes a new instance of the class. - - The stream. - - - - Initializes a new instance of the class. - - The reader. - - - - Initializes a new instance of the class. - - The stream. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The reader. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the stream as a []. - - - A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. - - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - - A . This method will return null at the end of an array. - - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the to Closed. - - - - - Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Creates an instance of the JsonWriter class. - - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - A null value can be passed to the method for token's that don't have a value, e.g. . - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes out the given white space. - - The string of white space characters. - - - - Sets the state of the JsonWriter, - - The JsonToken being written. - The value being written. - - - - Gets or sets a value indicating whether the underlying stream or - should be closed when the writer is closed. - - - true to close the underlying stream or when - the writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Indicates how JSON text output is formatted. - - - - - Get or set how dates are written to JSON text. - - - - - Get or set how time zones are handling when writing JSON text. - - - - - Get or set how strings are escaped when writing JSON text. - - - - - Get or set how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Get or set how and values are formatting when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - The stream. - - - - Initializes a new instance of the class. - - The writer. - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this stream and the underlying stream. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Represents a BSON Oid (object id). - - - - - Initializes a new instance of the class. - - The Oid value. - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Converts a binary value to and from a base 64 string value. - - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - - Gets the of the JSON produced by the JsonConverter. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The of the JSON produced by the JsonConverter. - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Create a custom object - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an Entity Framework EntityKey to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Initializes a new instance of the class. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed. - - true if integers are allowed; otherwise, false. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a paramatized constructor. - - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a property. - - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Instructs the how to serialize the collection. - - - - - Instructs the how to serialize the object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the JsonConverter described by ItemConverterType. - If null, the default constructor is used. - When non-null, there must be a constructor defined in the JsonConverter that exactly matches the number, - order, and type of these parameters. - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Initializes a new instance of the class. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Instructs the to always serialize the member, and require the member has a value. - - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. When the or methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Represents a trace writer that writes to the application's instances. - - - - - Represents a trace writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of Info will exclude Verbose messages and include Info, - Warning and Error messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of Info will exclude Verbose messages and include Info, - Warning and Error messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Contract details for a used by the . - - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the method called immediately after deserialization of the object. - - The method called immediately after deserialization of the object. - - - - Gets or sets the method called during deserialization of the object. - - The method called during deserialization of the object. - - - - Gets or sets the method called after serialization of the object graph. - - The method called after serialization of the object graph. - - - - Gets or sets the method called before serialization of the object. - - The method called before serialization of the object. - - - - Gets or sets the method called when an error is thrown during the serialization of the object. - - The method called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non public. - - true if the default object creator is non-public; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of Info will exclude Verbose messages and include Info, - Warning and Error messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if LineNumber and LinePosition can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, HasLineInfo returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, HasLineInfo returns false). - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Represents a raw JSON string. - - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Represents an abstract JSON token. - - - - - Represents a collection of objects. - - The type of token - - - - Gets the with the specified key. - - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output is formatted. - A collection of which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Creates an for this token. - - An that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object - - - - Creates the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - An positioned at the token to read into this . - - An that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Creates a from a . - - An positioned at the token to read into this . - - An that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An that contains the selected elements. - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Gets the with the specified key. - - The with the specified key. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a null value. - - A null value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - The parameter is null. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not the same type as this instance. - - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the ISerializable object constructor. - - The ISerializable object constructor. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Get and set values for a using dynamic methods. - - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides data for the Error event. - - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that - - - - Gets the reference for the sepecified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that is is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and sets members to their default value when deserializing. - - - - - Instructs the to use the specified when serializing the member or class. - - - - - Initializes a new instance of the class. - - Type of the converter. - - - - Initializes a new instance of the class. - - Type of the converter. - Parameter list to use when constructing the JsonConverter. Can be null. - - - - Gets the of the converter. - - The of the converter. - - - - The parameter list to use when constructing the JsonConverter described by ConverterType. - If null, the default constructor is used. - - - - - Instructs the how to serialize the object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Specifies the settings on a object. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how null default are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Get or set how and values are formatted when writing JSON text, and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Get or set how dates are written to JSON text. - - - - - Get or set how time zones are handling during serialization and deserialization. - - - - - Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Get or set how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Get or set how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Reads the next JSON token from the stream as a . - - A . - - - - Reads the next JSON token from the stream as a []. - - - A [] or a null reference if the next JSON token is null. - - - - - Reads the next JSON token from the stream as a . - - A . - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the Common Language Runtime (CLR) type for the current JSON token. - - - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members must be marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Converts a to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Converts a to and from a JavaScript date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts XML to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the attributeName is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - True if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. - - The name of the deserialize root element. - - - - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attibute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Initializes a new instance of the class with the specified . - - The TextReader containing the XML data to read. - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the stream as a []. - - - A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. - - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Changes the state to closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if LineNumber and LinePosition can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, HasLineInfo returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, HasLineInfo returns false). - - - - - Instructs the to always serialize the member with the specified name. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - The parameter list to use when constructing the JsonConverter described by ItemConverterType. - If null, the default constructor is used. - When non-null, there must be a constructor defined in the JsonConverter that exactly matches the number, - order, and type of these parameters. - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization and deserialization of a member. - - The numeric order of serialization or deserialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Creates an instance of the JsonWriter class using the specified . - - The TextWriter to write to. - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes out the given white space. - - The string of white space characters. - - - - Gets or sets how many IndentChars to write for each level in the hierarchy when is set to Formatting.Indented. - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to Formatting.Indented. - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Represents a collection of . - - - - - Provides methods for converting between common language runtime types and JSON types. - - - - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output is formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output is formatted. - A collection converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifing the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output is formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output is formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifing the type is optional. - - - A JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be infered from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be infered from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Serializes the XML node to a JSON string. - - The node to serialize. - A JSON string of the XmlNode. - - - - Serializes the XML node to a JSON string using formatting. - - The node to serialize. - Indicates how the output is formatted. - A JSON string of the XmlNode. - - - - Serializes the XML node to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output is formatted. - Omits writing the root object. - A JSON string of the XmlNode. - - - - Deserializes the XmlNode from a JSON string. - - The JSON string. - The deserialized XmlNode - - - - Deserializes the XmlNode from a JSON string nested in a root elment specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized XmlNode - - - - Deserializes the XmlNode from a JSON string nested in a root elment specified by - and writes a .NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized XmlNode - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the XNode. - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output is formatted. - A JSON string of the XNode. - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output is formatted. - Omits writing the root object. - A JSON string of the XNode. - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized XNode - - - - Deserializes the from a JSON string nested in a root elment specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized XNode - - - - Deserializes the from a JSON string nested in a root elment specified by - and writes a .NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized XNode - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings. - - - A new instance. - The will not use default settings. - - - - - Creates a new instance using the specified . - The will not use default settings. - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings. - - - - - Creates a new instance. - The will use default settings. - - - A new instance. - The will use default settings. - - - - - Creates a new instance using the specified . - The will use default settings. - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings. - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - to a Stream using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - to a Stream using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifing the type is optional. - - - - - Serializes the specified and writes the JSON structure - to a Stream using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifing the type is optional. - - - - - Serializes the specified and writes the JSON structure - to a Stream using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Get or set how reference loops (e.g. a class referencing itself) is handled. - - - - - Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Get or set how null values are handled during serialization and deserialization. - - - - - Get or set how null default are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Get or set how dates are written to JSON text. - - - - - Get or set how time zones are handling during serialization and deserialization. - - - - - Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Get or set how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Get or set how strings are escaped when writing JSON text. - - - - - Get or set how and values are formatted when writing JSON text, and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a JSON constructor. - - - - - Represents a token that can contain other tokens. - - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates an that can be used to add tokens to the . - - An that is ready to have content written to it. - - - - Replaces the children nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Represents a collection of objects. - - The type of token - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Gets the with the specified key. - - - - - - Represents a JSON object. - - - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets an of this object's properties. - - An of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets an of this object's property values. - - An of this object's property values. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries the get value. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the properties for this instance of a component. - - - A that represents the properties for this component instance. - - - - - Returns the properties for this instance of a component using the attribute array as a filter. - - An array of type that is used as a filter. - - A that represents the filtered properties for this component instance. - - - - - Returns a collection of custom attributes for this instance of a component. - - - An containing the attributes for this object. - - - - - Returns the class name of this instance of a component. - - - The class name of the object, or null if the class does not have a name. - - - - - Returns the name of this instance of a component. - - - The name of the object, or null if the object does not have a name. - - - - - Returns a type converter for this instance of a component. - - - A that is the converter for this object, or null if there is no for this object. - - - - - Returns the default event for this instance of a component. - - - An that represents the default event for this object, or null if this object does not have events. - - - - - Returns the default property for this instance of a component. - - - A that represents the default property for this object, or null if this object does not have properties. - - - - - Returns an editor of the specified type for this instance of a component. - - A that represents the editor for this object. - - An of the specified type that is the editor for this object, or null if the editor cannot be found. - - - - - Returns the events for this instance of a component using the specified attribute array as a filter. - - An array of type that is used as a filter. - - An that represents the filtered events for this component instance. - - - - - Returns the events for this instance of a component. - - - An that represents the events for this component instance. - - - - - Returns an object that contains the property described by the specified property descriptor. - - A that represents the property whose owner is to be found. - - An that represents the owner of the specified property. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Occurs when a property value is changing. - - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Represents a JSON array. - - - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - The is read-only. - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - The is read-only. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - The is read-only. - - - - Removes all items from the . - - The is read-only. - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies to. - - The array. - Index of the array. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - The is read-only. - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the stream as a []. - - - A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. - - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the at the reader's current position. - - - - - Gets the path of the current JSON token. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Gets the at the writer's current position. - - - - - Gets the token being writen. - - The token being writen. - - - - Represents a JSON property. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Gets the node type for this . - - The type. - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Resolves member mappings for a type, camel casing property names. - - - - - Used by to resolves a for a given . - - - - - Used by to resolves a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - If set to true the will use a cached shared with other resolvers of the same type. - Sharing the cache will significantly improve performance with multiple resolver instances because expensive reflection will only - happen once. This setting can cause unexpected behavior if different instances of the resolver are suppose to produce different - results. When set to false it is highly recommended to reuse instances with the . - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Resolves the name of the property. - - Name of the property. - The property name camel cased. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization and deserialization of a member. - - The numeric order of serialization or deserialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes presidence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialize. - - A predicate used to determine whether the property should be serialize. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of propertyName and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains schema JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Parses the specified json. - - The json. - The resolver. - A populated from the string that contains JSON. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisble by. - - A number that the value should be divisble by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. - - A flag indicating whether the value can not equal the number defined by the "minimum" attribute. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. - - A flag indicating whether the value can not equal the number defined by the "maximum" attribute. - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallow types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets the constructor parameters required for any non-default constructor - - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the override constructor used to create the object. - This is set when a constructor is marked up using the - JsonConstructor attribute. - - The override constructor. - - - - Gets or sets the parametrized constructor used to create the object. - - The parametrized constructor. - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the JsonConverter type described by the argument. - - The JsonConverter type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Create a factory function that can be used to create instances of a JsonConverter described by the - argument type. The returned function can then be used to either invoke the converter's default ctor, or any - parameterized constructors by way of an object array. - - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Represents a method that constructs an object. - - The object type to create. - - - - Specifies type name handling options for the . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Gets a dictionary of the names and values of an Enum type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - Specifies the type of JSON token. - - - - - This is returned by the if a method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic IList. - - The list to add to. - The collection of elements to add. - - - - Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer{TSource}. - - The type of the elements of source. - A sequence in which to locate a value. - The object to locate in the sequence - An equality comparer to compare values. - The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1. - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Nulls an empty string. - - The string. - Null if the string was null, otherwise the string unchanged. - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls results in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - A array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - diff --git a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net45/Newtonsoft.Json.dll b/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net45/Newtonsoft.Json.dll deleted file mode 100644 index d4c90377..00000000 Binary files a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net45/Newtonsoft.Json.dll and /dev/null differ diff --git a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net45/Newtonsoft.Json.pdb b/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net45/Newtonsoft.Json.pdb deleted file mode 100644 index 9b0838d4..00000000 Binary files a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net45/Newtonsoft.Json.pdb and /dev/null differ diff --git a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net45/Newtonsoft.Json.xml b/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net45/Newtonsoft.Json.xml deleted file mode 100644 index 246ae3b9..00000000 --- a/1.5 'Kruger 60'/Third-party/Json70r1/Bin/Net45/Newtonsoft.Json.xml +++ /dev/null @@ -1,8889 +0,0 @@ - - - - Newtonsoft.Json - - - - - Represents a BSON Oid (object id). - - - - - Initializes a new instance of the class. - - The Oid value. - - - - Gets or sets the value of the Oid. - - The value of the Oid. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Initializes a new instance of the class with the specified . - - - - - Reads the next JSON token from the stream. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a []. - - A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the state based on current token type. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Releases unmanaged and - optionally - managed resources - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the to Closed. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets or sets a value indicating whether the underlying stream or - should be closed when the reader is closed. - - - true to close the underlying stream or when - the reader is closed; otherwise false. The default is true. - - - - - Gets or sets a value indicating whether multiple pieces of JSON content can - be read from a continuous stream without erroring. - - - true to support reading multiple pieces of JSON content; otherwise false. The default is false. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Get or set how time zones are handling when reading JSON. - - - - - Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Get or set how custom date formatted strings are parsed when reading JSON. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets the type of the current JSON token. - - - - - Gets the text value of the current JSON token. - - - - - Gets The Common Language Runtime (CLR) type for the current JSON token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Specifies the state of the reader. - - - - - The Read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The Close method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Initializes a new instance of the class. - - The stream. - - - - Initializes a new instance of the class. - - The reader. - - - - Initializes a new instance of the class. - - The stream. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Initializes a new instance of the class. - - The reader. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the stream as a []. - - - A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. - - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - - A . This method will return null at the end of an array. - - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Changes the to Closed. - - - - - Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. - - - true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Creates an instance of the JsonWriter class. - - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a JSON object. - - - - - Writes the end of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes the end of the current JSON object or array. - - - - - Writes the current token and its children. - - The to read the token from. - - - - Writes the current token. - - The to read the token from. - A flag indicating whether the current token's children should be written. - - - - Writes the token and its value. - - The to write. - - The value to write. - A value is only required for tokens that have an associated value, e.g. the property name for . - A null value can be passed to the method for token's that don't have a value, e.g. . - - - - Writes the token. - - The to write. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes out the given white space. - - The string of white space characters. - - - - Sets the state of the JsonWriter, - - The JsonToken being written. - The value being written. - - - - Gets or sets a value indicating whether the underlying stream or - should be closed when the writer is closed. - - - true to close the underlying stream or when - the writer is closed; otherwise false. The default is true. - - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Gets the path of the writer. - - - - - Indicates how JSON text output is formatted. - - - - - Get or set how dates are written to JSON text. - - - - - Get or set how time zones are handling when writing JSON text. - - - - - Get or set how strings are escaped when writing JSON text. - - - - - Get or set how special floating point numbers, e.g. , - and , - are written to JSON text. - - - - - Get or set how and values are formatting when writing JSON text. - - - - - Gets or sets the culture used when writing JSON. Defaults to . - - - - - Initializes a new instance of the class. - - The stream. - - - - Initializes a new instance of the class. - - The writer. - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes the beginning of a JSON array. - - - - - Writes the beginning of a JSON object. - - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Closes this stream and the underlying stream. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value that represents a BSON object id. - - The Object ID value to write. - - - - Writes a BSON regex. - - The regex pattern. - The regex options. - - - - Gets or sets the used when writing values to BSON. - When set to no conversion will occur. - - The used when writing values to BSON. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. - - - - - Json.NET will use a non-public default constructor before falling back to a paramatized constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - - Gets the of the JSON produced by the JsonConverter. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The of the JSON produced by the JsonConverter. - - - - Gets a value indicating whether this can read JSON. - - true if this can read JSON; otherwise, false. - - - - Gets a value indicating whether this can write JSON. - - true if this can write JSON; otherwise, false. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Create a custom object - - The object type to convert. - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - The created object. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a F# discriminated union type to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an Entity Framework EntityKey to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an ExpandoObject to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets a value indicating whether this can write JSON. - - - true if this can write JSON; otherwise, false. - - - - - Converts a to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Converts a to and from a JavaScript date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON and BSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Initializes a new instance of the class. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Gets or sets a value indicating whether the written enum text should be camel case. - - true if the written enum text will be camel case; otherwise, false. - - - - Gets or sets a value indicating whether integer values are allowed. - - true if integers are allowed; otherwise, false. - - - - Converts a to and from a string (e.g. "1.2.3.4"). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing property value of the JSON that is being converted. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts XML to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The existing value of object being read. - The calling serializer. - The object value. - - - - Checks if the attributeName is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - True if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. - - The name of the deserialize root element. - - - - Gets or sets a flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - true if the array attibute is written to the XML; otherwise, false. - - - - Gets or sets a value indicating whether to write the root JSON object. - - true if the JSON root object is omitted; otherwise, false. - - - - Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Floating point numbers are parsed to . - - - - - Floating point numbers are parsed to . - - - - - Specifies how dates are formatted when writing JSON text. - - - - - Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". - - - - - Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". - - - - - Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. - - - - - Date formatted strings are not parsed to a date type and are read as strings. - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . - - - - - Specifies how to treat the time value when converting between string and . - - - - - Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. - - - - - Treat as a UTC. If the object represents a local time, it is converted to a UTC. - - - - - Treat as a local time if a is being converted to a string. - If a string is being converted to , convert to a local time if a time zone is specified. - - - - - Time zone information should be preserved when converting. - - - - - Specifies default value handling options for the . - - - - - - - - - Include members where the member value is the same as the member's default value when serializing objects. - Included members are written to JSON. Has no effect when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - so that is is not written to JSON. - This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, - decimals and floating point numbers; and false for booleans). The default value ignored can be changed by - placing the on the property. - - - - - Members with a default value but no JSON will be set to their default value when deserializing. - - - - - Ignore members where the member value is the same as the member's default value when serializing objects - and sets members to their default value when deserializing. - - - - - Specifies float format handling options when writing special floating point numbers, e.g. , - and with . - - - - - Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". - - - - - Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. - Note that this will produce non-valid JSON. - - - - - Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a property. - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if LineNumber and LinePosition can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, HasLineInfo returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, HasLineInfo returns false). - - - - Instructs the how to serialize the collection. - - - - - Instructs the how to serialize the object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets the collection's items converter. - - The collection's items converter. - - - - The parameter list to use when constructing the JsonConverter described by ItemConverterType. - If null, the default constructor is used. - When non-null, there must be a constructor defined in the JsonConverter that exactly matches the number, - order, and type of these parameters. - - - [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - Gets or sets a value that indicates whether to preserve object references. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Gets or sets a value that indicates whether to preserve collection's items references. - - - true to keep collection's items object references; otherwise, false. The default is false. - - - - - Gets or sets the reference loop handling used when serializing the collection's items. - - The reference loop handling. - - - - Gets or sets the type name handling used when serializing the collection's items. - - The type name handling. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Instructs the to use the specified constructor when deserializing that object. - - - - - Provides methods for converting between common language runtime types and JSON types. - - - - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - The time zone handling when the date is converted to a string. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation using the specified. - - The value to convert. - The format the date will be converted to. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - The string escape handling. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting. - - The object to serialize. - Indicates how the output is formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using formatting and a collection of . - - The object to serialize. - Indicates how the output is formatted. - A collection converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifing the type is optional. - - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using formatting and . - - The object to serialize. - Indicates how the output is formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a type, formatting and . - - The object to serialize. - Indicates how the output is formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifing the type is optional. - - - A JSON string representation of the object. - - - - - Asynchronously serializes the specified object to a JSON string. - Serialization will happen on a new thread. - - The object to serialize. - - A task that represents the asynchronous serialize operation. The value of the TResult parameter contains a JSON string representation of the object. - - - - - Asynchronously serializes the specified object to a JSON string using formatting. - Serialization will happen on a new thread. - - The object to serialize. - Indicates how the output is formatted. - - A task that represents the asynchronous serialize operation. The value of the TResult parameter contains a JSON string representation of the object. - - - - - Asynchronously serializes the specified object to a JSON string using formatting and a collection of . - Serialization will happen on a new thread. - - The object to serialize. - Indicates how the output is formatted. - The used to serialize the object. - If this is null, default serialization settings will be used. - - A task that represents the asynchronous serialize operation. The value of the TResult parameter contains a JSON string representation of the object. - - - - - Deserializes the JSON to a .NET object. - - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to a .NET object using . - - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The JSON to deserialize. - The of object being deserialized. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type. - - The type of the object to deserialize to. - The JSON to deserialize. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be infered from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the given anonymous type using . - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be infered from the anonymous type passed - as a parameter. - - The JSON to deserialize. - The anonymous type object. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The type of the object to deserialize to. - The JSON to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The type of the object to deserialize to. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using a collection of . - - The JSON to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON to the specified .NET type using . - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - The deserialized object from the JSON string. - - - - Asynchronously deserializes the JSON to the specified .NET type. - Deserialization will happen on a new thread. - - The type of the object to deserialize to. - The JSON to deserialize. - - A task that represents the asynchronous deserialize operation. The value of the TResult parameter contains the deserialized object from the JSON string. - - - - - Asynchronously deserializes the JSON to the specified .NET type using . - Deserialization will happen on a new thread. - - The type of the object to deserialize to. - The JSON to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - A task that represents the asynchronous deserialize operation. The value of the TResult parameter contains the deserialized object from the JSON string. - - - - - Asynchronously deserializes the JSON to the specified .NET type. - Deserialization will happen on a new thread. - - The JSON to deserialize. - - A task that represents the asynchronous deserialize operation. The value of the TResult parameter contains the deserialized object from the JSON string. - - - - - Asynchronously deserializes the JSON to the specified .NET type using . - Deserialization will happen on a new thread. - - The JSON to deserialize. - The type of the object to deserialize to. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - A task that represents the asynchronous deserialize operation. The value of the TResult parameter contains the deserialized object from the JSON string. - - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - - - Asynchronously populates the object with values from the JSON string using . - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be used. - - - A task that represents the asynchronous populate operation. - - - - - Serializes the XML node to a JSON string. - - The node to serialize. - A JSON string of the XmlNode. - - - - Serializes the XML node to a JSON string using formatting. - - The node to serialize. - Indicates how the output is formatted. - A JSON string of the XmlNode. - - - - Serializes the XML node to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output is formatted. - Omits writing the root object. - A JSON string of the XmlNode. - - - - Deserializes the XmlNode from a JSON string. - - The JSON string. - The deserialized XmlNode - - - - Deserializes the XmlNode from a JSON string nested in a root elment specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized XmlNode - - - - Deserializes the XmlNode from a JSON string nested in a root elment specified by - and writes a .NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized XmlNode - - - - Serializes the to a JSON string. - - The node to convert to JSON. - A JSON string of the XNode. - - - - Serializes the to a JSON string using formatting. - - The node to convert to JSON. - Indicates how the output is formatted. - A JSON string of the XNode. - - - - Serializes the to a JSON string using formatting and omits the root object if is true. - - The node to serialize. - Indicates how the output is formatted. - Omits writing the root object. - A JSON string of the XNode. - - - - Deserializes the from a JSON string. - - The JSON string. - The deserialized XNode - - - - Deserializes the from a JSON string nested in a root elment specified by . - - The JSON string. - The name of the root element to append when deserializing. - The deserialized XNode - - - - Deserializes the from a JSON string nested in a root elment specified by - and writes a .NET array attribute for collections. - - The JSON string. - The name of the root element to append when deserializing. - - A flag to indicate whether to write the Json.NET array attribute. - This attribute helps preserve arrays when converting the written XML back to JSON. - - The deserialized XNode - - - - Gets or sets a function that creates default . - Default settings are automatically used by serialization methods on , - and and on . - To serialize without using any default settings create a with - . - - - - - Instructs the to use the specified when serializing the member or class. - - - - - Initializes a new instance of the class. - - Type of the converter. - - - - Initializes a new instance of the class. - - Type of the converter. - Parameter list to use when constructing the JsonConverter. Can be null. - - - - Gets the of the converter. - - The of the converter. - - - - The parameter list to use when constructing the JsonConverter described by ConverterType. - If null, the default constructor is used. - - - - - Represents a collection of . - - - - - Instructs the how to serialize the collection. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Instructs the to deserialize properties with no matching class member into the specified collection - and write values during serialization. - - - - - Initializes a new instance of the class. - - - - - Gets or sets a value that indicates whether to write extension data when serializing the object. - - - true to write extension data when serializing the object; otherwise, false. The default is true. - - - - - Gets or sets a value that indicates whether to read extension data when deserializing the object. - - - true to read extension data when deserializing the object; otherwise, false. The default is true. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Instructs the how to serialize the object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets the member serialization. - - The member serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Instructs the to always serialize the member with the specified name. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - The parameter list to use when constructing the JsonConverter described by ItemConverterType. - If null, the default constructor is used. - When non-null, there must be a constructor defined in the JsonConverter that exactly matches the number, - order, and type of these parameters. - - - [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] - - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets the type name handling used when serializing this property. - - The type name handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the order of serialization and deserialization of a member. - - The numeric order of serialization or deserialization. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - Gets or sets the the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Instructs the to always serialize the member, and require the member has a value. - - - - - The exception thrown when an error occurs during JSON serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance. - The will not use default settings. - - - A new instance. - The will not use default settings. - - - - - Creates a new instance using the specified . - The will not use default settings. - - The settings to be applied to the . - - A new instance using the specified . - The will not use default settings. - - - - - Creates a new instance. - The will use default settings. - - - A new instance. - The will use default settings. - - - - - Creates a new instance using the specified . - The will use default settings. - - The settings to be applied to the . - - A new instance using the specified . - The will use default settings. - - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the JSON structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the JSON structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the JSON structure - to a Stream using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Serializes the specified and writes the JSON structure - to a Stream using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifing the type is optional. - - - - - Serializes the specified and writes the JSON structure - to a Stream using the specified . - - The used to write the JSON structure. - The to serialize. - - The type of the value being serialized. - This parameter is used when is Auto to write out the type name if the type of the value does not match. - Specifing the type is optional. - - - - - Serializes the specified and writes the JSON structure - to a Stream using the specified . - - The used to write the JSON structure. - The to serialize. - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how object references are preserved by the serializer. - - - - - Get or set how reference loops (e.g. a class referencing itself) is handled. - - - - - Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Get or set how null values are handled during serialization and deserialization. - - - - - Get or set how null default are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Indicates how JSON text output is formatted. - - - - - Get or set how dates are written to JSON text. - - - - - Get or set how time zones are handling during serialization and deserialization. - - - - - Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Get or set how special floating point numbers, e.g. , - and , - are written as JSON text. - - - - - Get or set how strings are escaped when writing JSON text. - - - - - Get or set how and values are formatted when writing JSON text, and the expected date format when reading JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. - - - true if there will be a check for additional JSON content after deserializing an object; otherwise, false. - - - - - Specifies the settings on a object. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how null default are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - The type name handling. - - - - Gets or sets how metadata properties are used during deserialization. - - The metadata properties handling. - - - - Gets or sets how a type name assembly is written and resolved by the serializer. - - The type name assembly format. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the equality comparer used by the serializer when comparing references. - - The equality comparer. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets a function that creates the used by the serializer when resolving references. - - A function that creates the used by the serializer when resolving references. - - - - Gets or sets the used by the serializer when writing trace messages. - - The trace writer. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Get or set how and values are formatted when writing JSON text, and the expected date format when reading JSON text. - - - - - Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . - - - - - Indicates how JSON text output is formatted. - - - - - Get or set how dates are written to JSON text. - - - - - Get or set how time zones are handling during serialization and deserialization. - - - - - Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. - - - - - Get or set how special floating point numbers, e.g. , - and , - are written as JSON. - - - - - Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. - - - - - Get or set how strings are escaped when writing JSON text. - - - - - Gets or sets the culture used when reading JSON. Defaults to . - - - - - Gets a value indicating whether there will be a check for additional content after deserializing an object. - - - true if there will be a check for additional content after deserializing an object; otherwise, false. - - - - - Represents a reader that provides fast, non-cached, forward-only access to JSON text data. - - - - - Initializes a new instance of the class with the specified . - - The TextReader containing the XML data to read. - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the stream as a []. - - - A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. - - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Changes the state to closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if LineNumber and LinePosition can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, HasLineInfo returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, HasLineInfo returns false). - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Creates an instance of the JsonWriter class using the specified . - - The TextWriter to write to. - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - A flag to indicate whether the text should be escaped when it is written as a JSON property name. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes out the given white space. - - The string of white space characters. - - - - Gets or sets how many IndentChars to write for each level in the hierarchy when is set to Formatting.Indented. - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to Formatting.Indented. - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - Specifies the type of JSON token. - - - - - This is returned by the if a method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An integer. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - - Represents a reader that provides validation. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Reads the next JSON token from the stream as a . - - A . - - - - Reads the next JSON token from the stream as a []. - - - A [] or a null reference if the next JSON token is null. - - - - - Reads the next JSON token from the stream as a . - - A . - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current JSON token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the path of the current JSON token. - - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current JSON token. - - - - - - Gets the Common Language Runtime (CLR) type for the current JSON token. - - - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - The exception thrown when an error occurs while reading JSON text. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, the ancestors of every token in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every token in the source collection. - - - - Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains every token in the source collection, and the descendants of every token in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every token in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every token in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every token in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every token in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every token in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a collection of objects. - - The type of token - - - - Gets the with the specified key. - - - - - - Represents a JSON array. - - - - - - - - Represents a token that can contain other tokens. - - - - - Represents an abstract JSON token. - - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of tokens that contain this token, and the ancestors of this token. - - A collection of tokens that contain this token, and the ancestors of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output is formatted. - A collection of which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to []. - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from [] to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Creates an for this token. - - An that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object - - - - Creates the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates the specified .NET type from the . - - The object type that the token will be deserialized to. - The new object created from the JSON value. - - - - Creates the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates the specified .NET type from the using the specified . - - The object type that the token will be deserialized to. - The that will be used when creating the object. - The new object created from the JSON value. - - - - Creates a from a . - - An positioned at the token to read into this . - - An that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Creates a from a . - - An positioned at the token to read into this . - - An that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A , or null. - - - - Selects a using a JPath expression. Selects the token that matches the object path. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - A . - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - An that contains the selected elements. - - - - Selects a collection of elements using a JPath expression. - - - A that contains a JPath expression. - - A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. - An that contains the selected elements. - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Creates a new instance of the . All child tokens are recursively cloned. - - A new instance of the . - - - - Adds an object to the annotation list of this . - - The annotation to add. - - - - Get the first annotation object of the specified type from this . - - The type of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets the first annotation object of the specified type from this . - - The of the annotation to retrieve. - The first annotation object that matches the specified type, or null if no annotation is of the specified type. - - - - Gets a collection of annotations of the specified type for this . - - The type of the annotations to retrieve. - An that contains the annotations for this . - - - - Gets a collection of annotations of the specified type for this . - - The of the annotations to retrieve. - An of that contains the annotations that match the specified type for this . - - - - Removes the annotations of the specified type from this . - - The type of annotations to remove. - - - - Removes the annotations of the specified type from this . - - The of annotations to remove. - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the path of the JSON token. - - - - - Gets the with the specified key. - - The with the specified key. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An containing the descendant tokens of the . - - - - Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. - - An containing this token, and all the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates an that can be used to add tokens to the . - - An that is ready to have content written to it. - - - - Replaces the children nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Merge the specified content into this . - - The content to be merged. - - - - Merge the specified content into this using . - - The content to be merged. - The used to merge the content. - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Occurs when the items list of the collection has changed, or the collection is reset. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Gets the count of child JSON tokens. - - The count of child JSON tokens - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - The is read-only. - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - The is read-only. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Adds an item to the . - - The object to add to the . - The is read-only. - - - - Removes all items from the . - - The is read-only. - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies to. - - The array. - Index of the array. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - The is read-only. - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - Represents a JSON constructor. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Represents a collection of objects. - - The type of token - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Gets the with the specified key. - - - - - - Represents a JSON object. - - - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets an of this object's properties. - - An of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets an of this object's property values. - - An of this object's property values. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Gets the with the specified property name. - - Name of the property. - The with the specified property name. - - - - Gets the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - One of the enumeration values that specifies how the strings will be compared. - The with the specified property name. - - - - Tries to get the with the specified property name. - The exact property name will be searched for first and if no matching property is found then - the will be used to match a property. - - Name of the property. - The value. - One of the enumeration values that specifies how the strings will be compared. - true if a value was successfully retrieved; otherwise, false. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries the get value. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Returns the properties for this instance of a component. - - - A that represents the properties for this component instance. - - - - - Returns the properties for this instance of a component using the attribute array as a filter. - - An array of type that is used as a filter. - - A that represents the filtered properties for this component instance. - - - - - Returns a collection of custom attributes for this instance of a component. - - - An containing the attributes for this object. - - - - - Returns the class name of this instance of a component. - - - The class name of the object, or null if the class does not have a name. - - - - - Returns the name of this instance of a component. - - - The name of the object, or null if the object does not have a name. - - - - - Returns a type converter for this instance of a component. - - - A that is the converter for this object, or null if there is no for this object. - - - - - Returns the default event for this instance of a component. - - - An that represents the default event for this object, or null if this object does not have events. - - - - - Returns the default property for this instance of a component. - - - A that represents the default property for this object, or null if this object does not have properties. - - - - - Returns an editor of the specified type for this instance of a component. - - A that represents the editor for this object. - - An of the specified type that is the editor for this object, or null if the editor cannot be found. - - - - - Returns the events for this instance of a component using the specified attribute array as a filter. - - An array of type that is used as a filter. - - An that represents the filtered events for this component instance. - - - - - Returns the events for this instance of a component. - - - An that represents the events for this component instance. - - - - - Returns an object that contains the property described by the specified property descriptor. - - A that represents the property whose owner is to be found. - - An that represents the owner of the specified property. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Occurs when a property value changes. - - - - - Occurs when a property value is changing. - - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Specifies the settings used when merging JSON. - - - - - Gets or sets the method used when merging JSON arrays. - - The method used when merging JSON arrays. - - - - Represents a JSON property. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Gets the container's children tokens. - - The container's children tokens. - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Gets the node type for this . - - The type. - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. When the or methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a raw JSON string. - - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Creates a null value. - - A null value. - - - - Creates a null value. - - A null value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - The parameter is null. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format provider. - - A that represents this instance. - - - - - Returns a that represents this instance. - - The format. - The format provider. - - A that represents this instance. - - - - - Returns the responsible for binding operations performed on this object. - - The expression tree representation of the runtime value. - - The to bind this object. - - - - - Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. - - An object to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: - Value - Meaning - Less than zero - This instance is less than . - Zero - This instance is equal to . - Greater than zero - This instance is greater than . - - - is not the same type as this instance. - - - - - Gets a value indicating whether this token has child tokens. - - - true if this token has child values; otherwise, false. - - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the stream as a []. - - - A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. - - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream as a . - - A . This method will return null at the end of an array. - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets the at the reader's current position. - - - - - Gets the path of the current JSON token. - - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - A Guid value. - - - - - A Uri value. - - - - - A TimeSpan value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. - - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a JSON object. - - - - - Writes the beginning of a JSON array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a JSON object. - - The name of the property. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a [] value. - - The [] value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Gets the at the writer's current position. - - - - - Gets the token being writen. - - The token being writen. - - - - Specifies how JSON arrays are merged together. - - - - Concatenate arrays. - - - Union arrays, skipping items that already exist. - - - Replace all array items. - - - Merge array items together, matched by index. - - - - Specifies the member serialization options for the . - - - - - All public members are serialized by default. Members can be excluded using or . - This is the default member serialization mode. - - - - - Only members must be marked with or are serialized. - This member serialization mode can also be set by marking the class with . - - - - - All public and private fields are serialized. Members can be excluded using or . - This member serialization mode can also be set by marking the class with - and setting IgnoreSerializableAttribute on to false. - - - - - Specifies metadata property handling options for the . - - - - - Read metadata properties located at the start of a JSON object. - - - - - Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. - - - - - Do not try to read metadata properties. - - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Specifies reference handling options for the . - Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. - - - - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - - Contains the JSON schema extension methods. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - - Determines whether the is valid. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - When this method returns, contains any error messages generated while validating. - - true if the specified is valid; otherwise, false. - - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - - - - - Validates the specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - The source to test. - The schema to test with. - The validation event handler. - - - - - An in-memory representation of a JSON Schema. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains schema JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Parses the specified json. - - The json. - The resolver. - A populated from the string that contains JSON. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is required. - - - - - Gets or sets whether the object is read only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets a number that the value should be divisble by. - - A number that the value should be divisble by. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. - - A flag indicating whether the value can not equal the number defined by the "minimum" attribute. - - - - Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. - - A flag indicating whether the value can not equal the number defined by the "maximum" attribute. - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . - - - true if items are validated using their array position; otherwise, false. - - - - - Gets or sets the of additional items. - - The of additional items. - - - - Gets or sets a value indicating whether additional items are allowed. - - - true if additional items are allowed; otherwise, false. - - - - - Gets or sets whether the array items must be unique. - - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets the pattern properties. - - The pattern properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets disallowed types. - - The disallow types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the collection of that this schema extends. - - The collection of that this schema extends. - - - - Gets or sets the format. - - The format. - - - - - Returns detailed information about the schema exception. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Initializes a new instance of the class. - - The that holds the serialized object data about the exception being thrown. - The that contains contextual information about the source or destination. - The parameter is null. - The class name is null or is zero (0). - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Gets the path to the JSON where the error occurred. - - The path to the JSON where the error occurred. - - - - - Generates a from a specified . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - - Resolves from an id. - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Initializes a new instance of the class. - - - - - Gets a for the specified reference. - - The id. - A for the specified reference. - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - - The value types allowed by the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - - Specifies undefined schema Id handling options for the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - - Returns detailed information related to the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Gets the associated with the validation error. - - The JsonSchemaException associated with the validation error. - - - - Gets the path of the JSON location where the validation error occurred. - - The path of the JSON location where the validation error occurred. - - - - Gets the text description corresponding to the validation error. - - The text description. - - - - - Represents the callback method that will handle JSON schema validation events and the . - - - JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. - - - - - - Resolves member mappings for a type, camel casing property names. - - - - - Used by to resolves a for a given . - - - - - Used by to resolves a for a given . - - - - - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - If set to true the will use a cached shared with other resolvers of the same type. - Sharing the cache will significantly improve performance with multiple resolver instances because expensive reflection will only - happen once. This setting can cause unexpected behavior if different instances of the resolver are suppose to produce different - results. When set to false it is highly recommended to reuse instances with the . - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates the constructor parameters. - - The constructor to create properties for. - The type's member properties. - Properties for the given . - - - - Creates a for the given . - - The matching member property. - The constructor parameter. - A created for the given . - - - - Resolves the default for the contract. - - Type of the object. - The contract's default . - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Determines which contract type is created for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The type to create properties for. - /// The member serialization mode for the type. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's parent . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Resolved name of the property. - - - - Resolves the key of the dictionary. By default is used to resolve dictionary keys. - - Key of the dictionary. - Resolved key of the dictionary. - - - - Gets the resolved name of the property. - - Name of the property. - Name of the property. - - - - Gets a value indicating whether members are being get and set using dynamic code generation. - This value is determined by the runtime permissions available. - - - true if using dynamic code generation; otherwise, false. - - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Gets or sets a value indicating whether compiler generated members should be serialized. - - - true if serialized compiler generated members; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. - - - true if the interface will be ignored when serializing and deserializing types; otherwise, false. - - - - - Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. - - - true if the attribute will be ignored when serializing and deserializing types; otherwise, false. - - - - - Initializes a new instance of the class. - - - - - Resolves the name of the property. - - Name of the property. - The property name camel cased. - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The serialization context. - The reference to resolve. - The object that - - - - Gets the reference for the sepecified object. - - The serialization context. - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The serialization context. - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The serialization context. - The reference. - The object to reference. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - The type of the object the formatter creates a new instance of. - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - - - Represents a trace writer that writes to the application's instances. - - - - - Represents a trace writer. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of Info will exclude Verbose messages and include Info, - Warning and Error messages. - - The that will be used to filter the trace messages passed to the writer. - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of Info will exclude Verbose messages and include Info, - Warning and Error messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Get and set values for a using dynamic methods. - - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides information surrounding an error. - - - - - Gets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets the path of the JSON location where the error occurred. - - The path of the JSON location where the error occurred. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Get and set values for a using dynamic methods. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides methods to get attributes. - - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Contract details for a used by the . - - - - - Contract details for a used by the . - - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets all methods called immediately after deserialization of the object. - - The methods called immediately after deserialization of the object. - - - - Gets or sets all methods called during deserialization of the object. - - The methods called during deserialization of the object. - - - - Gets or sets all methods called after serialization of the object graph. - - The methods called after serialization of the object graph. - - - - Gets or sets all methods called before serialization of the object. - - The methods called before serialization of the object. - - - - Gets or sets all method called when an error is thrown during the serialization of the object. - - The methods called when an error is thrown during the serialization of the object. - - - - Gets or sets the method called immediately after deserialization of the object. - - The method called immediately after deserialization of the object. - - - - Gets or sets the method called during deserialization of the object. - - The method called during deserialization of the object. - - - - Gets or sets the method called after serialization of the object graph. - - The method called after serialization of the object graph. - - - - Gets or sets the method called before serialization of the object. - - The method called before serialization of the object. - - - - Gets or sets the method called when an error is thrown during the serialization of the object. - - The method called when an error is thrown during the serialization of the object. - - - - Gets or sets the default creator method used to create the object. - - The default creator method used to create the object. - - - - Gets or sets a value indicating whether the default creator is non public. - - true if the default object creator is non-public; otherwise, false. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the default collection items . - - The converter. - - - - Gets or sets a value indicating whether the collection items preserve object references. - - true if collection items preserve object references; otherwise, false. - - - - Gets or sets the collection item reference loop handling. - - The reference loop handling. - - - - Gets or sets the collection item type name handling. - - The type name handling. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets the of the collection items. - - The of the collection items. - - - - Gets a value indicating whether the collection type is a multidimensional array. - - true if the collection type is a multidimensional array; otherwise, false. - - - - Handles serialization callback events. - - The object that raised the callback event. - The streaming context. - - - - Handles serialization error callback events. - - The object that raised the callback event. - The streaming context. - The error context. - - - - Sets extension data for an object during deserialization. - - The object to set extension data on. - The extension data key. - The extension data value. - - - - Gets extension data for an object during serialization. - - The object to set extension data on. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Gets or sets the dictionary key resolver. - - The dictionary key resolver. - - - - Gets the of the dictionary keys. - - The of the dictionary keys. - - - - Gets the of the dictionary values. - - The of the dictionary values. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the property name resolver. - - The property name resolver. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the ISerializable object constructor. - - The ISerializable object constructor. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets or sets a value that indicates whether the object's properties are required. - - - A value indicating whether the object's properties are required. - - - - - Gets the object's properties. - - The object's properties. - - - - Gets the constructor parameters required for any non-default constructor - - - - - Gets a collection of instances that define the parameters used with . - - - - - Gets or sets the override constructor used to create the object. - This is set when a constructor is marked up using the - JsonConstructor attribute. - - The override constructor. - - - - Gets or sets the parametrized constructor used to create the object. - - The parametrized constructor. - - - - Gets or sets the function used to create the object. When set this function will override . - This function is called with a collection of arguments which are defined by the collection. - - The function used to create the object. - - - - Gets or sets the extension data setter. - - - - - Gets or sets the extension data getter. - - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member or constructor parameter. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets the type that declared this property. - - The type that declared this property. - - - - Gets or sets the order of serialization and deserialization of a member. - - The numeric order of serialization or deserialization. - - - - Gets or sets the name of the underlying member or parameter. - - The name of the underlying member or parameter. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the for this property. - - The for this property. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes presidence over the contract converter for the property type. - - The converter. - - - - Gets or sets the member converter. - - The member converter. - - - - Gets or sets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets or sets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets or sets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets or sets a value indicating whether this has a member attribute. - - true if has a member attribute; otherwise, false. - - - - Gets the default value. - - The default value. - - - - Gets or sets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets or sets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets or sets the property null value handling. - - The null value handling. - - - - Gets or sets the property default value handling. - - The default value handling. - - - - Gets or sets the property reference loop handling. - - The reference loop handling. - - - - Gets or sets the property object creation handling. - - The object creation handling. - - - - Gets or sets or sets the type name handling. - - The type name handling. - - - - Gets or sets a predicate used to determine whether the property should be serialize. - - A predicate used to determine whether the property should be serialize. - - - - Gets or sets a predicate used to determine whether the property should be serialized. - - A predicate used to determine whether the property should be serialized. - - - - Gets or sets an action used to set whether the property has been deserialized. - - An action used to set whether the property has been deserialized. - - - - Gets or sets the converter used when serializing the property's collection items. - - The collection's items converter. - - - - Gets or sets whether this property's collection items are serialized as a reference. - - Whether this property's collection items are serialized as a reference. - - - - Gets or sets the the type name handling used when serializing the property's collection items. - - The collection's items type name handling. - - - - Gets or sets the the reference loop handling used when serializing the property's collection items. - - The collection's items reference loop handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The type. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of propertyName and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Lookup and create an instance of the JsonConverter type described by the argument. - - The JsonConverter type to create. - Optional arguments to pass to an initializing constructor of the JsonConverter. - If null, the default constructor is used. - - - - Create a factory function that can be used to create instances of a JsonConverter described by the - argument type. The returned function can then be used to either invoke the converter's default ctor, or any - parameterized constructors by way of an object array. - - - - - Represents a trace writer that writes to memory. When the trace message limit is - reached then old trace messages will be removed as new messages are added. - - - - - Initializes a new instance of the class. - - - - - Writes the specified trace level, message and optional exception. - - The at which to write this trace. - The trace message. - The trace exception. This parameter is optional. - - - - Returns an enumeration of the most recent trace messages. - - An enumeration of the most recent trace messages. - - - - Returns a of the most recent trace messages. - - - A of the most recent trace messages. - - - - - Gets the that will be used to filter the trace messages passed to the writer. - For example a filter level of Info will exclude Verbose messages and include Info, - Warning and Error messages. - - - The that will be used to filter the trace messages passed to the writer. - - - - - Represents a method that constructs an object. - - The object type to create. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Provides methods to get attributes from a , , or . - - - - - Initializes a new instance of the class. - - The instance to get attributes for. This parameter should be a , , or . - - - - Returns a collection of all of the attributes, or an empty collection if there are no attributes. - - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. - - The type of the attributes. - When true, look up the hierarchy chain for the inherited custom attribute. - A collection of s, or an empty collection. - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Specifies how strings are escaped when writing JSON text. - - - - - Only control characters (e.g. newline) are escaped. - - - - - All non-ASCII and control characters (e.g. newline) are escaped. - - - - - HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. - - - - - Specifies type name handling options for the . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Include the .NET type name when the type of the object being serialized is not the same as its declared type. - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Adds the elements of the specified collection to the specified generic IList. - - The list to add to. - The collection of elements to add. - - - - Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer{TSource}. - - The type of the elements of source. - A sequence in which to locate a value. - The object to locate in the sequence - An equality comparer to compare values. - The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1. - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic that returns a result - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Helper method for generating a MetaObject which calls a - specific method on Dynamic, but uses one of the arguments for - the result. - - - - - Returns a Restrictions object which includes our current restrictions merged - with a restriction limiting our type - - - - - Gets a dictionary of the names and values of an Enum type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - /// if set to true then allow the member to be gotten non-publicly. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - if set to true then allow the member to be set non-publicly. - if set to true then allow the member to be set if read-only. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Nulls an empty string. - - The string. - Null if the string was null, otherwise the string unchanged. - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls results in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - A array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - diff --git a/1.5 'Kruger 60'/Third-party/Json70r1/license.txt b/1.5 'Kruger 60'/Third-party/Json70r1/license.txt deleted file mode 100644 index 8842027b..00000000 --- a/1.5 'Kruger 60'/Third-party/Json70r1/license.txt +++ /dev/null @@ -1,18 +0,0 @@ -Copyright (c) 2007 James Newton-King - -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be included in all copies -or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/1.5 'Kruger 60'/Third-party/Json70r1/readme.txt b/1.5 'Kruger 60'/Third-party/Json70r1/readme.txt deleted file mode 100644 index 24c70930..00000000 --- a/1.5 'Kruger 60'/Third-party/Json70r1/readme.txt +++ /dev/null @@ -1,54 +0,0 @@ -Json.NET - -http://james.newtonking.com/json -http://www.codeplex.com/json -https://github.com/JamesNK/Newtonsoft.Json - - -Description: - -Json.NET is a popular high-performance JSON framework for .NET - --Flexible JSON serializer for converting between .NET objects and JSON --LINQ to JSON for manually reading and writing JSON --High performance, faster than .NET's built-in JSON serializers --Write indented, easy to read JSON --Convert JSON to and from XML --Supports .NET 2, .NET 3.5, .NET 4, .NET 4.5, Silverlight, Windows Phone and Windows 8 Store - - -Documentation: - -http://james.newtonking.com/json/help/ - - -Versions: - -Json.NET has different libraries for the various .NET Framework versions. - --Net45: - .NET latest (4.5) - --Net40: - .NET 4.0 - --Net35: - .NET 3.5 - --Net20: - .NET 2.0 - --WinRT: - Windows 8 Store - --Portable45: - .NET 4.5, Windows Phone 8, Windows 8 Store, ASP.NET CoreCLR - --Portable40: - .NET 4.0, Windows Phone 8, Windows 8 Store, Silverlight 5, MonoTouch, MonoDroid - - -Notes: - -For a Compact Framework 3.5 and Silverlight 3.0 builds download Json.NET 3.5 -For a Silverlight 4.0 and Windows Phone 7 builds download Json.NET 5 \ No newline at end of file diff --git a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/Microsoft.Win32.TaskScheduler.XML b/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/Microsoft.Win32.TaskScheduler.XML deleted file mode 100644 index a21238c0..00000000 --- a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/Microsoft.Win32.TaskScheduler.XML +++ /dev/null @@ -1,6455 +0,0 @@ - - - - Microsoft.Win32.TaskScheduler - - - - - Defines the type of actions a task can perform. - - The action type is defined when the action is created and cannot be changed later. See . - - - This action fires a handler. - - - This action performs a command-line operation. For example, the action can run a script, launch an executable, or, if the name of a document is provided, find its associated application and launch the application with the document. - - - This action sends and e-mail. - - - This action shows a message box. - - - - Abstract base class that provides the common properties that are inherited by all action objects. An action object is created by the method. - - - - List of unbound values when working with Actions not associated with a registered task. - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Copies the properties from another the current instance. - - The source . - - - - Releases all resources used by this class. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Returns the action Id. - - String representation of action. - - - - Returns a that represents this action. - - The culture. - String representation of action. - - - - Creates a specialized class from a defined interface. - - Version 2.0 Action interface. - Specialized action class - - - - Creates the specified action. - - Type of the action to instantiate. - of specified type. - - - - Gets the type of the action. - - The type of the action. - - - - Gets or sets the identifier of the action. - - - - - Represents an action that fires a handler. Only available on Task Scheduler 2.0. - - - - - Creates an unbound instance of . - - - - - Creates an unbound instance of . - - Identifier of the handler class. - Addition data associated with the handler. - - - - Copies the properties from another the current instance. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets a string representation of the . - - String represention this action. - - - - Gets the name for CLSID. - - The unique identifier. - - - - - Gets or sets the identifier of the handler class. - - - - - Gets the name of the object referred to by . - - - - - Gets or sets additional data that is associated with the handler. - - - - - Represents an action that executes a command-line operation. - - - - - Creates a new instance of an that can be added to . - - - - - Creates a new instance of an that can be added to . - - Path to an executable file. - Arguments associated with the command-line operation. This value can be null. - Directory that contains either the executable file or the files that are used by the executable file. This value can be null. - - - - Copies the properties from another the current instance. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets a string representation of the . - - String represention this action. - - - - Gets or sets the identifier of the action. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the path to an executable file. - - - - - Gets or sets the arguments associated with the command-line operation. - - - - - Gets or sets the directory that contains either the executable file or the files that are used by the executable file. - - - - - An interface that exposes the ability to convert an actions functionality to a PowerShell script. - - - - - Gets the PowerShell script for an action. - - Single line PowerShell script string. - - - - Represents an action that sends an e-mail. - - - - - Creates an unbound instance of . - - - - - Creates an unbound instance of . - - Subject of the e-mail. - E-mail address that you want to send the e-mail from. - E-mail address or addresses that you want to send the e-mail to. - Body of the e-mail that contains the e-mail message. - Name of the server that you use to send e-mail from. - - - - Copies the properties from another the current instance. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets a string representation of the . - - String represention this action. - - - - Gets or sets the name of the server that you use to send e-mail from. - - - - - Gets or sets the subject of the e-mail. - - - - - Gets or sets the e-mail address or addresses that you want to send the e-mail to. - - - - - Gets or sets the e-mail address or addresses that you want to Cc in the e-mail. - - - - - Gets or sets the e-mail address or addresses that you want to Bcc in the e-mail. - - - - - Gets or sets the e-mail address that you want to reply to. - - - - - Gets or sets the e-mail address that you want to send the e-mail from. - - - - - Gets or sets the header information in the e-mail message to send. - - - - - Gets or sets the body of the e-mail that contains the e-mail message. - - - - - Gets or sets an array of file paths to be sent as attachments with the e-mail. Each item must be a value containing a path to file. - - - - - Represents an action that shows a message box when a task is activated. - - - - - Creates a new unbound instance of . - - - - - Creates a new unbound instance of . - - Message text that is displayed in the body of the message box. - Title of the message box. - - - - Copies the properties from another the current instance. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets a string representation of the . - - String represention this action. - - - - Gets or sets the title of the message box. - - - - - Gets or sets the message text that is displayed in the body of the message box. - - - - - Collection that contains the actions that are performed by the task. - - A Task Scheduler 1.0 task can only contain a single . - - - - Releases all resources used by this class. - - - - - Adds an action to the task. - - A derived class. - The bound that was added to the collection. - - - - Adds an to the task. - - Path to an executable file. - Arguments associated with the command-line operation. This value can be null. - Directory that contains either the executable file or the files that are used by the executable file. This value can be null. - The bound that was added to the collection. - - - - Adds a new instance to the task. - - Type of task to be created - Specialized instance. - - - - Clears all actions from the task. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Determines whether the specified action type is contained in this collection. - - Type of the action. - - true if the specified action type is contained in this collection; otherwise, false. - - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - The zero-based index in at which copying begins. - is null. - is less than 0. - The number of elements in the source is greater than the available space from to the end of the destination . - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Determines the index of a specific item in the . - - The id () of the action to be retrieved. - - The index of if found in the list; otherwise, -1. - - - - - Inserts an action at the specified index. - - The zero-based index at which action should be inserted. - The action to insert into the list. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Removes the action at a specified index. - - Index of action to remove. - Index out of range. - - - - Returns a that represents the actions in this collection. - - - A that represents the actions in this collection. - - - - - Retrieves an enumeration of each of the actions. - - Returns an object that implements the interface and that can iterate through the objects within the . - - - - Gets or sets a an action at the specified index. - - The zero-based index of the action to get or set. - - - - Gets or sets a specified action from the collection. - - - The . - - The id () of the action to be retrieved. - - Specialized instance. - - - - - Mismatching Id for action and lookup. - - - - Gets or sets the identifier of the principal for the task. - - Not supported under Task Scheduler 1.0. - - - - Gets the number of actions in the collection. - - - - - Gets or sets an XML-formatted version of the collection. - - - - - Releases all resources used by this class. - - - - - The GlobalLock function locks a global memory object and returns a pointer to the first byte of the object's memory block. - GlobalLock function increments the lock count by one. - Needed for the clipboard functions when getting the data from IDataObject - - - - - - - The GlobalUnlock function decrements the lock count associated with a memory object. - - - - - - - PathType - - - - - The file path - - - - - The log name - - - - - SessionAuthentication - - - - - The default - - - - - The negotiate - - - - - The kerberos - - - - - The NTLM - - - - - - - - - - The application - - - - - The system - - - - - The custom - - - - - - - - - - The circular - - - - - The automatic backup - - - - - The retain - - - - - - - - - - The administrative - - - - - The operational - - - - - The analytical - - - - - The debug - - - - - Defines the standard keywords that are attached to events by the event provider. For more information about keywords, see . - - - - - The audit failure - - - - - The audit success - - - - - The correlation hint - - - - - The correlation hint2 - - - - - The event log classic - - - - - The none - - - - - The response time - - - - - The SQM - - - - - The wdi context - - - - - The wdi diagnostic - - - - - Represents a placeholder (bookmark) within an event stream. You can use the placeholder to mark a position and return to this position in a stream of events. An instance of this object can be obtained from an EventRecord object, in which case it corresponds to the position of that event record. - - - - - Initializes a new instance of the class. - - The information. - The context. - - - - Gets the object data. - - The information. - The context. - - - - Represents a keyword for an event. Keywords are defined in an event provider and are used to group the event with other similar events (based on the usage of the events). - - - - - Gets the display name. - - - The display name. - - - - - Gets the name. - - - The name. - - - - - Gets the value. - - - The value. - - - - - Contains an event level that is defined in an event provider. The level signifies the severity of the event. - - - - - Gets the display name. - - - The display name. - - - - - Gets the name. - - - The name. - - - - - Gets the value. - - - The value. - - - - - EventLogConfiguration - - - - - Initializes a new instance of the class. - - Name of the log. - - - - Initializes a new instance of the class. - - Name of the log. - The session. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Saves the changes. - - - - - Gets a value indicating whether this instance is classic log. - - - true if this instance is classic log; otherwise, false. - - - - - Gets or sets a value indicating whether this instance is enabled. - - - true if this instance is enabled; otherwise, false. - - - - - Gets or sets the log file path. - - - The log file path. - - - - - Gets the log isolation. - - - The log isolation. - - - - - Gets or sets the log mode. - - - The log mode. - - - - - Gets the name of the log. - - - The name of the log. - - - - - Gets the type of the log. - - - The type of the log. - - - - - Gets or sets the maximum size in bytes. - - - The maximum size in bytes. - - - - - Gets the name of the owning provider. - - - The name of the owning provider. - - - - - Gets the size of the provider buffer. - - - The size of the provider buffer. - - - - - Gets the provider control unique identifier. - - - The provider control unique identifier. - - - - - Gets or sets the provider keywords. - - - The provider keywords. - - - - - Gets the provider latency. - - - The provider latency. - - - - - Gets or sets the provider level. - - - The provider level. - - - - - Gets the provider maximum number of buffers. - - - The provider maximum number of buffers. - - - - - Gets the provider minimum number of buffers. - - - The provider minimum number of buffers. - - - - - Gets the provider names. - - - The provider names. - - - - - Gets or sets the security descriptor. - - - The security descriptor. - - - - - Allows you to access the run-time properties of active event logs and event log files. These properties include the number of events in the log, the size of the log, a value that determines whether the log is full, and the last time the log was written to or accessed. - - - - - Gets the attributes. - - - The attributes. - - - - - Gets the creation time. - - - The creation time. - - - - - Gets the size of the file. - - - The size of the file. - - - - - Gets the is log full. - - - The is log full. - - - - - Gets the last access time. - - - The last access time. - - - - - Gets the last write time. - - - The last write time. - - - - - Gets the oldest record number. - - - The oldest record number. - - - - - Gets the record count. - - - The record count. - - - - - Represents a link between an event provider and an event log that the provider publishes events into. This object cannot be instantiated. - - - - - Gets the display name. - - - The display name. - - - - - Gets a value indicating whether this instance is imported. - - - true if this instance is imported; otherwise, false. - - - - - Gets the name of the log. - - - The name of the log. - - - - - Contains an array of strings that represent XPath queries for elements in the XML representation of an event, which is based on the Event Schema. The queries in this object are used to extract values from the event. - - - - - Initializes a new instance of the class. - - The property queries. - - - - Releases unmanaged and - optionally - managed resources. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Contains the properties of an event instance for an event that is received from an EventLogReader object. The event properties provide information about the event such as the name of the computer where the event was logged and the time that the event was created. - - - - - Releases unmanaged and - optionally - managed resources. - - - - - Formats the description. - - - - - - Formats the description. - - The values. - - - - - Gets the property values. - - The property selector. - - - - - To the XML. - - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Gets the activity identifier. - - - The activity identifier. - - - - - Gets the bookmark. - - - The bookmark. - - - - - Gets the container log. - - - The container log. - - - - - Gets the identifier. - - - The identifier. - - - - - Gets the keywords. - - - The keywords. - - - - - Gets the keywords display names. - - - The keywords display names. - - - - - Gets the level. - - - The level. - - - - - Gets the display name of the level. - - - The display name of the level. - - - - - Gets the name of the log. - - - The name of the log. - - - - - Gets the name of the machine. - - - The name of the machine. - - - - - Gets the matched query ids. - - - The matched query ids. - - - - - Gets the opcode. - - - The opcode. - - - - - Gets the display name of the opcode. - - - The display name of the opcode. - - - - - Gets the process identifier. - - - The process identifier. - - - - - Gets the properties. - - - The properties. - - - - - Gets the provider identifier. - - - The provider identifier. - - - - - Gets the name of the provider. - - - The name of the provider. - - - - - Gets the qualifiers. - - - The qualifiers. - - - - - Gets the record identifier. - - - The record identifier. - - - - - Gets the related activity identifier. - - - The related activity identifier. - - - - - Gets the task. - - - The task. - - - - - Gets the display name of the task. - - - The display name of the task. - - - - - Gets the thread identifier. - - - The thread identifier. - - - - - Gets the time created. - - - The time created. - - - - - Gets the user identifier. - - - The user identifier. - - - - - Gets the version. - - - The version. - - - - - - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - The server. - - - - Initializes a new instance of the class. - - The server. - The domain. - The user. - The password. - Type of the log on. - - - - Cancels the current operations. - - - - - Clears the log. - - Name of the log. - - - - Clears the log. - - Name of the log. - The backup path. - logName - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Exports the log. - - The path. - Type of the path. - The query. - The target file path. - - - - Exports the log. - - The path. - Type of the path. - The query. - The target file path. - if set to true [tolerate query errors]. - - path - or - targetFilePath - - pathType - - - - Exports the log and messages. - - The path. - Type of the path. - The query. - The target file path. - - - - Exports the log and messages. - - The path. - Type of the path. - The query. - The target file path. - if set to true [tolerate query errors]. - The target culture information. - - - - Gets the log information. - - Name of the log. - Type of the path. - - logName - - - - Gets the log names. - - - - - - Gets the provider names. - - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - - Gets the global session. - - - The global session. - - - - - Contains the status code or error code for a specific event log. This status can be used to determine if the event log is available for an operation. - - - - - Gets the name of the log. - - - The name of the log. - - - - - Gets the status code. - - - The status code. - - - - - Contains the metadata (properties and settings) for an event that is defined in an event provider. - - - - - Gets the description. - - - The description. - - - - - Gets the identifier. - - - The identifier. - - - - - Gets the keywords. - - - The keywords. - - - - - Gets the level. - - - The level. - - - - - Gets the log link. - - - The log link. - - - - - Gets the opcode. - - - The opcode. - - - - - Gets the task. - - - The task. - - - - - Gets the template. - - - The template. - - - - - Gets the version. - - - The version. - - - - - - - - - - Gets the display name. - - - The display name. - - - - - Gets the name. - - - The name. - - - - - Gets the value. - - - The value. - - - - - Contains the value of an event property that is specified by the event provider when the event is published. - - - - - Gets the value. - - - The value. - - - - - - - - - - Gets the display name. - - - The display name. - - - - - Gets the event unique identifier. - - - The event unique identifier. - - - - - Gets the name. - - - The name. - - - - - Gets the value. - - - The value. - - - - - - - - - - Initializes a new instance of the class. - - Name of the provider. - - - - Initializes a new instance of the class. - - Name of the provider. - The session. - The target culture information. - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Releases unmanaged and - optionally - managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Gets the display name. - - - The display name. - - - - - Gets the events. - - - The events. - - - - - Gets the help link. - - - The help link. - - - - - Gets the identifier. - - - The identifier. - - - - - Gets the keywords. - - - The keywords. - - - - - Gets the levels. - - - The levels. - - - - - Gets the log links. - - - The log links. - - - - - Gets the message file path. - - - The message file path. - - - - - Gets the name. - - - The name. - - - - - Gets the opcodes. - - - The opcodes. - - - - - Gets the parameter file path. - - - The parameter file path. - - - - - Gets the resource file path. - - - The resource file path. - - - - - Gets the tasks. - - - The tasks. - - - - - Historical event information for a task. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Compares the current object with another object of the same type. - - An object to compare with this object. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: Value Meaning Less than zero This object is less than the other parameter.Zero This object is equal to other. Greater than zero This object is greater than other. - - - - - Gets the activity id. - - - - - Gets the event id. - - - - - Gets the underlying . - - - - - Gets the level. - - - - - Gets the op code. - - - - - Gets the process id. - - - - - Gets the record id. - - - - - Gets the task category. - - - - - Gets the task path. - - - - - Gets the time created. - - - - - Gets the user id. - - - - - Gets the version. - - - - - An enumerator over a task's history of events. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Advances the enumerator to the next element of the collection. - - - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - The collection was modified after the enumerator was created. - - - - - Seeks the specified bookmark. - - The bookmark. - The offset. - - - - Seeks the specified origin. - - The origin. - The offset. - - - - Gets the element in the collection at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator. - - - - - Gets the element in the collection at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator. - - - - - Historical event log for a task. Only available for Windows Vista and Windows Server 2008 and later systems. - - - - - Initializes a new instance of the class. - - The task path. This can be retrieved using the property. - Thrown when instantiated on an OS prior to Windows Vista. - - - - Initializes a new instance of the class. - - Name of the machine. - The task path. This can be retrieved using the property. - The domain. - The user. - The password. - Thrown when instantiated on an OS prior to Windows Vista. - - - - Initializes a new instance of the class that looks at all task events from a specified time. - - The start time. - Name of the task. - Name of the machine (optional). - The domain. - The user. - The password. - - - - Initializes a new instance of the class. - - Name of the task. - The event i ds. - The start time. - Name of the machine (optional). - The domain. - The user. - The password. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through the collection. - - if set to true [reverse]. - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the total number of events for this task. - - - - - Specifies the access control rights that can be applied to Task Scheduler tasks. - - - - Specifies the right to exert full control over a task folder or task, and to modify access control and audit rules. This value represents the right to do anything with a task and is the combination of all rights in this enumeration. - - - Specifies the right to create tasks and folders, and to add or remove data from tasks. This right includes the following rights: . - - - Specifies the right to open and copy folders or tasks as read-only. This right includes the following rights: . - - - Specifies the right run tasks. This right includes the following rights: . - - - The right to wait on a task. - - - The right to change the owner of a task. - - - Specifies the right to change the security and audit rules associated with a task or folder. - - - The right to open and copy the access rules and audit rules for a task. - - - The right to delete a folder or task. - - - Specifies the right to open and write file system attributes to a folder or file. This does not include the ability to write data, extended attributes, or access and audit rules. - - - Specifies the right to open and copy file system attributes from a folder or task. For example, this value specifies the right to view the file creation or modified date. This does not include the right to read data, extended file system attributes, or access and audit rules. - - - Specifies the right to delete a folder and any tasks contained within that folder. - - - Specifies the right to run a task. - - - Specifies the right to open and write extended file system attributes to a folder or file. This does not include the ability to write data, attributes, or access and audit rules. - - - Specifies the right to open and copy extended system attributes from a folder or task. For example, this value specifies the right to view author and content information. This does not include the right to read data, system attributes, or access and audit rules. - - - Specifies the right to append data to the end of a file. - - - Specifies the right to open and write to a file or folder. This does not include the right to open and write file system attributes, extended file system attributes, or access and audit rules. - - - Specifies the right to open and copy a task or folder. This does not include the right to read file system attributes, extended file system attributes, or access and audit rules. - - - - Represents a set of access rights allowed or denied for a user or group. This class cannot be inherited. - - - - - Initializes a new instance of the class, specifying the user or group the rule applies to, the access rights, and whether the specified access rights are allowed or denied. - - The user or group the rule applies to. Must be of type or a type such as that can be converted to type . - A bitwise combination of values specifying the rights allowed or denied. - One of the values specifying whether the rights are allowed or denied. - - - - Initializes a new instance of the class, specifying the name of the user or group the rule applies to, the access rights, and whether the specified access rights are allowed or denied. - - The name of the user or group the rule applies to. - A bitwise combination of values specifying the rights allowed or denied. - One of the values specifying whether the rights are allowed or denied. - - - - Gets the rights allowed or denied by the access rule. - - - A bitwise combination of values indicating the rights allowed or denied by the access rule. - - - - - Represents a set of access rights to be audited for a user or group. This class cannot be inherited. - - - - - Initializes a new instance of the class, specifying the user or group to audit, the rights to audit, and whether to audit success, failure, or both. - - The user or group the rule applies to. Must be of type or a type such as that can be converted to type . - A bitwise combination of values specifying the kinds of access to audit. - The audit flags. - - - - Gets the access rights affected by the audit rule. - - - A bitwise combination of values that indicates the rights affected by the audit rule. - - objects are immutable. You can create a new audit rule representing a different user, different rights, or a different combination of AuditFlags values, but you cannot modify an existing audit rule. - - - - Represents the Windows access control security for a Task Scheduler task. This class cannot be inherited. - - - A TaskSecurity object specifies access rights for a Task Scheduler task, and also specifies how access attempts are audited. Access rights to the task are expressed as rules, with each access rule represented by a object. Each auditing rule is represented by a object. - This mirrors the underlying Windows security system, in which each securable object has at most one discretionary access control list (DACL) that controls access to the secured object, and at most one system access control list (SACL) that specifies which access attempts are audited. The DACL and SACL are ordered lists of access control entries (ACE) that specify access and auditing for users and groups. A or object might represent more than one ACE. - Note - A object can represent a local task or a Task Scheduler task. Windows access control security is meaningful only for Task Scheduler tasks. - The TaskSecurity, , and classes hide the implementation details of ACLs and ACEs. They allow you to ignore the seventeen different ACE types and the complexity of correctly maintaining inheritance and propagation of access rights. These objects are also designed to prevent the following common access control errors: - - Creating a security descriptor with a null DACL. A null reference to a DACL allows any user to add access rules to an object, potentially creating a denial-of-service attack. A new TaskSecurity object always starts with an empty DACL, which denies all access for all users. - Violating the canonical ordering of ACEs. If the ACE list in the DACL is not kept in the canonical order, users might inadvertently be given access to the secured object. For example, denied access rights must always appear before allowed access rights. TaskSecurity objects maintain the correct order internally. - Manipulating security descriptor flags, which should be under resource manager control only. - Creating invalid combinations of ACE flags. - Manipulating inherited ACEs. Inheritance and propagation are handled by the resource manager, in response to changes you make to access and audit rules. - Inserting meaningless ACEs into ACLs. - - The only capabilities not supported by the .NET security objects are dangerous activities that should be avoided by the majority of application developers, such as the following: - - Low-level tasks that are normally performed by the resource manager. - Adding or removing access control entries in ways that do not maintain the canonical ordering. - - To modify Windows access control security for a task, use the method to get the TaskSecurity object. Modify the security object by adding and removing rules, and then use the method to reattach it. - Important: Changes you make to a TaskSecurity object do not affect the access levels of the task until you call the method to assign the altered security object to the task. - To copy access control security from one task to another, use the method to get a TaskSecurity object representing the access and audit rules for the first task, then use the method, or a constructor that accepts a TaskSecurity object, to assign those rules to the second task. - Users with an investment in the security descriptor definition language (SDDL) can use the method to set access rules for a task, and the method to obtain a string that represents the access rules in SDDL format. This is not recommended for new development. - - - - - Initializes a new instance of the class with default values. - - - - - Initializes a new instance of the class with the specified sections of the access control security rules from the specified task. - - The task. - The sections of the ACL to retrieve. - - - - Initializes a new instance of the class with the specified sections of the access control security rules from the specified task. - - The folder. - The sections of the ACL to retrieve. - - - - Creates a new access control rule for the specified user, with the specified access rights, access control, and flags. - - An that identifies the user or group the rule applies to. - A bitwise combination of values specifying the access rights to allow or deny, cast to an integer. - Meaningless for tasks, because they have no hierarchy. - Meaningless for tasks, because they have no hierarchy. - Meaningless for tasks, because they have no hierarchy. - One of the values specifying whether the rights are allowed or denied. - - The object that this method creates. - - - - - Searches for a matching rule with which the new rule can be merged. If none are found, adds the new rule. - - The access control rule to add. - - - - Searches for an audit rule with which the new rule can be merged. If none are found, adds the new rule. - - The audit rule to add. The user specified by this rule determines the search. - - - - Creates a new audit rule, specifying the user the rule applies to, the access rights to audit, and the outcome that triggers the audit rule. - - An that identifies the user or group the rule applies to. - A bitwise combination of values specifying the access rights to audit, cast to an integer. - Meaningless for tasks, because they have no hierarchy. - Meaningless for tasks, because they have no hierarchy. - Meaningless for tasks, because they have no hierarchy. - One of the values specifying whether to audit successful access, failed access, or both. - - A object representing the specified audit rule for the specified user. The return type of the method is the base class, , but the return value can be cast safely to the derived class. - - - - - Searches for an access control rule with the same user and (allow or deny) as the specified rule, and with compatible inheritance and propagation flags; if such a rule is found, the rights contained in the specified access rule are removed from it. - - A that specifies the user and to search for, and a set of inheritance and propagation flags that a matching rule, if found, must be compatible with. Specifies the rights to remove from the compatible rule, if found. - true if a compatible rule is found; otherwise false. - - - - Searches for all access control rules with the same user and (allow or deny) as the specified rule and, if found, removes them. - - A that specifies the user and to search for, and a set of inheritance and propagation flags that a matching rule, if found, must be compatible with. Any rights specified by this rule are ignored. - - - - Searches for an access control rule that exactly matches the specified rule and, if found, removes it. - - The to remove. - - - - Searches for an audit control rule with the same user as the specified rule, and with compatible inheritance and propagation flags; if a compatible rule is found, the rights contained in the specified rule are removed from it. - - A that specifies the user to search for, and a set of inheritance and propagation flags that a matching rule, if found, must be compatible with. Specifies the rights to remove from the compatible rule, if found. - true if a compatible rule is found; otherwise false. - - - - Searches for all audit rules with the same user as the specified rule and, if found, removes them. - - A that specifies the user to search for. Any rights specified by this rule are ignored. - - - - Searches for an audit rule that exactly matches the specified rule and, if found, removes it. - - The to remove. - - - - Removes all access control rules with the same user as the specified rule, regardless of , and then adds the specified rule. - - The to add. The user specified by this rule determines the rules to remove before this rule is added. - - - - Removes all access control rules with the same user and (allow or deny) as the specified rule, and then adds the specified rule. - - The to add. The user and of this rule determine the rules to remove before this rule is added. - - - - Removes all audit rules with the same user as the specified rule, regardless of the value, and then adds the specified rule. - - The to add. The user specified by this rule determines the rules to remove before this rule is added. - - - - Saves the specified sections of the security descriptor associated with this object to permanent storage. We recommend that the values of the parameters passed to the constructor and persist methods be identical. - - The task used to retrieve the persisted information. - One of the enumeration values that specifies the sections of the security descriptor (access rules, audit rules, owner, primary group) of the securable object to save. - - - - Saves the specified sections of the security descriptor associated with this object to permanent storage. We recommend that the values of the parameters passed to the constructor and persist methods be identical. - - The task folder used to retrieve the persisted information. - One of the enumeration values that specifies the sections of the security descriptor (access rules, audit rules, owner, primary group) of the securable object to save. - - - - Saves the specified sections of the security descriptor associated with this object to permanent storage. We recommend that the values of the parameters passed to the constructor and persist methods be identical. For more information, see Remarks. - - The name used to retrieve the persisted information. - One of the enumeration values that specifies the sections of the security descriptor (access rules, audit rules, owner, primary group) of the securable object to save. - - - - Gets the enumeration that the class uses to represent access rights. - - A object representing the enumeration. - - - - Gets the type that the TaskSecurity class uses to represent access rules. - - A object representing the class. - - - - Gets the type that the TaskSecurity class uses to represent audit rules. - - A object representing the class. - - - - Provides access to the Task Scheduler service for managing registered tasks. - - - - - Initial call for a Fluent model of creating a task. - - The path of the program to run. - An instance. - - - - Creates a new instance of a TaskService connecting to the local machine as the current user. - - - - - Initializes a new instance of the class. - - The name of the computer that you want to connect to. If the this parameter is empty, then this will connect to the local computer. - The user name that is used during the connection to the computer. If the user is not specified, then the current token is used. - The domain of the user specified in the parameter. - The password that is used to connect to the computer. If the user name and password are not specified, then the current token is used. - If set to true force Task Scheduler 1.0 compatibility. - - - - Creates a new task, registers the taks, and returns the instance. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The to determine when to run the task. - The to determine what happens when the task is triggered. - The user credentials used to register the task. - The password for the userId used to register the task. - A value that defines what logon technique is used to run the registered task. - - A instance of the registered task. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Finds all tasks matching a name or standard wildcards. - - Name of the task in regular expression form. - if set to true search all sub folders. - An array of containing all tasks matching . - - - - Finds a task given a name and standard wildcards. - - The task name. This can include the wildcards * or ?. - if set to true search all sub folders. - A if one matches , otherwise NULL. - - - - Gets the path to a folder of registered tasks. - - The path to the folder to retrieve. Do not use a backslash following the last folder name in the path. The root task folder is specified with a backslash (\). An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - instance for the requested folder. - Requested folder was not found. - Folder other than the root (\) was requested on a system not supporting Task Scheduler 2.0. - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Gets a collection of running tasks. - - True to include hidden tasks. - instance with the list of running tasks. - - - - Gets the task with the specified path. - - The task path. - The task. - - - - Signals the object that initialization is starting. - - - - - Signals the object that initialization is complete. - - - - - Returns an empty task definition object to be filled in with settings and properties and then registered using the method. - - A instance for setting properties. - - - - Returns a populated with the properties defined in an XML file. - - The XML file to use as input. - A instance. - Importing from an XML file is only supported under Task Scheduler 2.0. - - - - Starts the Task Scheduler UI for the OS hosting the assembly if the session is running in interactive mode. - - - - - Releases the unmanaged resources used by the and optionally releases the managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Connects this instance of the class to a running Task Scheduler. - - - - - Finds the task in folder. - - The folder. - The wildcard expression to compare task names with. - The results. - if set to true recurse folders. - True if any tasks are found, False if not. - - - - Gets or sets a value indicating whether to allow tasks from later OS versions with new properties to be retrieved as read only tasks. - - true if allow read only tasks; otherwise, false. - - - - Gets a which enumerates all the tasks in all folders. - - - A for all instances. - - - - - Gets a Boolean value that indicates if you are connected to the Task Scheduler service. - - - - - Gets the name of the domain to which the computer is connected. - - - - - Gets the name of the user that is connected to the Task Scheduler service. - - - - - Gets the highest version of Task Scheduler that a computer supports. - - - - - Gets the library version. This is the highest version supported by the local library. Tasks cannot be created using any compatibilty level higher than this version. - - - The library version. - - - - - Gets the root ("\") folder. For Task Scheduler 1.0, this is the only folder. - - - - - Gets or sets the name of the computer that is running the Task Scheduler service that the user is connected to. - - - - - Gets or sets the user account domain to be used when connecting to the . - - The user account domain. - - - - Gets or sets the user name to be used when connecting to the . - - The user name. - - - - Gets or sets the user password to be used when connecting to the . - - The user password. - - - - Gets a value indicating whether the component can raise an event. - - - true if the component can raise events; otherwise, false. The default is true. - - - - - Fluent helper class. Not intended for use. - - - - - Fluent helper class. Not intended for use. - - - - - Fluent helper class. Not intended for use. - - - - - Adds arguments to the . - - The arguments. - instance. - - - - Adds a working directory to the . - - The directory. - instance. - - - - Adds a trigger that executes every day or week. - - The interval of days or weeks. - instance. - - - - Adds a trigger that executes monthly on certain days of the week. - - The days of the week on which to run. - instance. - - - - Adds a trigger that executes monthly on specific days. - - The months of the year in which to run. - instance. - - - - Adds a trigger that executes once at a specific time. - - instance. - - - - Adds a trigger that executes at system startup. - - instance. - - - - Adds a trigger that executes when system is idle. - - instance. - - - - Adds a trigger that executes once at specified state change. - - Type of the change. - - instance. - - - - - Adds a trigger that executes at logon of all users. - - instance. - - - - Adds a trigger that executes at logon of a specific user. - - The user id. - instance. - - - - Adds a trigger that executes at task registration. - - instance. - - - - Fluent helper class. Not intended for use. - - - - - Updates a monthly trigger to specify the days of the month on which it will run. - - The days. - - instance. - - - - - Fluent helper class. Not intended for use. - - - - - Updates a monthly trigger to specify in which weeks of the month it will run. - - The week. - - instance. - - - - - Updates a monthly trigger to specify the months of the year in which it will run. - - The month of the year. - - instance. - - - - - Fluent helper class. Not intended for use. - - - - - Fluent helper class. Not intended for use. - - - - - Specifies a date on which a trigger will start. - - The year. - The month. - The day. - - instance. - - - - - Specifies a date and time on which a trigger will start. - - The year. - The month. - The day. - The hour. - The min. - The sec. - - instance. - - - - - Specifies a date and time on which a trigger will start. - - A string representing a DateTime and parsable via . - - instance. - - - - - Specifies a date and time on which a trigger will start. - - The DateTime value. - - instance. - - - - - Specifies a date on which a trigger will no longer run. - - The year. - The month. - The day. - - instance. - - - - - Specifies a date and time on which a trigger will no longer run. - - The year. - The month. - The day. - The hour. - The min. - The sec. - - instance. - - - - - Specifies a date and time on which a trigger will no longer run. - - A string representing a DateTime and parsable via . - - instance. - - - - - Specifies a date and time on which a trigger will no longer run. - - The DateTime value. - - instance. - - - - - Specifies a repetion interval for the trigger. - - The interval span. - instance. - - - - Specifies a repetion interval for the trigger. - - The interval span string. Must be parsable by . - instance. - - - - Specifies the maximum amount of time to repeat the execution of a trigger. - - The duration span. - instance. - - - - Specifies the maximum amount of time to repeat the execution of a trigger. - - The duration span string. Must be parsable by . - instance. - - - - Assigns the name of the task and registers it. - - The name. - A registerd instance. - - - - Updates a weekly trigger to specify the days of the week on which it will run. - - The days of the week. - - instance. - - - - - Fluent helper class. Not intended for use. - - - - - Specifies that an Every target uses days as the interval. - - instance. - - - - Specifies that an Every target uses weeks as the interval. - - instance. - - - - Functions to provide localized strings for enumerated types and values. - - - - - Gets a string representing the localized value of the provided enum. - - The enum value. - A localized string, if available. - - - - Pair of name and value. - - - - - Initializes a new instance of the class. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the name. - - - The name. - - - - - Gets or sets the value. - - - The value. - - - - - Contains a collection of name-value pairs. - - - - - Copies current to another. - - The destination collection. - - - - Releases all resources used by this class. - - - - - Adds an item to the . - - The object to add to the . - - - - Adds a name-value pair to the collection. - - The name associated with a value in a name-value pair. - The value associated with a name in a name-value pair. - - - - Removes a selected name-value pair from the collection. - - Index of the pair to remove. - - - - Clears the entire collection of name-value pairs. - - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the collection enumerator for the name-value collection. - - An for the collection. - - - - Gets the number of items in the collection. - - - - - Gets a collection of the names. - - - The names. - - - - - Gets a collection of the values. - - - The values. - - - - - Gets the value of the item at the specified index. - - The index of the item being requested. - The value of the name-value pair at the specified index. - - - - Gets the value of the item with the specified key. - - Key to get the value for. - Value for the key, or null if not found. - - - - Impersonation of a user. Allows to execute code under another - user context. - Please note that the account that instantiates the Impersonator class - needs to have the 'Act as part of operating system' privilege set. - - - - - Constructor. Starts the impersonation with the given credentials. - Please note that the account that instantiates the Impersonator class - needs to have the 'Act as part of operating system' privilege set. - - The name of the user to act as. - The domain name of the user to act as. - The password of the user to act as. - - - - Abstract class for throwing a method specific exception. - - - - Defines the minimum supported version for the action not allowed by this exception. - - - - Gets a message that describes the current exception. - - - - - Gets the minimum supported TaskScheduler version required for this method or property. - - - - - Thrown when the calling method is not supported by Task Scheduler 1.0. - - - - - Thrown when the calling method is not supported by Task Scheduler 2.0. - - - - - Thrown when the calling method is not supported by Task Scheduler versions prior to the one specified. - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Call a COM object. - - - - - Looks up a localized string similar to Start a program. - - - - - Looks up a localized string similar to Send an e-mail. - - - - - Looks up a localized string similar to Display a message. - - - - - Looks up a localized string similar to {3} {0:P}. - - - - - Looks up a localized string similar to every day. - - - - - Looks up a localized string similar to {1} {0}. - - - - - Looks up a localized string similar to .. - - - - - Looks up a localized string similar to {0} {1}. - - - - - Looks up a localized string similar to -. - - - - - Looks up a localized string similar to ,. - - - - - Looks up a localized string similar to every month. - - - - - Looks up a localized string similar to Multiple actions defined. - - - - - Looks up a localized string similar to Multiple triggers defined. - - - - - Looks up a localized string similar to {0}. - - - - - Looks up a localized string similar to Author. - - - - - Looks up a localized string similar to Disabled. - - - - - Looks up a localized string similar to Queued. - - - - - Looks up a localized string similar to Ready. - - - - - Looks up a localized string similar to Running. - - - - - Looks up a localized string similar to Unknown. - - - - - Looks up a localized string similar to any user. - - - - - Looks up a localized string similar to At system startup. - - - - - Looks up a localized string similar to Custom Trigger. - - - - - Looks up a localized string similar to At {0:t} every day. - - - - - Looks up a localized string similar to At {0:t} every {1} days. - - - - - Looks up a localized string similar to indefinitely. - - - - - Looks up a localized string similar to for a duration of {0}. - - - - - Looks up a localized string similar to Trigger expires at {0:G}.. - - - - - Looks up a localized string similar to Custom event filter. - - - - - Looks up a localized string similar to On event - Log: {0}. - - - - - Looks up a localized string similar to , Source: {0}. - - - - - Looks up a localized string similar to , EventID: {0}. - - - - - Looks up a localized string similar to When computer is idle. - - - - - Looks up a localized string similar to At log on of {0}. - - - - - Looks up a localized string similar to At {0:t} on day {1} of {2}, starting {0:d}. - - - - - Looks up a localized string similar to At {0:t} on the {1} {2:f} each {3}, starting {0:d}. - - - - - Looks up a localized string similar to When the task is created or modified. - - - - - Looks up a localized string similar to After triggered, repeat every {0} {1}.. - - - - - Looks up a localized string similar to On local connection to {0}.. - - - - - Looks up a localized string similar to On local disconnect from {0}.. - - - - - Looks up a localized string similar to On remote connection to {0}.. - - - - - Looks up a localized string similar to On remote disconnect from {0}.. - - - - - Looks up a localized string similar to On workstation lock of {0}.. - - - - - Looks up a localized string similar to On workstation unlock of {0}.. - - - - - Looks up a localized string similar to user session of {0}. - - - - - Looks up a localized string similar to At {0:t} on {0:d}. - - - - - Looks up a localized string similar to At startup. - - - - - Looks up a localized string similar to Custom Trigger. - - - - - Looks up a localized string similar to Daily. - - - - - Looks up a localized string similar to On an event. - - - - - Looks up a localized string similar to On idle. - - - - - Looks up a localized string similar to At log on. - - - - - Looks up a localized string similar to Monthly. - - - - - Looks up a localized string similar to Monthly. - - - - - Looks up a localized string similar to At task creation/modification. - - - - - Looks up a localized string similar to On state change. - - - - - Looks up a localized string similar to One time. - - - - - Looks up a localized string similar to Weekly. - - - - - Looks up a localized string similar to At {0:t} every {1} of every week, starting {0:d}. - - - - - Looks up a localized string similar to At {0:t} every {1} of every {2} weeks, starting {0:d}. - - - - - Looks up a localized string similar to every. - - - - - Looks up a localized string similar to fifth. - - - - - Looks up a localized string similar to first. - - - - - Looks up a localized string similar to fourth. - - - - - Looks up a localized string similar to last. - - - - - Looks up a localized string similar to second. - - - - - Looks up a localized string similar to third. - - - - Defines what versions of Task Scheduler or the AT command that the task is compatible with. - - - The task is compatible with the AT command. - - - The task is compatible with Task Scheduler 1.0 (Windows Server™ 2003, Windows® XP, or Windows® 2000). - - - The task is compatible with Task Scheduler 2.0 (Windows Vista™, Windows Server™ 2008). - - - The task is compatible with Task Scheduler 2.1 (Windows® 7, Windows Server™ 2008 R2). - - - The task is compatible with Task Scheduler 2.2 (Windows® 8.x, Windows Server™ 2012). - - - Defines how the Task Scheduler service creates, updates, or disables the task. - - - The Task Scheduler service registers the task as a new task. - - - The Task Scheduler service either registers the task as a new task or as an updated version if the task already exists. Equivalent to Create | Update. - - - The Task Scheduler service registers the disabled task. A disabled task cannot run until it is enabled. For more information, see Enabled Property of TaskSettings and Enabled Property of RegisteredTask. - - - The Task Scheduler service is prevented from adding the allow access-control entry (ACE) for the context principal. When the TaskFolder.RegisterTaskDefinition or TaskFolder.RegisterTask functions are called with this flag to update a task, the Task Scheduler service does not add the ACE for the new context principal and does not remove the ACE from the old context principal. - - - The Task Scheduler service creates the task, but ignores the registration triggers in the task. By ignoring the registration triggers, the task will not execute when it is registered unless a time-based trigger causes it to execute on registration. - - - The Task Scheduler service registers the task as an updated version of an existing task. When a task with a registration trigger is updated, the task will execute after the update occurs. - - - The Task Scheduler service checks the syntax of the XML that describes the task but does not register the task. This constant cannot be combined with the Create, Update, or CreateOrUpdate values. - - - Defines how the Task Scheduler handles existing instances of the task when it starts a new instance of the task. - - - Starts new instance while an existing instance is running. - - - Starts a new instance of the task after all other instances of the task are complete. - - - Does not start a new instance if an existing instance of the task is running. - - - Stops an existing instance of the task before it starts a new instance. - - - Defines what logon technique is required to run a task. - - - The logon method is not specified. Used for non-NT credentials. - - - Use a password for logging on the user. The password must be supplied at registration time. - - - Use an existing interactive token to run a task. The user must log on using a service for user (S4U) logon. When an S4U logon is used, no password is stored by the system and there is no access to either the network or to encrypted files. - - - User must already be logged on. The task will be run only in an existing interactive session. - - - Group activation. The groupId field specifies the group. - - - Indicates that a Local System, Local Service, or Network Service account is being used as a security context to run the task. - - - First use the interactive token. If the user is not logged on (no interactive token is available), then the password is used. The password must be specified when a task is registered. This flag is not recommended for new tasks because it is less reliable than Password. - - - Defines which privileges must be required for a secured task. - - - Required to create a primary token. User Right: Create a token object. - - - Required to assign the primary token of a process. User Right: Replace a process-level token. - - - Required to lock physical pages in memory. User Right: Lock pages in memory. - - - Required to increase the quota assigned to a process. User Right: Adjust memory quotas for a process. - - - Required to read unsolicited input from a terminal device. User Right: Not applicable. - - - Required to create a computer account. User Right: Add workstations to domain. - - - This privilege identifies its holder as part of the trusted computer base. Some trusted protected subsystems are granted this privilege. User Right: Act as part of the operating system. - - - Required to perform a number of security-related functions, such as controlling and viewing audit messages. This privilege identifies its holder as a security operator. User Right: Manage auditing and the security log. - - - Required to take ownership of an object without being granted discretionary access. This privilege allows the owner value to be set only to those values that the holder may legitimately assign as the owner of an object. User Right: Take ownership of files or other objects. - - - Required to load or unload a device driver. User Right: Load and unload device drivers. - - - Required to gather profiling information for the entire system. User Right: Profile system performance. - - - Required to modify the system time. User Right: Change the system time. - - - Required to gather profiling information for a single process. User Right: Profile single process. - - - Required to increase the base priority of a process. User Right: Increase scheduling priority. - - - Required to create a paging file. User Right: Create a pagefile. - - - Required to create a permanent object. User Right: Create permanent shared objects. - - - Required to perform backup operations. This privilege causes the system to grant all read access control to any file, regardless of the access control list (ACL) specified for the file. Any access request other than read is still evaluated with the ACL. This privilege is required by the RegSaveKey and RegSaveKeyExfunctions. The following access rights are granted if this privilege is held: READ_CONTROL, ACCESS_SYSTEM_SECURITY, FILE_GENERIC_READ, FILE_TRAVERSE. User Right: Back up files and directories. - - - Required to perform restore operations. This privilege causes the system to grant all write access control to any file, regardless of the ACL specified for the file. Any access request other than write is still evaluated with the ACL. Additionally, this privilege enables you to set any valid user or group security identifier (SID) as the owner of a file. This privilege is required by the RegLoadKey function. The following access rights are granted if this privilege is held: WRITE_DAC, WRITE_OWNER, ACCESS_SYSTEM_SECURITY, FILE_GENERIC_WRITE, FILE_ADD_FILE, FILE_ADD_SUBDIRECTORY, DELETE. User Right: Restore files and directories. - - - Required to shut down a local system. User Right: Shut down the system. - - - Required to debug and adjust the memory of a process owned by another account. User Right: Debug programs. - - - Required to generate audit-log entries. Give this privilege to secure servers. User Right: Generate security audits. - - - Required to modify the nonvolatile RAM of systems that use this type of memory to store configuration information. User Right: Modify firmware environment values. - - - Required to receive notifications of changes to files or directories. This privilege also causes the system to skip all traversal access checks. It is enabled by default for all users. User Right: Bypass traverse checking. - - - Required to shut down a system by using a network request. User Right: Force shutdown from a remote system. - - - Required to undock a laptop. User Right: Remove computer from docking station. - - - Required for a domain controller to use the LDAP directory synchronization services. This privilege allows the holder to read all objects and properties in the directory, regardless of the protection on the objects and properties. By default, it is assigned to the Administrator and LocalSystem accounts on domain controllers. User Right: Synchronize directory service data. - - - Required to mark user and computer accounts as trusted for delegation. User Right: Enable computer and user accounts to be trusted for delegation. - - - Required to enable volume management privileges. User Right: Manage the files on a volume. - - - Required to impersonate. User Right: Impersonate a client after authentication. Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP with SP2, and Windows 2000 with SP4. - - - Required to create named file mapping objects in the global namespace during Terminal Services sessions. This privilege is enabled by default for administrators, services, and the local system account. User Right: Create global objects. Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP with SP2, and Windows 2000 with SP4. - - - Required to access Credential Manager as a trusted caller. User Right: Access Credential Manager as a trusted caller. - - - Required to modify the mandatory integrity level of an object. User Right: Modify an object label. - - - Required to allocate more memory for applications that run in the context of users. User Right: Increase a process working set. - - - Required to adjust the time zone associated with the computer's internal clock. User Right: Change the time zone. - - - Required to create a symbolic link. User Right: Create symbolic links. - - - Defines the types of process security identifier (SID) that can be used by tasks. These changes are used to specify the type of process SID in the IPrincipal2 interface. - - - No changes will be made to the process token groups list. - - - A task SID that is derived from the task name will be added to the process token groups list, and the token default discretionary access control list (DACL) will be modified to allow only the task SID and local system full control and the account SID read control. - - - A Task Scheduler will apply default settings to the task process. - - - Defines how a task is run. - - - The task is run with all flags ignored. - - - The task is run as the user who is calling the Run method. - - - The task is run regardless of constraints such as "do not run on batteries" or "run only if idle". - - - The task is run using a terminal server session identifier. - - - The task is run using a security identifier. - - - Defines LUA elevation flags that specify with what privilege level the task will be run. - - - Tasks will be run with the least privileges. - - - Tasks will be run with the highest privileges. - - - Defines what kind of Terminal Server session state change you can use to trigger a task to start. These changes are used to specify the type of state change in the SessionStateChangeTrigger. - - - Terminal Server console connection state change. For example, when you connect to a user session on the local computer by switching users on the computer. - - - Terminal Server console disconnection state change. For example, when you disconnect to a user session on the local computer by switching users on the computer. - - - Terminal Server remote connection state change. For example, when a user connects to a user session by using the Remote Desktop Connection program from a remote computer. - - - Terminal Server remote disconnection state change. For example, when a user disconnects from a user session while using the Remote Desktop Connection program from a remote computer. - - - Terminal Server session locked state change. For example, this state change causes the task to run when the computer is locked. - - - Terminal Server session unlocked state change. For example, this state change causes the task to run when the computer is unlocked. - - - Defines the different states that a registered task can be in. - - - The state of the task is unknown. - - - The task is registered but is disabled and no instances of the task are queued or running. The task cannot be run until it is enabled. - - - Instances of the task are queued. - - - The task is ready to be executed, but no instances are queued or running. - - - One or more instances of the task is running. - - - - Specifies how the Task Scheduler performs tasks when the computer is in an idle condition. For information about idle conditions, see Task Idle Conditions. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets a value that indicates the amount of time that the computer must be in an idle state before the task is run. - - - A value that indicates the amount of time that the computer must be in an idle state before the task is run. The minimum value is one minute. If this value is TimeSpan.Zero, then the delay will be set to the default of 10 minutes. - - - - - Gets or sets a Boolean value that indicates whether the task is restarted when the computer cycles into an idle condition more than once. - - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will terminate the task if the idle condition ends before the task is completed. - - - - - Gets or sets a value that indicates the amount of time that the Task Scheduler will wait for an idle condition to occur. If no value is specified for this property, then the Task Scheduler service will wait indefinitely for an idle condition to occur. - - - A value that indicates the amount of time that the Task Scheduler will wait for an idle condition to occur. The minimum time allowed is 1 minute. If this value is TimeSpan.Zero, then the delay will be set to the default of 1 hour. - - - - - Specifies the task settings the Task scheduler will use to start task during Automatic maintenance. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the amount of time after which the Task scheduler attempts to run the task during emergency Automatic maintenance, if the task failed to complete during regular Automatic maintenance. The minimum value is one day. The value of the property should be greater than the value of the property. If the deadline is not specified the task will not be started during emergency Automatic maintenance. - - Property set for a task on a Task Scheduler version prior to 2.2. - - - - Gets or sets a valud indicating whether the Task Scheduler must start the task during the Automatic maintenance in exclusive mode. The exclusivity is guaranteed only between other maintenance tasks and doesn't grant any ordering priority of the task. If exclusivity is not specified, the task is started in parallel with other maintenance tasks. - - Property set for a task on a Task Scheduler version prior to 2.2. - - - - Gets or sets the amount of time the task needs to be started during Automatic maintenance. The minimum value is one minute. - - Property set for a task on a Task Scheduler version prior to 2.2. - - - - Provides the settings that the Task Scheduler service uses to obtain a network profile. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets a GUID value that identifies a network profile. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the name of a network profile. The name is used for display purposes. - - Not supported under Task Scheduler 1.0. - - - - Provides the methods to get information from and control a running task. - - - - - Provides the methods that are used to run the task immediately, get any running instances of the task, get or set the credentials that are used to register the task, and the properties that describe the task. - - - - - Releases all resources used by this class. - - - - - Exports the task to the specified file in XML. - - Name of the output file. - - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the task described by the current object. - - A object that encapsulates the access control rules for the current task. - - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the task described by the current object. - - One of the values that specifies which group of access control entries to retrieve. - A object that encapsulates the access control rules for the current task. - - - - Gets all instances of the currently running registered task. - - A with all instances of current task. - Not supported under Task Scheduler 1.0. - - - - Gets the times that the registered task is scheduled to run during a specified time. - - The starting time for the query. - The ending time for the query. - The requested number of runs. A value of 0 will return all times requested. - The scheduled times that the task will run. - - - - Gets the security descriptor for the task. Not available to Task Scheduler 1.0. - - Section(s) of the security descriptor to return. - The security descriptor for the task. - Not supported under Task Scheduler 1.0. - - - - Updates the task with any changes made to the by calling from the currently registered folder using the currently registered name. - - Thrown if task was previously registered with a password. - - - - Runs the registered task immediately. - - The parameters used as values in the task actions. - A instance that defines the new instance of the task. - - - - Runs the registered task immediately using specified flags and a session identifier. - - Defines how the task is run. - The terminal server session in which you want to start the task. - The user for which the task runs. - The parameters used as values in the task actions. - A instance that defines the new instance of the task. - Not supported under Task Scheduler 1.0. - - - - Applies access control list (ACL) entries described by a object to the file described by the current object. - - A object that describes an access control list (ACL) entry to apply to the current task. - - - - Sets the security descriptor for the task. Not available to Task Scheduler 1.0. - - The security descriptor for the task. - Section(s) of the security descriptor to set. - Not supported under Task Scheduler 1.0. - - - - Dynamically tries to load the assembly for the editor and displays it as editable for this task. - - true if editor returns with Ok response; false otherwise. - The Microsoft.Win32.TaskSchedulerEditor.dll assembly must reside in the same directory as the Microsoft.Win32.TaskScheduler.dll or in the GAC. - - - - Shows the property page for the task (v1.0 only). - - - - - Stops the registered task immediately. - - - The Stop method stops all instances of the task. - System account users can stop a task, users with Administrator group privileges can stop a task, and if a user has rights to execute and read a task, then the user can stop the task. A user can stop the task instances that are running under the same credentials as the user account. In all other cases, the user is denied access to stop the task. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets the ITaskDefinition for a V2 task and prevents the errors that come when connecting remotely to a higher version of the Task Scheduler. - - The local task service. - The task instance. - if set to true this method will throw an exception if unable to get the task definition. - - A valid ITaskDefinition that should not throw errors on the local instance. - - Unable to get a compatible task definition for this version of the library. - - - - Gets the definition of the task. - - - - - Gets or sets a Boolean value that indicates if the registered task is enabled. - - As of version 1.8.1, under V1 systems (prior to Vista), this property will immediately update the Disabled state and re-save the current task. If changes have been made to the , then those changes will be saved. - - - - Gets an instance of the parent folder. - - - A object representing the parent folder of this task. - - - - - Gets a value indicating whether this task instance is active. - - - true if this task instance is active; otherwise, false. - - - - - Gets the time the registered task was last run. - - Returns if there are no prior run times. - - - - Gets the results that were returned the last time the registered task was run. - - - - - Gets the name of the registered task. - - - - - Gets the time when the registered task is next scheduled to run. - - Returns if there are no future run times. - - Potentially breaking change in release 1.8.2. For Task Scheduler 2.0, the return value prior to 1.8.2 would be Dec 30, 1899 - if there were no future run times. For 1.0, that value would have been DateTime.MinValue. In release 1.8.2 and later, all - versions will return DateTime.MinValue if there are no future run times. While this is different from the native 2.0 - library, it was deemed more appropriate to have consistency between the two libraries and with other .NET libraries. - - - - - Gets the number of times the registered task has missed a scheduled run. - - Not supported under Task Scheduler 1.0. - - - - Gets the path to where the registered task is stored. - - - - - Gets a value indicating whether this task is read only. Only available if is true. - - - true if read only; otherwise, false. - - - - - Gets or sets the security descriptor for the task. - - The security descriptor. - - - - Gets the operational state of the registered task. - - - - - Gets or sets the that manages this task. - - The task service. - - - - Gets the XML-formatted registration information for the registered task. - - - - - Releases all resources used by this class. - - - - - Refreshes all of the local instance variables of the task. - - - - - Gets the name of the current action that the running task is performing. - - - - - Gets the process ID for the engine (process) which is running the task. - - Not supported under Task Scheduler 1.0. - - - - Gets the GUID identifier for this instance of the task. - - - - - Gets the operational state of the running task. - - - - - Contains information about the compatibility of the current configuration with a specified version. - - - - - Gets the compatibility level. - - - The compatibility level. - - - - - Gets the property name with the incompatibility. - - - The property name. - - - - - Gets the reason for the imcompatibility. - - - The reason. - - - - - Defines all the components of a task, such as the task settings, triggers, actions, and registration information. - - - - - Determines whether this can use the Unified Scheduling Engine or if it contains unsupported properties. - - if set to true throws an with details about unsupported properties in the Data property of the exception. - true if this this can use the Unified Scheduling Engine; otherwise, false. - - - - Releases all resources used by this class. - - - - - Gets the Xml Schema file for V1 tasks. - - The for V1 tasks. - An object containing the Xml Schema for V1 tasks. - - - - Validates the current . - - if set to true throw a with details about invalid properties. - true if current is valid; false if not. - - - - Gets the lowest supported version. - - The output list. - - - - - Gets a collection of actions that are performed by the task. - - - - - Gets or sets the data that is associated with the task. This data is ignored by the Task Scheduler service, but is used by third-parties who wish to extend the task format. - - - - - Gets the lowest supported version that supports the settings for this . - - - - - Gets the principal for the task that provides the security credentials for the task. - - - - - Gets a class instance of registration information that is used to describe a task, such as the description of the task, the author of the task, and the date the task is registered. - - - - - Gets the settings that define how the Task Scheduler service performs the task. - - - - - Gets a collection of triggers that are used to start a task. - - - - - Gets or sets the XML-formatted definition of the task. - - - - - Provides the security credentials for a principal. These security credentials define the security context for the tasks that are associated with the principal. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Validates the supplied account against the supplied . - - The user or group account name. - The SID type for the process. - true if supplied account can be used for the supplied SID type. - - - - Gets or sets the name of the principal that is displayed in the Task Scheduler UI. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the identifier of the user group that is required to run the tasks that are associated with the principal. Setting this property to something other than a null or empty string, will set the property to NULL and will set the property to TaskLogonType.Group; - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the identifier of the principal. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the security logon method that is required to run the tasks that are associated with the principal. - - TaskLogonType values of Group, None, or S4UNot are not supported under Task Scheduler 1.0. - - - - Gets or sets the task process security identifier (SID) type. - - - One of the enumeration constants. - - Setting this value appears to break the Task Scheduler MMC and does not output in XML. Removed to prevent problems. - Not supported under Task Scheduler versions prior to 2.1. - - - - Gets the security credentials for a principal. These security credentials define the security context for the tasks that are associated with the principal. - - Setting this value appears to break the Task Scheduler MMC and does not output in XML. Removed to prevent problems. - - - - Gets or sets the identifier that is used to specify the privilege level that is required to run the tasks that are associated with the principal. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the user identifier that is required to run the tasks that are associated with the principal. Setting this property to something other than a null or empty string, will set the property to NULL; - - - - - List of security credentials for a principal under version 1.3 of the Task Scheduler. These security credentials define the security context for the tasks that are associated with the principal. - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - is not a valid index in the . - - - - The is read-only. - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - is not a valid index in the . - - - - The is read-only. - - - - - Adds an item to the . - - The object to add to the . - - The is read-only. - - - - - Removes all items from the . - - - The is read-only. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies to. - - The array. - Index of the array. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - The is read-only. - - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets or sets the element at the specified index. - - - The element at the specified index. - - - is not a valid index in the . - - - - The property is set and the is read-only. - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - - Enumerates the privileges set for a principal under version 1.3 of the Task Scheduler. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Advances the enumerator to the next element of the collection. - - - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - The collection was modified after the enumerator was created. - - - - - Gets the element in the collection at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator. - - - - - Provides the administrative information that can be used to describe the task. This information includes details such as a description of the task, the author of the task, the date the task is registered, and the security descriptor of the task. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the author of the task. - - - - - Gets or sets the date and time when the task is registered. - - This property cannot be set on an unregistered task under Task Scheduler 1.0. - - - - Gets or sets the description of the task. - - - - - Gets or sets any additional documentation for the task. - - - - - Gets or sets the security descriptor of the task. - - The security descriptor. - - - - Gets or sets the security descriptor of the task. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets where the task originated from. For example, a task may originate from a component, service, application, or user. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the URI of the task. - - Not supported under Task Scheduler 1.0. - Note: Breaking change in version 2.0. This property was previously of type . It was found that in Windows 8, - many of the native tasks use this property in a string format rather than in a URI format. - - - - Gets or sets the version number of the task. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets an XML-formatted version of the registration information for the task. - - - - - Provides the settings that the Task Scheduler service uses to perform the task. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets a Boolean value that indicates that the task can be started by using either the Run command or the Context menu. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the task may be terminated by using TerminateProcess. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets an integer value that indicates which version of Task Scheduler a task is compatible with. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the amount of time that the Task Scheduler will wait before deleting the task after it expires. If no value is specified for this property, then the Task Scheduler service will not delete the task. - - - Gets and sets the amount of time that the Task Scheduler will wait before deleting the task after it expires. For Task Scheduler 1.0, this property will return a TimeSpan of 1 second if the task is set to delete when done. For either version, TimeSpan.Zero will indicate that the task should not be deleted. - - - A task expires after the end boundary has been exceeded for all triggers associated with the task. The end boundary for a trigger is specified by the EndBoundary property of all trigger types. - - - - - Gets or sets a Boolean value that indicates that the task will not be started if the computer is running on battery power. - - - - - Gets or sets a Boolean value that indicates that the task will not be started if the task is triggered to run in a Remote Applications Integrated Locally (RAIL) session. - - Property set for a task on a Task Scheduler version prior to 2.1. - - - - Gets or sets a Boolean value that indicates that the task is enabled. The task can be performed only when this setting is TRUE. - - - - - Gets or sets the amount of time that is allowed to complete the task. By default, a task will be stopped 72 hours after it starts to run. - - - The amount of time that is allowed to complete the task. When this parameter is set to , the execution time limit is infinite. - - - If a task is started on demand, the ExecutionTimeLimit setting is bypassed. Therefore, a task that is started on demand will not be terminated if it exceeds the ExecutionTimeLimit. - - - - - Gets or sets a Boolean value that indicates that the task will not be visible in the UI by default. - - - - - Gets or sets the information that specifies how the Task Scheduler performs tasks when the computer is in an idle state. - - - - - Gets or sets the information that the Task Scheduler uses during Automatic maintenance. - - - - - Gets or sets the policy that defines how the Task Scheduler handles multiple instances of the task. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the network settings object that contains a network profile identifier and name. If the RunOnlyIfNetworkAvailable property of ITaskSettings is true and a network propfile is specified in the NetworkSettings property, then the task will run only if the specified network profile is available. - - - - - Gets or sets the priority level of the task. - - - The priority. - - Value set to AboveNormal or BelowNormal on Task Scheduler 1.0. - - - - Gets or sets the number of times that the Task Scheduler will attempt to restart the task. - - - The number of times that the Task Scheduler will attempt to restart the task. If this property is set, the property must also be set. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a value that specifies how long the Task Scheduler will attempt to restart the task. - - - A value that specifies how long the Task Scheduler will attempt to restart the task. If this property is set, the property must also be set. The maximum time allowed is 31 days, and the minimum time allowed is 1 minute. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will run the task only if the computer is in an idle condition. - - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will run the task only if the user is logged on (v1.0 only) - - Property set for a task on a Task Scheduler version other than 1.0. - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will run the task only when a network is available. - - - - - Gets or sets a Boolean value that indicates that the Task Scheduler can start the task at any time after its scheduled time has passed. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the task will be stopped if the computer switches to battery power. - - - - - Gets or sets a Boolean value that indicates that the Unified Scheduling Engine will be utilized to run this task. - - Property set for a task on a Task Scheduler version prior to 2.1. - - - - Gets or sets a boolean value that indicates whether the task is automatically disabled every time Windows starts. - - Property set for a task on a Task Scheduler version prior to 2.2. - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will wake the computer when it is time to run the task. - - - - - Gets or sets an XML-formatted definition of the task settings. - - - - - Provides the methods that are used to register (create) tasks in the folder, remove tasks from the folder, and create or remove subfolders from the folder. - - - - - Releases all resources used by this class. - - - - - Compares the current object with another object of the same type. - - An object to compare with this object. - - A value that indicates the relative order of the objects being compared. The return value has the following meanings: Value Meaning Less than zero This object is less than the parameter.Zero This object is equal to . Greater than zero This object is greater than . - - - - - Creates a folder for related tasks. Not available to Task Scheduler 1.0. - - The name used to identify the folder. If "FolderName\SubFolder1\SubFolder2" is specified, the entire folder tree will be created if the folders do not exist. This parameter can be a relative path to the current instance. The root task folder is specified with a backslash (\). An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The security descriptor associated with the folder. - A instance that represents the new subfolder. - - - - Creates a folder for related tasks. Not available to Task Scheduler 1.0. - - The name used to identify the folder. If "FolderName\SubFolder1\SubFolder2" is specified, the entire folder tree will be created if the folders do not exist. This parameter can be a relative path to the current instance. The root task folder is specified with a backslash (\). An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The task security associated with the folder. - A instance that represents the new subfolder. - - - - Creates a folder for related tasks. Not available to Task Scheduler 1.0. - - The name used to identify the folder. If "FolderName\SubFolder1\SubFolder2" is specified, the entire folder tree will be created if the folders do not exist. This parameter can be a relative path to the current instance. The root task folder is specified with a backslash (\). An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The security descriptor associated with the folder. - A instance that represents the new subfolder. - Not supported under Task Scheduler 1.0. - - - - Deletes a subfolder from the parent folder. Not available to Task Scheduler 1.0. - - The name of the subfolder to be removed. The root task folder is specified with a backslash (\). This parameter can be a relative path to the folder you want to delete. An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - Set this value to false to avoid having an exception called if the folder does not exist. - Not supported under Task Scheduler 1.0. - - - - Deletes a task from the folder. - - The name of the task that is specified when the task was registered. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - Set this value to false to avoid having an exception called if the task does not exist. - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the task described by the current object. - - A object that encapsulates the access control rules for the current folder. - - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the task folder described by the current object. - - One of the values that specifies which group of access control entries to retrieve. - A object that encapsulates the access control rules for the current folder. - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Gets the security descriptor for the folder. Not available to Task Scheduler 1.0. - - Section(s) of the security descriptor to return. - The security descriptor for the folder. - - - - Gets the security descriptor for the folder. Not available to Task Scheduler 1.0. - - Section(s) of the security descriptor to return. - The security descriptor for the folder. - Not supported under Task Scheduler 1.0. - - - - Gets a collection of all the tasks in the folder whose name matches the optional . - - The optional name filter expression. - Collection of all matching tasks. - - - - Imports a from an XML file. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The file containing the XML-formatted definition of the task. - A instance that represents the new task. - Importing from an XML file is only supported under Task Scheduler 2.0. - - - - Registers (creates) a new task in the folder using XML to define the task. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - An XML-formatted definition of the task. - A union of flags. - The user credentials used to register the task. - The password for the userId used to register the task. - A value that defines what logon technique is used to run the registered task. - The security descriptor associated with the registered task. You can specify the access control list (ACL) in the security descriptor for a task in order to allow or deny certain users and groups access to a task. - A instance that represents the new task. - - - - Registers (creates) a task in a specified location using a instance to define a task. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The of the registered task. - A instance that represents the new task. - - - - Registers (creates) a task in a specified location using a instance to define a task. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The of the registered task. - A union of flags. - The user credentials used to register the task. - The password for the userId used to register the task. - A value that defines what logon technique is used to run the registered task. - The security descriptor associated with the registered task. You can specify the access control list (ACL) in the security descriptor for a task in order to allow or deny certain users and groups access to a task. - - A instance that represents the new task. This will return null if is set to ValidateOnly and there are no validation errors. - - - Path;Task names may not include any characters which are invalid for file names. - or - Path;Task names ending with a period followed by three or fewer characters cannot be retrieved due to a bug in the native library. - - This LogonType is not supported on Task Scheduler 1.0. - or - Security settings are not available on Task Scheduler 1.0. - or - Registration triggers are not available on Task Scheduler 1.0. - or - Xml validation not available on Task Scheduler 1.0. - - - - Applies access control list (ACL) entries described by a object to the file described by the current object. - - A object that describes an access control list (ACL) entry to apply to the current folder. - - - - Sets the security descriptor for the folder. Not available to Task Scheduler 1.0. - - The security descriptor for the folder. - Section(s) of the security descriptor to set. - - - - Sets the security descriptor for the folder. Not available to Task Scheduler 1.0. - - The security descriptor for the folder. - Section(s) of the security descriptor to set. - Not supported under Task Scheduler 1.0. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Enumerates the tasks in the specified folder and its child folders. - - The folder in which to start enumeration. - A that can be used to iterate through the tasks. - - - - Gets a which enumerates all the tasks in this and all subfolders. - - - A for all instances. - - - - - Gets the name that is used to identify the folder that contains a task. - - - - - Gets the parent folder of this folder. - - - The parent folder, or null if this folder is the root folder. - - - - - Gets the path to where the folder is stored. - - - - - Gets or sets the security descriptor of the task. - - The security descriptor. - - - - Gets all the subfolders in the folder. - - - - - Gets a collection of all the tasks in the folder. - - - - - Gets or sets the that manages this task. - - The task service. - - - - Contains all the tasks that are registered. - - Potentially breaking change in 1.6.2 and later where under V1 the list previously included the '.job' extension on the task name. This has been removed so that it is consistent with V2. - - - - Releases all resources used by this class. - - - - - Gets the collection enumerator for the register task collection. - - An for this collection. - - - - Determines whether the specified task exists. - - The name of the task. - true if task exists; otherwise, false. - - - - Gets the number of registered tasks in the collection. - - - - - Gets or sets the regular expression filter for task names. - - The regular expression filter. - - - - Gets the specified registered task from the collection. - - The index of the registered task to be retrieved. - A instance that contains the requested context. - - - - Gets the named registered task from the collection. - - The name of the registered task to be retrieved. - A instance that contains the requested context. - - - - Internal constructor - - TaskService instance - The filter. - - - - Releases all resources used by this class. - - - - - Moves to the next task. See MoveNext for more information. - - true if next task found, false if no more tasks. - - - - Reset task enumeration. See Reset for more information. - - - - - Retrieves the current task. See for more information. - - - - - Releases all resources used by this class. - - - - - Collection of running tasks. - - - - - Releases all resources used by this class. - - - - - Gets an IEnumerator instance for this collection. - - An enumerator. - - - - Gets the number of registered tasks in the collection. - - - - - Gets the specified running task from the collection. - - The index of the running task to be retrieved. - A instance. - - - - Releases all resources used by this class. - - - - - Releases all resources used by this class. - - - - - Provides information and control for a collection of folders that contain tasks. - - - - - Adds an item to the . - - The object to add to the . - This action is technically unfeasable due to limitations of the underlying library. Use the instead. - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the ICollection to an Array, starting at a particular Array index. - - The one-dimensional Array that is the destination of the elements copied from . The Array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - - Releases all resources used by this class. - - - - - Determines whether the specified folder exists. - - The path of the folder. - true if folder exists; otherwise, false. - - - - Gets a list of items in a collection. - - Enumerated list of items in the collection. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Gets the number of items in the collection. - - - - - Gets a value indicating whether the is read-only. - - - - - Gets the specified folder from the collection. - - The index of the folder to be retrieved. - A TaskFolder instance that represents the requested folder. - - - - Gets the specified folder from the collection. - - The path of the folder to be retrieved. - A TaskFolder instance that represents the requested folder. - - - - Releases all resources used by this class. - - - - - Defines the methods that are called by the Task Scheduler service to manage a COM handler. - - - This interface must be implemented for a task to perform a COM handler action. When the Task Scheduler performs a COM handler action, it creates and activates the handler and calls the methods of this interface as needed. For information on specifying a COM handler action, see the class. - - - - - Called to start the COM handler. This method must be implemented by the handler. - - An IUnkown interface that is used to communicate back with the Task Scheduler. - The arguments that are required by the handler. These arguments are defined in the property of the COM handler action. - - - - Called to stop the COM handler. This method must be implemented by the handler. - - The return code that the Task Schedule will raise as an event when the COM handler action is completed. - - - - Called to pause the COM handler. This method is optional and should only be implemented to give the Task Scheduler the ability to pause and restart the handler. - - - - - Called to resume the COM handler. This method is optional and should only be implemented to give the Task Scheduler the ability to resume the handler. - - - - - Provides the methods that are used by COM handlers to notify the Task Scheduler about the status of the handler. - - - - - Tells the Task Scheduler about the percentage of completion of the COM handler. - - A value that indicates the percentage of completion for the COM handler. - The message that is displayed in the Task Scheduler UI. - - - - Tells the Task Scheduler that the COM handler is completed. - - The error code that the Task Scheduler will raise as an event. - - - - Abstract base class which provides the common properties that are inherited by all trigger classes. A trigger can be created using the or the method. - - - - - Creates a trigger using a cron string. - - String using cron defined syntax for specifying a time interval. See remarks for syntax. - Array of representing the specified cron string. - Unsupported cron string. - - NOTE: This method does not support all combinations of cron strings. Please test extensively before use. Please post an issue with any syntax that should work, but doesn't. - Currently the cronString only supports numbers and not any of the weekday or month strings. Please use numeric equivalent. - This section borrows liberally from the site http://www.nncron.ru/help/EN/working/cron-format.htm. The cron format consists of five fields separated by white spaces: - - <Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week> - - Each item has bounds as defined by the following: - - * * * * * - | | | | | - | | | | +---- Day of the Week (range: 1-7, 1 standing for Monday) - | | | +------ Month of the Year (range: 1-12) - | | +-------- Day of the Month (range: 1-31) - | +---------- Hour (range: 0-23) - +------------ Minute (range: 0-59) - - Any of these 5 fields may be an asterisk (*). This would mean the entire range of possible values, i.e. each minute, each hour, etc. - Any of the first 4 fields can be a question mark ("?"). It stands for the current time, i.e. when a field is processed, the current time will be substituted for the question mark: minutes for Minute field, hour for Hour field, day of the month for Day of month field and month for Month field. - Any field may contain a list of values separated by commas, (e.g. 1,3,7) or a range of values (two integers separated by a hyphen, e.g. 1-5). - After an asterisk (*) or a range of values, you can use character / to specify that values are repeated over and over with a certain interval between them. For example, you can write "0-23/2" in Hour field to specify that some action should be performed every two hours (it will have the same effect as "0,2,4,6,8,10,12,14,16,18,20,22"); value "*/4" in Minute field means that the action should be performed every 4 minutes, "1-30/3" means the same as "1,4,7,10,13,16,19,22,25,28". - - - - In testing and may change. Do not use until officially introduced into library. - - - - Creates a new that is an unbound copy of this instance. - - - A new that is an unbound copy of this instance. - - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Releases all resources used by this class. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Sets the repetition. - - The amount of time between each restart of the task. The maximum time allowed is 31 days, and the minimum time allowed is 1 minute. - The duration of how long the pattern is repeated. The minimum time allowed is one minute. If TimeSpan.Zero is specified, the pattern is repeated indefinitely. - if set to true the running instance of the task is stopped at the end of repetition pattern duration. - - - - Returns a string representing this trigger. - - String value of trigger. - - - - Returns a that represents this trigger in a specific language. - - The language of the resulting string. - String value of trigger. - - - - Creates the specified trigger. - - Type of the trigger to instantiate. - of specified type. - - - - Checks the bind value for any conversion. - - The key (property) name. - The value. - - - Assigns the unbound TriggerData structure to the V1 trigger instance. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets the best time span string. - - The to display. - Either the full string representation created by TimeSpan2 or the default TimeSpan representation. - - - - Gets or sets a Boolean value that indicates whether the trigger is enabled. - - - - - Gets or sets the date and time when the trigger is deactivated. The trigger cannot start the task after it is deactivated. - - - Version 1 (1.1 on all systems prior to Vista) of the native library only allows for the Day, Month and Year values of the structure. - Version 2 (1.2 or higher) of the native library only allows for both date and time and all values. However, the user interface and methods - will always show the time translated to local time. The library makes every attempt to maintain the Kind value. When using the UI elements provided in the TaskSchedulerEditor - library, the "Synchronize across time zones" checkbox will be checked if the Kind is Local or Utc. If the Kind is Unspecified and the user selects the checkbox, the Kind will - be changed to Utc and the time adjusted from the value displayed as the local time. - - - - - - Gets or sets the maximum amount of time that the task launched by this trigger is allowed to run. Not available with Task Scheduler 1.0. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the identifier for the trigger. Cannot set with Task Scheduler 1.0. - - Not supported under Task Scheduler 1.0. - - - - Gets a instance that indicates how often the task is run and how long the repetition pattern is repeated after the task is started. - - - - - Gets or sets the date and time when the trigger is activated. - - - Version 1 (1.1 on all systems prior to Vista) of the native library only allows for values where the is unspecified. - If the DateTime value Kind is then it will be used as is. If the DateTime value Kind is then it will be - converted to the local time and then used. - - Version 2 (1.2 or higher) of the native library only allows for all values. However, the user interface and methods - will always show the time translated to local time. The library makes every attempt to maintain the Kind value. When using the UI elements provided in the TaskSchedulerEditor - library, the "Synchronize across time zones" checkbox will be checked if the Kind is Local or Utc. If the Kind is Unspecified and the user selects the checkbox, the Kind will - be changed to Utc and the time adjusted from the value displayed as the local time. - - Under Version 2, when converting the string used in the native library for this value (ITrigger.Startboundary) this library will behave as follows: - - YYYY-MM-DDTHH:MM:SS format uses DateTimeKind.Unspecified and the time specified. - YYYY-MM-DDTHH:MM:SSZ format uses DateTimeKind.Utc and the time specified as the GMT time. - YYYY-MM-DDTHH:MM:SS±HH:MM format uses DateTimeKind.Local and the time specified in that time zone. - - - - - - - Gets the type of the trigger. - - The of the trigger. - - - In testing and may change. Do not use until officially introduced into library. - - - Values for days of the week (Monday, Tuesday, etc.) - - - Sunday - - - Monday - - - Tuesday - - - Wednesday - - - Thursday - - - Friday - - - Saturday - - - All days - - - Values for months of the year (January, February, etc.) - - - January - - - February - - - March - - - April - - - May - - - June - - - July - - - August - - - September - - - October - - - November - - - December - - - All months - - - Defines the type of triggers that can be used by tasks. - - - Triggers the task when a specific event occurs. Version 1.2 only. - - - Triggers the task at a specific time of day. - - - Triggers the task on a daily schedule. - - - Triggers the task on a weekly schedule. - - - Triggers the task on a monthly schedule. - - - Triggers the task on a monthly day-of-week schedule. - - - Triggers the task when the computer goes into an idle state. - - - Triggers the task when the task is registered. Version 1.2 only. - - - Triggers the task when the computer boots. - - - Triggers the task when a specific user logs on. - - - Triggers the task when a specific user session state changes. Version 1.2 only. - - - Triggers the custom trigger. Version 1.3 only. - - - Values for week of month (first, second, ..., last) - - - First week of the month - - - Second week of the month - - - Third week of the month - - - Fourth week of the month - - - Last week of the month - - - Every week of the month - - - - Interface that categorizes the trigger as a calendar trigger. - - - - - Interface for triggers that support a delay. - - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Interface for triggers that support a user identifier. - - - - - Gets or sets the user for the . - - - - - Represents a trigger that starts a task when the system is booted. - - - - - Creates an unbound instance of a . - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - Not supported under Task Scheduler 1.0. - - - - Represents a custom trigger. This class is based on undocumented features and may change. - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Updates custom properties from XML provided by definition. - - The XML from the TaskDefinition. - - - - Clones this instance. - - This method will always throw an exception. - CustomTrigger cannot be cloned due to OS restrictions. - - - - Gets the properties from the Xml definition if possible. - - - - - Gets the name of the custom trigger type. - - - The name of the XML element representing this custom trigger. - - - - - Gets a value that indicates the amount of time between the trigger events and when the task is started. - - This value cannot be set. - - - - Represents a trigger that starts a task based on a daily schedule. For example, the task starts at a specific time every day, every other day, every third day, and so on. - - - - - Creates an unbound instance of a . - - Interval between the days in the schedule. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Sets or retrieves the interval between the days in the schedule. - - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Represents a trigger that starts a task when a system event occurs. Not available on Task Scheduler 1.0. - - - - - Creates an unbound instance of a . - - - - - Initializes an unbound instance of the class and sets a basic event. - - The event's log. - The event's source. Can be null. - The event's id. Can be null. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Builds an event log XML query string based on the input parameters. - - The event's log. - The event's source. Can be null. - The event's id. Can be null. - XML query string. - log - - - - Gets basic event information. - - The event's log. - The event's source. Can be null. - The event's id. Can be null. - true if subscription represents a basic event, false if not. - - - - Sets the subscription for a basic event. This will replace the contents of the property and clear all entries in the property. - - The event's log. - The event's source. Can be null. - The event's id. Can be null. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - - - - Gets or sets the XPath query string that identifies the event that fires the trigger. - - - - - Gets a collection of named XPath queries. Each query in the collection is applied to the last matching event XML returned from the subscription query specified in the Subscription property. The name of the query can be used as a variable in the message of a action. - - - - - Represents a trigger that starts a task when the computer goes into an idle state. For information about idle conditions, see Task Idle Conditions. - - - - - Creates an unbound instance of a . - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Represents a trigger that starts a task when a user logs on. When the Task Scheduler service starts, all logged-on users are enumerated and any tasks registered with logon triggers that match the logged on user are run. Not available on Task Scheduler 1.0. - - - - - Creates an unbound instance of a . - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets The identifier of the user. For example, "MyDomain\MyName" or for a local account, "Administrator". - This property can be in one of the following formats: - • User name or SID: The task is started when the user logs on to the computer. - • NULL: The task is started when any user logs on to the computer. - - If you want a task to be triggered when any member of a group logs on to the computer rather than when a specific user logs on, then do not assign a value to the LogonTrigger.UserId property. Instead, create a logon trigger with an empty LogonTrigger.UserId property and assign a value to the principal for the task using the Principal.GroupId property. - Not supported under Task Scheduler 1.0. - - - - Represents a trigger that starts a task on a monthly day-of-week schedule. For example, the task starts on every first Thursday, May through October. - - - - - Creates an unbound instance of a . - - The days of the week. - The months of the year. - The weeks of the month. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Reads the subclass XML for V1 streams. - - The reader. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Writes the subclass XML for V1 streams. - - The writer. - - - - Gets or sets the days of the week during which the task runs. - - - - - Gets or sets the months of the year during which the task runs. - - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the task runs on the last week of the month. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the weeks of the month during which the task runs. - - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Represents a trigger that starts a job based on a monthly schedule. For example, the task starts on specific days of specific months. - - - - - Creates an unbound instance of a . - - The day of the month. - The months of the year. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Converts an array of bit indices into a mask with bits turned ON at every index - contained in the array. Indices must be from 1 to 32 and bits are numbered the same. - - An array with an element for each bit of the mask which is ON. - An interger to be interpreted as a mask. - - - - Convert an integer representing a mask to an array where each element contains the index - of a bit that is ON in the mask. Bits are considered to number from 1 to 32. - - An interger to be interpreted as a mask. - An array with an element for each bit of the mask which is ON. - - - - Reads the subclass XML for V1 streams. - - The reader. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets the days of the month during which the task runs. - - - - - Gets or sets the months of the year during which the task runs. - - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the task runs on the last day of the month. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Represents a trigger that starts a task when the task is registered or updated. Not available on Task Scheduler 1.0. - - - - - Creates an unbound instance of a . - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - Not supported under Task Scheduler 1.0. - - - - Defines how often the task is run and how long the repetition pattern is repeated after the task is started. - - - - - Releases all resources used by this class. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Determines whether any properties for this have been set. - - - true if properties have been set; otherwise, false. - - - - - Gets or sets how long the pattern is repeated. - - - The duration that the pattern is repeated. The minimum time allowed is one minute. If TimeSpan.Zero is specified, the pattern is repeated indefinitely. - - If you specify a repetition duration for a task, you must also specify the repetition interval. - - - - Gets or sets the amount of time between each restart of the task. - - - The amount of time between each restart of the task. The maximum time allowed is 31 days, and the minimum time allowed is 1 minute. - - If you specify a repetition duration for a task, you must also specify the repetition interval. - The maximum time allowed is 31 days, and the minimum time allowed is 1 minute. - - - - Gets or sets a Boolean value that indicates if a running instance of the task is stopped at the end of repetition pattern duration. - - - - - Triggers tasks for console connect or disconnect, remote connect or disconnect, or workstation lock or unlock notifications. - - - - - Creates an unbound instance of a . - - - - - Initializes a new instance of the class. - - The state change. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Returns a value indicating if the StateChange property has been set. - - StateChange property has been set. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - - - - Gets or sets the kind of Terminal Server session change that would trigger a task launch. - - - - - Gets or sets the user for the Terminal Server session. When a session state change is detected for this user, a task is started. - - - - - Represents a trigger that starts a task at a specific date and time. - - - - - Creates an unbound instance of a . - - - - - Creates an unbound instance of a and assigns the execution time. - - Date and time for the trigger to fire. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Represents a trigger that starts a task based on a weekly schedule. For example, the task starts at 8:00 A.M. on a specific day of the week every week or every other week. - - - - - Creates an unbound instance of a . - - The days of the week. - The interval between the weeks in the schedule. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Reads the subclass XML for V1 streams. - - The reader. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Writes the subclass XML for V1 streams. - - The writer. - - - - Gets or sets the days of the week on which the task runs. - - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the interval between the weeks in the schedule. - - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Provides the methods that are used to add to, remove from, and get the triggers of a task. - - - - - Releases all resources used by this class. - - - - - Gets the collection enumerator for this collection. - - The for this collection. - - - - Add an unbound to the task. - - derivative to add to the task. - Bound trigger. - unboundTrigger is null. - - - - Add a new trigger to the collections of triggers for the task. - - The type of trigger to create. - A instance of the specified type. - - - - Adds a collection of unbound triggers to the end of the . - - The triggers to be added to the end of the . The collection itself cannot be null and cannot contain null elements. - triggers is null. - - - - Clears all triggers from the task. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Determines whether the specified trigger type is contained in this collection. - - Type of the trigger. - - true if the specified trigger type is contained in this collection; otherwise, false. - - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - The zero-based index in at which copying begins. - is null. - is less than 0. - The number of elements in the source is greater than the available space from to the end of the destination . - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Determines the index of a specific item in the . - - The id () of the trigger to be retrieved. - - The index of if found in the list; otherwise, -1. - - - - - Inserts an trigger at the specified index. - - The zero-based index at which trigger should be inserted. - The trigger to insert into the list. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Removes the trigger at a specified index. - - Index of trigger to remove. - Index out of range. - - - - Returns a that represents the triggers in this collection. - - - A that represents the triggers in this collection. - - - - - Gets the number of triggers in the collection. - - - - - Gets a specified trigger from the collection. - - The index of the trigger to be retrieved. - Specialized instance. - - - - Gets or sets a specified trigger from the collection. - - - The . - - The id () of the trigger to be retrieved. - - Specialized instance. - - - - - Mismatching Id for trigger and lookup. - - - - Releases all resources used by this class. - - - - - Releases all resources used by this class. - - - - - Options for a task, used for the Flags property of a Task. Uses the - "Flags" attribute, so these values are combined with |. - Some flags are documented as Windows 95 only, but they have a - user interface in Windows XP so that may not be true. - - - - - The interactive flag is set if the task is intended to be displayed to the user. - If the flag is not set, no user interface associated with the task is presented - to the user when the task is executed. - - - - - The task will be deleted when there are no more scheduled run times. - - - - - The task is disabled. This is useful to temporarily prevent a task from running - at the scheduled time(s). - - - - - The task begins only if the computer is not in use at the scheduled start time. Windows 95 only. - - - - - The task terminates if the computer makes an idle to non-idle transition while the task is running. - The computer is not considered idle until the IdleWait triggers' time elapses with no user input. - Windows 95 only. For information regarding idle triggers, see . - - - - - The task does not start if its target computer is running on battery power. Windows 95 only. - - - - - The task ends, and the associated application quits if the task's target computer switches - to battery power. Windows 95 only. - - - - - The task runs only if the system is docked. Windows 95 only. - - - - - The work item created will be hidden. - - - - - The task runs only if there is currently a valid Internet connection. - This feature is currently not implemented. - - - - - The task starts again if the computer makes a non-idle to idle transition before all the - task's task_triggers elapse. (Use this flag in conjunction with KillOnIdleEnd.) Windows 95 only. - - - - - The task runs only if the SYSTEM account is available. - - - - - The task runs only if the user specified in SetAccountInformation is logged on interactively. - This flag has no effect on work items set to run in the local account. - - - - - Status values returned for a task. Some values have been determined to occur although - they do no appear in the Task Scheduler system documentation. - - - - The task is ready to run at its next scheduled time. - - - The task is currently running. - - - One or more of the properties that are needed to run this task on a schedule have not been set. - - - The task has not yet run. - - - The task will not run at the scheduled times because it has been disabled. - - - There are no more runs scheduled for this task. - - - The last run of the task was terminated by the user. - - - Either the task has no triggers or the existing triggers are disabled or not set. - - - Event triggers don't have set run times. - - - Valid types of triggers - - - Trigger is set to run the task a single time. - - - Trigger is set to run the task on a daily interval. - - - Trigger is set to run the work item on specific days of a specific week of a specific month. - - - Trigger is set to run the task on a specific day(s) of the month. - - - Trigger is set to run the task on specific days, weeks, and months. - - - Trigger is set to run the task if the system remains idle for the amount of time specified by the idle wait time of the task. - - - Trigger is set to run the task at system startup. - - - Trigger is set to run the task when a user logs on. - - - - Represents a wildcard running on the - engine. - - - - - Initializes a wildcard with the given search pattern and options. - - The wildcard pattern to match. - A combination of one or more . - - - - Converts a wildcard to a regex. - - The wildcard pattern to convert. - A regex equivalent of the given wildcard. - - - diff --git a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/Microsoft.Win32.TaskScheduler.dll b/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/Microsoft.Win32.TaskScheduler.dll deleted file mode 100644 index e2293d3a..00000000 Binary files a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/Microsoft.Win32.TaskScheduler.dll and /dev/null differ diff --git a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/de-DE/Microsoft.Win32.TaskScheduler.resources.dll b/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/de-DE/Microsoft.Win32.TaskScheduler.resources.dll deleted file mode 100644 index 75f7dd9e..00000000 Binary files a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/de-DE/Microsoft.Win32.TaskScheduler.resources.dll and /dev/null differ diff --git a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/fr/Microsoft.Win32.TaskScheduler.resources.dll b/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/fr/Microsoft.Win32.TaskScheduler.resources.dll deleted file mode 100644 index ee627a91..00000000 Binary files a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/fr/Microsoft.Win32.TaskScheduler.resources.dll and /dev/null differ diff --git a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/it/Microsoft.Win32.TaskScheduler.resources.dll b/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/it/Microsoft.Win32.TaskScheduler.resources.dll deleted file mode 100644 index f5bb47c6..00000000 Binary files a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/it/Microsoft.Win32.TaskScheduler.resources.dll and /dev/null differ diff --git a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/zh-CN/Microsoft.Win32.TaskScheduler.resources.dll b/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/zh-CN/Microsoft.Win32.TaskScheduler.resources.dll deleted file mode 100644 index 5a06a7f6..00000000 Binary files a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v2.0/zh-CN/Microsoft.Win32.TaskScheduler.resources.dll and /dev/null differ diff --git a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v4.0/Microsoft.Win32.TaskScheduler.XML b/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v4.0/Microsoft.Win32.TaskScheduler.XML deleted file mode 100644 index dc8e982e..00000000 --- a/1.5 'Kruger 60'/Third-party/TaskScheduler/2.2.2/v4.0/Microsoft.Win32.TaskScheduler.XML +++ /dev/null @@ -1,5228 +0,0 @@ - - - - Microsoft.Win32.TaskScheduler - - - - - Defines the type of actions a task can perform. - - The action type is defined when the action is created and cannot be changed later. See . - - - This action fires a handler. - - - This action performs a command-line operation. For example, the action can run a script, launch an executable, or, if the name of a document is provided, find its associated application and launch the application with the document. - - - This action sends and e-mail. - - - This action shows a message box. - - - - Abstract base class that provides the common properties that are inherited by all action objects. An action object is created by the method. - - - - List of unbound values when working with Actions not associated with a registered task. - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Copies the properties from another the current instance. - - The source . - - - - Releases all resources used by this class. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Returns the action Id. - - String representation of action. - - - - Returns a that represents this action. - - The culture. - String representation of action. - - - - Creates a specialized class from a defined interface. - - Version 2.0 Action interface. - Specialized action class - - - - Creates the specified action. - - Type of the action to instantiate. - of specified type. - - - - Gets the type of the action. - - The type of the action. - - - - Gets or sets the identifier of the action. - - - - - Represents an action that fires a handler. Only available on Task Scheduler 2.0. - - - - - Creates an unbound instance of . - - - - - Creates an unbound instance of . - - Identifier of the handler class. - Addition data associated with the handler. - - - - Copies the properties from another the current instance. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets a string representation of the . - - String represention this action. - - - - Gets the name for CLSID. - - The unique identifier. - - - - - Gets or sets the identifier of the handler class. - - - - - Gets the name of the object referred to by . - - - - - Gets or sets additional data that is associated with the handler. - - - - - Represents an action that executes a command-line operation. - - - - - Creates a new instance of an that can be added to . - - - - - Creates a new instance of an that can be added to . - - Path to an executable file. - Arguments associated with the command-line operation. This value can be null. - Directory that contains either the executable file or the files that are used by the executable file. This value can be null. - - - - Copies the properties from another the current instance. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets a string representation of the . - - String represention this action. - - - - Gets or sets the identifier of the action. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the path to an executable file. - - - - - Gets or sets the arguments associated with the command-line operation. - - - - - Gets or sets the directory that contains either the executable file or the files that are used by the executable file. - - - - - An interface that exposes the ability to convert an actions functionality to a PowerShell script. - - - - - Gets the PowerShell script for an action. - - Single line PowerShell script string. - - - - Represents an action that sends an e-mail. - - - - - Creates an unbound instance of . - - - - - Creates an unbound instance of . - - Subject of the e-mail. - E-mail address that you want to send the e-mail from. - E-mail address or addresses that you want to send the e-mail to. - Body of the e-mail that contains the e-mail message. - Name of the server that you use to send e-mail from. - - - - Copies the properties from another the current instance. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets a string representation of the . - - String represention this action. - - - - Gets or sets the name of the server that you use to send e-mail from. - - - - - Gets or sets the subject of the e-mail. - - - - - Gets or sets the e-mail address or addresses that you want to send the e-mail to. - - - - - Gets or sets the e-mail address or addresses that you want to Cc in the e-mail. - - - - - Gets or sets the e-mail address or addresses that you want to Bcc in the e-mail. - - - - - Gets or sets the e-mail address that you want to reply to. - - - - - Gets or sets the e-mail address that you want to send the e-mail from. - - - - - Gets or sets the header information in the e-mail message to send. - - - - - Gets or sets the body of the e-mail that contains the e-mail message. - - - - - Gets or sets an array of file paths to be sent as attachments with the e-mail. Each item must be a value containing a path to file. - - - - - Represents an action that shows a message box when a task is activated. - - - - - Creates a new unbound instance of . - - - - - Creates a new unbound instance of . - - Message text that is displayed in the body of the message box. - Title of the message box. - - - - Copies the properties from another the current instance. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets a string representation of the . - - String represention this action. - - - - Gets or sets the title of the message box. - - - - - Gets or sets the message text that is displayed in the body of the message box. - - - - - Collection that contains the actions that are performed by the task. - - A Task Scheduler 1.0 task can only contain a single . - - - - Releases all resources used by this class. - - - - - Adds an action to the task. - - A derived class. - The bound that was added to the collection. - - - - Adds an to the task. - - Path to an executable file. - Arguments associated with the command-line operation. This value can be null. - Directory that contains either the executable file or the files that are used by the executable file. This value can be null. - The bound that was added to the collection. - - - - Adds a new instance to the task. - - Type of task to be created - Specialized instance. - - - - Clears all actions from the task. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Determines whether the specified action type is contained in this collection. - - Type of the action. - - true if the specified action type is contained in this collection; otherwise, false. - - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - The zero-based index in at which copying begins. - is null. - is less than 0. - The number of elements in the source is greater than the available space from to the end of the destination . - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Determines the index of a specific item in the . - - The id () of the action to be retrieved. - - The index of if found in the list; otherwise, -1. - - - - - Inserts an action at the specified index. - - The zero-based index at which action should be inserted. - The action to insert into the list. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Removes the action at a specified index. - - Index of action to remove. - Index out of range. - - - - Returns a that represents the actions in this collection. - - - A that represents the actions in this collection. - - - - - Retrieves an enumeration of each of the actions. - - Returns an object that implements the interface and that can iterate through the objects within the . - - - - Gets or sets a an action at the specified index. - - The zero-based index of the action to get or set. - - - - Gets or sets a specified action from the collection. - - - The . - - The id () of the action to be retrieved. - - Specialized instance. - - - - - Mismatching Id for action and lookup. - - - - Gets or sets the identifier of the principal for the task. - - Not supported under Task Scheduler 1.0. - - - - Gets the number of actions in the collection. - - - - - Gets or sets an XML-formatted version of the collection. - - - - - Releases all resources used by this class. - - - - - The GlobalLock function locks a global memory object and returns a pointer to the first byte of the object's memory block. - GlobalLock function increments the lock count by one. - Needed for the clipboard functions when getting the data from IDataObject - - - - - - - The GlobalUnlock function decrements the lock count associated with a memory object. - - - - - - - Historical event information for a task. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Compares the current object with another object of the same type. - - An object to compare with this object. - - A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: Value Meaning Less than zero This object is less than the other parameter.Zero This object is equal to other. Greater than zero This object is greater than other. - - - - - Gets the activity id. - - - - - Gets the event id. - - - - - Gets the underlying . - - - - - Gets the level. - - - - - Gets the op code. - - - - - Gets the process id. - - - - - Gets the record id. - - - - - Gets the task category. - - - - - Gets the task path. - - - - - Gets the time created. - - - - - Gets the user id. - - - - - Gets the version. - - - - - An enumerator over a task's history of events. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Advances the enumerator to the next element of the collection. - - - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - The collection was modified after the enumerator was created. - - - - - Seeks the specified bookmark. - - The bookmark. - The offset. - - - - Seeks the specified origin. - - The origin. - The offset. - - - - Gets the element in the collection at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator. - - - - - Gets the element in the collection at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator. - - - - - Historical event log for a task. Only available for Windows Vista and Windows Server 2008 and later systems. - - - - - Initializes a new instance of the class. - - The task path. This can be retrieved using the property. - Thrown when instantiated on an OS prior to Windows Vista. - - - - Initializes a new instance of the class. - - Name of the machine. - The task path. This can be retrieved using the property. - The domain. - The user. - The password. - Thrown when instantiated on an OS prior to Windows Vista. - - - - Initializes a new instance of the class that looks at all task events from a specified time. - - The start time. - Name of the task. - Name of the machine (optional). - The domain. - The user. - The password. - - - - Initializes a new instance of the class. - - Name of the task. - The event i ds. - The start time. - Name of the machine (optional). - The domain. - The user. - The password. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through the collection. - - if set to true [reverse]. - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Gets the total number of events for this task. - - - - - Specifies the access control rights that can be applied to Task Scheduler tasks. - - - - Specifies the right to exert full control over a task folder or task, and to modify access control and audit rules. This value represents the right to do anything with a task and is the combination of all rights in this enumeration. - - - Specifies the right to create tasks and folders, and to add or remove data from tasks. This right includes the following rights: . - - - Specifies the right to open and copy folders or tasks as read-only. This right includes the following rights: . - - - Specifies the right run tasks. This right includes the following rights: . - - - The right to wait on a task. - - - The right to change the owner of a task. - - - Specifies the right to change the security and audit rules associated with a task or folder. - - - The right to open and copy the access rules and audit rules for a task. - - - The right to delete a folder or task. - - - Specifies the right to open and write file system attributes to a folder or file. This does not include the ability to write data, extended attributes, or access and audit rules. - - - Specifies the right to open and copy file system attributes from a folder or task. For example, this value specifies the right to view the file creation or modified date. This does not include the right to read data, extended file system attributes, or access and audit rules. - - - Specifies the right to delete a folder and any tasks contained within that folder. - - - Specifies the right to run a task. - - - Specifies the right to open and write extended file system attributes to a folder or file. This does not include the ability to write data, attributes, or access and audit rules. - - - Specifies the right to open and copy extended system attributes from a folder or task. For example, this value specifies the right to view author and content information. This does not include the right to read data, system attributes, or access and audit rules. - - - Specifies the right to append data to the end of a file. - - - Specifies the right to open and write to a file or folder. This does not include the right to open and write file system attributes, extended file system attributes, or access and audit rules. - - - Specifies the right to open and copy a task or folder. This does not include the right to read file system attributes, extended file system attributes, or access and audit rules. - - - - Represents a set of access rights allowed or denied for a user or group. This class cannot be inherited. - - - - - Initializes a new instance of the class, specifying the user or group the rule applies to, the access rights, and whether the specified access rights are allowed or denied. - - The user or group the rule applies to. Must be of type or a type such as that can be converted to type . - A bitwise combination of values specifying the rights allowed or denied. - One of the values specifying whether the rights are allowed or denied. - - - - Initializes a new instance of the class, specifying the name of the user or group the rule applies to, the access rights, and whether the specified access rights are allowed or denied. - - The name of the user or group the rule applies to. - A bitwise combination of values specifying the rights allowed or denied. - One of the values specifying whether the rights are allowed or denied. - - - - Gets the rights allowed or denied by the access rule. - - - A bitwise combination of values indicating the rights allowed or denied by the access rule. - - - - - Represents a set of access rights to be audited for a user or group. This class cannot be inherited. - - - - - Initializes a new instance of the class, specifying the user or group to audit, the rights to audit, and whether to audit success, failure, or both. - - The user or group the rule applies to. Must be of type or a type such as that can be converted to type . - A bitwise combination of values specifying the kinds of access to audit. - The audit flags. - - - - Gets the access rights affected by the audit rule. - - - A bitwise combination of values that indicates the rights affected by the audit rule. - - objects are immutable. You can create a new audit rule representing a different user, different rights, or a different combination of AuditFlags values, but you cannot modify an existing audit rule. - - - - Represents the Windows access control security for a Task Scheduler task. This class cannot be inherited. - - - A TaskSecurity object specifies access rights for a Task Scheduler task, and also specifies how access attempts are audited. Access rights to the task are expressed as rules, with each access rule represented by a object. Each auditing rule is represented by a object. - This mirrors the underlying Windows security system, in which each securable object has at most one discretionary access control list (DACL) that controls access to the secured object, and at most one system access control list (SACL) that specifies which access attempts are audited. The DACL and SACL are ordered lists of access control entries (ACE) that specify access and auditing for users and groups. A or object might represent more than one ACE. - Note - A object can represent a local task or a Task Scheduler task. Windows access control security is meaningful only for Task Scheduler tasks. - The TaskSecurity, , and classes hide the implementation details of ACLs and ACEs. They allow you to ignore the seventeen different ACE types and the complexity of correctly maintaining inheritance and propagation of access rights. These objects are also designed to prevent the following common access control errors: - - Creating a security descriptor with a null DACL. A null reference to a DACL allows any user to add access rules to an object, potentially creating a denial-of-service attack. A new TaskSecurity object always starts with an empty DACL, which denies all access for all users. - Violating the canonical ordering of ACEs. If the ACE list in the DACL is not kept in the canonical order, users might inadvertently be given access to the secured object. For example, denied access rights must always appear before allowed access rights. TaskSecurity objects maintain the correct order internally. - Manipulating security descriptor flags, which should be under resource manager control only. - Creating invalid combinations of ACE flags. - Manipulating inherited ACEs. Inheritance and propagation are handled by the resource manager, in response to changes you make to access and audit rules. - Inserting meaningless ACEs into ACLs. - - The only capabilities not supported by the .NET security objects are dangerous activities that should be avoided by the majority of application developers, such as the following: - - Low-level tasks that are normally performed by the resource manager. - Adding or removing access control entries in ways that do not maintain the canonical ordering. - - To modify Windows access control security for a task, use the method to get the TaskSecurity object. Modify the security object by adding and removing rules, and then use the method to reattach it. - Important: Changes you make to a TaskSecurity object do not affect the access levels of the task until you call the method to assign the altered security object to the task. - To copy access control security from one task to another, use the method to get a TaskSecurity object representing the access and audit rules for the first task, then use the method, or a constructor that accepts a TaskSecurity object, to assign those rules to the second task. - Users with an investment in the security descriptor definition language (SDDL) can use the method to set access rules for a task, and the method to obtain a string that represents the access rules in SDDL format. This is not recommended for new development. - - - - - Initializes a new instance of the class with default values. - - - - - Initializes a new instance of the class with the specified sections of the access control security rules from the specified task. - - The task. - The sections of the ACL to retrieve. - - - - Initializes a new instance of the class with the specified sections of the access control security rules from the specified task. - - The folder. - The sections of the ACL to retrieve. - - - - Creates a new access control rule for the specified user, with the specified access rights, access control, and flags. - - An that identifies the user or group the rule applies to. - A bitwise combination of values specifying the access rights to allow or deny, cast to an integer. - Meaningless for tasks, because they have no hierarchy. - Meaningless for tasks, because they have no hierarchy. - Meaningless for tasks, because they have no hierarchy. - One of the values specifying whether the rights are allowed or denied. - - The object that this method creates. - - - - - Searches for a matching rule with which the new rule can be merged. If none are found, adds the new rule. - - The access control rule to add. - - - - Searches for an audit rule with which the new rule can be merged. If none are found, adds the new rule. - - The audit rule to add. The user specified by this rule determines the search. - - - - Creates a new audit rule, specifying the user the rule applies to, the access rights to audit, and the outcome that triggers the audit rule. - - An that identifies the user or group the rule applies to. - A bitwise combination of values specifying the access rights to audit, cast to an integer. - Meaningless for tasks, because they have no hierarchy. - Meaningless for tasks, because they have no hierarchy. - Meaningless for tasks, because they have no hierarchy. - One of the values specifying whether to audit successful access, failed access, or both. - - A object representing the specified audit rule for the specified user. The return type of the method is the base class, , but the return value can be cast safely to the derived class. - - - - - Searches for an access control rule with the same user and (allow or deny) as the specified rule, and with compatible inheritance and propagation flags; if such a rule is found, the rights contained in the specified access rule are removed from it. - - A that specifies the user and to search for, and a set of inheritance and propagation flags that a matching rule, if found, must be compatible with. Specifies the rights to remove from the compatible rule, if found. - true if a compatible rule is found; otherwise false. - - - - Searches for all access control rules with the same user and (allow or deny) as the specified rule and, if found, removes them. - - A that specifies the user and to search for, and a set of inheritance and propagation flags that a matching rule, if found, must be compatible with. Any rights specified by this rule are ignored. - - - - Searches for an access control rule that exactly matches the specified rule and, if found, removes it. - - The to remove. - - - - Searches for an audit control rule with the same user as the specified rule, and with compatible inheritance and propagation flags; if a compatible rule is found, the rights contained in the specified rule are removed from it. - - A that specifies the user to search for, and a set of inheritance and propagation flags that a matching rule, if found, must be compatible with. Specifies the rights to remove from the compatible rule, if found. - true if a compatible rule is found; otherwise false. - - - - Searches for all audit rules with the same user as the specified rule and, if found, removes them. - - A that specifies the user to search for. Any rights specified by this rule are ignored. - - - - Searches for an audit rule that exactly matches the specified rule and, if found, removes it. - - The to remove. - - - - Removes all access control rules with the same user as the specified rule, regardless of , and then adds the specified rule. - - The to add. The user specified by this rule determines the rules to remove before this rule is added. - - - - Removes all access control rules with the same user and (allow or deny) as the specified rule, and then adds the specified rule. - - The to add. The user and of this rule determine the rules to remove before this rule is added. - - - - Removes all audit rules with the same user as the specified rule, regardless of the value, and then adds the specified rule. - - The to add. The user specified by this rule determines the rules to remove before this rule is added. - - - - Saves the specified sections of the security descriptor associated with this object to permanent storage. We recommend that the values of the parameters passed to the constructor and persist methods be identical. - - The task used to retrieve the persisted information. - One of the enumeration values that specifies the sections of the security descriptor (access rules, audit rules, owner, primary group) of the securable object to save. - - - - Saves the specified sections of the security descriptor associated with this object to permanent storage. We recommend that the values of the parameters passed to the constructor and persist methods be identical. - - The task folder used to retrieve the persisted information. - One of the enumeration values that specifies the sections of the security descriptor (access rules, audit rules, owner, primary group) of the securable object to save. - - - - Saves the specified sections of the security descriptor associated with this object to permanent storage. We recommend that the values of the parameters passed to the constructor and persist methods be identical. For more information, see Remarks. - - The name used to retrieve the persisted information. - One of the enumeration values that specifies the sections of the security descriptor (access rules, audit rules, owner, primary group) of the securable object to save. - - - - Gets the enumeration that the class uses to represent access rights. - - A object representing the enumeration. - - - - Gets the type that the TaskSecurity class uses to represent access rules. - - A object representing the class. - - - - Gets the type that the TaskSecurity class uses to represent audit rules. - - A object representing the class. - - - - Provides access to the Task Scheduler service for managing registered tasks. - - - - - Initial call for a Fluent model of creating a task. - - The path of the program to run. - An instance. - - - - Creates a new instance of a TaskService connecting to the local machine as the current user. - - - - - Initializes a new instance of the class. - - The name of the computer that you want to connect to. If the this parameter is empty, then this will connect to the local computer. - The user name that is used during the connection to the computer. If the user is not specified, then the current token is used. - The domain of the user specified in the parameter. - The password that is used to connect to the computer. If the user name and password are not specified, then the current token is used. - If set to true force Task Scheduler 1.0 compatibility. - - - - Creates a new task, registers the taks, and returns the instance. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The to determine when to run the task. - The to determine what happens when the task is triggered. - The user credentials used to register the task. - The password for the userId used to register the task. - A value that defines what logon technique is used to run the registered task. - - A instance of the registered task. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Finds all tasks matching a name or standard wildcards. - - Name of the task in regular expression form. - if set to true search all sub folders. - An array of containing all tasks matching . - - - - Finds a task given a name and standard wildcards. - - The task name. This can include the wildcards * or ?. - if set to true search all sub folders. - A if one matches , otherwise NULL. - - - - Gets the path to a folder of registered tasks. - - The path to the folder to retrieve. Do not use a backslash following the last folder name in the path. The root task folder is specified with a backslash (\). An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - instance for the requested folder. - Requested folder was not found. - Folder other than the root (\) was requested on a system not supporting Task Scheduler 2.0. - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Gets a collection of running tasks. - - True to include hidden tasks. - instance with the list of running tasks. - - - - Gets the task with the specified path. - - The task path. - The task. - - - - Signals the object that initialization is starting. - - - - - Signals the object that initialization is complete. - - - - - Returns an empty task definition object to be filled in with settings and properties and then registered using the method. - - A instance for setting properties. - - - - Returns a populated with the properties defined in an XML file. - - The XML file to use as input. - A instance. - Importing from an XML file is only supported under Task Scheduler 2.0. - - - - Starts the Task Scheduler UI for the OS hosting the assembly if the session is running in interactive mode. - - - - - Releases the unmanaged resources used by the and optionally releases the managed resources. - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Connects this instance of the class to a running Task Scheduler. - - - - - Finds the task in folder. - - The folder. - The wildcard expression to compare task names with. - The results. - if set to true recurse folders. - True if any tasks are found, False if not. - - - - Gets or sets a value indicating whether to allow tasks from later OS versions with new properties to be retrieved as read only tasks. - - true if allow read only tasks; otherwise, false. - - - - Gets a which enumerates all the tasks in all folders. - - - A for all instances. - - - - - Gets a Boolean value that indicates if you are connected to the Task Scheduler service. - - - - - Gets the name of the domain to which the computer is connected. - - - - - Gets the name of the user that is connected to the Task Scheduler service. - - - - - Gets the highest version of Task Scheduler that a computer supports. - - - - - Gets the library version. This is the highest version supported by the local library. Tasks cannot be created using any compatibilty level higher than this version. - - - The library version. - - - - - Gets the root ("\") folder. For Task Scheduler 1.0, this is the only folder. - - - - - Gets or sets the name of the computer that is running the Task Scheduler service that the user is connected to. - - - - - Gets or sets the user account domain to be used when connecting to the . - - The user account domain. - - - - Gets or sets the user name to be used when connecting to the . - - The user name. - - - - Gets or sets the user password to be used when connecting to the . - - The user password. - - - - Gets a value indicating whether the component can raise an event. - - - true if the component can raise events; otherwise, false. The default is true. - - - - - Fluent helper class. Not intended for use. - - - - - Fluent helper class. Not intended for use. - - - - - Fluent helper class. Not intended for use. - - - - - Adds arguments to the . - - The arguments. - instance. - - - - Adds a working directory to the . - - The directory. - instance. - - - - Adds a trigger that executes every day or week. - - The interval of days or weeks. - instance. - - - - Adds a trigger that executes monthly on certain days of the week. - - The days of the week on which to run. - instance. - - - - Adds a trigger that executes monthly on specific days. - - The months of the year in which to run. - instance. - - - - Adds a trigger that executes once at a specific time. - - instance. - - - - Adds a trigger that executes at system startup. - - instance. - - - - Adds a trigger that executes when system is idle. - - instance. - - - - Adds a trigger that executes once at specified state change. - - Type of the change. - - instance. - - - - - Adds a trigger that executes at logon of all users. - - instance. - - - - Adds a trigger that executes at logon of a specific user. - - The user id. - instance. - - - - Adds a trigger that executes at task registration. - - instance. - - - - Fluent helper class. Not intended for use. - - - - - Updates a monthly trigger to specify the days of the month on which it will run. - - The days. - - instance. - - - - - Fluent helper class. Not intended for use. - - - - - Updates a monthly trigger to specify in which weeks of the month it will run. - - The week. - - instance. - - - - - Updates a monthly trigger to specify the months of the year in which it will run. - - The month of the year. - - instance. - - - - - Fluent helper class. Not intended for use. - - - - - Fluent helper class. Not intended for use. - - - - - Specifies a date on which a trigger will start. - - The year. - The month. - The day. - - instance. - - - - - Specifies a date and time on which a trigger will start. - - The year. - The month. - The day. - The hour. - The min. - The sec. - - instance. - - - - - Specifies a date and time on which a trigger will start. - - A string representing a DateTime and parsable via . - - instance. - - - - - Specifies a date and time on which a trigger will start. - - The DateTime value. - - instance. - - - - - Specifies a date on which a trigger will no longer run. - - The year. - The month. - The day. - - instance. - - - - - Specifies a date and time on which a trigger will no longer run. - - The year. - The month. - The day. - The hour. - The min. - The sec. - - instance. - - - - - Specifies a date and time on which a trigger will no longer run. - - A string representing a DateTime and parsable via . - - instance. - - - - - Specifies a date and time on which a trigger will no longer run. - - The DateTime value. - - instance. - - - - - Specifies a repetion interval for the trigger. - - The interval span. - instance. - - - - Specifies a repetion interval for the trigger. - - The interval span string. Must be parsable by . - instance. - - - - Specifies the maximum amount of time to repeat the execution of a trigger. - - The duration span. - instance. - - - - Specifies the maximum amount of time to repeat the execution of a trigger. - - The duration span string. Must be parsable by . - instance. - - - - Assigns the name of the task and registers it. - - The name. - A registerd instance. - - - - Updates a weekly trigger to specify the days of the week on which it will run. - - The days of the week. - - instance. - - - - - Fluent helper class. Not intended for use. - - - - - Specifies that an Every target uses days as the interval. - - instance. - - - - Specifies that an Every target uses weeks as the interval. - - instance. - - - - Functions to provide localized strings for enumerated types and values. - - - - - Gets a string representing the localized value of the provided enum. - - The enum value. - A localized string, if available. - - - - Pair of name and value. - - - - - Initializes a new instance of the class. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the name. - - - The name. - - - - - Gets or sets the value. - - - The value. - - - - - Contains a collection of name-value pairs. - - - - - Copies current to another. - - The destination collection. - - - - Releases all resources used by this class. - - - - - Adds an item to the . - - The object to add to the . - - - - Adds a name-value pair to the collection. - - The name associated with a value in a name-value pair. - The value associated with a name in a name-value pair. - - - - Removes a selected name-value pair from the collection. - - Index of the pair to remove. - - - - Clears the entire collection of name-value pairs. - - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets the collection enumerator for the name-value collection. - - An for the collection. - - - - Gets the number of items in the collection. - - - - - Gets a collection of the names. - - - The names. - - - - - Gets a collection of the values. - - - The values. - - - - - Gets the value of the item at the specified index. - - The index of the item being requested. - The value of the name-value pair at the specified index. - - - - Gets the value of the item with the specified key. - - Key to get the value for. - Value for the key, or null if not found. - - - - Impersonation of a user. Allows to execute code under another - user context. - Please note that the account that instantiates the Impersonator class - needs to have the 'Act as part of operating system' privilege set. - - - - - Constructor. Starts the impersonation with the given credentials. - Please note that the account that instantiates the Impersonator class - needs to have the 'Act as part of operating system' privilege set. - - The name of the user to act as. - The domain name of the user to act as. - The password of the user to act as. - - - - Abstract class for throwing a method specific exception. - - - - Defines the minimum supported version for the action not allowed by this exception. - - - - Gets a message that describes the current exception. - - - - - Gets the minimum supported TaskScheduler version required for this method or property. - - - - - Thrown when the calling method is not supported by Task Scheduler 1.0. - - - - - Thrown when the calling method is not supported by Task Scheduler 2.0. - - - - - Thrown when the calling method is not supported by Task Scheduler versions prior to the one specified. - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Call a COM object. - - - - - Looks up a localized string similar to Start a program. - - - - - Looks up a localized string similar to Send an e-mail. - - - - - Looks up a localized string similar to Display a message. - - - - - Looks up a localized string similar to {3} {0:P}. - - - - - Looks up a localized string similar to every day. - - - - - Looks up a localized string similar to {1} {0}. - - - - - Looks up a localized string similar to .. - - - - - Looks up a localized string similar to {0} {1}. - - - - - Looks up a localized string similar to -. - - - - - Looks up a localized string similar to ,. - - - - - Looks up a localized string similar to every month. - - - - - Looks up a localized string similar to Multiple actions defined. - - - - - Looks up a localized string similar to Multiple triggers defined. - - - - - Looks up a localized string similar to {0}. - - - - - Looks up a localized string similar to Author. - - - - - Looks up a localized string similar to Disabled. - - - - - Looks up a localized string similar to Queued. - - - - - Looks up a localized string similar to Ready. - - - - - Looks up a localized string similar to Running. - - - - - Looks up a localized string similar to Unknown. - - - - - Looks up a localized string similar to any user. - - - - - Looks up a localized string similar to At system startup. - - - - - Looks up a localized string similar to Custom Trigger. - - - - - Looks up a localized string similar to At {0:t} every day. - - - - - Looks up a localized string similar to At {0:t} every {1} days. - - - - - Looks up a localized string similar to indefinitely. - - - - - Looks up a localized string similar to for a duration of {0}. - - - - - Looks up a localized string similar to Trigger expires at {0:G}.. - - - - - Looks up a localized string similar to Custom event filter. - - - - - Looks up a localized string similar to On event - Log: {0}. - - - - - Looks up a localized string similar to , Source: {0}. - - - - - Looks up a localized string similar to , EventID: {0}. - - - - - Looks up a localized string similar to When computer is idle. - - - - - Looks up a localized string similar to At log on of {0}. - - - - - Looks up a localized string similar to At {0:t} on day {1} of {2}, starting {0:d}. - - - - - Looks up a localized string similar to At {0:t} on the {1} {2:f} each {3}, starting {0:d}. - - - - - Looks up a localized string similar to When the task is created or modified. - - - - - Looks up a localized string similar to After triggered, repeat every {0} {1}.. - - - - - Looks up a localized string similar to On local connection to {0}.. - - - - - Looks up a localized string similar to On local disconnect from {0}.. - - - - - Looks up a localized string similar to On remote connection to {0}.. - - - - - Looks up a localized string similar to On remote disconnect from {0}.. - - - - - Looks up a localized string similar to On workstation lock of {0}.. - - - - - Looks up a localized string similar to On workstation unlock of {0}.. - - - - - Looks up a localized string similar to user session of {0}. - - - - - Looks up a localized string similar to At {0:t} on {0:d}. - - - - - Looks up a localized string similar to At startup. - - - - - Looks up a localized string similar to Custom Trigger. - - - - - Looks up a localized string similar to Daily. - - - - - Looks up a localized string similar to On an event. - - - - - Looks up a localized string similar to On idle. - - - - - Looks up a localized string similar to At log on. - - - - - Looks up a localized string similar to Monthly. - - - - - Looks up a localized string similar to Monthly. - - - - - Looks up a localized string similar to At task creation/modification. - - - - - Looks up a localized string similar to On state change. - - - - - Looks up a localized string similar to One time. - - - - - Looks up a localized string similar to Weekly. - - - - - Looks up a localized string similar to At {0:t} every {1} of every week, starting {0:d}. - - - - - Looks up a localized string similar to At {0:t} every {1} of every {2} weeks, starting {0:d}. - - - - - Looks up a localized string similar to every. - - - - - Looks up a localized string similar to fifth. - - - - - Looks up a localized string similar to first. - - - - - Looks up a localized string similar to fourth. - - - - - Looks up a localized string similar to last. - - - - - Looks up a localized string similar to second. - - - - - Looks up a localized string similar to third. - - - - Defines what versions of Task Scheduler or the AT command that the task is compatible with. - - - The task is compatible with the AT command. - - - The task is compatible with Task Scheduler 1.0 (Windows Server™ 2003, Windows® XP, or Windows® 2000). - - - The task is compatible with Task Scheduler 2.0 (Windows Vista™, Windows Server™ 2008). - - - The task is compatible with Task Scheduler 2.1 (Windows® 7, Windows Server™ 2008 R2). - - - The task is compatible with Task Scheduler 2.2 (Windows® 8.x, Windows Server™ 2012). - - - Defines how the Task Scheduler service creates, updates, or disables the task. - - - The Task Scheduler service registers the task as a new task. - - - The Task Scheduler service either registers the task as a new task or as an updated version if the task already exists. Equivalent to Create | Update. - - - The Task Scheduler service registers the disabled task. A disabled task cannot run until it is enabled. For more information, see Enabled Property of TaskSettings and Enabled Property of RegisteredTask. - - - The Task Scheduler service is prevented from adding the allow access-control entry (ACE) for the context principal. When the TaskFolder.RegisterTaskDefinition or TaskFolder.RegisterTask functions are called with this flag to update a task, the Task Scheduler service does not add the ACE for the new context principal and does not remove the ACE from the old context principal. - - - The Task Scheduler service creates the task, but ignores the registration triggers in the task. By ignoring the registration triggers, the task will not execute when it is registered unless a time-based trigger causes it to execute on registration. - - - The Task Scheduler service registers the task as an updated version of an existing task. When a task with a registration trigger is updated, the task will execute after the update occurs. - - - The Task Scheduler service checks the syntax of the XML that describes the task but does not register the task. This constant cannot be combined with the Create, Update, or CreateOrUpdate values. - - - Defines how the Task Scheduler handles existing instances of the task when it starts a new instance of the task. - - - Starts new instance while an existing instance is running. - - - Starts a new instance of the task after all other instances of the task are complete. - - - Does not start a new instance if an existing instance of the task is running. - - - Stops an existing instance of the task before it starts a new instance. - - - Defines what logon technique is required to run a task. - - - The logon method is not specified. Used for non-NT credentials. - - - Use a password for logging on the user. The password must be supplied at registration time. - - - Use an existing interactive token to run a task. The user must log on using a service for user (S4U) logon. When an S4U logon is used, no password is stored by the system and there is no access to either the network or to encrypted files. - - - User must already be logged on. The task will be run only in an existing interactive session. - - - Group activation. The groupId field specifies the group. - - - Indicates that a Local System, Local Service, or Network Service account is being used as a security context to run the task. - - - First use the interactive token. If the user is not logged on (no interactive token is available), then the password is used. The password must be specified when a task is registered. This flag is not recommended for new tasks because it is less reliable than Password. - - - Defines which privileges must be required for a secured task. - - - Required to create a primary token. User Right: Create a token object. - - - Required to assign the primary token of a process. User Right: Replace a process-level token. - - - Required to lock physical pages in memory. User Right: Lock pages in memory. - - - Required to increase the quota assigned to a process. User Right: Adjust memory quotas for a process. - - - Required to read unsolicited input from a terminal device. User Right: Not applicable. - - - Required to create a computer account. User Right: Add workstations to domain. - - - This privilege identifies its holder as part of the trusted computer base. Some trusted protected subsystems are granted this privilege. User Right: Act as part of the operating system. - - - Required to perform a number of security-related functions, such as controlling and viewing audit messages. This privilege identifies its holder as a security operator. User Right: Manage auditing and the security log. - - - Required to take ownership of an object without being granted discretionary access. This privilege allows the owner value to be set only to those values that the holder may legitimately assign as the owner of an object. User Right: Take ownership of files or other objects. - - - Required to load or unload a device driver. User Right: Load and unload device drivers. - - - Required to gather profiling information for the entire system. User Right: Profile system performance. - - - Required to modify the system time. User Right: Change the system time. - - - Required to gather profiling information for a single process. User Right: Profile single process. - - - Required to increase the base priority of a process. User Right: Increase scheduling priority. - - - Required to create a paging file. User Right: Create a pagefile. - - - Required to create a permanent object. User Right: Create permanent shared objects. - - - Required to perform backup operations. This privilege causes the system to grant all read access control to any file, regardless of the access control list (ACL) specified for the file. Any access request other than read is still evaluated with the ACL. This privilege is required by the RegSaveKey and RegSaveKeyExfunctions. The following access rights are granted if this privilege is held: READ_CONTROL, ACCESS_SYSTEM_SECURITY, FILE_GENERIC_READ, FILE_TRAVERSE. User Right: Back up files and directories. - - - Required to perform restore operations. This privilege causes the system to grant all write access control to any file, regardless of the ACL specified for the file. Any access request other than write is still evaluated with the ACL. Additionally, this privilege enables you to set any valid user or group security identifier (SID) as the owner of a file. This privilege is required by the RegLoadKey function. The following access rights are granted if this privilege is held: WRITE_DAC, WRITE_OWNER, ACCESS_SYSTEM_SECURITY, FILE_GENERIC_WRITE, FILE_ADD_FILE, FILE_ADD_SUBDIRECTORY, DELETE. User Right: Restore files and directories. - - - Required to shut down a local system. User Right: Shut down the system. - - - Required to debug and adjust the memory of a process owned by another account. User Right: Debug programs. - - - Required to generate audit-log entries. Give this privilege to secure servers. User Right: Generate security audits. - - - Required to modify the nonvolatile RAM of systems that use this type of memory to store configuration information. User Right: Modify firmware environment values. - - - Required to receive notifications of changes to files or directories. This privilege also causes the system to skip all traversal access checks. It is enabled by default for all users. User Right: Bypass traverse checking. - - - Required to shut down a system by using a network request. User Right: Force shutdown from a remote system. - - - Required to undock a laptop. User Right: Remove computer from docking station. - - - Required for a domain controller to use the LDAP directory synchronization services. This privilege allows the holder to read all objects and properties in the directory, regardless of the protection on the objects and properties. By default, it is assigned to the Administrator and LocalSystem accounts on domain controllers. User Right: Synchronize directory service data. - - - Required to mark user and computer accounts as trusted for delegation. User Right: Enable computer and user accounts to be trusted for delegation. - - - Required to enable volume management privileges. User Right: Manage the files on a volume. - - - Required to impersonate. User Right: Impersonate a client after authentication. Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP with SP2, and Windows 2000 with SP4. - - - Required to create named file mapping objects in the global namespace during Terminal Services sessions. This privilege is enabled by default for administrators, services, and the local system account. User Right: Create global objects. Windows XP/2000: This privilege is not supported. Note that this value is supported starting with Windows Server 2003, Windows XP with SP2, and Windows 2000 with SP4. - - - Required to access Credential Manager as a trusted caller. User Right: Access Credential Manager as a trusted caller. - - - Required to modify the mandatory integrity level of an object. User Right: Modify an object label. - - - Required to allocate more memory for applications that run in the context of users. User Right: Increase a process working set. - - - Required to adjust the time zone associated with the computer's internal clock. User Right: Change the time zone. - - - Required to create a symbolic link. User Right: Create symbolic links. - - - Defines the types of process security identifier (SID) that can be used by tasks. These changes are used to specify the type of process SID in the IPrincipal2 interface. - - - No changes will be made to the process token groups list. - - - A task SID that is derived from the task name will be added to the process token groups list, and the token default discretionary access control list (DACL) will be modified to allow only the task SID and local system full control and the account SID read control. - - - A Task Scheduler will apply default settings to the task process. - - - Defines how a task is run. - - - The task is run with all flags ignored. - - - The task is run as the user who is calling the Run method. - - - The task is run regardless of constraints such as "do not run on batteries" or "run only if idle". - - - The task is run using a terminal server session identifier. - - - The task is run using a security identifier. - - - Defines LUA elevation flags that specify with what privilege level the task will be run. - - - Tasks will be run with the least privileges. - - - Tasks will be run with the highest privileges. - - - Defines what kind of Terminal Server session state change you can use to trigger a task to start. These changes are used to specify the type of state change in the SessionStateChangeTrigger. - - - Terminal Server console connection state change. For example, when you connect to a user session on the local computer by switching users on the computer. - - - Terminal Server console disconnection state change. For example, when you disconnect to a user session on the local computer by switching users on the computer. - - - Terminal Server remote connection state change. For example, when a user connects to a user session by using the Remote Desktop Connection program from a remote computer. - - - Terminal Server remote disconnection state change. For example, when a user disconnects from a user session while using the Remote Desktop Connection program from a remote computer. - - - Terminal Server session locked state change. For example, this state change causes the task to run when the computer is locked. - - - Terminal Server session unlocked state change. For example, this state change causes the task to run when the computer is unlocked. - - - Defines the different states that a registered task can be in. - - - The state of the task is unknown. - - - The task is registered but is disabled and no instances of the task are queued or running. The task cannot be run until it is enabled. - - - Instances of the task are queued. - - - The task is ready to be executed, but no instances are queued or running. - - - One or more instances of the task is running. - - - - Specifies how the Task Scheduler performs tasks when the computer is in an idle condition. For information about idle conditions, see Task Idle Conditions. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets a value that indicates the amount of time that the computer must be in an idle state before the task is run. - - - A value that indicates the amount of time that the computer must be in an idle state before the task is run. The minimum value is one minute. If this value is TimeSpan.Zero, then the delay will be set to the default of 10 minutes. - - - - - Gets or sets a Boolean value that indicates whether the task is restarted when the computer cycles into an idle condition more than once. - - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will terminate the task if the idle condition ends before the task is completed. - - - - - Gets or sets a value that indicates the amount of time that the Task Scheduler will wait for an idle condition to occur. If no value is specified for this property, then the Task Scheduler service will wait indefinitely for an idle condition to occur. - - - A value that indicates the amount of time that the Task Scheduler will wait for an idle condition to occur. The minimum time allowed is 1 minute. If this value is TimeSpan.Zero, then the delay will be set to the default of 1 hour. - - - - - Specifies the task settings the Task scheduler will use to start task during Automatic maintenance. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the amount of time after which the Task scheduler attempts to run the task during emergency Automatic maintenance, if the task failed to complete during regular Automatic maintenance. The minimum value is one day. The value of the property should be greater than the value of the property. If the deadline is not specified the task will not be started during emergency Automatic maintenance. - - Property set for a task on a Task Scheduler version prior to 2.2. - - - - Gets or sets a valud indicating whether the Task Scheduler must start the task during the Automatic maintenance in exclusive mode. The exclusivity is guaranteed only between other maintenance tasks and doesn't grant any ordering priority of the task. If exclusivity is not specified, the task is started in parallel with other maintenance tasks. - - Property set for a task on a Task Scheduler version prior to 2.2. - - - - Gets or sets the amount of time the task needs to be started during Automatic maintenance. The minimum value is one minute. - - Property set for a task on a Task Scheduler version prior to 2.2. - - - - Provides the settings that the Task Scheduler service uses to obtain a network profile. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets a GUID value that identifies a network profile. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the name of a network profile. The name is used for display purposes. - - Not supported under Task Scheduler 1.0. - - - - Provides the methods to get information from and control a running task. - - - - - Provides the methods that are used to run the task immediately, get any running instances of the task, get or set the credentials that are used to register the task, and the properties that describe the task. - - - - - Releases all resources used by this class. - - - - - Exports the task to the specified file in XML. - - Name of the output file. - - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the task described by the current object. - - A object that encapsulates the access control rules for the current task. - - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the task described by the current object. - - One of the values that specifies which group of access control entries to retrieve. - A object that encapsulates the access control rules for the current task. - - - - Gets all instances of the currently running registered task. - - A with all instances of current task. - Not supported under Task Scheduler 1.0. - - - - Gets the times that the registered task is scheduled to run during a specified time. - - The starting time for the query. - The ending time for the query. - The requested number of runs. A value of 0 will return all times requested. - The scheduled times that the task will run. - - - - Gets the security descriptor for the task. Not available to Task Scheduler 1.0. - - Section(s) of the security descriptor to return. - The security descriptor for the task. - Not supported under Task Scheduler 1.0. - - - - Updates the task with any changes made to the by calling from the currently registered folder using the currently registered name. - - Thrown if task was previously registered with a password. - - - - Runs the registered task immediately. - - The parameters used as values in the task actions. - A instance that defines the new instance of the task. - - - - Runs the registered task immediately using specified flags and a session identifier. - - Defines how the task is run. - The terminal server session in which you want to start the task. - The user for which the task runs. - The parameters used as values in the task actions. - A instance that defines the new instance of the task. - Not supported under Task Scheduler 1.0. - - - - Applies access control list (ACL) entries described by a object to the file described by the current object. - - A object that describes an access control list (ACL) entry to apply to the current task. - - - - Sets the security descriptor for the task. Not available to Task Scheduler 1.0. - - The security descriptor for the task. - Section(s) of the security descriptor to set. - Not supported under Task Scheduler 1.0. - - - - Dynamically tries to load the assembly for the editor and displays it as editable for this task. - - true if editor returns with Ok response; false otherwise. - The Microsoft.Win32.TaskSchedulerEditor.dll assembly must reside in the same directory as the Microsoft.Win32.TaskScheduler.dll or in the GAC. - - - - Shows the property page for the task (v1.0 only). - - - - - Stops the registered task immediately. - - - The Stop method stops all instances of the task. - System account users can stop a task, users with Administrator group privileges can stop a task, and if a user has rights to execute and read a task, then the user can stop the task. A user can stop the task instances that are running under the same credentials as the user account. In all other cases, the user is denied access to stop the task. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets the ITaskDefinition for a V2 task and prevents the errors that come when connecting remotely to a higher version of the Task Scheduler. - - The local task service. - The task instance. - if set to true this method will throw an exception if unable to get the task definition. - - A valid ITaskDefinition that should not throw errors on the local instance. - - Unable to get a compatible task definition for this version of the library. - - - - Gets the definition of the task. - - - - - Gets or sets a Boolean value that indicates if the registered task is enabled. - - As of version 1.8.1, under V1 systems (prior to Vista), this property will immediately update the Disabled state and re-save the current task. If changes have been made to the , then those changes will be saved. - - - - Gets an instance of the parent folder. - - - A object representing the parent folder of this task. - - - - - Gets a value indicating whether this task instance is active. - - - true if this task instance is active; otherwise, false. - - - - - Gets the time the registered task was last run. - - Returns if there are no prior run times. - - - - Gets the results that were returned the last time the registered task was run. - - - - - Gets the name of the registered task. - - - - - Gets the time when the registered task is next scheduled to run. - - Returns if there are no future run times. - - Potentially breaking change in release 1.8.2. For Task Scheduler 2.0, the return value prior to 1.8.2 would be Dec 30, 1899 - if there were no future run times. For 1.0, that value would have been DateTime.MinValue. In release 1.8.2 and later, all - versions will return DateTime.MinValue if there are no future run times. While this is different from the native 2.0 - library, it was deemed more appropriate to have consistency between the two libraries and with other .NET libraries. - - - - - Gets the number of times the registered task has missed a scheduled run. - - Not supported under Task Scheduler 1.0. - - - - Gets the path to where the registered task is stored. - - - - - Gets a value indicating whether this task is read only. Only available if is true. - - - true if read only; otherwise, false. - - - - - Gets or sets the security descriptor for the task. - - The security descriptor. - - - - Gets the operational state of the registered task. - - - - - Gets or sets the that manages this task. - - The task service. - - - - Gets the XML-formatted registration information for the registered task. - - - - - Releases all resources used by this class. - - - - - Refreshes all of the local instance variables of the task. - - - - - Gets the name of the current action that the running task is performing. - - - - - Gets the process ID for the engine (process) which is running the task. - - Not supported under Task Scheduler 1.0. - - - - Gets the GUID identifier for this instance of the task. - - - - - Gets the operational state of the running task. - - - - - Contains information about the compatibility of the current configuration with a specified version. - - - - - Gets the compatibility level. - - - The compatibility level. - - - - - Gets the property name with the incompatibility. - - - The property name. - - - - - Gets the reason for the imcompatibility. - - - The reason. - - - - - Defines all the components of a task, such as the task settings, triggers, actions, and registration information. - - - - - Determines whether this can use the Unified Scheduling Engine or if it contains unsupported properties. - - if set to true throws an with details about unsupported properties in the Data property of the exception. - true if this this can use the Unified Scheduling Engine; otherwise, false. - - - - Releases all resources used by this class. - - - - - Gets the Xml Schema file for V1 tasks. - - The for V1 tasks. - An object containing the Xml Schema for V1 tasks. - - - - Validates the current . - - if set to true throw a with details about invalid properties. - true if current is valid; false if not. - - - - Gets the lowest supported version. - - The output list. - - - - - Gets a collection of actions that are performed by the task. - - - - - Gets or sets the data that is associated with the task. This data is ignored by the Task Scheduler service, but is used by third-parties who wish to extend the task format. - - - - - Gets the lowest supported version that supports the settings for this . - - - - - Gets the principal for the task that provides the security credentials for the task. - - - - - Gets a class instance of registration information that is used to describe a task, such as the description of the task, the author of the task, and the date the task is registered. - - - - - Gets the settings that define how the Task Scheduler service performs the task. - - - - - Gets a collection of triggers that are used to start a task. - - - - - Gets or sets the XML-formatted definition of the task. - - - - - Provides the security credentials for a principal. These security credentials define the security context for the tasks that are associated with the principal. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Validates the supplied account against the supplied . - - The user or group account name. - The SID type for the process. - true if supplied account can be used for the supplied SID type. - - - - Gets or sets the name of the principal that is displayed in the Task Scheduler UI. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the identifier of the user group that is required to run the tasks that are associated with the principal. Setting this property to something other than a null or empty string, will set the property to NULL and will set the property to TaskLogonType.Group; - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the identifier of the principal. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the security logon method that is required to run the tasks that are associated with the principal. - - TaskLogonType values of Group, None, or S4UNot are not supported under Task Scheduler 1.0. - - - - Gets or sets the task process security identifier (SID) type. - - - One of the enumeration constants. - - Setting this value appears to break the Task Scheduler MMC and does not output in XML. Removed to prevent problems. - Not supported under Task Scheduler versions prior to 2.1. - - - - Gets the security credentials for a principal. These security credentials define the security context for the tasks that are associated with the principal. - - Setting this value appears to break the Task Scheduler MMC and does not output in XML. Removed to prevent problems. - - - - Gets or sets the identifier that is used to specify the privilege level that is required to run the tasks that are associated with the principal. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the user identifier that is required to run the tasks that are associated with the principal. Setting this property to something other than a null or empty string, will set the property to NULL; - - - - - List of security credentials for a principal under version 1.3 of the Task Scheduler. These security credentials define the security context for the tasks that are associated with the principal. - - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - is not a valid index in the . - - - - The is read-only. - - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - is not a valid index in the . - - - - The is read-only. - - - - - Adds an item to the . - - The object to add to the . - - The is read-only. - - - - - Removes all items from the . - - - The is read-only. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies to. - - The array. - Index of the array. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - The is read-only. - - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Gets or sets the element at the specified index. - - - The element at the specified index. - - - is not a valid index in the . - - - - The property is set and the is read-only. - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - - Gets a value indicating whether the is read-only. - - true if the is read-only; otherwise, false. - - - - - Enumerates the privileges set for a principal under version 1.3 of the Task Scheduler. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Advances the enumerator to the next element of the collection. - - - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - - The collection was modified after the enumerator was created. - - - - - Gets the element in the collection at the current position of the enumerator. - - - The element in the collection at the current position of the enumerator. - - - - - Provides the administrative information that can be used to describe the task. This information includes details such as a description of the task, the author of the task, the date the task is registered, and the security descriptor of the task. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets the author of the task. - - - - - Gets or sets the date and time when the task is registered. - - This property cannot be set on an unregistered task under Task Scheduler 1.0. - - - - Gets or sets the description of the task. - - - - - Gets or sets any additional documentation for the task. - - - - - Gets or sets the security descriptor of the task. - - The security descriptor. - - - - Gets or sets the security descriptor of the task. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets where the task originated from. For example, a task may originate from a component, service, application, or user. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the URI of the task. - - Not supported under Task Scheduler 1.0. - Note: Breaking change in version 2.0. This property was previously of type . It was found that in Windows 8, - many of the native tasks use this property in a string format rather than in a URI format. - - - - Gets or sets the version number of the task. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets an XML-formatted version of the registration information for the task. - - - - - Provides the settings that the Task Scheduler service uses to perform the task. - - - - - Releases all resources used by this class. - - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Gets or sets a Boolean value that indicates that the task can be started by using either the Run command or the Context menu. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the task may be terminated by using TerminateProcess. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets an integer value that indicates which version of Task Scheduler a task is compatible with. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the amount of time that the Task Scheduler will wait before deleting the task after it expires. If no value is specified for this property, then the Task Scheduler service will not delete the task. - - - Gets and sets the amount of time that the Task Scheduler will wait before deleting the task after it expires. For Task Scheduler 1.0, this property will return a TimeSpan of 1 second if the task is set to delete when done. For either version, TimeSpan.Zero will indicate that the task should not be deleted. - - - A task expires after the end boundary has been exceeded for all triggers associated with the task. The end boundary for a trigger is specified by the EndBoundary property of all trigger types. - - - - - Gets or sets a Boolean value that indicates that the task will not be started if the computer is running on battery power. - - - - - Gets or sets a Boolean value that indicates that the task will not be started if the task is triggered to run in a Remote Applications Integrated Locally (RAIL) session. - - Property set for a task on a Task Scheduler version prior to 2.1. - - - - Gets or sets a Boolean value that indicates that the task is enabled. The task can be performed only when this setting is TRUE. - - - - - Gets or sets the amount of time that is allowed to complete the task. By default, a task will be stopped 72 hours after it starts to run. - - - The amount of time that is allowed to complete the task. When this parameter is set to , the execution time limit is infinite. - - - If a task is started on demand, the ExecutionTimeLimit setting is bypassed. Therefore, a task that is started on demand will not be terminated if it exceeds the ExecutionTimeLimit. - - - - - Gets or sets a Boolean value that indicates that the task will not be visible in the UI by default. - - - - - Gets or sets the information that specifies how the Task Scheduler performs tasks when the computer is in an idle state. - - - - - Gets or sets the information that the Task Scheduler uses during Automatic maintenance. - - - - - Gets or sets the policy that defines how the Task Scheduler handles multiple instances of the task. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the network settings object that contains a network profile identifier and name. If the RunOnlyIfNetworkAvailable property of ITaskSettings is true and a network propfile is specified in the NetworkSettings property, then the task will run only if the specified network profile is available. - - - - - Gets or sets the priority level of the task. - - - The priority. - - Value set to AboveNormal or BelowNormal on Task Scheduler 1.0. - - - - Gets or sets the number of times that the Task Scheduler will attempt to restart the task. - - - The number of times that the Task Scheduler will attempt to restart the task. If this property is set, the property must also be set. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a value that specifies how long the Task Scheduler will attempt to restart the task. - - - A value that specifies how long the Task Scheduler will attempt to restart the task. If this property is set, the property must also be set. The maximum time allowed is 31 days, and the minimum time allowed is 1 minute. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will run the task only if the computer is in an idle condition. - - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will run the task only if the user is logged on (v1.0 only) - - Property set for a task on a Task Scheduler version other than 1.0. - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will run the task only when a network is available. - - - - - Gets or sets a Boolean value that indicates that the Task Scheduler can start the task at any time after its scheduled time has passed. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the task will be stopped if the computer switches to battery power. - - - - - Gets or sets a Boolean value that indicates that the Unified Scheduling Engine will be utilized to run this task. - - Property set for a task on a Task Scheduler version prior to 2.1. - - - - Gets or sets a boolean value that indicates whether the task is automatically disabled every time Windows starts. - - Property set for a task on a Task Scheduler version prior to 2.2. - - - - Gets or sets a Boolean value that indicates that the Task Scheduler will wake the computer when it is time to run the task. - - - - - Gets or sets an XML-formatted definition of the task settings. - - - - - Provides the methods that are used to register (create) tasks in the folder, remove tasks from the folder, and create or remove subfolders from the folder. - - - - - Releases all resources used by this class. - - - - - Compares the current object with another object of the same type. - - An object to compare with this object. - - A value that indicates the relative order of the objects being compared. The return value has the following meanings: Value Meaning Less than zero This object is less than the parameter.Zero This object is equal to . Greater than zero This object is greater than . - - - - - Creates a folder for related tasks. Not available to Task Scheduler 1.0. - - The name used to identify the folder. If "FolderName\SubFolder1\SubFolder2" is specified, the entire folder tree will be created if the folders do not exist. This parameter can be a relative path to the current instance. The root task folder is specified with a backslash (\). An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The security descriptor associated with the folder. - A instance that represents the new subfolder. - - - - Creates a folder for related tasks. Not available to Task Scheduler 1.0. - - The name used to identify the folder. If "FolderName\SubFolder1\SubFolder2" is specified, the entire folder tree will be created if the folders do not exist. This parameter can be a relative path to the current instance. The root task folder is specified with a backslash (\). An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The task security associated with the folder. - A instance that represents the new subfolder. - - - - Creates a folder for related tasks. Not available to Task Scheduler 1.0. - - The name used to identify the folder. If "FolderName\SubFolder1\SubFolder2" is specified, the entire folder tree will be created if the folders do not exist. This parameter can be a relative path to the current instance. The root task folder is specified with a backslash (\). An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The security descriptor associated with the folder. - A instance that represents the new subfolder. - Not supported under Task Scheduler 1.0. - - - - Deletes a subfolder from the parent folder. Not available to Task Scheduler 1.0. - - The name of the subfolder to be removed. The root task folder is specified with a backslash (\). This parameter can be a relative path to the folder you want to delete. An example of a task folder path, under the root task folder, is \MyTaskFolder. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - Set this value to false to avoid having an exception called if the folder does not exist. - Not supported under Task Scheduler 1.0. - - - - Deletes a task from the folder. - - The name of the task that is specified when the task was registered. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - Set this value to false to avoid having an exception called if the task does not exist. - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the task described by the current object. - - A object that encapsulates the access control rules for the current folder. - - - - Gets a object that encapsulates the specified type of access control list (ACL) entries for the task folder described by the current object. - - One of the values that specifies which group of access control entries to retrieve. - A object that encapsulates the access control rules for the current folder. - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Gets the security descriptor for the folder. Not available to Task Scheduler 1.0. - - Section(s) of the security descriptor to return. - The security descriptor for the folder. - - - - Gets the security descriptor for the folder. Not available to Task Scheduler 1.0. - - Section(s) of the security descriptor to return. - The security descriptor for the folder. - Not supported under Task Scheduler 1.0. - - - - Gets a collection of all the tasks in the folder whose name matches the optional . - - The optional name filter expression. - Collection of all matching tasks. - - - - Imports a from an XML file. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The file containing the XML-formatted definition of the task. - A instance that represents the new task. - Importing from an XML file is only supported under Task Scheduler 2.0. - - - - Registers (creates) a new task in the folder using XML to define the task. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - An XML-formatted definition of the task. - A union of flags. - The user credentials used to register the task. - The password for the userId used to register the task. - A value that defines what logon technique is used to run the registered task. - The security descriptor associated with the registered task. You can specify the access control list (ACL) in the security descriptor for a task in order to allow or deny certain users and groups access to a task. - A instance that represents the new task. - - - - Registers (creates) a task in a specified location using a instance to define a task. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The of the registered task. - A instance that represents the new task. - - - - Registers (creates) a task in a specified location using a instance to define a task. - - The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path. - The of the registered task. - A union of flags. - The user credentials used to register the task. - The password for the userId used to register the task. - A value that defines what logon technique is used to run the registered task. - The security descriptor associated with the registered task. You can specify the access control list (ACL) in the security descriptor for a task in order to allow or deny certain users and groups access to a task. - - A instance that represents the new task. This will return null if is set to ValidateOnly and there are no validation errors. - - - Path;Task names may not include any characters which are invalid for file names. - or - Path;Task names ending with a period followed by three or fewer characters cannot be retrieved due to a bug in the native library. - - This LogonType is not supported on Task Scheduler 1.0. - or - Security settings are not available on Task Scheduler 1.0. - or - Registration triggers are not available on Task Scheduler 1.0. - or - Xml validation not available on Task Scheduler 1.0. - - - - Applies access control list (ACL) entries described by a object to the file described by the current object. - - A object that describes an access control list (ACL) entry to apply to the current folder. - - - - Sets the security descriptor for the folder. Not available to Task Scheduler 1.0. - - The security descriptor for the folder. - Section(s) of the security descriptor to set. - - - - Sets the security descriptor for the folder. Not available to Task Scheduler 1.0. - - The security descriptor for the folder. - Section(s) of the security descriptor to set. - Not supported under Task Scheduler 1.0. - - - - Returns a that represents this instance. - - - A that represents this instance. - - - - - Enumerates the tasks in the specified folder and its child folders. - - The folder in which to start enumeration. - A that can be used to iterate through the tasks. - - - - Gets a which enumerates all the tasks in this and all subfolders. - - - A for all instances. - - - - - Gets the name that is used to identify the folder that contains a task. - - - - - Gets the parent folder of this folder. - - - The parent folder, or null if this folder is the root folder. - - - - - Gets the path to where the folder is stored. - - - - - Gets or sets the security descriptor of the task. - - The security descriptor. - - - - Gets all the subfolders in the folder. - - - - - Gets a collection of all the tasks in the folder. - - - - - Gets or sets the that manages this task. - - The task service. - - - - Contains all the tasks that are registered. - - Potentially breaking change in 1.6.2 and later where under V1 the list previously included the '.job' extension on the task name. This has been removed so that it is consistent with V2. - - - - Releases all resources used by this class. - - - - - Gets the collection enumerator for the register task collection. - - An for this collection. - - - - Determines whether the specified task exists. - - The name of the task. - true if task exists; otherwise, false. - - - - Gets the number of registered tasks in the collection. - - - - - Gets or sets the regular expression filter for task names. - - The regular expression filter. - - - - Gets the specified registered task from the collection. - - The index of the registered task to be retrieved. - A instance that contains the requested context. - - - - Gets the named registered task from the collection. - - The name of the registered task to be retrieved. - A instance that contains the requested context. - - - - Internal constructor - - TaskService instance - The filter. - - - - Releases all resources used by this class. - - - - - Moves to the next task. See MoveNext for more information. - - true if next task found, false if no more tasks. - - - - Reset task enumeration. See Reset for more information. - - - - - Retrieves the current task. See for more information. - - - - - Releases all resources used by this class. - - - - - Collection of running tasks. - - - - - Releases all resources used by this class. - - - - - Gets an IEnumerator instance for this collection. - - An enumerator. - - - - Gets the number of registered tasks in the collection. - - - - - Gets the specified running task from the collection. - - The index of the running task to be retrieved. - A instance. - - - - Releases all resources used by this class. - - - - - Releases all resources used by this class. - - - - - Provides information and control for a collection of folders that contain tasks. - - - - - Adds an item to the . - - The object to add to the . - This action is technically unfeasable due to limitations of the underlying library. Use the instead. - - - - Removes all items from the . - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Copies the elements of the ICollection to an Array, starting at a particular Array index. - - The one-dimensional Array that is the destination of the elements copied from . The Array must have zero-based indexing. - The zero-based index in array at which copying begins. - - - - Releases all resources used by this class. - - - - - Determines whether the specified folder exists. - - The path of the folder. - true if folder exists; otherwise, false. - - - - Gets a list of items in a collection. - - Enumerated list of items in the collection. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Gets the number of items in the collection. - - - - - Gets a value indicating whether the is read-only. - - - - - Gets the specified folder from the collection. - - The index of the folder to be retrieved. - A TaskFolder instance that represents the requested folder. - - - - Gets the specified folder from the collection. - - The path of the folder to be retrieved. - A TaskFolder instance that represents the requested folder. - - - - Releases all resources used by this class. - - - - - Defines the methods that are called by the Task Scheduler service to manage a COM handler. - - - This interface must be implemented for a task to perform a COM handler action. When the Task Scheduler performs a COM handler action, it creates and activates the handler and calls the methods of this interface as needed. For information on specifying a COM handler action, see the class. - - - - - Called to start the COM handler. This method must be implemented by the handler. - - An IUnkown interface that is used to communicate back with the Task Scheduler. - The arguments that are required by the handler. These arguments are defined in the property of the COM handler action. - - - - Called to stop the COM handler. This method must be implemented by the handler. - - The return code that the Task Schedule will raise as an event when the COM handler action is completed. - - - - Called to pause the COM handler. This method is optional and should only be implemented to give the Task Scheduler the ability to pause and restart the handler. - - - - - Called to resume the COM handler. This method is optional and should only be implemented to give the Task Scheduler the ability to resume the handler. - - - - - Provides the methods that are used by COM handlers to notify the Task Scheduler about the status of the handler. - - - - - Tells the Task Scheduler about the percentage of completion of the COM handler. - - A value that indicates the percentage of completion for the COM handler. - The message that is displayed in the Task Scheduler UI. - - - - Tells the Task Scheduler that the COM handler is completed. - - The error code that the Task Scheduler will raise as an event. - - - - Abstract base class which provides the common properties that are inherited by all trigger classes. A trigger can be created using the or the method. - - - - - Creates a trigger using a cron string. - - String using cron defined syntax for specifying a time interval. See remarks for syntax. - Array of representing the specified cron string. - Unsupported cron string. - - NOTE: This method does not support all combinations of cron strings. Please test extensively before use. Please post an issue with any syntax that should work, but doesn't. - Currently the cronString only supports numbers and not any of the weekday or month strings. Please use numeric equivalent. - This section borrows liberally from the site http://www.nncron.ru/help/EN/working/cron-format.htm. The cron format consists of five fields separated by white spaces: - - <Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week> - - Each item has bounds as defined by the following: - - * * * * * - | | | | | - | | | | +---- Day of the Week (range: 1-7, 1 standing for Monday) - | | | +------ Month of the Year (range: 1-12) - | | +-------- Day of the Month (range: 1-31) - | +---------- Hour (range: 0-23) - +------------ Minute (range: 0-59) - - Any of these 5 fields may be an asterisk (*). This would mean the entire range of possible values, i.e. each minute, each hour, etc. - Any of the first 4 fields can be a question mark ("?"). It stands for the current time, i.e. when a field is processed, the current time will be substituted for the question mark: minutes for Minute field, hour for Hour field, day of the month for Day of month field and month for Month field. - Any field may contain a list of values separated by commas, (e.g. 1,3,7) or a range of values (two integers separated by a hyphen, e.g. 1-5). - After an asterisk (*) or a range of values, you can use character / to specify that values are repeated over and over with a certain interval between them. For example, you can write "0-23/2" in Hour field to specify that some action should be performed every two hours (it will have the same effect as "0,2,4,6,8,10,12,14,16,18,20,22"); value "*/4" in Minute field means that the action should be performed every 4 minutes, "1-30/3" means the same as "1,4,7,10,13,16,19,22,25,28". - - - - In testing and may change. Do not use until officially introduced into library. - - - - Creates a new that is an unbound copy of this instance. - - - A new that is an unbound copy of this instance. - - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Releases all resources used by this class. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Sets the repetition. - - The amount of time between each restart of the task. The maximum time allowed is 31 days, and the minimum time allowed is 1 minute. - The duration of how long the pattern is repeated. The minimum time allowed is one minute. If TimeSpan.Zero is specified, the pattern is repeated indefinitely. - if set to true the running instance of the task is stopped at the end of repetition pattern duration. - - - - Returns a string representing this trigger. - - String value of trigger. - - - - Returns a that represents this trigger in a specific language. - - The language of the resulting string. - String value of trigger. - - - - Creates the specified trigger. - - Type of the trigger to instantiate. - of specified type. - - - - Checks the bind value for any conversion. - - The key (property) name. - The value. - - - Assigns the unbound TriggerData structure to the V1 trigger instance. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets the best time span string. - - The to display. - Either the full string representation created by TimeSpan2 or the default TimeSpan representation. - - - - Gets or sets a Boolean value that indicates whether the trigger is enabled. - - - - - Gets or sets the date and time when the trigger is deactivated. The trigger cannot start the task after it is deactivated. - - - Version 1 (1.1 on all systems prior to Vista) of the native library only allows for the Day, Month and Year values of the structure. - Version 2 (1.2 or higher) of the native library only allows for both date and time and all values. However, the user interface and methods - will always show the time translated to local time. The library makes every attempt to maintain the Kind value. When using the UI elements provided in the TaskSchedulerEditor - library, the "Synchronize across time zones" checkbox will be checked if the Kind is Local or Utc. If the Kind is Unspecified and the user selects the checkbox, the Kind will - be changed to Utc and the time adjusted from the value displayed as the local time. - - - - - - Gets or sets the maximum amount of time that the task launched by this trigger is allowed to run. Not available with Task Scheduler 1.0. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the identifier for the trigger. Cannot set with Task Scheduler 1.0. - - Not supported under Task Scheduler 1.0. - - - - Gets a instance that indicates how often the task is run and how long the repetition pattern is repeated after the task is started. - - - - - Gets or sets the date and time when the trigger is activated. - - - Version 1 (1.1 on all systems prior to Vista) of the native library only allows for values where the is unspecified. - If the DateTime value Kind is then it will be used as is. If the DateTime value Kind is then it will be - converted to the local time and then used. - - Version 2 (1.2 or higher) of the native library only allows for all values. However, the user interface and methods - will always show the time translated to local time. The library makes every attempt to maintain the Kind value. When using the UI elements provided in the TaskSchedulerEditor - library, the "Synchronize across time zones" checkbox will be checked if the Kind is Local or Utc. If the Kind is Unspecified and the user selects the checkbox, the Kind will - be changed to Utc and the time adjusted from the value displayed as the local time. - - Under Version 2, when converting the string used in the native library for this value (ITrigger.Startboundary) this library will behave as follows: - - YYYY-MM-DDTHH:MM:SS format uses DateTimeKind.Unspecified and the time specified. - YYYY-MM-DDTHH:MM:SSZ format uses DateTimeKind.Utc and the time specified as the GMT time. - YYYY-MM-DDTHH:MM:SS±HH:MM format uses DateTimeKind.Local and the time specified in that time zone. - - - - - - - Gets the type of the trigger. - - The of the trigger. - - - In testing and may change. Do not use until officially introduced into library. - - - Values for days of the week (Monday, Tuesday, etc.) - - - Sunday - - - Monday - - - Tuesday - - - Wednesday - - - Thursday - - - Friday - - - Saturday - - - All days - - - Values for months of the year (January, February, etc.) - - - January - - - February - - - March - - - April - - - May - - - June - - - July - - - August - - - September - - - October - - - November - - - December - - - All months - - - Defines the type of triggers that can be used by tasks. - - - Triggers the task when a specific event occurs. Version 1.2 only. - - - Triggers the task at a specific time of day. - - - Triggers the task on a daily schedule. - - - Triggers the task on a weekly schedule. - - - Triggers the task on a monthly schedule. - - - Triggers the task on a monthly day-of-week schedule. - - - Triggers the task when the computer goes into an idle state. - - - Triggers the task when the task is registered. Version 1.2 only. - - - Triggers the task when the computer boots. - - - Triggers the task when a specific user logs on. - - - Triggers the task when a specific user session state changes. Version 1.2 only. - - - Triggers the custom trigger. Version 1.3 only. - - - Values for week of month (first, second, ..., last) - - - First week of the month - - - Second week of the month - - - Third week of the month - - - Fourth week of the month - - - Last week of the month - - - Every week of the month - - - - Interface that categorizes the trigger as a calendar trigger. - - - - - Interface for triggers that support a delay. - - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Interface for triggers that support a user identifier. - - - - - Gets or sets the user for the . - - - - - Represents a trigger that starts a task when the system is booted. - - - - - Creates an unbound instance of a . - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - Not supported under Task Scheduler 1.0. - - - - Represents a custom trigger. This class is based on undocumented features and may change. - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Updates custom properties from XML provided by definition. - - The XML from the TaskDefinition. - - - - Clones this instance. - - This method will always throw an exception. - CustomTrigger cannot be cloned due to OS restrictions. - - - - Gets the properties from the Xml definition if possible. - - - - - Gets the name of the custom trigger type. - - - The name of the XML element representing this custom trigger. - - - - - Gets a value that indicates the amount of time between the trigger events and when the task is started. - - This value cannot be set. - - - - Represents a trigger that starts a task based on a daily schedule. For example, the task starts at a specific time every day, every other day, every third day, and so on. - - - - - Creates an unbound instance of a . - - Interval between the days in the schedule. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Sets or retrieves the interval between the days in the schedule. - - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Represents a trigger that starts a task when a system event occurs. Not available on Task Scheduler 1.0. - - - - - Creates an unbound instance of a . - - - - - Initializes an unbound instance of the class and sets a basic event. - - The event's log. - The event's source. Can be null. - The event's id. Can be null. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Builds an event log XML query string based on the input parameters. - - The event's log. - The event's source. Can be null. - The event's id. Can be null. - XML query string. - log - - - - Gets basic event information. - - The event's log. - The event's source. Can be null. - The event's id. Can be null. - true if subscription represents a basic event, false if not. - - - - Sets the subscription for a basic event. This will replace the contents of the property and clear all entries in the property. - - The event's log. - The event's source. Can be null. - The event's id. Can be null. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - - - - Gets or sets the XPath query string that identifies the event that fires the trigger. - - - - - Gets a collection of named XPath queries. Each query in the collection is applied to the last matching event XML returned from the subscription query specified in the Subscription property. The name of the query can be used as a variable in the message of a action. - - - - - Represents a trigger that starts a task when the computer goes into an idle state. For information about idle conditions, see Task Idle Conditions. - - - - - Creates an unbound instance of a . - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Represents a trigger that starts a task when a user logs on. When the Task Scheduler service starts, all logged-on users are enumerated and any tasks registered with logon triggers that match the logged on user are run. Not available on Task Scheduler 1.0. - - - - - Creates an unbound instance of a . - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets The identifier of the user. For example, "MyDomain\MyName" or for a local account, "Administrator". - This property can be in one of the following formats: - • User name or SID: The task is started when the user logs on to the computer. - • NULL: The task is started when any user logs on to the computer. - - If you want a task to be triggered when any member of a group logs on to the computer rather than when a specific user logs on, then do not assign a value to the LogonTrigger.UserId property. Instead, create a logon trigger with an empty LogonTrigger.UserId property and assign a value to the principal for the task using the Principal.GroupId property. - Not supported under Task Scheduler 1.0. - - - - Represents a trigger that starts a task on a monthly day-of-week schedule. For example, the task starts on every first Thursday, May through October. - - - - - Creates an unbound instance of a . - - The days of the week. - The months of the year. - The weeks of the month. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Reads the subclass XML for V1 streams. - - The reader. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Writes the subclass XML for V1 streams. - - The writer. - - - - Gets or sets the days of the week during which the task runs. - - - - - Gets or sets the months of the year during which the task runs. - - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the task runs on the last week of the month. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the weeks of the month during which the task runs. - - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Represents a trigger that starts a job based on a monthly schedule. For example, the task starts on specific days of specific months. - - - - - Creates an unbound instance of a . - - The day of the month. - The months of the year. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Converts an array of bit indices into a mask with bits turned ON at every index - contained in the array. Indices must be from 1 to 32 and bits are numbered the same. - - An array with an element for each bit of the mask which is ON. - An interger to be interpreted as a mask. - - - - Convert an integer representing a mask to an array where each element contains the index - of a bit that is ON in the mask. Bits are considered to number from 1 to 32. - - An interger to be interpreted as a mask. - An array with an element for each bit of the mask which is ON. - - - - Reads the subclass XML for V1 streams. - - The reader. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets the days of the month during which the task runs. - - - - - Gets or sets the months of the year during which the task runs. - - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a Boolean value that indicates that the task runs on the last day of the month. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Represents a trigger that starts a task when the task is registered or updated. Not available on Task Scheduler 1.0. - - - - - Creates an unbound instance of a . - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - Not supported under Task Scheduler 1.0. - - - - Defines how often the task is run and how long the repetition pattern is repeated after the task is started. - - - - - Releases all resources used by this class. - - - - - Determines whether the specified , is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Determines whether any properties for this have been set. - - - true if properties have been set; otherwise, false. - - - - - Gets or sets how long the pattern is repeated. - - - The duration that the pattern is repeated. The minimum time allowed is one minute. If TimeSpan.Zero is specified, the pattern is repeated indefinitely. - - If you specify a repetition duration for a task, you must also specify the repetition interval. - - - - Gets or sets the amount of time between each restart of the task. - - - The amount of time between each restart of the task. The maximum time allowed is 31 days, and the minimum time allowed is 1 minute. - - If you specify a repetition duration for a task, you must also specify the repetition interval. - The maximum time allowed is 31 days, and the minimum time allowed is 1 minute. - - - - Gets or sets a Boolean value that indicates if a running instance of the task is stopped at the end of repetition pattern duration. - - - - - Triggers tasks for console connect or disconnect, remote connect or disconnect, or workstation lock or unlock notifications. - - - - - Creates an unbound instance of a . - - - - - Initializes a new instance of the class. - - The state change. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Returns a value indicating if the StateChange property has been set. - - StateChange property has been set. - - - - Gets or sets a value that indicates the amount of time between when the system is booted and when the task is started. - - - - - Gets or sets the kind of Terminal Server session change that would trigger a task launch. - - - - - Gets or sets the user for the Terminal Server session. When a session state change is detected for this user, a task is started. - - - - - Represents a trigger that starts a task at a specific date and time. - - - - - Creates an unbound instance of a . - - - - - Creates an unbound instance of a and assigns the execution time. - - Date and time for the trigger to fire. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Represents a trigger that starts a task based on a weekly schedule. For example, the task starts at 8:00 A.M. on a specific day of the week every week or every other week. - - - - - Creates an unbound instance of a . - - The days of the week. - The interval between the weeks in the schedule. - - - - Copies the properties from another the current instance. This will not copy any properties associated with any derived triggers except those supporting the interface. - - The source . - - - - Indicates whether the current object is equal to another object of the same type. - - An object to compare with this object. - - true if the current object is equal to the parameter; otherwise, false. - - - - - Reads the subclass XML for V1 streams. - - The reader. - - - - Gets the non-localized trigger string for V2 triggers. - - String describing the trigger. - - - - Writes the subclass XML for V1 streams. - - The writer. - - - - Gets or sets the days of the week on which the task runs. - - - - - Gets or sets a delay time that is randomly added to the start time of the trigger. - - Not supported under Task Scheduler 1.0. - - - - Gets or sets the interval between the weeks in the schedule. - - - - - Gets or sets a value that indicates the amount of time before the task is started. - - The delay duration. - - - - Provides the methods that are used to add to, remove from, and get the triggers of a task. - - - - - Releases all resources used by this class. - - - - - Gets the collection enumerator for this collection. - - The for this collection. - - - - Add an unbound to the task. - - derivative to add to the task. - Bound trigger. - unboundTrigger is null. - - - - Add a new trigger to the collections of triggers for the task. - - The type of trigger to create. - A instance of the specified type. - - - - Adds a collection of unbound triggers to the end of the . - - The triggers to be added to the end of the . The collection itself cannot be null and cannot contain null elements. - triggers is null. - - - - Clears all triggers from the task. - - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Determines whether the specified trigger type is contained in this collection. - - Type of the trigger. - - true if the specified trigger type is contained in this collection; otherwise, false. - - - - - Copies the elements of the to an , starting at a particular index. - - The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. - The zero-based index in at which copying begins. - is null. - is less than 0. - The number of elements in the source is greater than the available space from to the end of the destination . - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Determines the index of a specific item in the . - - The id () of the trigger to be retrieved. - - The index of if found in the list; otherwise, -1. - - - - - Inserts an trigger at the specified index. - - The zero-based index at which trigger should be inserted. - The trigger to insert into the list. - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - - - - Removes the trigger at a specified index. - - Index of trigger to remove. - Index out of range. - - - - Returns a that represents the triggers in this collection. - - - A that represents the triggers in this collection. - - - - - Gets the number of triggers in the collection. - - - - - Gets a specified trigger from the collection. - - The index of the trigger to be retrieved. - Specialized instance. - - - - Gets or sets a specified trigger from the collection. - - - The . - - The id () of the trigger to be retrieved. - - Specialized instance. - - - - - Mismatching Id for trigger and lookup. - - - - Releases all resources used by this class. - - - - - Releases all resources used by this class. - - - - - Options for a task, used for the Flags property of a Task. Uses the - "Flags" attribute, so these values are combined with |. - Some flags are documented as Windows 95 only, but they have a - user interface in Windows XP so that may not be true. - - - - - The interactive flag is set if the task is intended to be displayed to the user. - If the flag is not set, no user interface associated with the task is presented - to the user when the task is executed. - - - - - The task will be deleted when there are no more scheduled run times. - - - - - The task is disabled. This is useful to temporarily prevent a task from running - at the scheduled time(s). - - - - - The task begins only if the computer is not in use at the scheduled start time. Windows 95 only. - - - - - The task terminates if the computer makes an idle to non-idle transition while the task is running. - The computer is not considered idle until the IdleWait triggers' time elapses with no user input. - Windows 95 only. For information regarding idle triggers, see . - - - - - The task does not start if its target computer is running on battery power. Windows 95 only. - - - - - The task ends, and the associated application quits if the task's target computer switches - to battery power. Windows 95 only. - - - - - The task runs only if the system is docked. Windows 95 only. - - - - - The work item created will be hidden. - - - - - The task runs only if there is currently a valid Internet connection. - This feature is currently not implemented. - - - - - The task starts again if the computer makes a non-idle to idle transition before all the - task's task_triggers elapse. (Use this flag in conjunction with KillOnIdleEnd.) Windows 95 only. - - - - - The task runs only if the SYSTEM account is available. - - - - - The task runs only if the user specified in SetAccountInformation is logged on interactively. - This flag has no effect on work items set to run in the local account. - - - - - Status values returned for a task. Some values have been determined to occur although - they do no appear in the Task Scheduler system documentation. - - - - The task is ready to run at its next scheduled time. - - - The task is currently running. - - - One or more of the properties that are needed to run this task on a schedule have not been set. - - - The task has not yet run. - - - The task will not run at the scheduled times because it has been disabled. - - - There are no more runs scheduled for this task. - - - The last run of the task was terminated by the user. - - - Either the task has no triggers or the existing triggers are disabled or not set. - - - Event triggers don't have set run times. - - - Valid types of triggers - - - Trigger is set to run the task a single time. - - - Trigger is set to run the task on a daily interval. - - - Trigger is set to run the work item on specific days of a specific week of a specific month. - - - Trigger is set to run the task on a specific day(s) of the month. - - - Trigger is set to run the task on specific days, weeks, and months. - - - Trigger is set to run the task if the system remains idle for the amount of time specified by the idle wait time of the task. - - - Trigger is set to run the task at system startup. - - - Trigger is set to run the task when a user logs on. - - - - Represents a wildcard running on the - engine. - - - - - Initializes a wildcard with the given search pattern and options. - - The wildcard pattern to match. - A combination of one or more . - - - - Converts a wildcard to a regex. - - The wildcard pattern to convert. - A regex equivalent of the given wildcard. - - - diff --git a/1.5 'Kruger 60'/Third-party/TaskScheduler/readme.txt b/1.5 'Kruger 60'/Third-party/TaskScheduler/readme.txt deleted file mode 100644 index d1684c10..00000000 --- a/1.5 'Kruger 60'/Third-party/TaskScheduler/readme.txt +++ /dev/null @@ -1,7 +0,0 @@ -Task Scheduler Managed Wrapper - -Project main page: https://taskscheduler.codeplex.com/ - -Release 2.2.2: https://taskscheduler.codeplex.com/downloads/get/825897 - - diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/FilenameTextBox.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/FilenameTextBox.cs deleted file mode 100644 index 820f875f..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/FilenameTextBox.cs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Controls -{ - [ToolboxBitmap(typeof(TextBox))] - public class FilenameTextBox : TextBox - { - private char[] InvalidCharacters; - private string InvalidCharacterText; - private bool ManualUpdateOfValue; - - public FilenameTextBox() - { - InvalidCharacters = TextUtils.GetFilenameInvalidChars(); - } // constructor - - /// - /// Sets the text and removes invalid characters if needed - /// - /// Text to set - public void SetText(string text, bool raiseTextChangedEvent) - { - ManualUpdateOfValue = true; - this.Text = text; - RemoveInvalidChars(false); - ManualUpdateOfValue = false; - - if (raiseTextChangedEvent) - { - base.OnTextChanged(EventArgs.Empty); - } // if - } // SetText - - protected override void OnTextChanged(EventArgs e) - { - if (ManualUpdateOfValue) return; - if (RemoveInvalidChars(true)) return; - - base.OnTextChanged(e); - } // OnTextChanged - - private void DisplayInvalidCharacterWarning() - { - if (InvalidCharacterText == null) - { - StringBuilder buffer; - - buffer = new StringBuilder(); - buffer.Append(Properties.Filename.InputInvalidChar); - buffer.AppendLine(); - buffer.AppendLine(); - - var invalid = from c in InvalidCharacters - where c >= 31 - orderby c - select c; - - foreach (var ch in invalid) - { - buffer.Append(' '); - buffer.Append(ch); - } // foreach - InvalidCharacterText = buffer.ToString(); - } // if - - MessageBox.Show(this, InvalidCharacterText, Properties.Filename.InputInvalidCharCaption, - MessageBoxButtons.OK, MessageBoxIcon.Warning); - } // DisplayInvalidCharacterWarning - - private bool RemoveInvalidChars(bool displayWarning) - { - bool modified; - int caretPos; - - var newText = TextUtils.RemoveInvalidChars(this.Text, InvalidCharacters, null, out modified); - if (!modified) return false; - - if (displayWarning) - { - DisplayInvalidCharacterWarning(); - } // if - - ManualUpdateOfValue = true; - caretPos = this.SelectionStart; - this.Text = newText; - this.SelectionStart = (caretPos <= 0)? 0 : caretPos - 1; - ManualUpdateOfValue = false; - - return true; - } // RemoveInvalidChars - } // class FilenameTextBox -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/ListItemsManager.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/ListItemsManager.cs deleted file mode 100644 index 777febf3..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/ListItemsManager.cs +++ /dev/null @@ -1,195 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Controls -{ - public class ListItemsManager - { - private ListBox ListBox; - private Control RemoveControl, UpControl, DownControl; - private IDictionary Dictionary; - - public ListItemsManager(ListBox listBox, Control removeControl, Control upControl, Control downControl) - { - if ((listBox == null) || (removeControl == null) || (upControl == null) || (downControl == null)) - { - throw new ArgumentNullException(); - } // if - - if ((listBox.SelectionMode == SelectionMode.MultiSimple) || (listBox.SelectionMode == SelectionMode.MultiExtended)) - { - throw new ArgumentException("listBox"); - } // if - - ListBox = listBox; - RemoveControl = removeControl; - UpControl = upControl; - DownControl = downControl; - - RemoveControl.Enabled = false; - UpControl.Enabled = false; - DownControl.Enabled = false; - - ListBox.DisplayMember = "Value"; - ListBox.ValueMember = "Key"; - ListBox.SelectedIndexChanged += ListBox_SelectedIndexChanged; - } // constructor - - public void SetValueDictionary(IList> items, IEqualityComparer comparer) - { - if (items == null) throw new ArgumentNullException("items"); - - Dictionary = new Dictionary(items.Count, comparer); - foreach (var item in items) - { - Dictionary.Add(item); - } // if - } // SetValueDictionary - - public void SetValueDictionary(IDictionary dictionary) - { - if (dictionary == null) throw new ArgumentNullException("dictionary"); - Dictionary = dictionary; - } // SetValueDictionary - - public int Add(TValue value, string text) - { - return Add(new KeyValuePair(value, text)); - } // Add - - public int Add(KeyValuePair item) - { - var index = ListBox.Items.Add(item); - ListBox.SelectedIndex = index; - - return index; - } // Add - - public void Add(IEnumerable> items) - { - Add(items.ToArray()); - } // Add - - public void Add(IList> items) - { - var add = new object[items.Count]; - for (int index = 0; index < items.Count;index++ ) - { - add[index] = items[index]; - } // for - AddItems(add); - } // Add - - public void Add(KeyValuePair[] items) - { - var add = new object[items.Length]; - Array.Copy(items, add, items.Length); - AddItems(add); - } // Add - - public int Add(TValue value) - { - if (Dictionary == null) throw new InvalidOperationException(); - - return Add(value, Dictionary[value]); - } // Add - - public void Add(IList values) - { - if (Dictionary == null) throw new InvalidOperationException(); - - var add = new object[values.Count]; - for (int index = 0; index < values.Count; index++) - { - var value = values[index]; - add[index] = new KeyValuePair(value, Dictionary[value]); - } // for - AddItems(add); - } // Add - - public List GetListValues() - { - var count = ListBox.Items.Count; - var result = new List(count); - - for (int index = 0; index < count; index++) - { - var item = (KeyValuePair)ListBox.Items[index]; - result.Add(item.Key); - } // for - - return result; - } // GetListValues - - public IList> GetListItems() - { - var count = ListBox.Items.Count; - var result = new List>(count); - - for (int index = 0; index < count; index++) - { - var item = (KeyValuePair)ListBox.Items[index]; - result.Add(item); - } // for - - return result; - } // GetListItems - - public void RemoveSelection() - { - var index = ListBox.SelectedIndex; - if (index < 0) throw new InvalidOperationException(); - - ListBox.Items.RemoveAt(index); - - if (index >= ListBox.Items.Count) index -= 1; - ListBox.SelectedIndex = index; - } // RemoveSelection - - public void MoveSelectionUp() - { - var index = ListBox.SelectedIndex; - if (index < 0) throw new InvalidOperationException(); - - var upItem = ListBox.Items[index - 1]; - var current = ListBox.Items[index]; - - ListBox.Items[index - 1] = current; - ListBox.Items[index] = upItem; - - ListBox.SelectedIndex = index - 1; - } // MoveUp - - public void MoveSelectionDown() - { - var index = ListBox.SelectedIndex; - if ((index +1) >= ListBox.Items.Count) throw new InvalidOperationException(); - - var current = ListBox.Items[index]; - var downItem = ListBox.Items[index + 1]; - - ListBox.Items[index + 1] = current; - ListBox.Items[index] = downItem; - - ListBox.SelectedIndex = index + 1; - } // MoveDown - - private void ListBox_SelectedIndexChanged(object sender, EventArgs e) - { - var index = ListBox.SelectedIndex; - RemoveControl.Enabled = (index >= 0) && (ListBox.Items.Count > 0); - UpControl.Enabled = (index > 0) && (ListBox.Items.Count > 1); - DownControl.Enabled = ((index + 1) < ListBox.Items.Count); - } // ListBox_SelectedIndexChanged - - private void AddItems(object[] items) - { - var index = ListBox.SelectedIndex; - ListBox.Items.AddRange(items); - ListBox.SelectedIndex = index; - } // AddItems - } // class ListItemsManager -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewColumnItemComparer.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewColumnItemComparer.cs deleted file mode 100644 index 07d4432d..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewColumnItemComparer.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Controls -{ - public class ListViewColumnItemComparer : IComparer - { - private int ColumnIndex; - private int ResultSign; - - public ListViewColumnItemComparer(int columnIndex, bool descending) - { - ColumnIndex = columnIndex; - ResultSign = descending ? -1 : 1; - } // ListViewColumnItemSorter - - public int Compare(object x, object y) - { - ListViewItem item1, item2; - int compare; - - item1 = x as ListViewItem; - item2 = y as ListViewItem; - - if (object.Equals(item1, item2)) return 0; - - compare = ResultSign * string.Compare(GetSafeText(item1, ColumnIndex), GetSafeText(item2, ColumnIndex)); - if ((compare == 0) && (ColumnIndex > 0)) - { - compare = string.Compare(item1.SubItems[0].Text, item2.SubItems[0].Text); - } // if - - return compare; - } // Compare - - private static string GetSafeText(ListViewItem item, int subItemIndex) - { - if (subItemIndex >= item.SubItems.Count) return null; - return item.SubItems[subItemIndex].Text; - } // GetSafeText - } // class ListViewColumnItemComparer -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewSortable.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewSortable.cs deleted file mode 100644 index 6d21cabc..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/ListViewSortable.cs +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Windows.Forms.VisualStyles; - -namespace IpTviewr.UiServices.Common.Controls -{ - [ToolboxBitmap(typeof(ListView))] - public class ListViewSortable : ListView - { - public enum EllipsisStyle - { - Default, - None, - Path, - End - } // enum EllipsisStyle - - public ListViewSortable() - : base() - { - SelfSorting = true; - IsDoubleBuffered = true; - CurrentSortColumn = -1; - HeaderCustomTextAlignment = System.Drawing.ContentAlignment.MiddleLeft; - } // constructor - - public event EventHandler AfterSorting; - - public bool IsDoubleBuffered - { - get { return base.DoubleBuffered; } - set { base.DoubleBuffered = value; } - } // IsDoubleBuffered - - - [DefaultValue(false)] - public bool HeaderUsesCustomFont - { - get; - set; - } // HeaderUsesCustomFont - - public Font HeaderCustomFont - { - get; - set; - } // HeaderCustomFont - - [DefaultValue(false)] - public bool HeaderUsesCustomForeColor - { - get; - set; - } // HeaderUsesCustomForeColor - - public Color HeaderCustomForeColor - { - get; - set; - } // HeaderCustomForeColor - - [DefaultValue(false)] - public bool HeaderUsesCustomTextAlignment - { - get; - set; - } // HeaderUsesCustomTextAlignment - - [DefaultValue(System.Drawing.ContentAlignment.MiddleLeft)] - public System.Drawing.ContentAlignment HeaderCustomTextAlignment - { - get; - set; - } // HeaderCustomTextAlignment - - [DefaultValue(false)] - public bool HeaderCustomWordBreak - { - get; - set; - } // HeaderCustomWordBreak - - [DefaultValue(EllipsisStyle.Default)] - public EllipsisStyle HeaderCustomEllipsis - { - get; - set; - } // HeaderCustomEllipsis - - [DefaultValue(true)] - public bool SelfSorting - { - get; - set; - } // SelfSorting - - public int CurrentSortColumn - { - get; - private set; - } // CurrentSortColumn - - public bool CurrentSortIsDescending - { - get; - private set; - } // CurrentSortIsDescending - - /// - /// Sorts the list - /// - /// Column to sort - /// null = toggle current column sort order (ascending->descending; descending->ascending); true = sort ascending; false = sort descending - public void Sort(int sortColumnIndex, bool? sortAscending) - { - bool ascending; - - if (sortColumnIndex >= Columns.Count) throw new ArgumentOutOfRangeException("columnIndex"); - - if (sortColumnIndex < 0) - { - CurrentSortColumn = -1; - CurrentSortIsDescending = false; - ListViewItemSorter = null; - } - else - { - if (!sortAscending.HasValue) - { - ascending = true; - if (sortColumnIndex == CurrentSortColumn) - { - ascending = CurrentSortIsDescending; - } // if - } - else - { - ascending = sortAscending.Value; - } // if-else - - CurrentSortColumn = sortColumnIndex; - CurrentSortIsDescending = !ascending; - - if (SelfSorting) - { - this.ListViewItemSorter = new ListViewColumnItemComparer(CurrentSortColumn, CurrentSortIsDescending); - } // if - } // if-else - - // force redraw to update the "arrow" on the header - RedrawHeader(); - - AfterSorting?.Invoke(this, EventArgs.Empty); - } // Sort - - protected override void OnColumnClick(ColumnClickEventArgs e) - { - bool ascending; - - base.OnColumnClick(e); - if (!SelfSorting) return; - - ascending = (CurrentSortColumn == e.Column)? CurrentSortIsDescending: true; - Sort(e.Column, ascending); - } // OnColumnClick - - protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e) - { - VisualStyleRenderer renderer; - VisualStyleElement style; - Size arrowSize; - TextFormatFlags format; - Rectangle bounds; - - // render background - if (e.State == ListViewItemStates.Hot) - style = VisualStyleElement.Header.Item.Hot; - else if (e.State == ListViewItemStates.Selected) - style = VisualStyleElement.Header.Item.Pressed; - else - style = VisualStyleElement.Header.Item.Normal; - - renderer = new VisualStyleRenderer(style); - renderer.DrawBackground(e.Graphics, e.Bounds); - - // build text style - if (HeaderUsesCustomTextAlignment) - { - format = TextFormatFlags.Default; - switch (HeaderCustomTextAlignment) - { - case System.Drawing.ContentAlignment.TopLeft: - format = TextFormatFlags.Left | TextFormatFlags.Top; break; - case System.Drawing.ContentAlignment.TopCenter: - format = TextFormatFlags.HorizontalCenter | TextFormatFlags.Top; break; - case System.Drawing.ContentAlignment.TopRight: - format = TextFormatFlags.Right | TextFormatFlags.Top; break; - case System.Drawing.ContentAlignment.MiddleLeft: - format = TextFormatFlags.Left | TextFormatFlags.VerticalCenter; break; - case System.Drawing.ContentAlignment.MiddleCenter: - format = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter; break; - case System.Drawing.ContentAlignment.MiddleRight: - format = TextFormatFlags.Right | TextFormatFlags.VerticalCenter; break; - case System.Drawing.ContentAlignment.BottomLeft: - format = TextFormatFlags.Left | TextFormatFlags.Bottom; break; - case System.Drawing.ContentAlignment.BottomCenter: - format = TextFormatFlags.HorizontalCenter | TextFormatFlags.Bottom; break; - case System.Drawing.ContentAlignment.BottomRight: - format = TextFormatFlags.Right | TextFormatFlags.Bottom; break; - default: - format = TextFormatFlags.Default; break; - } // case - - switch (this.HeaderCustomEllipsis) - { - case EllipsisStyle.None: break; - case EllipsisStyle.End: format |= TextFormatFlags.EndEllipsis; break; - case EllipsisStyle.Path: format |= TextFormatFlags.PathEllipsis; break; - default: - format |= TextFormatFlags.WordEllipsis; break; - } // switch - - format |= HeaderCustomWordBreak ? TextFormatFlags.WordBreak : TextFormatFlags.SingleLine; - } - else - { - HorizontalAlignment textAlign = e.Header.TextAlign; - format = (textAlign == HorizontalAlignment.Left) ? TextFormatFlags.Left : ((textAlign == HorizontalAlignment.Center) ? TextFormatFlags.HorizontalCenter : TextFormatFlags.Right); - format |= TextFormatFlags.WordEllipsis; - format |= TextFormatFlags.VerticalCenter; - format |= TextFormatFlags.SingleLine; - } // if-else - - // select text drawing attributtes - var font = HeaderUsesCustomFont ? HeaderCustomFont : e.Font; - var foreColor = HeaderUsesCustomForeColor ? HeaderCustomForeColor : e.ForeColor; - - // measure sort arrow size - style = (CurrentSortIsDescending) ? VisualStyleElement.Header.SortArrow.SortedUp : VisualStyleElement.Header.SortArrow.SortedDown; - renderer = new VisualStyleRenderer(style); - arrowSize = renderer.GetPartSize(e.Graphics, ThemeSizeType.True); - bounds = new Rectangle(e.Bounds.Left, e.Bounds.Top, e.Bounds.Width - arrowSize.Width - 3, e.Bounds.Height); // -3 = give extra right space - - // render text - TextRenderer.DrawText(e.Graphics, e.Header.Text, font, bounds, foreColor, format); - - // render sort arrow - if (e.ColumnIndex == CurrentSortColumn) - { - renderer.DrawBackground(e.Graphics, - new Rectangle(e.Bounds.Left + bounds.Width, - e.Bounds.Top, - arrowSize.Width, - e.Bounds.Height)); - } // if - } // OnDrawColumnHeader - - protected override void OnDrawItem(DrawListViewItemEventArgs e) - { - e.DrawDefault = true; - base.OnDrawItem(e); - } // OnDrawItem - - protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e) - { - e.DrawDefault = true; - base.OnDrawSubItem(e); - } // OnDrawSubItem - - protected void RedrawHeader() - { - BeginUpdate(); - var old = HeaderStyle; - HeaderStyle = ColumnHeaderStyle.None; - HeaderStyle = old; - EndUpdate(); - } // RedrawHeader - } // ListViewSortable -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs deleted file mode 100644 index 843168ae..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/PictureBoxEx.cs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -// v1.0 RC 0: Moved from ChannelList > PictureBoxEx.cs - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Controls -{ - [ToolboxBitmap(typeof(PictureBox))] - public class PictureBoxEx : PictureBox - { - public static Bitmap ToGrayscale(Image original) - { - // create the grayscale ColorMatrix - ColorMatrix colorMatrix = new ColorMatrix(new float[][] - { - new float[] {.3f, .3f, .3f, 0, 0}, - new float[] {.59f, .59f, .59f, 0, 0}, - new float[] {.11f, .11f, .11f, 0, 0}, - new float[] {0, 0, 0, 1, 0}, - new float[] {0, 0, 0, 0, 1} - }); - - // set the color matrix to an image attributes object - ImageAttributes attributes = new ImageAttributes(); - attributes.SetColorMatrix(colorMatrix); - - // create a new bitmap with the same size as the original; then, - // create a Graphics from it - Bitmap greyscaleBitmap = new Bitmap(original.Width, original.Height); - using (Graphics g = Graphics.FromImage(greyscaleBitmap)) - { - // copy the original image to the new image (by means of the Graphics) using the color matrix - g.DrawImage(original, - new Rectangle(0, 0, original.Width, original.Height), - 0, 0, original.Width, original.Height, - GraphicsUnit.Pixel, attributes); - } // using - - return greyscaleBitmap; - } // ToGrayscale - - public void SetImage(Image image) - { - if (Image != null) Image.Dispose(); - Image = image; - } // SetImage - - protected override void OnPaint(PaintEventArgs pe) - { - pe.Graphics.CompositingQuality = CompositingQuality.HighQuality; - pe.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; - base.OnPaint(pe); - } // OnPaint - } // class PictureBoxEx -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/SelectFolderDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/SelectFolderDialog.cs deleted file mode 100644 index 6ff3eb98..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/SelectFolderDialog.cs +++ /dev/null @@ -1,555 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Windows.Forms; -using System.Runtime.InteropServices; -using System.ComponentModel; -using System.Security.Permissions; -using System.Security; -using System.Threading; -using System.Drawing; - -namespace IpTviewr.UiServices.Common.Controls -{ - /* - The following code has been copied verbatim from the http://dotnetzip.codeplex.com project - It has been modified where needed to changed the class name from FolderBrowserDialogEx to - SelectFolderDialog. http://dotnetzip.codeplex.com/SourceControl/changeset/view/29832#432677 - It has also been modified to address Code Analysis issues. - The code is licensed under the Ms-PL license (http://dotnetzip.codeplex.com/license) - */ - - // FolderBrowserDialogEx.cs - // - // A replacement for the builtin System.Windows.Forms.FolderBrowserDialog class. - // This one includes an edit box, and also displays the full path in the edit box. - // - // based on code from http://support.microsoft.com/default.aspx?scid=kb;[LN];306285 - // - // 20 Feb 2009 - // - // ======================================================================================== - // Example usage: - // - // string _folderName = "c:\\dinoch"; - // private void button1_Click(object sender, EventArgs e) - // { - // _folderName = (System.IO.Directory.Exists(_folderName)) ? _folderName : ""; - // var dlg1 = new Ionic.Utils.FolderBrowserDialogEx - // { - // Description = "Select a folder for the extracted files:", - // ShowNewFolderButton = true, - // ShowEditBox = true, - // //NewStyle = false, - // SelectedPath = _folderName, - // ShowFullPathInEditBox= false, - // }; - // dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer; - // - // var result = dlg1.ShowDialog(); - // - // if (result == DialogResult.OK) - // { - // _folderName = dlg1.SelectedPath; - // this.label1.Text = "The folder selected was: "; - // this.label2.Text = _folderName; - // } - // } - // - - [Designer("System.Windows.Forms.Design.FolderBrowserDialogDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] - [DefaultEvent("HelpRequest")] - [DefaultProperty("SelectedPath")] - [ToolboxBitmap(typeof(FolderBrowserDialog))] - public class SelectFolderDialog : CommonDialog - { - private static readonly int MAX_PATH = 260; - - // Fields - private UnsafeNativeMethods.BrowseFolderCallbackProc _callback; - private string _descriptionText; - private Environment.SpecialFolder _rootFolder; - private string _selectedPath; - private bool _selectedPathNeedsCheck; - private bool _showNewFolderButton; - private bool _showEditBox; - private bool _showBothFilesAndFolders; - private bool _newStyle = true; - private bool _showFullPathInEditBox = true; - private bool _dontIncludeNetworkFoldersBelowDomainLevel; - private int _uiFlags; - private IntPtr _hwndEdit; - private IntPtr _rootFolderLocation; - - // Events - //[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] - public new event EventHandler HelpRequest - { - add - { - base.HelpRequest += value; - } - remove - { - base.HelpRequest -= value; - } - } - - // ctor - public SelectFolderDialog() - { - this.Reset(); - } - - // Factory Methods - public static SelectFolderDialog PrinterBrowser() - { - SelectFolderDialog x = new SelectFolderDialog(); - // avoid MBRO comppiler warning when passing _rootFolderLocation as a ref: - x.BecomePrinterBrowser(); - return x; - } - - public static SelectFolderDialog ComputerBrowser() - { - SelectFolderDialog x = new SelectFolderDialog(); - // avoid MBRO comppiler warning when passing _rootFolderLocation as a ref: - x.BecomeComputerBrowser(); - return x; - } - - - // Helpers - private void BecomePrinterBrowser() - { - _uiFlags += BrowseFlags.BIF_BROWSEFORPRINTER; - Description = "Select a printer:"; - UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(IntPtr.Zero, CSIDL.PRINTERS, ref this._rootFolderLocation); - ShowNewFolderButton = false; - ShowEditBox = false; - } - - private void BecomeComputerBrowser() - { - _uiFlags += BrowseFlags.BIF_BROWSEFORCOMPUTER; - Description = "Select a computer:"; - UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(IntPtr.Zero, CSIDL.NETWORK, ref this._rootFolderLocation); - ShowNewFolderButton = false; - ShowEditBox = false; - } - - - private class CSIDL - { - public const int PRINTERS = 4; - public const int NETWORK = 0x12; - } - - private class BrowseFlags - { - public const int BIF_DEFAULT = 0x0000; - public const int BIF_BROWSEFORCOMPUTER = 0x1000; - public const int BIF_BROWSEFORPRINTER = 0x2000; - public const int BIF_BROWSEINCLUDEFILES = 0x4000; - public const int BIF_BROWSEINCLUDEURLS = 0x0080; - public const int BIF_DONTGOBELOWDOMAIN = 0x0002; - public const int BIF_EDITBOX = 0x0010; - public const int BIF_NEWDIALOGSTYLE = 0x0040; - public const int BIF_NONEWFOLDERBUTTON = 0x0200; - public const int BIF_RETURNFSANCESTORS = 0x0008; - public const int BIF_RETURNONLYFSDIRS = 0x0001; - public const int BIF_SHAREABLE = 0x8000; - public const int BIF_STATUSTEXT = 0x0004; - public const int BIF_UAHINT = 0x0100; - public const int BIF_VALIDATE = 0x0020; - public const int BIF_NOTRANSLATETARGETS = 0x0400; - } - - private static class BrowseForFolderMessages - { - // messages FROM the folder browser - public const int BFFM_INITIALIZED = 1; - public const int BFFM_SELCHANGED = 2; - public const int BFFM_VALIDATEFAILEDA = 3; - public const int BFFM_VALIDATEFAILEDW = 4; - public const int BFFM_IUNKNOWN = 5; - - // messages TO the folder browser - public const int BFFM_SETSTATUSTEXT = 0x464; - public const int BFFM_ENABLEOK = 0x465; - public const int BFFM_SETSELECTIONA = 0x466; - public const int BFFM_SETSELECTIONW = 0x467; - } - - private int FolderBrowserCallback(IntPtr hwnd, uint msg, IntPtr lParam, IntPtr lpData) - { - switch (msg) - { - case BrowseForFolderMessages.BFFM_INITIALIZED: - if (this._selectedPath.Length != 0) - { - UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_SETSELECTIONW, (IntPtr)1, this._selectedPath); - if (this._showEditBox && this._showFullPathInEditBox) - { - // get handle to the Edit box inside the Folder Browser Dialog - _hwndEdit = UnsafeNativeMethods.User32.FindWindowExW(new HandleRef(null, hwnd), IntPtr.Zero, "Edit", null); - UnsafeNativeMethods.User32.SetWindowTextW(_hwndEdit, this._selectedPath); - } - } - break; - - case BrowseForFolderMessages.BFFM_SELCHANGED: - IntPtr pidl = lParam; - if (pidl != IntPtr.Zero) - { - if (((_uiFlags & BrowseFlags.BIF_BROWSEFORPRINTER) == BrowseFlags.BIF_BROWSEFORPRINTER) || - ((_uiFlags & BrowseFlags.BIF_BROWSEFORCOMPUTER) == BrowseFlags.BIF_BROWSEFORCOMPUTER)) - { - // we're browsing for a printer or computer, enable the OK button unconditionally. - UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_ENABLEOK, (IntPtr)0, (IntPtr)1); - } - else - { - IntPtr pszPath = Marshal.AllocHGlobal(MAX_PATH * Marshal.SystemDefaultCharSize); - bool haveValidPath = UnsafeNativeMethods.Shell32.SHGetPathFromIDList(pidl, pszPath); - String displayedPath = Marshal.PtrToStringAuto(pszPath); - Marshal.FreeHGlobal(pszPath); - // whether to enable the OK button or not. (if file is valid) - UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_ENABLEOK, (IntPtr)0, (IntPtr)(haveValidPath ? 1 : 0)); - - // Maybe set the Edit Box text to the Full Folder path - if (haveValidPath && !String.IsNullOrEmpty(displayedPath)) - { - if (_showEditBox && _showFullPathInEditBox) - { - if (_hwndEdit != IntPtr.Zero) - UnsafeNativeMethods.User32.SetWindowTextW(_hwndEdit, displayedPath); - } - - if ((_uiFlags & BrowseFlags.BIF_STATUSTEXT) == BrowseFlags.BIF_STATUSTEXT) - UnsafeNativeMethods.User32.SendMessage(new HandleRef(null, hwnd), BrowseForFolderMessages.BFFM_SETSTATUSTEXT, (IntPtr)0, displayedPath); - } - } - } - break; - } - return 0; - } - - private static UnsafeNativeMethods.IMalloc GetSHMalloc() - { - UnsafeNativeMethods.IMalloc[] ppMalloc = new UnsafeNativeMethods.IMalloc[1]; - UnsafeNativeMethods.Shell32.SHGetMalloc(ppMalloc); - return ppMalloc[0]; - } - - public override void Reset() - { - this._rootFolder = (Environment.SpecialFolder)0; - this._descriptionText = string.Empty; - this._selectedPath = string.Empty; - this._selectedPathNeedsCheck = false; - this._showNewFolderButton = true; - this._showEditBox = true; - this._newStyle = true; - this._dontIncludeNetworkFoldersBelowDomainLevel = false; - this._hwndEdit = IntPtr.Zero; - this._rootFolderLocation = IntPtr.Zero; - } - - [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] - protected override bool RunDialog(IntPtr hWndOwner) - { - bool result = false; - if (_rootFolderLocation == IntPtr.Zero) - { - UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(hWndOwner, (int)this._rootFolder, ref _rootFolderLocation); - if (_rootFolderLocation == IntPtr.Zero) - { - UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(hWndOwner, 0, ref _rootFolderLocation); - if (_rootFolderLocation == IntPtr.Zero) - { - throw new InvalidOperationException("FolderBrowserDialogNoRootFolder"); - } - } - } - _hwndEdit = IntPtr.Zero; - //_uiFlags = 0; - if (_dontIncludeNetworkFoldersBelowDomainLevel) - _uiFlags += BrowseFlags.BIF_DONTGOBELOWDOMAIN; - if (this._newStyle) - _uiFlags += BrowseFlags.BIF_NEWDIALOGSTYLE; - if (!this._showNewFolderButton) - _uiFlags += BrowseFlags.BIF_NONEWFOLDERBUTTON; - if (this._showEditBox) - _uiFlags += BrowseFlags.BIF_EDITBOX; - if (this._showBothFilesAndFolders) - _uiFlags += BrowseFlags.BIF_BROWSEINCLUDEFILES; - - - if (Control.CheckForIllegalCrossThreadCalls && (Application.OleRequired() != ApartmentState.STA)) - { - throw new ThreadStateException("DebuggingException: ThreadMustBeSTA"); - } - IntPtr pidl = IntPtr.Zero; - IntPtr hglobal = IntPtr.Zero; - IntPtr pszPath = IntPtr.Zero; - try - { - UnsafeNativeMethods.BROWSEINFO browseInfo = new UnsafeNativeMethods.BROWSEINFO(); - hglobal = Marshal.AllocHGlobal(MAX_PATH * Marshal.SystemDefaultCharSize); - pszPath = Marshal.AllocHGlobal(MAX_PATH * Marshal.SystemDefaultCharSize); - this._callback = new UnsafeNativeMethods.BrowseFolderCallbackProc(this.FolderBrowserCallback); - browseInfo.pidlRoot = _rootFolderLocation; - browseInfo.Owner = hWndOwner; - browseInfo.pszDisplayName = hglobal; - browseInfo.Title = this._descriptionText; - browseInfo.Flags = _uiFlags; - browseInfo.callback = this._callback; - browseInfo.lParam = IntPtr.Zero; - browseInfo.iImage = 0; - pidl = UnsafeNativeMethods.Shell32.SHBrowseForFolderW(browseInfo); - if (((_uiFlags & BrowseFlags.BIF_BROWSEFORPRINTER) == BrowseFlags.BIF_BROWSEFORPRINTER) || - ((_uiFlags & BrowseFlags.BIF_BROWSEFORCOMPUTER) == BrowseFlags.BIF_BROWSEFORCOMPUTER)) - { - this._selectedPath = Marshal.PtrToStringAuto(browseInfo.pszDisplayName); - result = true; - } - else - { - if (pidl != IntPtr.Zero) - { - UnsafeNativeMethods.Shell32.SHGetPathFromIDList(pidl, pszPath); - this._selectedPathNeedsCheck = true; - this._selectedPath = Marshal.PtrToStringAuto(pszPath); - result = true; - } - } - } - finally - { - UnsafeNativeMethods.IMalloc sHMalloc = GetSHMalloc(); - sHMalloc.Free(_rootFolderLocation); - _rootFolderLocation = IntPtr.Zero; - if (pidl != IntPtr.Zero) - { - sHMalloc.Free(pidl); - } - if (pszPath != IntPtr.Zero) - { - Marshal.FreeHGlobal(pszPath); - } - if (hglobal != IntPtr.Zero) - { - Marshal.FreeHGlobal(hglobal); - } - this._callback = null; - } - return result; - } - - // Properties - //[SRDescription("FolderBrowserDialogDescription"), SRCategory("CatFolderBrowsing"), Browsable(true), DefaultValue(""), Localizable(true)] - - /// - /// This description appears near the top of the dialog box, providing direction to the user. - /// - public string Description - { - get - { - return this._descriptionText; - } - set - { - this._descriptionText = (value == null) ? string.Empty : value; - } - } - - //[Localizable(false), SRCategory("CatFolderBrowsing"), SRDescription("FolderBrowserDialogRootFolder"), TypeConverter(typeof(SpecialFolderEnumConverter)), Browsable(true), DefaultValue(0)] - public Environment.SpecialFolder RootFolder - { - get - { - return this._rootFolder; - } - set - { - if (!Enum.IsDefined(typeof(Environment.SpecialFolder), value)) - { - throw new InvalidEnumArgumentException("value", (int)value, typeof(Environment.SpecialFolder)); - } - this._rootFolder = value; - } - } - - //[Browsable(true), SRDescription("FolderBrowserDialogSelectedPath"), SRCategory("CatFolderBrowsing"), DefaultValue(""), Editor("System.Windows.Forms.Design.SelectedPathEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), Localizable(true)] - - /// - /// Set or get the selected path. - /// - public string SelectedPath - { - get - { - if (((this._selectedPath != null) && (this._selectedPath.Length != 0)) && this._selectedPathNeedsCheck) - { - new FileIOPermission(FileIOPermissionAccess.PathDiscovery, this._selectedPath).Demand(); - this._selectedPathNeedsCheck = false; - } - return this._selectedPath; - } - set - { - this._selectedPath = (value == null) ? string.Empty : value; - this._selectedPathNeedsCheck = true; - } - } - - //[SRDescription("FolderBrowserDialogShowNewFolderButton"), Localizable(false), Browsable(true), DefaultValue(true), SRCategory("CatFolderBrowsing")] - - /// - /// Enable or disable the "New Folder" button in the browser dialog. - /// - public bool ShowNewFolderButton - { - get - { - return this._showNewFolderButton; - } - set - { - this._showNewFolderButton = value; - } - } - - /// - /// Show an "edit box" in the folder browser. - /// - /// - /// The "edit box" normally shows the name of the selected folder. - /// The user may also type a pathname directly into the edit box. - /// - /// - public bool ShowEditBox - { - get - { - return this._showEditBox; - } - set - { - this._showEditBox = value; - } - } - - /// - /// Set whether to use the New Folder Browser dialog style. - /// - /// - /// The new style is resizable and includes a "New Folder" button. - /// - public bool NewStyle - { - get - { - return this._newStyle; - } - set - { - this._newStyle = value; - } - } - - - public bool DontIncludeNetworkFoldersBelowDomainLevel - { - get { return _dontIncludeNetworkFoldersBelowDomainLevel; } - set { _dontIncludeNetworkFoldersBelowDomainLevel = value; } - } - - /// - /// Show the full path in the edit box as the user selects it. - /// - /// - /// This works only if ShowEditBox is also set to true. - /// - public bool ShowFullPathInEditBox - { - get { return _showFullPathInEditBox; } - set { _showFullPathInEditBox = value; } - } - - public bool ShowBothFilesAndFolders - { - get { return _showBothFilesAndFolders; } - set { _showBothFilesAndFolders = value; } - } - } - - internal static class UnsafeNativeMethods - { - public delegate int BrowseFolderCallbackProc(IntPtr hwnd, uint msg, IntPtr lParam, IntPtr lpData); - - internal static class User32 - { - [DllImport("user32.dll", CharSet = CharSet.Unicode)] - public static extern IntPtr SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, string lParam); - - [DllImport("user32.dll")] - public static extern IntPtr SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, IntPtr lParam); - - [DllImport("user32.dll", SetLastError = true, CharSet=CharSet.Unicode)] - public static extern IntPtr FindWindowExW(HandleRef hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); - - [DllImport("user32.dll", CharSet=CharSet.Unicode, SetLastError = true)] - public static extern Boolean SetWindowTextW(IntPtr hWnd, String text); - } - - [ComImport, Guid("00000002-0000-0000-c000-000000000046"), SuppressUnmanagedCodeSecurity, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IMalloc - { - [PreserveSig] - IntPtr Alloc(int cb); - [PreserveSig] - IntPtr Realloc(IntPtr pv, int cb); - [PreserveSig] - void Free(IntPtr pv); - [PreserveSig] - int GetSize(IntPtr pv); - [PreserveSig] - int DidAlloc(IntPtr pv); - [PreserveSig] - void HeapMinimize(); - } // interface IMalloc - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public class BROWSEINFO - { - public IntPtr Owner; - public IntPtr pidlRoot; - public IntPtr pszDisplayName; - [MarshalAs(UnmanagedType.LPWStr)] - public string Title; - public int Flags; - public BrowseFolderCallbackProc callback; - public IntPtr lParam; - public int iImage; - } // class BROWSEINFO - - [SuppressUnmanagedCodeSecurity] - internal static class Shell32 - { - // Methods - [DllImport("shell32.dll", CharSet = CharSet.Unicode)] - public static extern IntPtr SHBrowseForFolderW([In] UnsafeNativeMethods.BROWSEINFO lpbi); - [DllImport("shell32.dll")] - public static extern int SHGetMalloc([Out, MarshalAs(UnmanagedType.LPArray)] UnsafeNativeMethods.IMalloc[] ppMalloc); - [DllImport("shell32.dll", CharSet = CharSet.Auto)] - public static extern bool SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath); - [DllImport("shell32.dll")] - public static extern int SHGetSpecialFolderLocation(IntPtr hwnd, int csidl, ref IntPtr ppidl); - } // internal static class Shell32 - } // class UnsafeNativeMethods -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/TabControlEx.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/TabControlEx.cs deleted file mode 100644 index 3bed15e2..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/TabControlEx.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Controls -{ - [ToolboxBitmap(typeof(TabControl))] - public sealed class TabControlEx: TabControl - { - private bool fieldShowTabs; - private const int TCM_ADJUSTRECT = 0x1328; - - [DefaultValue(false)] - public bool ShowTabs - { - get - { - return fieldShowTabs; - } // get - set - { - fieldShowTabs = value; - RecreateHandle(); - } // set - } // ShowTabs - - protected override void WndProc(ref Message m) - { - // Hide tabs by trapping the TCM_ADJUSTRECT message - if (m.Msg == TCM_ADJUSTRECT && !DesignMode) - { - if (!ShowTabs) - { - m.Result = (IntPtr)1; - } // if - } - else - { - base.WndProc(ref m); - } // if-else - } // WndProc - } // class -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs deleted file mode 100644 index 5fede6e9..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.Designer.cs +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.UiServices.Common.Controls -{ - partial class TimeSpanUpDown - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.labelTimeSpanS = new System.Windows.Forms.Label(); - this.numericTimeSpanSeconds = new System.Windows.Forms.NumericUpDown(); - this.labelTimeSpanM = new System.Windows.Forms.Label(); - this.numericTimeSpanMinutes = new System.Windows.Forms.NumericUpDown(); - this.labelTimeSpanH = new System.Windows.Forms.Label(); - this.numericTimeSpanHours = new System.Windows.Forms.NumericUpDown(); - this.labelTimeSpanD = new System.Windows.Forms.Label(); - this.numericTimeSpanDays = new System.Windows.Forms.NumericUpDown(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanSeconds)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanMinutes)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanHours)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanDays)).BeginInit(); - this.SuspendLayout(); - // - // labelTimeSpanS - // - this.labelTimeSpanS.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelTimeSpanS.Location = new System.Drawing.Point(228, 3); - this.labelTimeSpanS.Name = "labelTimeSpanS"; - this.labelTimeSpanS.Size = new System.Drawing.Size(23, 13); - this.labelTimeSpanS.TabIndex = 7; - this.labelTimeSpanS.Text = "mm"; - // - // numericTimeSpanSeconds - // - this.numericTimeSpanSeconds.CausesValidation = false; - this.numericTimeSpanSeconds.Location = new System.Drawing.Point(192, 0); - this.numericTimeSpanSeconds.Maximum = new decimal(new int[] { - 1000000, - 0, - 0, - 0}); - this.numericTimeSpanSeconds.Name = "numericTimeSpanSeconds"; - this.numericTimeSpanSeconds.Size = new System.Drawing.Size(35, 20); - this.numericTimeSpanSeconds.TabIndex = 6; - this.numericTimeSpanSeconds.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.numericTimeSpanSeconds.ValueChanged += new System.EventHandler(this.numericTimeSpanSeconds_ValueChanged); - // - // labelTimeSpanM - // - this.labelTimeSpanM.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelTimeSpanM.Location = new System.Drawing.Point(168, 3); - this.labelTimeSpanM.Name = "labelTimeSpanM"; - this.labelTimeSpanM.Size = new System.Drawing.Size(23, 13); - this.labelTimeSpanM.TabIndex = 5; - this.labelTimeSpanM.Text = "mm"; - // - // numericTimeSpanMinutes - // - this.numericTimeSpanMinutes.CausesValidation = false; - this.numericTimeSpanMinutes.Location = new System.Drawing.Point(132, 0); - this.numericTimeSpanMinutes.Maximum = new decimal(new int[] { - 1000000, - 0, - 0, - 0}); - this.numericTimeSpanMinutes.Name = "numericTimeSpanMinutes"; - this.numericTimeSpanMinutes.Size = new System.Drawing.Size(35, 20); - this.numericTimeSpanMinutes.TabIndex = 4; - this.numericTimeSpanMinutes.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.numericTimeSpanMinutes.ValueChanged += new System.EventHandler(this.numericTimeSpanMinutes_ValueChanged); - // - // labelTimeSpanH - // - this.labelTimeSpanH.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelTimeSpanH.Location = new System.Drawing.Point(107, 3); - this.labelTimeSpanH.Name = "labelTimeSpanH"; - this.labelTimeSpanH.Size = new System.Drawing.Size(23, 13); - this.labelTimeSpanH.TabIndex = 3; - this.labelTimeSpanH.Text = "mm"; - // - // numericTimeSpanHours - // - this.numericTimeSpanHours.CausesValidation = false; - this.numericTimeSpanHours.Location = new System.Drawing.Point(66, 0); - this.numericTimeSpanHours.Maximum = new decimal(new int[] { - 1000000, - 0, - 0, - 0}); - this.numericTimeSpanHours.Name = "numericTimeSpanHours"; - this.numericTimeSpanHours.Size = new System.Drawing.Size(40, 20); - this.numericTimeSpanHours.TabIndex = 2; - this.numericTimeSpanHours.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.numericTimeSpanHours.ValueChanged += new System.EventHandler(this.numericTimeSpanHours_ValueChanged); - // - // labelTimeSpanD - // - this.labelTimeSpanD.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.labelTimeSpanD.Location = new System.Drawing.Point(41, 2); - this.labelTimeSpanD.Name = "labelTimeSpanD"; - this.labelTimeSpanD.Size = new System.Drawing.Size(23, 13); - this.labelTimeSpanD.TabIndex = 1; - this.labelTimeSpanD.Text = "mm"; - // - // numericTimeSpanDays - // - this.numericTimeSpanDays.CausesValidation = false; - this.numericTimeSpanDays.Location = new System.Drawing.Point(0, 0); - this.numericTimeSpanDays.Maximum = new decimal(new int[] { - 999, - 0, - 0, - 0}); - this.numericTimeSpanDays.Name = "numericTimeSpanDays"; - this.numericTimeSpanDays.Size = new System.Drawing.Size(40, 20); - this.numericTimeSpanDays.TabIndex = 0; - this.numericTimeSpanDays.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.numericTimeSpanDays.ValueChanged += new System.EventHandler(this.numericTimeSpanDays_ValueChanged); - // - // TimeSpanUpDown - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.labelTimeSpanD); - this.Controls.Add(this.numericTimeSpanDays); - this.Controls.Add(this.labelTimeSpanS); - this.Controls.Add(this.numericTimeSpanSeconds); - this.Controls.Add(this.labelTimeSpanM); - this.Controls.Add(this.numericTimeSpanMinutes); - this.Controls.Add(this.labelTimeSpanH); - this.Controls.Add(this.numericTimeSpanHours); - this.Name = "TimeSpanUpDown"; - this.Size = new System.Drawing.Size(253, 20); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanSeconds)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanMinutes)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanHours)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericTimeSpanDays)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Label labelTimeSpanS; - private System.Windows.Forms.NumericUpDown numericTimeSpanSeconds; - private System.Windows.Forms.Label labelTimeSpanM; - private System.Windows.Forms.NumericUpDown numericTimeSpanMinutes; - private System.Windows.Forms.Label labelTimeSpanH; - private System.Windows.Forms.NumericUpDown numericTimeSpanHours; - private System.Windows.Forms.Label labelTimeSpanD; - private System.Windows.Forms.NumericUpDown numericTimeSpanDays; - } -} diff --git a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.resx b/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.resx deleted file mode 100644 index 5ea0895e..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Controls/TimeSpanUpDown.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.Designer.cs deleted file mode 100644 index bffd2cff..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.Designer.cs +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.UiServices.Common.Forms -{ - partial class AboutBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); - this.okButton = new System.Windows.Forms.Button(); - this.logoPictureBox = new System.Windows.Forms.PictureBox(); - this.labelProductName = new System.Windows.Forms.TextBox(); - this.labelVersion = new System.Windows.Forms.TextBox(); - this.labelCopyright = new System.Windows.Forms.TextBox(); - this.labelCompanyName = new System.Windows.Forms.TextBox(); - this.textBoxDescription = new System.Windows.Forms.RichTextBox(); - this.linkLabelCodeplex = new System.Windows.Forms.LinkLabel(); - this.labelEULA = new System.Windows.Forms.Label(); - this.labelAppName = new System.Windows.Forms.Label(); - this.labelAppVersion = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); - this.SuspendLayout(); - // - // okButton - // - resources.ApplyResources(this.okButton, "okButton"); - this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.okButton.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; - this.okButton.Name = "okButton"; - // - // logoPictureBox - // - this.logoPictureBox.Image = global::IpTviewr.UiServices.Common.Properties.Resources.DefaultAbout; - resources.ApplyResources(this.logoPictureBox, "logoPictureBox"); - this.logoPictureBox.Name = "logoPictureBox"; - this.logoPictureBox.TabStop = false; - // - // labelProductName - // - resources.ApplyResources(this.labelProductName, "labelProductName"); - this.labelProductName.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelProductName.Name = "labelProductName"; - this.labelProductName.ReadOnly = true; - // - // labelVersion - // - resources.ApplyResources(this.labelVersion, "labelVersion"); - this.labelVersion.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelVersion.Name = "labelVersion"; - this.labelVersion.ReadOnly = true; - // - // labelCopyright - // - resources.ApplyResources(this.labelCopyright, "labelCopyright"); - this.labelCopyright.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelCopyright.Name = "labelCopyright"; - this.labelCopyright.ReadOnly = true; - // - // labelCompanyName - // - resources.ApplyResources(this.labelCompanyName, "labelCompanyName"); - this.labelCompanyName.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.labelCompanyName.Name = "labelCompanyName"; - this.labelCompanyName.ReadOnly = true; - // - // textBoxDescription - // - resources.ApplyResources(this.textBoxDescription, "textBoxDescription"); - this.textBoxDescription.BackColor = System.Drawing.SystemColors.Window; - this.textBoxDescription.Name = "textBoxDescription"; - this.textBoxDescription.ReadOnly = true; - // - // linkLabelCodeplex - // - resources.ApplyResources(this.linkLabelCodeplex, "linkLabelCodeplex"); - this.linkLabelCodeplex.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; - this.linkLabelCodeplex.Name = "linkLabelCodeplex"; - this.linkLabelCodeplex.TabStop = true; - this.linkLabelCodeplex.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelCodeplex_LinkClicked); - // - // labelEULA - // - resources.ApplyResources(this.labelEULA, "labelEULA"); - this.labelEULA.Name = "labelEULA"; - // - // labelAppName - // - resources.ApplyResources(this.labelAppName, "labelAppName"); - this.labelAppName.Name = "labelAppName"; - // - // labelAppVersion - // - resources.ApplyResources(this.labelAppVersion, "labelAppVersion"); - this.labelAppVersion.Name = "labelAppVersion"; - // - // AboutBox - // - this.AcceptButton = this.okButton; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.labelAppVersion); - this.Controls.Add(this.labelAppName); - this.Controls.Add(this.labelEULA); - this.Controls.Add(this.linkLabelCodeplex); - this.Controls.Add(this.okButton); - this.Controls.Add(this.labelProductName); - this.Controls.Add(this.labelVersion); - this.Controls.Add(this.labelCopyright); - this.Controls.Add(this.labelCompanyName); - this.Controls.Add(this.textBoxDescription); - this.Controls.Add(this.logoPictureBox); - this.MinimizeBox = false; - this.Name = "AboutBox"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Load += new System.EventHandler(this.AboutBox_Load); - ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button okButton; - private System.Windows.Forms.PictureBox logoPictureBox; - private System.Windows.Forms.TextBox labelProductName; - private System.Windows.Forms.TextBox labelVersion; - private System.Windows.Forms.TextBox labelCopyright; - private System.Windows.Forms.TextBox labelCompanyName; - private System.Windows.Forms.RichTextBox textBoxDescription; - private System.Windows.Forms.LinkLabel linkLabelCodeplex; - private System.Windows.Forms.Label labelEULA; - private System.Windows.Forms.Label labelAppName; - private System.Windows.Forms.Label labelAppVersion; - - } -} diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs deleted file mode 100644 index f28c5e4c..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBox.cs +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using IpTviewr.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Drawing; -using System.Linq; -using System.Reflection; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Forms -{ - public partial class AboutBox : CommonBaseForm - { - public AboutBox() - { - InitializeComponent(); - } // constructor - - public AboutBoxApplicationData ApplicationData - { - get; - set; - } // ApplicationData - - private void AboutBox_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this, Assembly.GetEntryAssembly().GetName().Name); - this.Text = String.Format(this.Text, Assembly.GetEntryAssembly().GetName().Name); - if (ApplicationData != null) - { - if (ApplicationData.LargeIcon != null) - { - if (logoPictureBox.Image != null) logoPictureBox.Image.Dispose(); - logoPictureBox.Image = ApplicationData.LargeIcon; - } // if - labelAppName.Text = string.Format("{0}", ApplicationData.Name); - labelAppVersion.Text = string.Format("{0} - {1}", ApplicationData.Version, ApplicationData.Status); - if (ApplicationData.LicenseTextRtf != null) - { - textBoxDescription.Rtf = ApplicationData.LicenseTextRtf; - } - else - { - textBoxDescription.Text = ApplicationData.LicenseText; - } // if-else - } - else - { - labelAppName.Text = AssemblyTitle; - labelAppVersion.Text = AssemblyVersion; - labelEULA.Visible = false; - textBoxDescription.Visible = false; - } // if-else - - labelProductName.Text = AssemblyProduct; - labelVersion.Text = String.Format(labelVersion.Text, AssemblyVersion); - labelCopyright.Text = AssemblyCopyright; - labelCompanyName.Text = AssemblyCompany; - } // AboutBox_Load - - private void linkLabelCodeplex_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - OpenUrl(this, "http://movistartv.codeplex.com"); - } // linkLabelCodeplex_LinkClicked - - private void OpenUrl(Form parent, string url) - { - Launcher.OpenUrl(parent, url, HandleException, null); - } // OpenUrl - - #region Assembly Attribute Accessors - - public string AssemblyTitle - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); - if (attributes.Length > 0) - { - AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; - if (titleAttribute.Title != "") - { - return titleAttribute.Title; - } - } - return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase); - } - } - - public string AssemblyVersion - { - get - { - return Assembly.GetCallingAssembly().GetName().Version.ToString(); - } - } - - public string AssemblyDescription - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyDescriptionAttribute)attributes[0]).Description; - } - } - - public string AssemblyProduct - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyProductAttribute)attributes[0]).Product; - } - } - - public string AssemblyCopyright - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; - } - } - - public string AssemblyCompany - { - get - { - object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyCompanyAttribute)attributes[0]).Company; - } - } - #endregion - } // class AboutBox -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBoxApplicationData.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBoxApplicationData.cs deleted file mode 100644 index b9210b2d..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/AboutBoxApplicationData.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Common.Forms -{ - public class AboutBoxApplicationData - { - public Image LargeIcon - { - get; - set; - } // LargeIcon - - public string Name - { - get; - set; - } // Name - - public string Version - { - get; - set; - } // Version - - public string Status - { - get; - set; - } // Status - - public string LicenseText - { - get; - set; - } // LicenseText - - public string LicenseTextRtf - { - get; - set; - } // LicenseTextRtf - } // class AboutBoxApplicationData -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs deleted file mode 100644 index 0b74fa5e..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.Designer.cs +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.UiServices.Common.Forms -{ - partial class BackgroundWorkerDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (worker != null) worker.Dispose(); - - if (disposing && (components != null)) - { - components.Dispose(); - } // if - base.Dispose(disposing); - } // Dispose - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BackgroundWorkerDialog)); - this.pictureWaitIcon = new System.Windows.Forms.PictureBox(); - this.labelTaskDescription = new System.Windows.Forms.Label(); - this.progressBar = new System.Windows.Forms.ProgressBar(); - this.labelProgressText = new System.Windows.Forms.Label(); - this.buttonClose = new System.Windows.Forms.Button(); - this.buttonRequestCancel = new System.Windows.Forms.Button(); - this.timerShow = new System.Windows.Forms.Timer(this.components); - ((System.ComponentModel.ISupportInitialize)(this.pictureWaitIcon)).BeginInit(); - this.SuspendLayout(); - // - // pictureWaitIcon - // - this.pictureWaitIcon.Image = global::IpTviewr.UiServices.Common.Properties.Resources.WaitClock_64x64; - resources.ApplyResources(this.pictureWaitIcon, "pictureWaitIcon"); - this.pictureWaitIcon.Name = "pictureWaitIcon"; - this.pictureWaitIcon.TabStop = false; - // - // labelTaskDescription - // - resources.ApplyResources(this.labelTaskDescription, "labelTaskDescription"); - this.labelTaskDescription.Name = "labelTaskDescription"; - // - // progressBar - // - resources.ApplyResources(this.progressBar, "progressBar"); - this.progressBar.Name = "progressBar"; - // - // labelProgressText - // - resources.ApplyResources(this.labelProgressText, "labelProgressText"); - this.labelProgressText.Name = "labelProgressText"; - // - // buttonClose - // - this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.OK; - resources.ApplyResources(this.buttonClose, "buttonClose"); - this.buttonClose.Name = "buttonClose"; - this.buttonClose.UseVisualStyleBackColor = true; - this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); - // - // buttonRequestCancel - // - this.buttonRequestCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - resources.ApplyResources(this.buttonRequestCancel, "buttonRequestCancel"); - this.buttonRequestCancel.Name = "buttonRequestCancel"; - this.buttonRequestCancel.UseVisualStyleBackColor = true; - this.buttonRequestCancel.Click += new System.EventHandler(this.buttonRequestCancel_Click); - // - // timerShow - // - this.timerShow.Tick += new System.EventHandler(this.timerShow_Tick); - // - // BackgroundWorkerDialog - // - this.AcceptButton = this.buttonClose; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonRequestCancel; - this.Controls.Add(this.buttonClose); - this.Controls.Add(this.buttonRequestCancel); - this.Controls.Add(this.labelProgressText); - this.Controls.Add(this.progressBar); - this.Controls.Add(this.labelTaskDescription); - this.Controls.Add(this.pictureWaitIcon); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "BackgroundWorkerDialog"; - this.Opacity = 0D; - this.ShowInTaskbar = false; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BackgroundWorkerDialog_FormClosing); - this.Load += new System.EventHandler(this.BackgroundWorkerDialog_Load); - this.Shown += new System.EventHandler(this.BackgroundWorkerDialog_Shown); - ((System.ComponentModel.ISupportInitialize)(this.pictureWaitIcon)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.PictureBox pictureWaitIcon; - private System.Windows.Forms.Label labelTaskDescription; - private System.Windows.Forms.ProgressBar progressBar; - private System.Windows.Forms.Label labelProgressText; - private System.Windows.Forms.Button buttonClose; - private System.Windows.Forms.Button buttonRequestCancel; - private System.Windows.Forms.Timer timerShow; - } -} \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs deleted file mode 100644 index 3414e63e..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.cs +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.UiServices.Common.Properties; -using System.Threading; - -namespace IpTviewr.UiServices.Common.Forms -{ - public partial class BackgroundWorkerDialog : CommonBaseForm, IBackgroundWorkerDialog - { - private bool formCanClose; - private BackgroundWorker worker; - private DialogResult dialogResult; - - public static DialogResult RunWorkerAsync(IWin32Window owner, BackgroundWorkerOptions options) - { - using (var dialog = new BackgroundWorkerDialog()) - { - dialog.Options = options; - return dialog.ShowDialog(owner); - } // using - } // RunWorkerAsync - - public BackgroundWorkerDialog() - { - InitializeComponent(); - this.Icon = Resources.WaitClock_Icon; - } // constructor - - public BackgroundWorkerOptions Options - { - get; - set; - } // Options - - private void BackgroundWorkerDialog_Load(object sender, EventArgs e) - { - if (Options == null) - { - dialogResult = DialogResult.Abort; - formCanClose = true; - this.Close(); - - return; - } // if - SafeCall(BackgroundWorkerDialog_Load_Implementation, sender, e); - } // BackgroundWorkerDialog_Load - - private void BackgroundWorkerDialog_FormClosing(object sender, FormClosingEventArgs e) - { - if (!formCanClose) - { - e.Cancel = true; - RequestCancelBackgroundTask(); - } - else - { - this.DialogResult = dialogResult; - } // if-else - } // BackgroundWorkerDialog_FormClosing - - private void buttonRequestCancel_Click(object sender, EventArgs e) - { - RequestCancelBackgroundTask(); - this.DialogResult = DialogResult.None; - } // buttonRequestCancel_Click - - private void buttonClose_Click(object sender, EventArgs e) - { - this.DialogResult = dialogResult; - this.Close(); - } // buttonClose_Click - - private void BackgroundWorkerDialog_Load_Implementation(object sender, EventArgs e) - { - if (Options.Caption != null) this.Text = Options.Caption; - labelTaskDescription.Text = Options.TaskDescription; - labelProgressText.Text = null; - progressBar.Style = ProgressBarStyle.Marquee; - progressBar.Enabled = Options.AllowProgressBar; - buttonRequestCancel.Enabled = Options.AllowCancelButton; - - // maintain the dialog 'hidden' for short-lived background tasks? - // fact: Windows doesn't allow to hide a modal dialog. Our trick: set the opacity to 0% - // and then back to 100% when the dialog must be shown - var milliseconds = (int)Options.ShowAfter.TotalMilliseconds; - if (milliseconds > 0) - { - timerShow.Interval = milliseconds; - timerShow.Start(); - } // if - - Options.BeforeTask?.Invoke(Options, this); - - worker = new BackgroundWorker(); - worker.WorkerReportsProgress = false; - worker.WorkerSupportsCancellation = true; - - worker.DoWork += Worker_DoWork; - worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - - worker.RunWorkerAsync(Thread.CurrentThread); - } // BackgroundWorkerDialog_Load_Implementation - - private void timerShow_Tick(object sender, EventArgs e) - { - timerShow.Stop(); - Opacity = 1; - } // timerShow_Tick - - void Worker_DoWork(object sender, DoWorkEventArgs e) - { - // set worker thread name (for debugging pourposes) - var currentThread = Thread.CurrentThread; - currentThread.Name = "BackgroundWorkerDialog: " + Options.TaskDescription; - - // inherit parent thead culture settings - var parentThread = e.Argument as Thread; - if (parentThread != null) - { - currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case - currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread - } // if - - Options.BackgroundBeforeTask?.Invoke(Options, this); - Options.BackgroundTask?.Invoke(Options, this); - Options.BackgroundAfterTask?.Invoke(Options, this); - } // Worker_DoWork - - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - formCanClose = true; - - if (e.Cancelled) - { - labelProgressText.Text = (Options.TaskCancelledText != null)? Options.TaskCancelledText : Properties.BackgroundWorkerDialog.TaskCancelled; - dialogResult = DialogResult.Cancel; - } // if - - if (e.Error != null) - { - Options.OutputException = e.Error; - dialogResult = DialogResult.Abort; - } - else - { - dialogResult = DialogResult.OK; - if (Options.AfterTask != null) - { - SafeCall(Options.AfterTask, Options, this); - } // if - } // if-else - - if ((Options.AllowAutoClose) || (e.Error != null)) - { - this.Close(); - } - else - { - labelProgressText.Text = (Options.TaskCompletedText != null) ? Options.TaskCompletedText : Properties.BackgroundWorkerDialog.TaskCompleted; - buttonClose.Size = buttonRequestCancel.Size; - buttonClose.Location = buttonRequestCancel.Location; - buttonClose.Visible = true; - buttonRequestCancel.Visible = false; - if (progressBar.Style != ProgressBarStyle.Continuous) - { - progressBar.Style = ProgressBarStyle.Continuous; - progressBar.Value = progressBar.Maximum; - } // if - buttonClose.Focus(); - } // if-else - } // Worker_RunWorkerCompleted - - private void RequestCancelBackgroundTask() - { - if (worker == null) return; - - labelProgressText.Text = (Options.TaskCancellingText != null) ? Options.TaskCancellingText : Properties.BackgroundWorkerDialog.TaskCancelling; - buttonRequestCancel.Enabled = false; - - worker.CancelAsync(); - } // RequestCancelBackgroundTask - - #region IBackgroundWorkerDialog members - - IWin32Window IBackgroundWorkerDialog.ThisWindow - { - get { return this; } - } // IBackgroundWorkerDialog.ThisWindow - - Form IBackgroundWorkerDialog.OwnerForm - { - get { return this.ParentForm; } - } // IBackgroundWorkerDialog.OwnerForm - - void IBackgroundWorkerDialog.SetProgressText(string text) - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(SetProgressText), text); - } - else - { - SetProgressText(text); - } // if-else - } // IBackgroundWorkerDialog.SetProgressText - - void IBackgroundWorkerDialog.SetProgressMinMax(int min, int max) - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(SetProgressMinMax), min, max); - } - else - { - SetProgressMinMax(min, max); - } // if-else - } // IBackgroundWorkerDialog.SetProgressMinMax - - void IBackgroundWorkerDialog.SetProgress(int value) - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(SetProgress), value); - } - else - { - SetProgress(value); - } // if-else - } // IBackgroundWorkerDialog.SetProgress - - void IBackgroundWorkerDialog.SetProgressUndefined() - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(SetProgressUndefined)); - } - else - { - SetProgressUndefined(); - } // if-else - } // IBackgroundWorkerDialog.SetProgressUndefined - - bool IBackgroundWorkerDialog.QueryCancel() - { - if (worker == null) return false; - return worker.CancellationPending; - } // IBackgroundWorkerDialog.QueryCancel - - #endregion - - #region IBackgroundWorkerDialog implementation - - private void SetProgressText(string text) - { - labelProgressText.Text = text; - labelProgressText.Refresh(); - } // SetProgressText - - private void SetProgressMinMax(int min, int max) - { - var value = progressBar.Value; - - progressBar.Value = progressBar.Maximum; - progressBar.Minimum = min; - - progressBar.Value = min; - progressBar.Maximum = max; - - progressBar.Style = ProgressBarStyle.Continuous; - progressBar.Value = Math.Max(value, min); - } // SetProgressMinMax - - private void SetProgress(int value) - { - value = Math.Max(value, progressBar.Minimum); - value = Math.Min(value, progressBar.Maximum); - progressBar.Value = value; - } // SetProgress - - private void SetProgressUndefined() - { - progressBar.Style = ProgressBarStyle.Marquee; - } // SetProgressUndefined - - #endregion - - private void BackgroundWorkerDialog_Shown(object sender, EventArgs e) - { - if (!timerShow.Enabled) Opacity = 1; - } // BackgroundWorkerDialog_Shown - } // class BackgroundWorkerDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.es.resx b/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.es.resx deleted file mode 100644 index f866faf9..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/BackgroundWorkerDialog.es.resx +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADr8AAA6/ATgFUyQAAACOSURBVDhPpZLBCcAgDEUdwZncwm3cycF685r6DlLbJEXb - Dx8kJu9HMIjIL5vFHZvFHV8HR6212H10y+SyAyi1VkkpSc6ZYWBxCUAjAwwCAASQu1WAmc6dAtDcPd44 - ms10ZAHUul46UgBEwjzkpSMPcNvCS0cmAJE0tvDS0Rvg+XFUOlKArzaLOzaL65ZwAtqVazMG1dGuAAAA - AElFTkSuQmCC - - - - &Cerrar - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 - MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADr4AAA6+AepCscAAAAEbSURBVDhPY/j//z9FGKsgKRjB - AIJv374ZAPF9IP4PxPPBgkgAKOaALI/NgPV70sP+L1Tj/X9761qQogCouMK7xw/XH2ss/n+wJAVuODYD - 5sMMWGYs8//Vjasg2xru79/xfo2DFopmEMBmgMD7Z0/Ob/S1BBsCokG2gtjomkEAwwAQQDcEl2YQwGWA - AdkGABUVPD1z/D2yF0CaQexrK+aDDCkAK4QCFANANjw7fwoceDDNIJeAxGGGgOSBfHDMgACKAa/v3ETR - /OHFs/dAxQYghSBDQC4AySOLoxpw6/p7kGaQIpBhQEUJIEUwADMEZDiQDYpeARQDQBo+vnwOkgThfqg+ - FAAUnw+VB+HzKAaQi7EKkoKxChKP/zMAAEaHdcnCgwx7AAAAAElFTkSuQmCC - - - - &Cancelar - - - Espere, por favor... - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseForm.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseForm.cs deleted file mode 100644 index b315ed9a..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/CommonBaseForm.cs +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.SqlServer.MessageBox; -using IpTviewr.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Common; - -namespace IpTviewr.UiServices.Common.Forms -{ - public class CommonBaseForm : Form - { - #region Exceptions - - protected bool HandleOwnedFormsExceptions - { - get; - set; - } // HandleOwnedFormsExceptions - - public Action GetExceptionHandler() - { - return HandleException; - } // GetExceptionHandler - - /// - /// Provides an unified way of handling exceptions. - /// - /// The data about the exception, including additional information for the user, such a caption or a text - /// If a parent CommonForm exists, the exception will be passed along. - /// If no parent is found, the virtual method ExceptionHandler will be called - protected void HandleException(ExceptionEventData ex) - { - HandleOwnedFormException(this, ex); - } // HandleException - - private void HandleOwnedFormException(CommonBaseForm form, ExceptionEventData ex) - { - if (!HandleOwnedFormsExceptions) - { - var parent = form.ParentForm as CommonBaseForm; - if (parent != null) - { - parent.HandleOwnedFormException(this, ex); - } // if - } // if - - ExceptionHandler(form, ex); - } // HandleOwnedFormException - - /// - /// Exception handler. - /// By default displays an ExceptionMessageBox. Descendants are encouraged to provide their own implementation. - /// - /// The form that 'throws' the exception - /// The data about the exception, including additional information for the user, such a caption or a text - /// Descendants who override this method MUST NOT call base.ExceptionHandler. - /// This method MUST NOT be called directly. To handle and exception, HandleException MUST be used instead. - /// - protected virtual void ExceptionHandler(CommonBaseForm form, ExceptionEventData ex) - { - BasicGoogleTelemetry.SendExtendedExceptionHit(ex.Exception, true, ex.Message, this.GetType().Name); - - var box = new ExceptionMessageBox() - { - Caption = Properties.CommonForm.UncaughtExceptionCaption, - Buttons = ExceptionMessageBoxButtons.OK, - Symbol = ExceptionMessageBoxSymbol.Stop, - }; - - if (ex.Message == null) - { - box.Text = ex.Exception.Message; - box.Message = ex.Exception; - } - else - { - box.Text = ex.Message; - box.InnerException = ex.Exception; - } // if-else - - box.Show(form); - } // ExceptionHandler - - #endregion - - #region 'Safe' functions - - protected void SafeDispose(IDisposable disposable) - { - if (disposable == null) return; - disposable.Dispose(); - } // SafeDispose - - protected bool SafeCall(Action implementation) - { - try - { - implementation(); - - return true; - } - catch (Exception ex) - { - HandleException(new ExceptionEventData(ex)); - return false; - } // try-catch - } // SafeCall - - protected bool SafeCall(Action implementation, T arg) - { - try - { - implementation(arg); - - return true; - } - catch (Exception ex) - { - HandleException(new ExceptionEventData(ex)); - return false; - } // try-catch - } // SafeCall - - protected bool SafeCall(Action implementation, T1 arg1, T2 arg2) - { - try - { - implementation(arg1, arg2); - - return true; - } - catch (Exception ex) - { - HandleException(new ExceptionEventData(ex)); - return false; - } // try-catch - } // SafeCall - - #endregion - } // class CommonBaseForm -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.cs deleted file mode 100644 index f3e87452..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/HelpDialog.cs +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using IpTviewr.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Forms -{ - public partial class HelpDialog : Form - { - public static DialogResult ShowRtfHelp(IWin32Window owner, string rtfHelpText, string caption = null) - { - using (var dialog = new HelpDialog()) - { - BasicGoogleTelemetry.SendScreenHit(dialog, caption); - dialog.richTextHelp.Rtf = rtfHelpText; - if (caption != null) dialog.Text = caption; - return dialog.ShowDialog(owner); - } // using dialog - } // ShowRtfHelp - - public static DialogResult ShowPlainTextHelp(IWin32Window owner, string helpText, string caption = null) - { - using (var dialog = new HelpDialog()) - { - BasicGoogleTelemetry.SendScreenHit(dialog, caption); - dialog.richTextHelp.Text = helpText; - if (caption != null) dialog.Text = caption; - return dialog.ShowDialog(owner); - } // using dialog - } // ShowRtfHelp - - public HelpDialog() - { - InitializeComponent(); - } // constructor - - private void richTextHelp_LinkClicked(object sender, LinkClickedEventArgs e) - { - Launcher.OpenUrl(this, e.LinkText); - } // richTextHelp_LinkClicked - } // class HelpDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/IBackgroundWorkerDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/IBackgroundWorkerDialog.cs deleted file mode 100644 index b19272fc..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/IBackgroundWorkerDialog.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Forms -{ - public interface IBackgroundWorkerDialog - { - IWin32Window ThisWindow - { - get; - } // ThisWindow - - Form OwnerForm - { - get; - } // OwnerForm - - void SetProgressText(string text); - void SetProgressMinMax(int min, int max); - void SetProgress(int value); - void SetProgressUndefined(); - bool QueryCancel(); - } // interface IBackgroundWorkerDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.Designer.cs deleted file mode 100644 index 90ee514e..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.Designer.cs +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.UiServices.Common.Forms -{ - partial class NotImplementedBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.labelNotImplemented = new System.Windows.Forms.Label(); - this.buttonOk = new System.Windows.Forms.Button(); - this.pictureIconNotImplemented = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.pictureIconNotImplemented)).BeginInit(); - this.SuspendLayout(); - // - // labelNotImplemented - // - this.labelNotImplemented.AutoSize = true; - this.labelNotImplemented.Font = new System.Drawing.Font("Segoe UI Semibold", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.labelNotImplemented.Location = new System.Drawing.Point(218, 25); - this.labelNotImplemented.Name = "labelNotImplemented"; - this.labelNotImplemented.Size = new System.Drawing.Size(239, 147); - this.labelNotImplemented.TabIndex = 1; - this.labelNotImplemented.Text = "We\'re sorry! Work in progress\r\n\r\n¡Lo sentimos! Trabajo en curso\r\n\r\nDésolé! Travau" + - "x en cours\r\n\r\nSiamo spiacenti! Lavori in corso"; - this.labelNotImplemented.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // buttonOk - // - this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonOk.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; - this.buttonOk.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonOk.Location = new System.Drawing.Point(372, 187); - this.buttonOk.Name = "buttonOk"; - this.buttonOk.Size = new System.Drawing.Size(100, 25); - this.buttonOk.TabIndex = 2; - this.buttonOk.Text = "&OK"; - this.buttonOk.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - this.buttonOk.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - // - // pictureIconNotImplemented - // - this.pictureIconNotImplemented.Image = global::IpTviewr.UiServices.Common.Properties.Resources.NotImplemented_200x200; - this.pictureIconNotImplemented.Location = new System.Drawing.Point(12, 12); - this.pictureIconNotImplemented.Name = "pictureIconNotImplemented"; - this.pictureIconNotImplemented.Size = new System.Drawing.Size(200, 200); - this.pictureIconNotImplemented.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.pictureIconNotImplemented.TabIndex = 0; - this.pictureIconNotImplemented.TabStop = false; - // - // NotImplementedBox - // - this.AcceptButton = this.buttonOk; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonOk; - this.ClientSize = new System.Drawing.Size(472, 212); - this.ControlBox = false; - this.Controls.Add(this.buttonOk); - this.Controls.Add(this.labelNotImplemented); - this.Controls.Add(this.pictureIconNotImplemented); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "NotImplementedBox"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - ((System.ComponentModel.ISupportInitialize)(this.pictureIconNotImplemented)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.PictureBox pictureIconNotImplemented; - private System.Windows.Forms.Label labelNotImplemented; - private System.Windows.Forms.Button buttonOk; - } -} \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.cs deleted file mode 100644 index 717a1c54..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/NotImplementedBox.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Forms -{ - public partial class NotImplementedBox : Form - { - public NotImplementedBox() - { - InitializeComponent(); - } // constructor - - public static void ShowBox(IWin32Window owner, string context) - { - using (var box = new NotImplementedBox()) - { - if (context == null) - { - context = owner.GetType().Name; - } - else - { - string.Format("{0}/{1}", owner.GetType().Name, context); - } // if-else - - BasicGoogleTelemetry.SendScreenHit(box, context); - box.ShowDialog(owner); - } // using - } // ShowBox - } // class NotImplementedBox -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.Designer.cs deleted file mode 100644 index b3cdfb57..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.Designer.cs +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.UiServices.Common.Forms -{ - partial class PropertiesDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.Windows.Forms.ColumnHeader Property; - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PropertiesDialog)); - System.Windows.Forms.ColumnHeader Value; - this.labelDescription = new System.Windows.Forms.Label(); - this.contextMenuList = new System.Windows.Forms.ContextMenuStrip(this.components); - this.contextMenuListCopyValue = new System.Windows.Forms.ToolStripMenuItem(); - this.contextMenuListCopyName = new System.Windows.Forms.ToolStripMenuItem(); - this.contextMenuListCopyRow = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.contextMenuListCopyAll = new System.Windows.Forms.ToolStripMenuItem(); - this.buttonOk = new System.Windows.Forms.Button(); - this.pictureBoxItemIcon = new IpTviewr.UiServices.Common.Controls.PictureBoxEx(); - this.listViewProperties = new IpTviewr.UiServices.Common.Controls.ListViewSortable(); - Property = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - Value = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.contextMenuList.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxItemIcon)).BeginInit(); - this.SuspendLayout(); - // - // Property - // - resources.ApplyResources(Property, "Property"); - // - // Value - // - resources.ApplyResources(Value, "Value"); - // - // labelDescription - // - resources.ApplyResources(this.labelDescription, "labelDescription"); - this.labelDescription.AutoEllipsis = true; - this.labelDescription.Name = "labelDescription"; - this.labelDescription.UseMnemonic = false; - // - // contextMenuList - // - this.contextMenuList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.contextMenuListCopyValue, - this.contextMenuListCopyName, - this.contextMenuListCopyRow, - this.toolStripSeparator1, - this.contextMenuListCopyAll}); - this.contextMenuList.Name = "contextMenu"; - resources.ApplyResources(this.contextMenuList, "contextMenuList"); - this.contextMenuList.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuList_Opening); - // - // contextMenuListCopyValue - // - this.contextMenuListCopyValue.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Copy_Clip_16x16; - this.contextMenuListCopyValue.Name = "contextMenuListCopyValue"; - resources.ApplyResources(this.contextMenuListCopyValue, "contextMenuListCopyValue"); - this.contextMenuListCopyValue.Click += new System.EventHandler(this.contextMenuListCopyValue_Click); - // - // contextMenuListCopyName - // - this.contextMenuListCopyName.Name = "contextMenuListCopyName"; - resources.ApplyResources(this.contextMenuListCopyName, "contextMenuListCopyName"); - this.contextMenuListCopyName.Click += new System.EventHandler(this.contextMenuListCopyName_Click); - // - // contextMenuListCopyRow - // - this.contextMenuListCopyRow.Name = "contextMenuListCopyRow"; - resources.ApplyResources(this.contextMenuListCopyRow, "contextMenuListCopyRow"); - this.contextMenuListCopyRow.Click += new System.EventHandler(this.contextMenuListCopyRow_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); - // - // contextMenuListCopyAll - // - this.contextMenuListCopyAll.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Copy_Table; - this.contextMenuListCopyAll.Name = "contextMenuListCopyAll"; - resources.ApplyResources(this.contextMenuListCopyAll, "contextMenuListCopyAll"); - this.contextMenuListCopyAll.Click += new System.EventHandler(this.contextMenuListCopyAll_Click); - // - // buttonOk - // - resources.ApplyResources(this.buttonOk, "buttonOk"); - this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonOk.Image = global::IpTviewr.UiServices.Common.Properties.Resources.Action_Ok_16x16; - this.buttonOk.Name = "buttonOk"; - this.buttonOk.UseVisualStyleBackColor = true; - // - // pictureBoxItemIcon - // - resources.ApplyResources(this.pictureBoxItemIcon, "pictureBoxItemIcon"); - this.pictureBoxItemIcon.Name = "pictureBoxItemIcon"; - this.pictureBoxItemIcon.TabStop = false; - // - // listViewProperties - // - resources.ApplyResources(this.listViewProperties, "listViewProperties"); - this.listViewProperties.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - Property, - Value}); - this.listViewProperties.ContextMenuStrip = this.contextMenuList; - this.listViewProperties.FullRowSelect = true; - this.listViewProperties.GridLines = true; - this.listViewProperties.HeaderCustomFont = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.listViewProperties.HeaderCustomForeColor = System.Drawing.Color.Empty; - this.listViewProperties.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; - this.listViewProperties.HeaderUsesCustomFont = true; - this.listViewProperties.IsDoubleBuffered = true; - this.listViewProperties.MultiSelect = false; - this.listViewProperties.Name = "listViewProperties"; - this.listViewProperties.OwnerDraw = true; - this.listViewProperties.UseCompatibleStateImageBehavior = false; - this.listViewProperties.View = System.Windows.Forms.View.Details; - // - // PropertiesDialog - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonOk; - this.Controls.Add(this.pictureBoxItemIcon); - this.Controls.Add(this.buttonOk); - this.Controls.Add(this.labelDescription); - this.Controls.Add(this.listViewProperties); - this.MinimizeBox = false; - this.Name = "PropertiesDialog"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; - this.Load += new System.EventHandler(this.PropertiesDialog_Load); - this.Shown += new System.EventHandler(this.PropertiesDialog_Shown); - this.contextMenuList.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxItemIcon)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private IpTviewr.UiServices.Common.Controls.ListViewSortable listViewProperties; - private System.Windows.Forms.Label labelDescription; - private System.Windows.Forms.Button buttonOk; - private IpTviewr.UiServices.Common.Controls.PictureBoxEx pictureBoxItemIcon; - private System.Windows.Forms.ContextMenuStrip contextMenuList; - private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyValue; - private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyName; - private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyRow; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem contextMenuListCopyAll; - } -} \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.cs b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.cs deleted file mode 100644 index 428c58db..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.cs +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Telemetry; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using Property = System.Collections.Generic.KeyValuePair; - -namespace IpTviewr.UiServices.Common.Forms -{ - public partial class PropertiesDialog : Form - { - public IEnumerable ItemProperties { get; set; } - public string Caption { get; set; } - public string Description { get; set; } - public Image ItemIcon { get; set; } - - public PropertiesDialog() - { - InitializeComponent(); - } // constructor - - private void PropertiesDialog_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this, Caption); - this.Text = Caption; - this.labelDescription.Text = (Description ?? Properties.PropertiesDialog.CaptionDefault); - this.pictureBoxItemIcon.Image = ItemIcon; - } // PropertiesDialog_Load - - private void PropertiesDialog_Shown(object sender, EventArgs e) - { - foreach (var property in ItemProperties) - { - AddProperty(property.Key, property.Value); - } // foreach - } // PropertiesDialog_Shown - - private void AddProperty(string name, string value) - { - ListViewItem item; - - item = listViewProperties.Items.Add(name ?? Properties.PropertiesDialog.NameNull); - item.UseItemStyleForSubItems = false; - if (value != null) - { - item.SubItems.Add(value); - } - else - { - item.SubItems.Add(Properties.PropertiesDialog.ValueNull); - item.SubItems[1].BackColor = Color.LightYellow; - } // if-else - } // AddProperty - - #region List context menu - - private void contextMenuList_Opening(object sender, CancelEventArgs e) - { - var selection = (listViewProperties.SelectedItems.Count > 0); - contextMenuListCopyValue.Enabled = selection; - contextMenuListCopyName.Enabled = selection; - contextMenuListCopyRow.Enabled = selection; - } // contextMenuList_Opening - - private void contextMenuListCopyValue_Click(object sender, EventArgs e) - { - var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; - if (selectedRow == null) return; - - Clipboard.SetText(selectedRow.SubItems[1].Text, TextDataFormat.UnicodeText); - } // contextMenuListCopyValue_Click - - private void contextMenuListCopyName_Click(object sender, EventArgs e) - { - var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; - if (selectedRow == null) return; - - Clipboard.SetText(selectedRow.SubItems[0].Text, TextDataFormat.UnicodeText); - } // contextMenuListCopyName_Click - - private void contextMenuListCopyRow_Click(object sender, EventArgs e) - { - var selectedRow = (listViewProperties.SelectedItems.Count > 0) ? listViewProperties.SelectedItems[0] : null; - if (selectedRow == null) return; - - Clipboard.SetText(string.Format("{0}\t{1}", selectedRow.SubItems[0].Text, selectedRow.SubItems[1].Text), TextDataFormat.UnicodeText); - } // contextMenuListCopyRow_Click - - private void contextMenuListCopyAll_Click(object sender, EventArgs e) - { - StringBuilder buffer; - - buffer = new StringBuilder(); - foreach (ListViewItem item in listViewProperties.Items) - { - buffer.AppendFormat("{0}\t{1}\r\n", item.SubItems[0].Text, item.SubItems[1].Text); - } // foreach item - - Clipboard.SetText(buffer.ToString(), TextDataFormat.UnicodeText); - } // contextMenuListCopyAll_Click - - #endregion - } // class PropertiesDlg -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.es.resx b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.es.resx deleted file mode 100644 index cce2a22f..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.es.resx +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Propiedad - - - Valor - - - (Descripción) - - - - 154, 22 - - - Copiar &valor - - - 154, 22 - - - Copiar &nombre - - - 154, 22 - - - Copiar &fila - - - 154, 22 - - - Copiar &todo - - - 155, 98 - - - &Aceptar - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.resx b/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.resx deleted file mode 100644 index e07549c0..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Forms/PropertiesDialog.resx +++ /dev/null @@ -1,360 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - Property - - - - 150 - - - False - - - Value - - - 275 - - - - Top, Left, Right - - - - Segoe UI Semibold, 10pt - - - NoControl - - - 82, 12 - - - 390, 64 - - - 0 - - - (Description) - - - MiddleLeft - - - labelDescription - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - 17, 17 - - - 183, 22 - - - Copy &value - - - 183, 22 - - - Copy &property name - - - 183, 22 - - - Copy &row - - - 180, 6 - - - 183, 22 - - - Copy &all - - - 184, 98 - - - contextMenuList - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Bottom, Right - - - NoControl - - - 372, 225 - - - 100, 25 - - - 2 - - - Ok - - - MiddleRight - - - ImageBeforeText - - - buttonOk - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 12, 12 - - - 64, 64 - - - 3 - - - pictureBoxItemIcon - - - IpTviewr.UiServices.Common.Controls.PictureBoxEx, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 1 - - - Top, Bottom, Left, Right - - - 12, 82 - - - 460, 137 - - - 1 - - - listViewProperties - - - IpTviewr.UiServices.Common.Controls.ListViewSortable, UiServices.Common, Version=1.5.20.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 4 - - - True - - - 6, 13 - - - 484, 262 - - - CenterParent - - - Properties - - - Property - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Value - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - contextMenuListCopyValue - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - contextMenuListCopyName - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - contextMenuListCopyRow - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - contextMenuListCopyAll - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PropertiesDialog - - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/License.txt b/1.5 'Kruger 60'/UiServices.Common/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/AssemblyInfo.cs deleted file mode 100644 index 2ac0ca79..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UI Services: Common")] -[assembly: AssemblyDescription("IpTviewr.UiServices.Common")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("66bf1592-6924-40a4-ba53-6bf34692ff16")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs deleted file mode 100644 index a5f2c89a..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.Designer.cs +++ /dev/null @@ -1,90 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class BackgroundWorkerDialog { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal BackgroundWorkerDialog() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.BackgroundWorkerDialog", typeof(BackgroundWorkerDialog).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Task has been cancelled.. - /// - internal static string TaskCancelled { - get { - return ResourceManager.GetString("TaskCancelled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task is being cancelled.. - /// - internal static string TaskCancelling { - get { - return ResourceManager.GetString("TaskCancelling", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Task is completed.. - /// - internal static string TaskCompleted { - get { - return ResourceManager.GetString("TaskCompleted", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.es.resx b/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.es.resx deleted file mode 100644 index ef6b1850..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/BackgroundWorkerDialog.es.resx +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - La tarea se ha cancelado. - - - Se está cancelando la tarea. - - - La tarea está completada. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.Designer.cs deleted file mode 100644 index 704ab534..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/CommonForm.Designer.cs +++ /dev/null @@ -1,72 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class CommonForm { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal CommonForm() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.CommonForm", typeof(CommonForm).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Unexpected exception in program. - /// - internal static string UncaughtExceptionCaption { - get { - return ResourceManager.GetString("UncaughtExceptionCaption", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.Designer.cs deleted file mode 100644 index 952c68f3..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.Designer.cs +++ /dev/null @@ -1,90 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public class PropertiesDialog { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal PropertiesDialog() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.PropertiesDialog", typeof(PropertiesDialog).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Properties of selected item. - /// - public static string CaptionDefault { - get { - return ResourceManager.GetString("CaptionDefault", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <unknown>. - /// - public static string NameNull { - get { - return ResourceManager.GetString("NameNull", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <not specified>. - /// - public static string ValueNull { - get { - return ResourceManager.GetString("ValueNull", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.es.resx b/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.es.resx deleted file mode 100644 index b3761d8c..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.es.resx +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Propiedades del elemento seleccionado - - - <desconocido> - - - <no especificado> - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.resx b/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.resx deleted file mode 100644 index 22b29628..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/PropertiesDialog.resx +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Properties of selected item - - - <unknown> - - - <not specified> - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.Designer.cs deleted file mode 100644 index 09e210d2..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.Designer.cs +++ /dev/null @@ -1,143 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Copy_Table { - get { - object obj = ResourceManager.GetObject("Action_Copy_Table", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DefaultAbout { - get { - object obj = ResourceManager.GetObject("DefaultAbout", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DefaultSplash { - get { - object obj = ResourceManager.GetObject("DefaultSplash", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NotImplemented_200x200 { - get { - object obj = ResourceManager.GetObject("NotImplemented_200x200", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap WaitClock_64x64 { - get { - object obj = ResourceManager.GetObject("WaitClock_64x64", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon WaitClock_Icon { - get { - object obj = ResourceManager.GetObject("WaitClock_Icon", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.resx deleted file mode 100644 index 2ea382de..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/Resources.resx +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\resources\notimplemented_200x200.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_copy_clip_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_copy_table.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\waitclock_icon.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\defaultsplash.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\waitclock_64x64.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - - ..\Resources\DefaultAbout.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs b/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs deleted file mode 100644 index 0e384ddb..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.Designer.cs +++ /dev/null @@ -1,99 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Common.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class TimeSpanUpDown { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal TimeSpanUpDown() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Common.Properties.TimeSpanUpDown", typeof(TimeSpanUpDown).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to d. - /// - internal static string DaysShortLabel { - get { - return ResourceManager.GetString("DaysShortLabel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to h. - /// - internal static string HoursShortLabel { - get { - return ResourceManager.GetString("HoursShortLabel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to m. - /// - internal static string MinutesShortLabel { - get { - return ResourceManager.GetString("MinutesShortLabel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to s. - /// - internal static string SecondsShortLabel { - get { - return ResourceManager.GetString("SecondsShortLabel", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.resx b/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.resx deleted file mode 100644 index 4128c169..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Properties/TimeSpanUpDown.resx +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - d - - - h - - - m - - - s - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/ISplashScreenAwareForm.cs b/1.5 'Kruger 60'/UiServices.Common/Start/ISplashScreenAwareForm.cs deleted file mode 100644 index 05760f36..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Start/ISplashScreenAwareForm.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Common.Start -{ - public interface ISplashScreenAwareForm : IDisposable - { - event EventHandler FormLoadCompleted; - } // ISplashScreenAwareForm -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs b/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs deleted file mode 100644 index 4648f2bc..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Start/SplashApplicationContext.cs +++ /dev/null @@ -1,338 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Start -{ - public abstract class SplashApplicationContext : ApplicationContext - { - private delegate void Action(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6); - - private SplashScreen splashScreen; - private BackgroundWorker worker; - - /// Descendants MUST NOT perform any work on the constructor; instead all constructor-related initialization (if any) MUST BE done in InitializeContext - public SplashApplicationContext() - { - InitializeContext(); - SetThingsInMotion(); - } // constructor - - private void SetThingsInMotion() - { - splashScreen = new SplashScreen(); - splashScreen.Load += SplashScreen_Load; - splashScreen.Shown += SplashScreen_Shown; - splashScreen.FormClosing += SplashScreen_FormClosing; - splashScreen.Show(); - } // SetThingsInMotion - - private void EndSplashScreen(Form mainForm) - { - if (splashScreen == null) return; - - splashScreen.Close(); - splashScreen.Dispose(); - splashScreen = null; - - mainForm.Activate(); - } // EndSplashScreen - - #region Main form handling - - private void StartMainForm(Form mainForm) - { - var splashAware = mainForm as ISplashScreenAwareForm; - - // hook-up event to call EndSplashScreen - if (splashAware != null) - { - splashAware.FormLoadCompleted += MainForm_FormLoadCompleted; - } - else - { - mainForm.Shown += MainForm_Shown; - } // if-else - - // hook-up event to end the application context - mainForm.FormClosed += MainForm_FormClosed; - - // display the main form - mainForm.Show(); - } // StartMainForm - - void MainForm_FormLoadCompleted(object sender, EventArgs e) - { - EndSplashScreen(sender as Form); - } // MainForm_FormLoadCompleted - - void MainForm_Shown(object sender, EventArgs e) - { - EndSplashScreen(sender as Form); - } // MainForm_Shown - - void MainForm_FormClosed(object sender, FormClosedEventArgs e) - { - // end application context - ExitThread(); - } // MainForm_FormClosed - - #endregion - - #region SplashScreen event handling - - private void SplashScreen_Load(object sender, EventArgs e) - { - var backgroundImage = SetupSplashScreen(splashScreen.LabelProgress) ?? Properties.Resources.DefaultSplash; - splashScreen.BackgroundImage = backgroundImage; - splashScreen.Size = backgroundImage.Size; - } // SplashScreen_Load - - private void SplashScreen_Shown(object sender, EventArgs e) - { - worker = new BackgroundWorker(); - worker.WorkerReportsProgress = false; - worker.WorkerSupportsCancellation = true; - worker.DoWork += Worker_DoWork; - worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - worker.RunWorkerAsync(Thread.CurrentThread); - } // SplashScreen_Shown - - private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e) - { - e.Cancel = (worker != null); - } // SplashScreen_FormClosing - - #endregion - - #region Methods to be implemented/overriden by descendants - - protected virtual void InitializeContext() - { - // no op - } // InitializeContext - - protected virtual Image SetupSplashScreen(Label progressLabel) - { - return null; - } // SetupSplashScreen - - protected abstract object DoBackgroundWork(); - protected abstract bool BackgroundWorkCompleted(RunWorkerCompletedEventArgs result); - protected abstract void DoDisplayMessage(Form splashScreen, string caption, string message, MessageBoxIcon icon); - protected abstract void DoDisplayException(Form splashScreen, string caption, string message, MessageBoxIcon icon, Exception exception); - protected abstract Form GetMainForm(); - - #endregion - - #region Helper methods for background work - - protected void DisplayProgress(string progressMessage, bool async) - { - if (splashScreen == null) throw new InvalidOperationException(); - - if (splashScreen.InvokeRequired) - { - if (async) - { - splashScreen.BeginInvoke(new Action(DisplayProgress), progressMessage, async); - } - else - { - splashScreen.Invoke(new Action(DisplayProgress), progressMessage, async); - } // if - } - else - { - splashScreen.LabelProgress.Text = progressMessage; - splashScreen.LabelProgress.Refresh(); - } // if-else InvokeRequired - } // DisplayProgress - - protected void CallForegroundAction(Action action, bool async) - { - if ((splashScreen != null) && (splashScreen.InvokeRequired)) - { - if (async) - { - splashScreen.BeginInvoke(new Action(CallForegroundAction), action, async); - } - else - { - splashScreen.Invoke(new Action(CallForegroundAction), action, async); - } // if-else - } - else - { - action(); - } // if-else InvokeRequired - } // CallForegroundAction - - protected void CallForegroundAction(Action action, object data, bool async) - { - if ((splashScreen != null) && (splashScreen.InvokeRequired)) - { - if (async) - { - splashScreen.BeginInvoke(new Action, object, bool>(CallForegroundAction), action, data, async); - } - else - { - splashScreen.Invoke(new Action, object, bool>(CallForegroundAction), action, data, async); - } // if-else - } - else - { - action(data); - } // if-else InvokeRequired - } // CallForegroundAction - - protected object CallForegroundFunction(Func function, object data) - { - if (splashScreen.InvokeRequired) - { - return splashScreen.Invoke(new Func, object, object>(CallForegroundFunction), function, data); - } - else - { - return function(data); - } // if-else - } // CallForegroundFunctionCallback - - protected void DisplayMessage(string message, bool async) - { - DisplayMessage(null, message, MessageBoxIcon.Warning, async); - } // DisplayMessage - - protected void DisplayMessage(string caption, string message, MessageBoxIcon icon, bool async) - { - if ((splashScreen != null) && (splashScreen.InvokeRequired)) - { - if (async) - { - splashScreen.BeginInvoke(new Action(DisplayMessage), caption, message, icon, async); - } - else - { - splashScreen.Invoke(new Action(DisplayMessage), caption, message, icon, async); - } // if-else - } - else - { - DoDisplayMessage(splashScreen, caption, message, icon); - } // if-else InvokeRequired - } // DisplayMessage - - protected void DisplayException(string message, bool async, bool isFatal, Exception exception) - { - DisplayException(null, message, MessageBoxIcon.Error, async, isFatal, exception); - } // DisplayException - - protected void DisplayException(string caption, string message, MessageBoxIcon icon, bool async, bool isFatal, Exception exception) - { - if ((splashScreen != null) && (splashScreen.InvokeRequired)) - { - if ((!isFatal) || (async)) - { - splashScreen.BeginInvoke(new Action(DisplayException), exception, caption, message, icon, async, isFatal); - } - else - { - splashScreen.Invoke(new Action(DisplayException), exception, caption, message, icon, async, isFatal); - } // if-else - } - else - { - try - { - DoDisplayException(splashScreen, caption, message, icon, exception); - if ((isFatal) && (worker != null)) - { - worker.CancelAsync(); - } // if - } - catch - { - // ignore - } - } // if-else InvokeRequired - } // DisplayException - - #endregion - - #region BackgroundWorker implementation - - private void Worker_DoWork(object sender, DoWorkEventArgs e) - { - // set worker thread name (for debugging pourposes) - var currentThread = Thread.CurrentThread; - currentThread.Name = "SplashAplicationContext BackgroundWorker"; - - // inherit parent thead culture settings - var parentThread = e.Argument as Thread; - if (parentThread != null) - { - currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case - currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread - } // if - - e.Result = DoBackgroundWork(); - } // Worker_DoWork - - private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - Form mainForm = null; - - var isOk = BackgroundWorkCompleted(e); - worker.Dispose(); - worker = null; - - var close = (!isOk) || (e.Cancelled) || (e.Error != null); - if (!close) - { - close = true; - try - { - mainForm = GetMainForm(); - close = (mainForm == null); - } - catch (Exception ex) - { - DisplayException(Properties.Splash.ExceptionGetMainForm, false, true, ex); - } // try-catch - } // if - - if (!close) - { - close = true; - try - { - StartMainForm(mainForm); - close = false; - } - catch (Exception ex) - { - DisplayException(Properties.Splash.ExceptionStartMainForm, false, true, ex); - close = true; - } // try-catch - } // if - - if (close) - { - splashScreen.Close(); - ExitThread(); - return; - } // if - } // Worker_RunWorkerCompleted - - #endregion - } // class SplashApplicationContext -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.cs b/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.cs deleted file mode 100644 index a1c9e8a2..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/Start/SplashScreen.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common.Start -{ - internal partial class SplashScreen : Form - { - public SplashScreen() - { - InitializeComponent(); - this.Text = Path.GetFileName(Application.ExecutablePath); - } // constructor - } // class SplashScreen -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Common/WinFormsControlsExtensions.cs b/1.5 'Kruger 60'/UiServices.Common/WinFormsControlsExtensions.cs deleted file mode 100644 index e80fe202..00000000 --- a/1.5 'Kruger 60'/UiServices.Common/WinFormsControlsExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Common -{ - public static class WinFormsControlsExtensions - { - public static void ChangeImage(this Button control, Image newImage) - { - if (control.Image != null) control.Image.Dispose(); - control.Image = newImage; - } // ChangeImage - - public static void ChangeImage(this PictureBox control, Image newImage) - { - if (control.Image != null) control.Image.Dispose(); - control.Image = newImage; - } // ChangeImage - } // static class WinFormsControlsExtensions -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/AppUiConfiguration.cs b/1.5 'Kruger 60'/UiServices.Config/AppUiConfiguration.cs deleted file mode 100644 index 19c71c52..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/AppUiConfiguration.cs +++ /dev/null @@ -1,563 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.Win32; -using IpTviewr.Common.Serialization; -using IpTviewr.UiServices.Configuration.Cache; -using IpTviewr.UiServices.Configuration.Logos; -using IpTviewr.UiServices.Configuration.Properties; -using IpTviewr.UiServices.Configuration.Schema2014.Config; -using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; - -namespace IpTviewr.UiServices.Configuration -{ - public class AppUiConfiguration - { - public const string IpTvProviderSettingsRegistrationGuid = "{1E8D4BC4-4D78-4B69-BB50-96BA921A7449}"; - - private string DefaultSaveLocation; - internal IDictionary ItemsRegistry; - internal IDictionary ItemsIndex; - internal IList Items; - - #region Static methods - - public static AppUiConfiguration Current - { - get; - private set; - } // Current - - public static AppUiConfiguration CreateForUserConfig(UserConfig userConfig) - { - AppUiConfiguration config; - - config = new AppUiConfiguration(); - config.User = userConfig; - - return config; - } // CreateForUserConfig - - public static InitializationResult Load(string overrideBasePath, Action displayProgress) - { - AppUiConfiguration config; - InitializationResult result; - - displayProgress?.Invoke(Properties.Texts.LoadProgress_Start); - config = new AppUiConfiguration(); - result = config.LoadBasicConfiguration(overrideBasePath); - if (result.IsError) return result; - - displayProgress?.Invoke(Properties.Texts.LoadProgress_UserConfig); - result = config.LoadUserConfiguration(); - if (result.IsError) return result; - - result = config.RegisterConfigurationItems(); - if (result.IsError) return result; - - result = config.ProcessXmlConfigurationItems(); - if (result.IsError) return result; - - displayProgress?.Invoke(Properties.Texts.LoadProgress_ContentProvider); - result = config.LoadIpTvProviderData(); - if (result.IsError) return result; - - Current = config; - - return InitializationResult.Ok; - } // Load - - public static AppUiConfiguration LoadRegistryAppConfiguration(out InitializationResult initializationResult) - { - AppUiConfiguration config; - - config = new AppUiConfiguration(); - - initializationResult = config.LoadRegistrySettings(null); - if (initializationResult.IsError) return null; - - return config; - } // LoadRegistryAppConfiguration - - public static T CloneSettings(IConfigurationItem settings) where T: class, IConfigurationItem - { - return XmlSerialization.CloneObject(settings) as T; - } // CloneSettings - - protected static IList GetUiCultures() - { - var culture = CultureInfo.CurrentUICulture; - var tempList = new List(); - - while (culture.Name != "") - { - tempList.Add(culture.Name.ToLowerInvariant()); - culture = culture.Parent; - } // while - tempList.Add(""); - - var cultureList = new List(tempList.Count); - cultureList.AddRange(tempList); - - return cultureList.AsReadOnly(); - } // GetUiCultures - - #endregion - - public AppUiConfiguration() - { - Folders = new AppUiConfigurationFolders(); - } // constructor - - public AppUiConfigurationFolders Folders - { - get; - protected set; - } // Folders - - public IList Cultures - { - get; - protected set; - } // Cultures - - public IDictionary DescriptionServiceTypes - { - get; - protected set; - } // FriendlyNamesServiceTypes - - public bool DisplayPreferredOrFirst - { - get; - protected set; - } // DisplayPreferredOrFirst - - public CacheManager Cache - { - get; - protected set; - } // Cache - - public ProviderLogoMappings ProviderLogoMappings - { - get; - protected set; - } // ProviderLogoMappings - - public ServiceLogoMappings ServiceLogoMappings - { - get; - protected set; - } // ServiceLogoMappings - - public UiContentProvider ContentProvider - { - get; - protected set; - } // ContentProvider - - public string AnalyticsClientId - { - get; - protected set; - } // AnalyticsClientId - - public UserConfig User - { - get; - protected set; - } // User - - public IConfigurationItem this[Guid guid] - { - get { return Items[ItemsIndex[guid]]; } // get - set { Items[ItemsIndex[guid]] = value; } // set - } // this[Guid] - - public IConfigurationItem this[int directIndex] - { - get { return Items[directIndex]; } // get - set { Items[directIndex] = value; } // set - } // this[int] - - public bool IsDirty - { - get; - set; - } // IsDirty - - /* - public string EpgDatabaseFile - { - get { return Path.Combine(Folders.Cache, "EPG.sdf"); } - } // EpgDatabaseFile - */ - - #region Public methods - - public void Save(string overrideSaveLocation = null) - { - User.Configuration = new XmlConfigurationItems(); - User.Configuration.XmlData = new List(Items.Count); - - // serialize configuration items - foreach (var pair in ItemsIndex) - { - User.Configuration.XmlData.Add(XmlConfigurationItems.GetXmlElement(pair.Key, Items[pair.Value])); - } // foreach - - // save registry - User.Configuration.Registry = new List(ItemsRegistry.Count); - foreach (var pair in ItemsRegistry) - { - User.Configuration.Registry.Add(pair.Value.GetType().AssemblyQualifiedName); - } // foreach - - var configFilename = overrideSaveLocation ?? DefaultSaveLocation; - XmlSerialization.Serialize(configFilename, Encoding.UTF8, User); - - // save memory - // the serialized configuration items are not needed for normal operation, as they are accessed using this[Guid] - User.Configuration = null; - - IsDirty = false; - } // Save - - public void RegisterConfiguration(IConfigurationItemRegistration registration, IConfigurationItem configItem = null, bool createDefault = false) - { - if (ItemsRegistry == null) - { - ItemsRegistry = new Dictionary(); - ItemsIndex = new Dictionary(); - Items = new List(); - } // if - - ItemsRegistry.Add(registration.Id, registration); - var directIndex = Items.Count; - ItemsIndex[registration.Id] = directIndex; - Items.Add(configItem ?? (createDefault? registration.CreateDefault() : null)); - registration.DirectIndex = directIndex; - } // RegisterConfiguration - - #endregion - - #region Basic app configuration - - protected InitializationResult LoadBasicConfiguration(string overrideBasePath) - { - InitializationResult initResult; - - initResult = LoadRegistrySettings(overrideBasePath); - if (initResult.IsError) return initResult; - - // Cultures - Cultures = GetUiCultures(); - - // Record tasks - Folders.RecordTasks = Path.Combine(Folders.Base, Properties.InvariantTexts.FolderRecordTasks); - - // Cache - Folders.Cache = Path.Combine(Folders.Base, Properties.InvariantTexts.FolderCache); - - // Logos - Folders.Logos = new AppUiConfigurationFolders.FolderLogos(Path.Combine(Folders.Base, Properties.InvariantTexts.FolderLogosRoot)); - - var descriptionServiceType = new Dictionary(); - descriptionServiceType.Add("1", Properties.Texts.DvbServiceTypeDescription_01); // SD TV - descriptionServiceType.Add("2", Properties.Texts.DvbServiceTypeDescription_02); // Radio (MPEG-1) - descriptionServiceType.Add("3", Properties.Texts.DvbServiceTypeDescription_03); // Teletext - descriptionServiceType.Add("6", Properties.Texts.DvbServiceTypeDescription_06); // Mosaic - descriptionServiceType.Add("10", Properties.Texts.DvbServiceTypeDescription_10); // Radio (AAC) - descriptionServiceType.Add("11", Properties.Texts.DvbServiceTypeDescription_11); // Mosaic (AAC) - descriptionServiceType.Add("12", Properties.Texts.DvbServiceTypeDescription_12); // Data - descriptionServiceType.Add("16", Properties.Texts.DvbServiceTypeDescription_16); // DVB MHP - descriptionServiceType.Add("17", Properties.Texts.DvbServiceTypeDescription_17); // HD TV (MPEG-2) - descriptionServiceType.Add("22", Properties.Texts.DvbServiceTypeDescription_22); // SD TV (AVC) - descriptionServiceType.Add("25", Properties.Texts.DvbServiceTypeDescription_25); // "HD TV - DescriptionServiceTypes = descriptionServiceType; - - // TODO: load from user config - DisplayPreferredOrFirst = true; - - // Validate application configuration - initResult = Validate(); - if (!initResult.IsOk) return initResult; - - // Initialize managers and providers - if (!Directory.Exists(Folders.RecordTasks)) - { - Directory.CreateDirectory(Folders.RecordTasks); - } // if - - Cache = new CacheManager(Folders.Cache); - - ProviderLogoMappings = new ProviderLogoMappings(Folders.Logos.FileProviderMappings); - ServiceLogoMappings = new ServiceLogoMappings(Folders.Logos.FileServiceDomainMappings, Folders.Logos.FileServiceMappings); - - return InitializationResult.Ok; - } // LoadBasicConfiguration - - #endregion - - #region Registry settings - - protected InitializationResult LoadRegistrySettings(string overrideBasePath) - { - try - { - var result = LoadRegistrySettingsInternal(overrideBasePath); - if (result != null) - { - return new InitializationResult() - { - Caption = Texts.AppConfigRegistryCaption, - Message = string.Format(Texts.AppConfigRegistryText, result) - }; - } - else - { - return InitializationResult.Ok; - } // if-else - } - catch (Exception ex) - { - return new InitializationResult() - { - Caption = Texts.AppConfigRegistryCaption, - Message = string.Format(Texts.AppConfigRegistryText, ex.Message), - InnerException = ex - }; - } // try-catch - } // LoadRegistrySettings - - private string LoadRegistrySettingsInternal(string overrideBasePath) - { - string fullKeyPath; - - using (var hkcu = Registry.CurrentUser) - { - fullKeyPath = InvariantTexts.RegistryKey_Root; - using (var root = hkcu.OpenSubKey(InvariantTexts.RegistryKey_Root)) - { - if (root == null) return string.Format(Texts.AppConfigRegistryMissingKey, fullKeyPath); - - var isInstalled = root.GetValue(InvariantTexts.RegistryValue_Installed); - if (isInstalled == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Installed); - - var clientId = root.GetValue(InvariantTexts.RegistryValue_Analytics_ClientId) as string; - AnalyticsClientId = clientId; - if (string.IsNullOrEmpty(clientId)) - { - AnalyticsClientId = Guid.NewGuid().ToString("D").ToUpperInvariant(); - using (var writableRoot = hkcu.OpenSubKey(InvariantTexts.RegistryKey_Root, true)) - { - writableRoot.SetValue(InvariantTexts.RegistryValue_Analytics_ClientId, AnalyticsClientId); - } // using writableRoot - } // if - - var baseFolder = root.GetValue(InvariantTexts.RegistryValue_Folder_Base); - if (baseFolder == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Folder_Base); - Folders.Base = overrideBasePath ?? baseFolder as string; - - var installFolder = root.GetValue(InvariantTexts.RegistryValue_Folder_Install); -#if (DEBUG == false) - if (installFolder == null) return string.Format(Texts.AppConfigRegistryMissingValue, fullKeyPath, InvariantTexts.RegistryValue_Folder_Install); -#endif - Folders.Install = installFolder as string; - } // using root - } // using hkcu - - return null; - } // LoadRegistrySettingsInternal - - #endregion - - protected InitializationResult Validate() - { - InitializationResult result; - - result = new InitializationResult(); - result.Caption = Properties.Texts.LoadConfigValidationCaption; - - if (!Directory.Exists(Folders.Base)) - { - result.Message = string.Format(Properties.Texts.AppConfigValidationBasePath, Folders.Base); - return result; - } // if - - if (!Directory.Exists(Folders.Logos.Root)) - { - result.Message = string.Format(Properties.Texts.AppConfigValidationLogosPath, Folders.Logos); - return result; - } // if - - result.IsOk = true; - return result; - } // Validate - - #region Content provider - - protected InitializationResult LoadIpTvProviderData() - { - var xmlPath = Path.Combine(Folders.Base, "movistartv-config.xml"); - - try - { - var ipTvProviderSettingsRegistrationGuid = new Guid(IpTvProviderSettingsRegistrationGuid); - var ipTvProviderSettings = this[ipTvProviderSettingsRegistrationGuid]; - - var result = ipTvProviderSettings.Initializate(); - if (!result.IsOk) return result; - - var xmlContentProvider = IpTvProviderData.Load(xmlPath); - - var validationResult = xmlContentProvider.Validate(); - if (validationResult != null) - { - return new InitializationResult() - { - Caption = Properties.Texts.LoadContentProviderDataValidationCaption, - Message = string.Format(Properties.Texts.LoadContentProviderDataValidation, xmlPath, validationResult), - }; - } // if - - ContentProvider = UiContentProvider.FromXmlConfiguration(xmlContentProvider, Cultures); - return InitializationResult.Ok; - } - catch (Exception ex) - { - return new InitializationResult() - { - Caption = Properties.Texts.LoadContentProviderDataExceptionCaption, - Message = string.Format(Properties.Texts.LoadContentProviderDataValidation, xmlPath, Properties.Texts.LoadContentProviderDataValidationException), - InnerException = ex - }; - } // try-catch - } // LoadIpTvProviderData - - #endregion - - #region User configuration - - protected InitializationResult LoadUserConfiguration() - { - DefaultSaveLocation = Path.Combine(Folders.Base, "user-config.xml"); - - try - { - // load - User = XmlSerialization.Deserialize(DefaultSaveLocation, true); - - // validate - var validationError = User.Validate(); - if (validationError != null) - { - return new InitializationResult() - { - Caption = Properties.Texts.LoadUserConfigValidationCaption, - Message = string.Format(Properties.Texts.LoadConfigUserConfigValidation, DefaultSaveLocation, validationError), - }; - } // if - - return InitializationResult.Ok; - } - catch (Exception ex) - { - return new InitializationResult() - { - Caption = Properties.Texts.LoadUserConfigExceptionCaption, - Message = string.Format(Properties.Texts.LoadConfigUserConfigValidation, DefaultSaveLocation, Properties.Texts.LoadConfigUserConfigValidationException), - InnerException = ex - }; - } // try-catch - } // LoadUserConfiguration - - private InitializationResult RegisterConfigurationItems() - { - try - { - var registerItems = User.Configuration.Registry; - ItemsRegistry = new Dictionary(registerItems.Count); - - foreach (var registerType in registerItems) - { - var type = Type.GetType(registerType); - var registration = (IConfigurationItemRegistration)Activator.CreateInstance(type); - if (registration == null) continue; - - ItemsRegistry.Add(registration.Id, registration); - } // foreach - } - catch (Exception ex) - { - return new InitializationResult(ex); - } // try-catch - - return InitializationResult.Ok; - } // RegisterConfigurationItems - - private InitializationResult ProcessXmlConfigurationItems() - { - try - { - ItemsIndex = new Dictionary(User.Configuration.XmlData.Count); - Items = new List(User.Configuration.XmlData.Count); - - foreach (var item in User.Configuration.XmlData) - { - var xAttr = item.Attributes["configurationId"]; - if ((xAttr == null) || (xAttr.Value == null)) continue; - var id = new Guid(xAttr.Value); - - IConfigurationItemRegistration registration; - if (!ItemsRegistry.TryGetValue(id, out registration)) continue; - - using (var reader = new XmlNodeReader(item)) - { - var configItem = (IConfigurationItem) XmlSerialization.Deserialize(reader, registration.ItemType); - - if (configItem.SupportsValidation) - { - var result = configItem.Validate(item.Name); - if (result != null) - { - return new InitializationResult(result); - } // if - } // if - - if (configItem.SupportsInitialization) - { - var result = configItem.Initializate(); - if (result.IsError) return result; - } // if - - var directIndex = Items.Count; - ItemsIndex[id] = directIndex; - Items.Add(configItem); - registration.DirectIndex = directIndex; - } // using reader - } // foreach - - // save memory - // the serialized configuration items are not needed for normal operation, as they are accessed using this[Guid] - User.Configuration = null; - } - catch (Exception ex) - { - return new InitializationResult(ex); - } // try-catch - - return InitializationResult.Ok; - } // ProcessXmlConfigurationItems - - #endregion - } // class AppUiConfiguration -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/AppUiConfigurationFolders.cs b/1.5 'Kruger 60'/UiServices.Config/AppUiConfigurationFolders.cs deleted file mode 100644 index b5da639a..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/AppUiConfigurationFolders.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration -{ - public class AppUiConfigurationFolders - { - public class FolderLogos - { - public string Root { get; internal protected set; } - public string Providers { get; internal protected set; } - public string Services { get; internal protected set; } - - internal FolderLogos(string rootFolder) - { - Root = rootFolder; - Providers = Path.Combine(Root, Properties.InvariantTexts.FolderLogosProviders); - Services = Path.Combine(Root, Properties.InvariantTexts.FolderLogosServices); - } // constructor - - public string FileProviderMappings - { - get { return Path.Combine(Providers, Properties.InvariantTexts.FileLogoProviderMappings); } - } // FileProvidersMappings - - public string FileServiceDomainMappings - { - get { return Path.Combine(Services, Properties.InvariantTexts.FileLogoDomainMappings); } - } // FileServiceDomainMappings - - public string FileServiceMappings - { - get { return Path.Combine(Services, Properties.InvariantTexts.FileLogoServiceMappings); } - } // FileProvidersMappings - } // FolderLogos - - public string Install { get; internal protected set; } - public string Base { get; internal protected set; } - public string RecordTasks { get; internal protected set; } - public string Cache { get; internal protected set; } - public FolderLogos Logos { get; internal protected set; } - } // class AppUiConfigurationFolders -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Cache/CacheManager.cs b/1.5 'Kruger 60'/UiServices.Config/Cache/CacheManager.cs deleted file mode 100644 index 026b336e..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Cache/CacheManager.cs +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Cache -{ - public class CacheManager - { - private string BaseDirectory; - private char[] DocNameOffendingChars; - - public CacheManager(string baseDirectory) - { - BaseDirectory = baseDirectory; - if (!Directory.Exists(BaseDirectory)) - { - Directory.CreateDirectory(BaseDirectory); - } // if - - var invalidFileChars = Path.GetInvalidFileNameChars(); - DocNameOffendingChars = new char[invalidFileChars.Length + 2]; - DocNameOffendingChars[0] = '.'; - DocNameOffendingChars[1] = ' '; - Array.Copy(invalidFileChars, 0, DocNameOffendingChars, 2, invalidFileChars.Length); - } // constructor - - public void SaveXml(string documentType, string name, int version, T xmlTree) where T: class - { - var path = Path.Combine(BaseDirectory, GetSafeDocumentName(documentType, name, ".xml")); - XmlSerialization.Serialize(path, Encoding.UTF8, xmlTree); - } // SaveXml - - public T LoadXml(string documentType, string name) where T : class - { - try - { - var path = Path.Combine(BaseDirectory, GetSafeDocumentName(documentType, name, ".xml")); - if (!File.Exists(path)) - { - return null; - } // if - - return XmlSerialization.Deserialize(path, false); - } - catch - { - // supress exception; behave as if document is not in the cache - return null; - } // try-catch - } // LoadXml - - public CachedXmlDocument LoadXmlDocument(string documentType, string name) where T : class - { - try - { - var path = Path.Combine(BaseDirectory, GetSafeDocumentName(documentType, name, ".xml")); - if (!File.Exists(path)) - { - return null; - } // if - - var document = XmlSerialization.Deserialize(path, false); - if (document == null) return null; - - var dateC = File.GetCreationTime(path); - var dateW = File.GetLastWriteTime(path); - - return new CachedXmlDocument(document, documentType, name, new Version(), (dateC > dateW) ? dateC : dateW); - } - catch - { - // supress exception; behave as if document is not in the cache - return null; - } // try-catch - } // LoadXmlDocument - - /// - /// Builds a filename, replacing all filesystem invalid characters (including '.' and spaces) with the given character - /// - /// Optional. Must not contain invalid chars - /// Name of the file/document - /// File extension - /// (Optional) Character to mark a replaced, invalid character - /// A filesystem-safe filename - public string GetSafeDocumentName(string documentType, string documentName, string extension, char? replacingChar = '~') - { - StringBuilder buffer; - int startIndex, index; - - documentName = documentName.ToLowerInvariant(); - buffer = new StringBuilder(documentType.Length + 2 + documentName.Length * 2); - if (documentType != null) - { - buffer.Append('{'); - buffer.Append(documentType.ToLowerInvariant()); - buffer.Append("} "); - } // if - - // quick test: any offending char? - index = documentName.IndexOfAny(DocNameOffendingChars); - if (index < 0) - { - buffer.Append(documentName); - buffer.Append(extension); - return buffer.ToString(); - } // if - - startIndex = 0; - while (index >= 0) - { - if (index != startIndex) - { - buffer.Append(documentName.Substring(startIndex, (index - startIndex))); - if (replacingChar.HasValue) buffer.Append(replacingChar.Value); - } // if - - startIndex = index + 1; - index = (startIndex < documentName.Length) ? documentName.IndexOfAny(DocNameOffendingChars, startIndex) : -1; - } // while - - // add final text - if (startIndex < documentName.Length) - { - buffer.Append(documentName.Substring(startIndex, documentName.Length - startIndex)); - } // if - buffer.Append(extension); - - return buffer.ToString(); - } // GetSafeDocumentName - } // class CacheManager -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Cache/CachedItemBase.cs b/1.5 'Kruger 60'/UiServices.Config/Cache/CachedItemBase.cs deleted file mode 100644 index ea66b0d1..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Cache/CachedItemBase.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Cache -{ - public abstract class CachedItemBase - { - public CachedItemBase(string documentType, string name, Version version, DateTime date) - { - DocumentType = documentType; - Name = name; - Version = version; - Date = date; - } // constructor - - public string DocumentType - { - get; - private set; - } // DocType - - public string Name - { - get; - private set; - } // Name - - public Version Version - { - get; - private set; - } // Version - - public DateTime Date - { - get; - private set; - } // Date - - public TimeSpan Age - { - get { return DateTime.Now - Date; } - } // Age - } // CachedItemBase -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Cache/CachedXmlDocument.cs b/1.5 'Kruger 60'/UiServices.Config/Cache/CachedXmlDocument.cs deleted file mode 100644 index 4fe082e9..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Cache/CachedXmlDocument.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Cache -{ - public sealed class CachedXmlDocument : CachedItemBase - { - public CachedXmlDocument(T document, string documentType, string name, Version version, DateTime date) - : base(documentType, name, version, date) - { - Document = document; - } // constructor - - public T Document - { - get; - private set; - } // Document - } // CachedXmlDocument -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.Designer.cs deleted file mode 100644 index 0f7d9e76..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.Designer.cs +++ /dev/null @@ -1,193 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Configuration { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class CommonUiResources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal CommonUiResources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.CommonUiResources", typeof(CommonUiResources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Add_16xM { - get { - object obj = ResourceManager.GetObject("Action_Add_16xM", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_AttachFile_16x16 { - get { - object obj = ResourceManager.GetObject("Action_AttachFile_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Cancel_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Delete_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_GoNextDown_16x16 { - get { - object obj = ResourceManager.GetObject("Action_GoNextDown_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_GoPreviousUp_16x16 { - get { - object obj = ResourceManager.GetObject("Action_GoPreviousUp_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Properties_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Property_Add_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Property_Add_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Property_Edit_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Property_Edit_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Info_16x16 { - get { - object obj = ResourceManager.GetObject("Status_Info_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Ok_SmallCircle_16x16 { - get { - object obj = ResourceManager.GetObject("Status_Ok_SmallCircle_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Warning_16x16 { - get { - object obj = ResourceManager.GetObject("Status_Warning_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.resx b/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.resx deleted file mode 100644 index 7419e2bc..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/CommonUiResources.resx +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\common.ui\resources\action_add_16xm.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\action_attachfile_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\action_cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\action_delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\action_gonextdown_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\action_gopreviousup_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\action_properties_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\action_property_add_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\action_property_edit_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\status_info_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\status_ok_smallcircle_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\common.ui\resources\status_warning_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.cs b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.cs deleted file mode 100644 index 2e930583..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentEditorDialog.cs +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Configuration.Editors -{ - public partial class ArgumentEditorDialog : Form - { - public ArgumentEditorDialog() - { - InitializeComponent(); - } // constructor - - public bool IsDataChanged - { - get; - private set; - } // IsDataChanged - - public string Parameter - { - get - { - return parameterEditor.CommandLine; - } - set - { - parameterEditor.CommandLine = value; - buttonOk.Enabled = (parameterEditor.CommandLine != ""); - Text = buttonOk.Enabled ? Properties.SettingsTexts.ParameterEditCaption : Properties.SettingsTexts.ParameterNewCaption; - } - } // Parameter - - public string OpenBraceText - { - get { return parameterEditor.OpenBraceText; } - set { parameterEditor.OpenBraceText = value; } - } // OpenBraceText - - public string CloseBraceText - { - get { return parameterEditor.CloseBraceText; } - set { parameterEditor.CloseBraceText = value; } - } // CloseBraceText - - public string ParametersList - { - get { return parameterEditor.ParametersList; } - set { parameterEditor.ParametersList = value; } - } // ParametersList - - private void parameterEditor_CommandLineChanged(object sender, EventArgs e) - { - buttonOk.Enabled = (parameterEditor.CommandLine != ""); - IsDataChanged = true; - } // parameterEditor_CommandLineChanged - } // class ArgumentEditorDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.Designer.cs deleted file mode 100644 index 80103909..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.Designer.cs +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.UiServices.Configuration.Editors -{ - partial class ArgumentsEditor - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ArgumentsEditor)); - this.groupBoxData = new System.Windows.Forms.GroupBox(); - this.buttonAdd = new System.Windows.Forms.Button(); - this.buttonMoveDown = new System.Windows.Forms.Button(); - this.buttonMoveUp = new System.Windows.Forms.Button(); - this.buttonRemove = new System.Windows.Forms.Button(); - this.listArguments = new System.Windows.Forms.ListBox(); - this.buttonEdit = new System.Windows.Forms.Button(); - this.toolTip = new System.Windows.Forms.ToolTip(this.components); - this.groupBoxData.SuspendLayout(); - this.SuspendLayout(); - // - // groupBoxData - // - resources.ApplyResources(this.groupBoxData, "groupBoxData"); - this.groupBoxData.Controls.Add(this.buttonAdd); - this.groupBoxData.Controls.Add(this.buttonMoveDown); - this.groupBoxData.Controls.Add(this.buttonMoveUp); - this.groupBoxData.Controls.Add(this.buttonRemove); - this.groupBoxData.Controls.Add(this.listArguments); - this.groupBoxData.Controls.Add(this.buttonEdit); - this.groupBoxData.Name = "groupBoxData"; - this.groupBoxData.TabStop = false; - // - // buttonAdd - // - resources.ApplyResources(this.buttonAdd, "buttonAdd"); - this.buttonAdd.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonAdd.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Property_Add_16x16; - this.buttonAdd.Name = "buttonAdd"; - this.toolTip.SetToolTip(this.buttonAdd, resources.GetString("buttonAdd.ToolTip")); - this.buttonAdd.UseVisualStyleBackColor = true; - this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); - // - // buttonMoveDown - // - resources.ApplyResources(this.buttonMoveDown, "buttonMoveDown"); - this.buttonMoveDown.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonMoveDown.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_GoNextDown_16x16; - this.buttonMoveDown.Name = "buttonMoveDown"; - this.toolTip.SetToolTip(this.buttonMoveDown, resources.GetString("buttonMoveDown.ToolTip")); - this.buttonMoveDown.UseVisualStyleBackColor = true; - this.buttonMoveDown.Click += new System.EventHandler(this.buttonMoveDown_Click); - // - // buttonMoveUp - // - resources.ApplyResources(this.buttonMoveUp, "buttonMoveUp"); - this.buttonMoveUp.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonMoveUp.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_GoPreviousUp_16x16; - this.buttonMoveUp.Name = "buttonMoveUp"; - this.toolTip.SetToolTip(this.buttonMoveUp, resources.GetString("buttonMoveUp.ToolTip")); - this.buttonMoveUp.UseVisualStyleBackColor = true; - this.buttonMoveUp.Click += new System.EventHandler(this.buttonMoveUp_Click); - // - // buttonRemove - // - resources.ApplyResources(this.buttonRemove, "buttonRemove"); - this.buttonRemove.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonRemove.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Delete_16x16; - this.buttonRemove.Name = "buttonRemove"; - this.toolTip.SetToolTip(this.buttonRemove, resources.GetString("buttonRemove.ToolTip")); - this.buttonRemove.UseVisualStyleBackColor = true; - this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); - // - // listArguments - // - resources.ApplyResources(this.listArguments, "listArguments"); - this.listArguments.FormattingEnabled = true; - this.listArguments.Name = "listArguments"; - this.listArguments.SelectedIndexChanged += new System.EventHandler(this.listArguments_SelectedIndexChanged); - this.listArguments.DoubleClick += new System.EventHandler(this.listArguments_DoubleClick); - // - // buttonEdit - // - resources.ApplyResources(this.buttonEdit, "buttonEdit"); - this.buttonEdit.FlatAppearance.BorderColor = System.Drawing.SystemColors.ControlDark; - this.buttonEdit.Image = global::IpTviewr.UiServices.Configuration.CommonUiResources.Action_Property_Edit_16x16; - this.buttonEdit.Name = "buttonEdit"; - this.toolTip.SetToolTip(this.buttonEdit, resources.GetString("buttonEdit.ToolTip")); - this.buttonEdit.UseVisualStyleBackColor = true; - this.buttonEdit.Click += new System.EventHandler(this.buttonEdit_Click); - // - // ArgumentsEditor - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBoxData); - this.Name = "ArgumentsEditor"; - this.Load += new System.EventHandler(this.ArgumentsEditor_Load); - this.groupBoxData.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBoxData; - private System.Windows.Forms.Button buttonAdd; - private System.Windows.Forms.Button buttonMoveDown; - private System.Windows.Forms.Button buttonMoveUp; - private System.Windows.Forms.Button buttonRemove; - private System.Windows.Forms.ListBox listArguments; - private System.Windows.Forms.Button buttonEdit; - private System.Windows.Forms.ToolTip toolTip; - } // class ArgumentsEditor -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.cs b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.cs deleted file mode 100644 index 294ce50e..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.cs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.UiServices.Common.Controls; -using IpTviewr.UiServices.Configuration.Settings.TvPlayers; - -namespace IpTviewr.UiServices.Configuration.Editors -{ - public partial class ArgumentsEditor : UserControl - { - private ListItemsManager ItemsManager; - - public ArgumentsEditor() - { - InitializeComponent(); - } // constructor - - public string OpenBraceText - { - get; - set; - } // OpenBraceText - - public string CloseBraceText - { - get; - set; - } // CloseBraceText - - public string ParametersList - { - get; - set; - } // ParametersList - - public string[] Arguments - { - get - { - var arguments = new string[listArguments.Items.Count]; - for (int index = 0; index < arguments.Length; index++) - { - arguments[index] = listArguments.Items[index].ToString(); - } // for - - return arguments; - } - set - { - if (value != null) - { - listArguments.Items.AddRange(value); - } - else - { - listArguments.Items.Clear(); - } // if-else - } // set - } // Arguments - - public bool IsDataChanged - { - get; - private set; - } // IsDataChanged - - private void ArgumentsEditor_Load(object sender, EventArgs e) - { - ItemsManager = new ListItemsManager(listArguments, buttonRemove, buttonMoveUp, buttonMoveDown); - listArguments.DisplayMember = null; - listArguments.ValueMember = null; - buttonEdit.Enabled = false; - } // ArgumentsEditor_Load - - private void listArguments_SelectedIndexChanged(object sender, EventArgs e) - { - buttonEdit.Enabled = (listArguments.SelectedIndex >= 0); - } // listArguments_SelectedIndexChanged - - private void listArguments_DoubleClick(object sender, EventArgs e) - { - buttonEdit.PerformClick(); - } // listArguments_DoubleClick - - private void buttonEdit_Click(object sender, EventArgs e) - { - using (var dialog = GetArgumentEditorDialog()) - { - dialog.Parameter = listArguments.SelectedItem.ToString(); - if (dialog.ShowDialog(this) != DialogResult.OK) - { - return; - } // if - - var index = listArguments.SelectedIndex; - listArguments.Items[index] = dialog.Parameter; - IsDataChanged = true; - } // using - } // buttonEdit_Click - - private void buttonRemove_Click(object sender, EventArgs e) - { - ItemsManager.RemoveSelection(); - IsDataChanged = true; - } // buttonRemove_Click - - private void buttonAdd_Click(object sender, EventArgs e) - { - using (var dialog = GetArgumentEditorDialog()) - { - dialog.Parameter = null; - if (dialog.ShowDialog(this) != DialogResult.OK) - { - return; - } // if - - listArguments.SelectedIndex = listArguments.Items.Add(dialog.Parameter); - IsDataChanged = true; - } // using - } // buttonAdd_Click - - private void buttonMoveUp_Click(object sender, EventArgs e) - { - ItemsManager.MoveSelectionUp(); - IsDataChanged = true; - } // buttonMoveUp_Click - - private void buttonMoveDown_Click(object sender, EventArgs e) - { - ItemsManager.MoveSelectionDown(); - IsDataChanged = true; - } // buttonMoveDown_Click - - private ArgumentEditorDialog GetArgumentEditorDialog() - { - var dialog = new ArgumentEditorDialog() - { - OpenBraceText = this.OpenBraceText, - CloseBraceText = this.CloseBraceText, - ParametersList = this.ParametersList - }; - - return dialog; - } // GetArgumentEditorDialog - } // class ArgumentsEditor -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.resx b/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.resx deleted file mode 100644 index b0f6a2f6..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Editors/ArgumentsEditor.resx +++ /dev/null @@ -1,378 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Top, Bottom, Left, Right - - - Top, Right - - - Flat - - - NoControl - - - - 169, 78 - - - 25, 25 - - - - 3 - - - 17, 17 - - - Add a new argument at the end of the list - - - buttonAdd - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 0 - - - Bottom, Right - - - Flat - - - NoControl - - - 169, 139 - - - 25, 25 - - - 5 - - - Move the selected argument one place down - - - buttonMoveDown - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 1 - - - Bottom, Right - - - Flat - - - NoControl - - - 169, 111 - - - 3, 3, 3, 0 - - - 25, 25 - - - 4 - - - Move the selected argument one place up - - - buttonMoveUp - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 2 - - - Top, Right - - - Flat - - - NoControl - - - 169, 47 - - - 3, 0, 3, 3 - - - 25, 25 - - - 2 - - - Remove selected column from the list - - - buttonRemove - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 3 - - - Top, Bottom, Left, Right - - - Lucida Console, 9pt - - - False - - - 12 - - - 6, 19 - - - 157, 145 - - - 0 - - - listArguments - - - System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 4 - - - Top, Right - - - Flat - - - NoControl - - - 169, 19 - - - 25, 25 - - - 1 - - - Edit selected argument - - - buttonEdit - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxData - - - 5 - - - 0, 0 - - - 200, 170 - - - 0 - - - Command line arguments - - - groupBoxData - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 13 - - - 200, 173 - - - toolTip - - - System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ArgumentsEditor - - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItem.cs b/1.5 'Kruger 60'/UiServices.Config/IConfigurationItem.cs deleted file mode 100644 index 84354370..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItem.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration -{ - // interface for marking configuration items - public interface IConfigurationItem - { - bool SupportsInitialization { get; } - InitializationResult Initializate(); - - bool SupportsValidation { get; } - string Validate(string ownerTag); - } // interface IConfigurationItem -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemEditor.cs b/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemEditor.cs deleted file mode 100644 index 5d24f4e5..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemEditor.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Configuration -{ - public interface IConfigurationItemEditor - { - UserControl UserInterfaceItem - { - get; - } // UserInterfaceItem - - bool SupportsWinFormsValidation - { - get; - } // SupportsWinFormsValidation - - bool IsDataChanged - { - get; - } // IsDataChanged - - bool IsAppRestartNeeded - { - get; - } // IsAppRestartNeeded - - bool Validate(); - IConfigurationItem GetNewData(); - - void EditorClosing(out bool cancelClose); - void EditorClosed(bool userCancel); - } // interface IConfigurationFormItem -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemRegistration.cs b/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemRegistration.cs deleted file mode 100644 index 596679e0..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/IConfigurationItemRegistration.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration -{ - public interface IConfigurationItemRegistration - { - Guid Id - { - get; - } // Id - - Type ItemType - { - get; - } // ItemType - - int DirectIndex - { - get; - set; - } // DirectIndex - - IConfigurationItem CreateDefault(); - - bool HasEditor - { - get; - } // HasEditor - - string EditorDisplayName - { - get; - } // EditorDisplayName - - string EditorDescription - { - get; - } // EditorDescription - - Image EditorImage - { - get; - } // EditorImage - - int EditorPriority - { - get; - } // EditorPriority - - IConfigurationItemEditor CreateEditor(IConfigurationItem data); - } // interface IConfigurationItemRegistration -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/ILocalizedObject.cs b/1.5 'Kruger 60'/UiServices.Config/ILocalizedObject.cs deleted file mode 100644 index cbb82d26..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/ILocalizedObject.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration -{ - public interface ILocalizedObject - { - string CultureName - { - get; - } // CultureName - } // ILocalizedObject -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/InitializationResult.cs b/1.5 'Kruger 60'/UiServices.Config/InitializationResult.cs deleted file mode 100644 index 70e109f9..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/InitializationResult.cs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration -{ - public class InitializationResult - { - private static InitializationResult OkSingleton = new InitializationResult() { IsOk = true }; - - /// - /// Gets an with IsOk set to and all remaining fields set to - /// - public static InitializationResult Ok - { - get { return OkSingleton; } - } // Ok - - public bool IsOk - { - get; - set; - } // IsOk - - public bool IsError - { - get { return !IsOk; } - } // IsError - - public string Caption - { - get; - set; - } // Caption - - public string Message - { - get; - set; - } // Message - - public Exception InnerException - { - get; - set; - } // InnerException - - public InitializationResult() - { - // no op - } // constructor - - public InitializationResult(string message) - { - Message = message; - } // InitializationResult - - public InitializationResult(Exception exception) - { - InnerException = exception; - } // InitializationResult - } // InitializationResult -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/License.txt b/1.5 'Kruger 60'/UiServices.Config/License.txt deleted file mode 100644 index 564d5dfc..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/UiServices.Config/LocalizedObject.cs b/1.5 'Kruger 60'/UiServices.Config/LocalizedObject.cs deleted file mode 100644 index ff7451b1..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/LocalizedObject.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration -{ - public abstract class LocalizedObject : ILocalizedObject - { - private string fieldCultureName; - - [XmlAttribute("culture")] - public string CultureName - { - get - { - return fieldCultureName; - } // get - set - { - fieldCultureName = (string.IsNullOrEmpty(value)) ? "" : value.ToLowerInvariant(); - } // - } // CultureName - - public static T FindMatchingCultureObject(IEnumerable collection, IEnumerable uiCultures) where T : ILocalizedObject - { - ILocalizedObject matching; - - matching = null; - var localizedCollection = (IEnumerable)collection; - foreach (var cultureName in uiCultures) - { - var q = from localized in localizedCollection - where localized.CultureName == cultureName - select localized; - matching = q.FirstOrDefault(); - if (matching != null) break; - } // foreach cultureName - - return (T)matching; - } // FindMatchingCultureObject - } // abstract class LocalizedObject -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/BaseLogo.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/BaseLogo.cs deleted file mode 100644 index fe032683..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/BaseLogo.cs +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.IO; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Logos -{ - public abstract class BaseLogo - { - public static Size LogoSizeToSize(LogoSize logoSize) - { - switch (logoSize) - { - case LogoSize.Size32: return new Size(32, 32); - case LogoSize.Size48: return new Size(48, 48); - case LogoSize.Size64: return new Size(64,64); - case LogoSize.Size96: return new Size(96,96); - case LogoSize.Size128: return new Size(128, 128); - case LogoSize.Size256: return new Size(256, 256); - default: - throw new IndexOutOfRangeException(); - } // switch - } // LogoSizeToSize - - public static string LogoSizeToString(LogoSize logoSize, bool withSize) - { - string text; - - switch (logoSize) - { - case LogoSize.Size32: text = Properties.Texts.LogoSize32; break; - case LogoSize.Size48: text = Properties.Texts.LogoSize48; break; - case LogoSize.Size64: text = Properties.Texts.LogoSize64; break; - case LogoSize.Size96: text = Properties.Texts.LogoSize96; break; - case LogoSize.Size128: text = Properties.Texts.LogoSize128; break; - case LogoSize.Size256: text = Properties.Texts.LogoSize256; break; - default: - throw new IndexOutOfRangeException(); - } // switch - - if (withSize) - { - var size = LogoSizeToSize(logoSize); - return string.Format(Properties.Texts.LogoSizeWithSizeFormat, text, size.Width, size.Height); - } - else - { - return text; - } // if-else - } // LogoSizeToString - - public static List> GetListLogoSizes(bool withSize) - { - var result = new List>(6); - result.Add(new KeyValuePair(LogoSize.Size32, LogoSizeToString(LogoSize.Size32, withSize))); - result.Add(new KeyValuePair(LogoSize.Size48, LogoSizeToString(LogoSize.Size48, withSize))); - result.Add(new KeyValuePair(LogoSize.Size64, LogoSizeToString(LogoSize.Size64, withSize))); - result.Add(new KeyValuePair(LogoSize.Size96, LogoSizeToString(LogoSize.Size96, withSize))); - result.Add(new KeyValuePair(LogoSize.Size128, LogoSizeToString(LogoSize.Size128, withSize))); - result.Add(new KeyValuePair(LogoSize.Size256, LogoSizeToString(LogoSize.Size256, withSize))); - - return result; - } // GetListLogoSizes - - public string FilePrefix - { - get; - protected set; - } // FilePrefix - - public string PartialPath - { - get; - protected set; - } // PartialPath - - public string BasePath - { - get; - protected set; - } // BasePath - - public string Key - { - get; - protected set; - } // Key - - public Image GetImage(LogoSize logoSize, bool noExceptions = true) - { - if (!IsSizeAvailable(logoSize)) - { - throw new NotSupportedException(); - } // if - - var path = Path.Combine(BasePath, PartialPath); - var filename = Path.Combine(path, GetFilename(logoSize, ".png")); - try - { - return Image.FromFile(filename); - } - catch (FileNotFoundException ex) - { - if (noExceptions == false) - { - throw new FileNotFoundException(ImageNotFoundExceptionText, ex); - } // if - } - catch (OutOfMemoryException ex) - { - if (noExceptions == false) - { - throw new InvalidOperationException(string.Format(ImageLoadExceptionText, filename), ex); - } - } // try-catch - catch - { - if (noExceptions == false) throw; - } // catch - - return GetBrokenFile(logoSize); - } // GetImage - - public string GetLogoIconPath() - { - var path = Path.Combine(BasePath, PartialPath); - var filename = Path.Combine(path, FilePrefix + ".ico"); - - return File.Exists(filename) ? filename : null; - } // GetLogoIconPath - - public static Image GetBrokenFile(LogoSize logoSize) - { - switch (logoSize) - { - case LogoSize.Size32: return Properties.Resources.BrokenFile_32; - case LogoSize.Size48: return Properties.Resources.BrokenFile_48; - case LogoSize.Size64: return Properties.Resources.BrokenFile_64; - case LogoSize.Size96: return Properties.Resources.BrokenFile_96; - case LogoSize.Size128: return Properties.Resources.BrokenFile_128; - case LogoSize.Size256: return Properties.Resources.BrokenFile_256; - } // switch - - return null; - } // GetBrokenFile - - protected virtual bool IsSizeAvailable(LogoSize logoSize) - { - switch (logoSize) - { - case LogoSize.Size32: - case LogoSize.Size48: - case LogoSize.Size64: - case LogoSize.Size96: - case LogoSize.Size128: - case LogoSize.Size256: - return true; - default: - return false; - } // switch - } // IsSizeAvailable - - protected virtual string GetSizeSufix(LogoSize logoSize) - { - switch (logoSize) - { - case LogoSize.Size32: return "@32"; - case LogoSize.Size48: return "@48"; - case LogoSize.Size64: return "@64"; - case LogoSize.Size96: return "@96"; - case LogoSize.Size128: return "@128"; - case LogoSize.Size256: return "@256"; - default: - throw new ArgumentOutOfRangeException("LogoSize logoSize"); - } // switch - } // GetSizeSufix - - protected string GetFilename(LogoSize size, string extension) - { - var buffer = new StringBuilder(); - buffer.Append(FilePrefix); - buffer.Append(GetSizeSufix(size)); - buffer.Append(extension); - return buffer.ToString(); - } // GetFilename - - protected abstract string ImageNotFoundExceptionText - { - get; - } // ImageNotFoundExceptionText - - protected abstract string ImageLoadExceptionText - { - get; - } // ImageLoadExceptionText - } // class BaseLogo -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/LogoSize.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/LogoSize.cs deleted file mode 100644 index fe8c9da9..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/LogoSize.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Logos -{ - public enum LogoSize - { - [XmlEnum(Name="32x32")] - Size32, - - [XmlEnum(Name = "48x48")] - Size48, - - [XmlEnum(Name = "64x64")] - Size64, - - [XmlEnum(Name = "96x96")] - Size96, - - [XmlEnum(Name = "128x128")] - Size128, - - [XmlEnum(Name = "256x256")] - Size256, - } // enum LogoSize -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogo.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogo.cs deleted file mode 100644 index ba250eb5..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogo.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Logos -{ - public class ProviderLogo : BaseLogo - { - public ProviderLogo(string basePath, string partialPath, string filePrefix, string key) - { - BasePath = basePath; - PartialPath = partialPath; - FilePrefix = filePrefix; - Key = key; - } // constructor - - protected override string ImageNotFoundExceptionText - { - get { return Properties.Texts.ExceptionLogosProviderImageNotFound; } - } // ImageNotFoundExceptionText - - protected override string ImageLoadExceptionText - { - get { return Properties.Texts.ExceptionLogosProviderImageLoadError; } - } // ImageLoadExceptionText - } // class ProviderLogo -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogoMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogoMappings.cs deleted file mode 100644 index 9223f09c..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ProviderLogoMappings.cs +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.UiServices.Configuration.Schema2014.Logos; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Logos -{ - public class ProviderLogoMappings - { - private IDictionary ProviderMappings; - - public string BasePathLogos - { - get; - private set; - } // BasePathLogos - - public ProviderLogoMappings(ProviderMappingsXml providerMappings) - { - Init(providerMappings); - } // constructor - - public ProviderLogoMappings(string providerMappingsXmlFilename) - { - var providerMappings = LogosCommon.ParseProviderMappingsXml(providerMappingsXmlFilename); - - Init(providerMappings); - } // constructor - - public static IDictionary BuildMapping(ProviderMappingsXml providerMappings) - { - Dictionary mappings; - int count; - - var q = from package in providerMappings.Packages - from mp in package.Mappings - select mp; - count = q.Count(); - - mappings = new Dictionary(count); - foreach (var mp in q) - { - try - { - mappings.Add(mp.DomainName.ToLowerInvariant(), mp.LogoFile); - } - catch (ArgumentException ex) // duplicated key (domain name) - { - throw new ApplicationException( - string.Format(Properties.Texts.ExceptionLogosProviderMappingsDuplicatedDomain, mp.DomainName), ex); - } // try-catch - } // foreach - - return mappings; - } // BuildMapping - - public ProviderLogo Get(string providerDomainName) - { - string logoFile; - - if (providerDomainName == null) providerDomainName = Properties.InvariantTexts.DefaultDomainNameProviderLogo; - providerDomainName = providerDomainName.ToLowerInvariant(); - - if (ProviderMappings.TryGetValue(providerDomainName, out logoFile)) - { - return new ProviderLogo(BasePathLogos, string.Empty, logoFile, providerDomainName); - } // if - - // get default logo - return Get(null); - } // Get - - private void Init(ProviderMappingsXml providerMappings) - { - ProviderMappings = BuildMapping(providerMappings); - BasePathLogos = providerMappings.BasePath; - } // Init - } // class ProviderLogoMappings -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogo.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogo.cs deleted file mode 100644 index 38413a3b..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogo.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Logos -{ - public class ServiceLogo : BaseLogo - { - public ServiceLogo(string basePath, string partialPath, string filePrefix, string key) - { - BasePath = basePath; - PartialPath = partialPath; - FilePrefix = filePrefix; - Key = key; - } // constructor - - protected override string ImageNotFoundExceptionText - { - get { return Properties.Texts.ExceptionLogosServiceImageNotFound; } - } // ImageNotFoundExceptionText - - protected override string ImageLoadExceptionText - { - get { return Properties.Texts.ExceptionLogosServiceImageLoadError; } - } // ImageLoadExceptionText - } // class ServiceLogo -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs deleted file mode 100644 index bf26ad07..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ReplacementDomain.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Logos -{ - partial class ServiceLogoMappings - { - public class ReplacementDomain - { - public bool IsMandatory - { - get; - internal set; - } // IsMandatory - - public string Replacement - { - get; - internal set; - } // Replacement - } // ReplacementDomain - } // partial class ServiceLogoMappings -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs deleted file mode 100644 index da36ade2..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.ServiceDomainMapping.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Logos -{ - partial class ServiceLogoMappings - { - public class ServiceDomainMapping - { - public string DomainRedirection - { - get; - internal set; - } // DomainRedirection - - public IDictionary Logos - { - get; - internal set; - } // Logos - } // class ServiceDomainMapping - } // partial class -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.cs deleted file mode 100644 index 1758c04c..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Logos/ServiceLogoMappings.cs +++ /dev/null @@ -1,236 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.UiServices.Configuration.Schema2014.Logos; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Logos -{ - public partial class ServiceLogoMappings - { - private IDictionary DomainMappings; - private Dictionary ServiceMappings; - - public string BasePathLogos - { - get; - private set; - } // BasePathServiceLogos - - public ServiceLogoMappings(DomainMappingsXml domainMappings, ServiceMappingsXml serviceMappings) - { - Init(domainMappings, serviceMappings); - } // constructor - - public ServiceLogoMappings(string domainMappingsXmlFilename, string serviceMappingsXmlFile) - { - var domainMappings = LogosCommon.ParseDomainMappingsXml(domainMappingsXmlFilename); - var serviceMappings = LogosCommon.ParseServiceMappingsXml(serviceMappingsXmlFile); - - Init(domainMappings, serviceMappings); - } // constructor - - public static Dictionary BuildMapping(DomainMappingsXml mapping) - { - Dictionary mappings; - int count; - - var q = from package in mapping.Packages - from mp in package.Mappings - select mp; - count = q.Count(); - - mappings = new Dictionary(count); - foreach (var mp in q) - { - try - { - mappings.Add(mp.DomainName.ToLowerInvariant(), new ReplacementDomain - { - IsMandatory = mp.Mandatory, - Replacement = mp.ReplacementDomain.ToLowerInvariant(), - }); - } - catch (ArgumentException ex) // duplicated key (domain name) - { - throw new ApplicationException( - string.Format(Properties.Texts.ExceptionLogosDomainMappingsDuplicatedDomain, mp.DomainName), ex); - } // try-catch - } // foreach - - return mappings; - } // BuildMapping - - public static Dictionary BuildMapping(ServiceMappingsXml mapping) - { - Dictionary mappings; - ServiceDomainMapping domainMappings; - int count; - - var qDomain = from package in mapping.Packages - from domain in package.Domains - select domain; - count = qDomain.Count(); - - mappings = new Dictionary(count); - foreach (var domain in qDomain) - { - domainMappings = new ServiceDomainMapping() - { - DomainRedirection = domain.RedirectDomainName, - Logos = new Dictionary(domain.Mappings.Length), - }; - try - { - mappings.Add(domain.DomainName.ToLowerInvariant(), domainMappings); - } - catch (ArgumentException ex) // duplicated key (domain name) - { - throw new ApplicationException( - string.Format(Properties.Texts.ExceptionLogosServiceMappingsDuplicatedDomain, - domain.DomainName), ex); - } // try-catch - - foreach (var mp in domain.Mappings) - { - try - { - domainMappings.Logos.Add(mp.Name.ToLowerInvariant(), mp.Logo); - } - catch (ArgumentException ex) // duplicated key (domain service name) - { - throw new ApplicationException( - string.Format(Properties.Texts.ExceptionLogosServiceMappingsDuplicatedService, - mp.Name, domain.DomainName), ex); - } // try-catch - } // foreach mp - } // foreach domain - - return mappings; - } // BuildMapping - - public ServiceLogo Get(string serviceDomainName, string providerDomain, string serviceName, string serviceTypeId) - { - ReplacementDomain replacement; - ServiceDomainMapping serviceLogos; - string logoFile; - string partialPath; - bool firstReplacementChance; - - if (providerDomain == null) throw new ArgumentNullException("providerDomain"); - if (serviceDomainName == null) serviceDomainName = providerDomain; - if (serviceName == null) serviceName = Properties.InvariantTexts.ServiceNameAny; - - serviceDomainName = serviceDomainName.ToLowerInvariant(); - serviceName = serviceName.ToLowerInvariant(); - - firstReplacementChance = true; - while (serviceDomainName != null) - { - // replace domain? - if (DomainMappings.TryGetValue(serviceDomainName, out replacement)) - { - if ((replacement.IsMandatory) || (!firstReplacementChance)) - { - serviceDomainName = replacement.Replacement; - firstReplacementChance = true; - continue; - } // if - } // if - if (!firstReplacementChance) - { - serviceDomainName = GetParentDomain(serviceDomainName); - continue; - } // if - - // locate service logo for given domain - if (!ServiceMappings.TryGetValue(serviceDomainName, out serviceLogos)) - { - firstReplacementChance = false; - continue; - } // if - - if (!serviceLogos.Logos.TryGetValue(serviceName, out logoFile)) - { - if (!serviceLogos.Logos.TryGetValue(Properties.InvariantTexts.ServiceNameAny, out logoFile)) - { - firstReplacementChance = false; - continue; - } // if - } // if - - partialPath = GetFolderForDomain((serviceLogos.DomainRedirection == null) ? serviceDomainName : serviceLogos.DomainRedirection); - - return GetLogo(partialPath, logoFile); - } // while - - // avoid infinite recursion if default domain name contains no logos or doesn't exists - if (providerDomain == Properties.InvariantTexts.DefaultDomainNameServiceLogo) - { - return GetLogo("unknown", "unknown"); - } // if - - // obtain default logo - return Get(null, Properties.InvariantTexts.DefaultDomainNameServiceLogo, serviceTypeId, serviceTypeId); - } // Get - - ServiceLogo GetLogo(string partialPath, string logoFile) - { - return new ServiceLogo(BasePathLogos, partialPath, logoFile, - string.Format(Properties.InvariantTexts.FormatServiceLogoKey, logoFile, partialPath)); - } // GetLogo - - public ServiceLogo FromServiceKey(string serviceKey) - { - int pos; - string service, domain; - - pos = serviceKey.IndexOf('@'); - if (pos < 1) throw new ArgumentException(); - if ((pos + 1) == serviceKey.Length) throw new ArgumentException(); - - service = serviceKey.Substring(0, pos); - domain = serviceKey.Substring(pos + 1); - - return Get(null, domain, service, null); - } // FromServiceKey - - private static string GetParentDomain(string domainName) - { - var parts = domainName.Split('.'); - if (parts.Length <= 2) return null; - - return string.Join(".", parts, 1, parts.Length - 1); - } // GetParentDomain - - private static string GetFolderForDomain(string domainName) - { - var parts = domainName.Split('.'); - - if (parts.Length <= 2) return domainName; - - var builder = new StringBuilder(); - builder.Append(parts[parts.Length - 2]); - builder.Append('.'); - builder.Append(parts[parts.Length - 1]); - for (int i = parts.Length - 3; i >= 0; i--) - { - builder.Append(Path.DirectorySeparatorChar); - builder.Append(parts[i]); - } // for - - return builder.ToString(); - } // GetFolderForDomain - - private void Init(DomainMappingsXml domainMappings, ServiceMappingsXml serviceMappings) - { - DomainMappings = BuildMapping(domainMappings); - ServiceMappings = BuildMapping(serviceMappings); - BasePathLogos = serviceMappings.BasePath; - } // Init - } // class ServiceLogoMappings -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/AssemblyInfo.cs deleted file mode 100644 index a477483d..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UI Services: Configuration")] -[assembly: AssemblyDescription("IpTviewr.UiServices.Configuration")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3d30baba-6d2c-4b86-89f6-fdb6d01624b3")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs deleted file mode 100644 index cf3f9409..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/InvariantTexts.Designer.cs +++ /dev/null @@ -1,225 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Configuration.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class InvariantTexts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal InvariantTexts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to DBV-IPTV. - /// - internal static string DefaultDomainNameProviderLogo { - get { - return ResourceManager.GetString("DefaultDomainNameProviderLogo", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IPTV. - /// - internal static string DefaultDomainNameServiceLogo { - get { - return ResourceManager.GetString("DefaultDomainNameServiceLogo", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to domain-mappings.xml. - /// - internal static string FileLogoDomainMappings { - get { - return ResourceManager.GetString("FileLogoDomainMappings", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to provider-mappings.xml. - /// - internal static string FileLogoProviderMappings { - get { - return ResourceManager.GetString("FileLogoProviderMappings", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to service-mappings.xml. - /// - internal static string FileLogoServiceMappings { - get { - return ResourceManager.GetString("FileLogoServiceMappings", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cache. - /// - internal static string FolderCache { - get { - return ResourceManager.GetString("FolderCache", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Providers. - /// - internal static string FolderLogosProviders { - get { - return ResourceManager.GetString("FolderLogosProviders", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Logos. - /// - internal static string FolderLogosRoot { - get { - return ResourceManager.GetString("FolderLogosRoot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Services. - /// - internal static string FolderLogosServices { - get { - return ResourceManager.GetString("FolderLogosServices", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to RecordTasks. - /// - internal static string FolderRecordTasks { - get { - return ResourceManager.GetString("FolderRecordTasks", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}::{1}. - /// - internal static string FormatServiceLogoKey { - get { - return ResourceManager.GetString("FormatServiceLogoKey", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IpTvRecorderLauncher.exe. - /// - internal static string RecorderLauncher { - get { - return ResourceManager.GetString("RecorderLauncher", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Software\movistartv.codeplex.com\IPTViewr\movistar+\v1.5.1010.0. - /// - internal static string RegistryKey_Root { - get { - return ResourceManager.GetString("RegistryKey_Root", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Analytics.ClientId. - /// - internal static string RegistryValue_Analytics_ClientId { - get { - return ResourceManager.GetString("RegistryValue_Analytics_ClientId", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Folder.Base. - /// - internal static string RegistryValue_Folder_Base { - get { - return ResourceManager.GetString("RegistryValue_Folder_Base", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Folder.Install. - /// - internal static string RegistryValue_Folder_Install { - get { - return ResourceManager.GetString("RegistryValue_Folder_Install", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Installed. - /// - internal static string RegistryValue_Installed { - get { - return ResourceManager.GetString("RegistryValue_Installed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <any>. - /// - internal static string ServiceNameAny { - get { - return ResourceManager.GetString("ServiceNameAny", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.Designer.cs deleted file mode 100644 index 56f42f76..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.Designer.cs +++ /dev/null @@ -1,163 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Configuration.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_AddVariable_16 { - get { - object obj = ResourceManager.GetObject("Action_AddVariable_16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_128 { - get { - object obj = ResourceManager.GetObject("BrokenFile_128", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_16 { - get { - object obj = ResourceManager.GetObject("BrokenFile_16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_256 { - get { - object obj = ResourceManager.GetObject("BrokenFile_256", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_32 { - get { - object obj = ResourceManager.GetObject("BrokenFile_32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_48 { - get { - object obj = ResourceManager.GetObject("BrokenFile_48", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_64 { - get { - object obj = ResourceManager.GetObject("BrokenFile_64", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BrokenFile_96 { - get { - object obj = ResourceManager.GetObject("BrokenFile_96", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NetworkSettings_32 { - get { - object obj = ResourceManager.GetObject("NetworkSettings_32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap TvPlayersSettings_32 { - get { - object obj = ResourceManager.GetObject("TvPlayersSettings_32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.resx deleted file mode 100644 index 890a42ba..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/Resources.resx +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\Action_AddVariable_16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\brokenfile_128.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\BrokenFile_16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\brokenfile_256.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\BrokenFile_32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\BrokenFile_48.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\BrokenFile_64.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\BrokenFile_96.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\networksettings_32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\tvplayerssettings_32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.Designer.cs deleted file mode 100644 index 48ca5b66..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.Designer.cs +++ /dev/null @@ -1,594 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Configuration.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Configuration.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Application not correctly installed. - /// - internal static string AppConfigRegistryCaption { - get { - return ResourceManager.GetString("AppConfigRegistryCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to find or open 'HKCU\{0}'.. - /// - internal static string AppConfigRegistryMissingKey { - get { - return ResourceManager.GetString("AppConfigRegistryMissingKey", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The value '{1}' is missing under 'HKCU\{0}'.. - /// - internal static string AppConfigRegistryMissingValue { - get { - return ResourceManager.GetString("AppConfigRegistryMissingValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to There is a problem accessing the application configuration from the Windows Registry: - ///{0} - /// - ///Please install the application using the official installer or repair the installation.. - /// - internal static string AppConfigRegistryText { - get { - return ResourceManager.GetString("AppConfigRegistryText", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to find the 'base' folder at '{0}'.. - /// - internal static string AppConfigValidationBasePath { - get { - return ResourceManager.GetString("AppConfigValidationBasePath", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to locate the 'logos' folder at '{0}'.. - /// - internal static string AppConfigValidationLogosPath { - get { - return ResourceManager.GetString("AppConfigValidationLogosPath", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to SD TV. - /// - internal static string DvbServiceTypeDescription_01 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_01", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Radio (MPEG-1). - /// - internal static string DvbServiceTypeDescription_02 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_02", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Teletext. - /// - internal static string DvbServiceTypeDescription_03 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_03", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Mosaic. - /// - internal static string DvbServiceTypeDescription_06 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_06", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Radio (HD). - /// - internal static string DvbServiceTypeDescription_10 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_10", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Mosaic (HD). - /// - internal static string DvbServiceTypeDescription_11 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_11", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Data. - /// - internal static string DvbServiceTypeDescription_12 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_12", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to DVB MHP. - /// - internal static string DvbServiceTypeDescription_16 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_16", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to HD TV (MPEG-2). - /// - internal static string DvbServiceTypeDescription_17 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_17", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to SD TV (AVC). - /// - internal static string DvbServiceTypeDescription_22 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_22", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to HD TV. - /// - internal static string DvbServiceTypeDescription_25 { - get { - return ResourceManager.GetString("DvbServiceTypeDescription_25", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/services/domain-mappings.xml'. - /// - internal static string ExceptionLogosDomainMappingsDuplicatedDomain { - get { - return ResourceManager.GetString("ExceptionLogosDomainMappingsDuplicatedDomain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to load provider logo file\r\n{0}. - /// - internal static string ExceptionLogosProviderImageLoadError { - get { - return ResourceManager.GetString("ExceptionLogosProviderImageLoadError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Provider logo file not found. - /// - internal static string ExceptionLogosProviderImageNotFound { - get { - return ResourceManager.GetString("ExceptionLogosProviderImageNotFound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/providers/provider-mappings.xml'. - /// - internal static string ExceptionLogosProviderMappingsDuplicatedDomain { - get { - return ResourceManager.GetString("ExceptionLogosProviderMappingsDuplicatedDomain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to load service logo file\r\n{0}. - /// - internal static string ExceptionLogosServiceImageLoadError { - get { - return ResourceManager.GetString("ExceptionLogosServiceImageLoadError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Service logo file not found. - /// - internal static string ExceptionLogosServiceImageNotFound { - get { - return ResourceManager.GetString("ExceptionLogosServiceImageNotFound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated domain name '{0}' in 'logos/services/service-mappings.xml'. - /// - internal static string ExceptionLogosServiceMappingsDuplicatedDomain { - get { - return ResourceManager.GetString("ExceptionLogosServiceMappingsDuplicatedDomain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated service name '{0}' in 'logos/services/service-mappings.xml' for domain '{1}'. - /// - internal static string ExceptionLogosServiceMappingsDuplicatedService { - get { - return ResourceManager.GetString("ExceptionLogosServiceMappingsDuplicatedService", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The user configuration file '{0}' is invalid or has severe errors. - ///{1} - /// - ///Please verify the XML syntax of the file and correct the detected errors.. - /// - internal static string LoadConfigUserConfigValidation { - get { - return ResourceManager.GetString("LoadConfigUserConfigValidation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to See exception details (below) for detailed error information.. - /// - internal static string LoadConfigUserConfigValidationException { - get { - return ResourceManager.GetString("LoadConfigUserConfigValidationException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Application configuration verification failure. - /// - internal static string LoadConfigValidationCaption { - get { - return ResourceManager.GetString("LoadConfigValidationCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to load the content provider data. - /// - internal static string LoadContentProviderDataExceptionCaption { - get { - return ResourceManager.GetString("LoadContentProviderDataExceptionCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The content provider information file '{0}' is invalid or has severe errors. - ///{1} - /// - ///Please verify the XML syntax of the file and correct the detected errors.. - /// - internal static string LoadContentProviderDataValidation { - get { - return ResourceManager.GetString("LoadContentProviderDataValidation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Content provider data verification failure. - /// - internal static string LoadContentProviderDataValidationCaption { - get { - return ResourceManager.GetString("LoadContentProviderDataValidationCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to See exception details (below) for detailed error information.. - /// - internal static string LoadContentProviderDataValidationException { - get { - return ResourceManager.GetString("LoadContentProviderDataValidationException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading content provider data.... - /// - internal static string LoadProgress_ContentProvider { - get { - return ResourceManager.GetString("LoadProgress_ContentProvider", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading application configuration.... - /// - internal static string LoadProgress_Start { - get { - return ResourceManager.GetString("LoadProgress_Start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading user configuration and preferences.... - /// - internal static string LoadProgress_UserConfig { - get { - return ResourceManager.GetString("LoadProgress_UserConfig", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to load the user configuration. - /// - internal static string LoadUserConfigExceptionCaption { - get { - return ResourceManager.GetString("LoadUserConfigExceptionCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to User configuration verification failure. - /// - internal static string LoadUserConfigValidationCaption { - get { - return ResourceManager.GetString("LoadUserConfigValidationCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Larger. - /// - internal static string LogoSize128 { - get { - return ResourceManager.GetString("LogoSize128", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Huge. - /// - internal static string LogoSize256 { - get { - return ResourceManager.GetString("LogoSize256", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Small. - /// - internal static string LogoSize32 { - get { - return ResourceManager.GetString("LogoSize32", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Regular. - /// - internal static string LogoSize48 { - get { - return ResourceManager.GetString("LogoSize48", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Medium. - /// - internal static string LogoSize64 { - get { - return ResourceManager.GetString("LogoSize64", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Large. - /// - internal static string LogoSize96 { - get { - return ResourceManager.GetString("LogoSize96", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} ({1}x{2}). - /// - internal static string LogoSizeWithSizeFormat { - get { - return ResourceManager.GetString("LogoSizeWithSizeFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to '{0}' TV player can not be found at '{1}'.. - /// - internal static string PlayerConfigValidationPathNotFound { - get { - return ResourceManager.GetString("PlayerConfigValidationPathNotFound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} recorder can not be found at '{1}'. - /// - internal static string RecorderConfigValidationPathNotFound { - get { - return ResourceManager.GetString("RecorderConfigValidationPathNotFound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The <{1}> path value '{0}' has to be either an absolute volume path (like 'C:\folder') or an UNC (like '\\server\share').. - /// - internal static string RecordSaveLocationValidationAbsolutePath { - get { - return ResourceManager.GetString("RecordSaveLocationValidationAbsolutePath", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The <{1}> Task Scheduler folder value '{0}' must start with '\' and must not end with '\'. - /// - internal static string RecordTaskSchedulerFolderValidationPath { - get { - return ResourceManager.GetString("RecordTaskSchedulerFolderValidationPath", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to At least one <{0}> tag has to be specified at <{1}> tag.. - /// - internal static string UserConfigValidationAtLeastOne { - get { - return ResourceManager.GetString("UserConfigValidationAtLeastOne", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicated <{1}> item in <{0}> list. '{2}' value is '{3}'. - /// - internal static string UserConfigValidationDuplicatedEntry { - get { - return ResourceManager.GetString("UserConfigValidationDuplicatedEntry", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IP address. - /// - internal static string UserConfigValidationIpAddress { - get { - return ResourceManager.GetString("UserConfigValidationIpAddress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to IP port number. - /// - internal static string UserConfigValidationIpPort { - get { - return ResourceManager.GetString("UserConfigValidationIpPort", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <{0}> tag is missing or empty.. - /// - internal static string UserConfigValidationMissingEmpty { - get { - return ResourceManager.GetString("UserConfigValidationMissingEmpty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Attribute '{0}' is missing or empty at <{1}> tag.. - /// - internal static string UserConfigValidationMissingEmptyAttribute { - get { - return ResourceManager.GetString("UserConfigValidationMissingEmptyAttribute", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <{0}> tag is missing or empty under <{1}> tag.. - /// - internal static string UserConfigValidationMissingEmptyOwner { - get { - return ResourceManager.GetString("UserConfigValidationMissingEmptyOwner", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <{0}> tag is missing or empty under <{1}> tag. Value of '{2}' is '{3}'.. - /// - internal static string UserConfigValidationMissingEmptyValue { - get { - return ResourceManager.GetString("UserConfigValidationMissingEmptyValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <{0}> tag is missing under <{1}> tag.. - /// - internal static string UserConfigValidationMissingTag { - get { - return ResourceManager.GetString("UserConfigValidationMissingTag", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Value '{2}' specified at <{0}> tag is not a valid {1}.. - /// - internal static string UserConfigValidationValueType { - get { - return ResourceManager.GetString("UserConfigValidationValueType", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.es.resx b/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.es.resx deleted file mode 100644 index 3b192d2c..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.es.resx +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - No se puede encontrar la carpeta 'base' en '{0}'. - - - No se puede encontrar la carpeta de 'logotipos' en '{0}'. - - - El nombre de dominio (domain name) '{0}' está duplicado en 'logos/services/domain-mappings.xml' - - - Imposible cargar el archivo con el logo del proveedor -{0} - - - El archivo con el logo del proveedor no existe - - - El nombre de dominio (domain name) '{0}' está duplicado en 'logos/providers/provider-mappings.xml' - - - Imposible cargar el archivo con el logo del servicio -{0} - - - El archivo con el logo del servicio no existe - - - El nombre de dominio (domain name) '{0}' está duplicado en 'logos/services/service-mappings.xml' - - - El nombre de servicio (service name) '{0}' está duplicado en 'logos/services/service-mappings.xml' en el dominio '{1}' - - - El archivo de configuración de usuario '{0}' no es válido o contiene errores graves. -{1} - -Verifique la sintáxis XML del archivo y solucione los errores detectados. - - - Consulte los detalles de la excepción (más abajo) para obtener información detallada del problema. - - - Error al validar la configuración de la aplicación - - - Imposible cargar la configuración de usuario - - - Error al validar la configuración y las preferencias de usuario - - - No se ha localizado el reproductor de TV '{0}' en '{1}'. - - - No se ha localizado el grabador externo '{0}' en '{1}'. - - - El valor '{0}' no es válido como ruta en la etiqueta <{1}>. Tiene que ser una ruta absoluta con letra de volumen (como 'C:\Carpeta') o una ubicación de red en formato 'UNC' (como '\\servidor\compartido'). - - - El valor '{0}' en la etiqueta <{1}> no es un nombre de carpeta válido para el Programador de Tareas. Debe comenzar forzosamente por '\' y no puede terminar en '\'. - - - Debe especificarse al menos una etiqueta <{0}> bajo la etiqueta <{1}>. - - - Elemento <{1}> duplicado en la lista <{0}>. El valor de '{2}' es '{3}' - - - dirección IP - - - número de puerto IP - - - La etiqueta <{0}> no existe o está vacía. - - - El attribute '{0}' falta o está vacío en la etiqueta <{1}>. - - - La etiqueta <{0}> no existe o está vacía bajo la etiqueta <{1}> tag. - - - La etiquete <{0}> no existe o está vacía bajo la etiqueta<{1}>. EL valor de '{2}' es '{3}'. - - - Falta una etiqueta <{0}> bajo la etiqueta <{1}>. - - - El valor '{2}' especificado en la etiqueta <{0}> no es un/una {1} válido. - - - Imposible cargar la información del proveedor de contenidos - - - El archivo de datos del proveedor de contenidos '{0}' no es válido o contiene errores graves. -{1} -Verifique la sintáxis XML del archivo y corrija los errores detectados. - - - Error al validar la información del proveedor de contenidos - - - Consulte los detalles de la excepción (más abajo) para obtener información detallada del problema. - - - La aplicación no está instalada correctamente - - - No se puede localizar o abrir 'HKCU\{0}'. - - - El valor '{1}' no existe bajo la clave 'HKCU\{0}'. - - - Se ha producido un error al acceder a la configuración de la aplicación en el Registro de Windows: -{0} - -Por favor, instale la aplicación utilizando el instalador oficial o repare la instalación. - - - Más grande - - - Enorme - - - Pequeño - - - Normal - - - Medio - - - Grande - - - {0} ({1}x{2}) - - - Leyendo la información del proveedor de contenidos... - - - Cargando la configuración de la aplicación... - - - Leyendo la configuración de usuario y preferencias... - - - TV SD - - - Radio (MPEG-1) - - - Teletexto - - - Mosaico - - - Radio HD - - - Mosaico HD - - - Datos - - - DVB MHP - - - TV HD (MPEG-2) - - - TV SD (AAC) - - - TV HD - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.resx b/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.resx deleted file mode 100644 index 3614d62d..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Properties/Texts.resx +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Unable to find the 'base' folder at '{0}'. - - - Unable to locate the 'logos' folder at '{0}'. - - - Duplicated domain name '{0}' in 'logos/services/domain-mappings.xml' - - - Unable to load provider logo file\r\n{0} - - - Provider logo file not found - - - Duplicated domain name '{0}' in 'logos/providers/provider-mappings.xml' - - - Unable to load service logo file\r\n{0} - - - Service logo file not found - - - Duplicated domain name '{0}' in 'logos/services/service-mappings.xml' - - - Duplicated service name '{0}' in 'logos/services/service-mappings.xml' for domain '{1}' - - - The user configuration file '{0}' is invalid or has severe errors. -{1} - -Please verify the XML syntax of the file and correct the detected errors. - - - See exception details (below) for detailed error information. - - - Application configuration verification failure - - - Unable to load the user configuration - - - User configuration verification failure - - - '{0}' TV player can not be found at '{1}'. - - - {0} recorder can not be found at '{1}' - - - The <{1}> path value '{0}' has to be either an absolute volume path (like 'C:\folder') or an UNC (like '\\server\share'). - - - The <{1}> Task Scheduler folder value '{0}' must start with '\' and must not end with '\' - - - At least one <{0}> tag has to be specified at <{1}> tag. - - - Duplicated <{1}> item in <{0}> list. '{2}' value is '{3}' - - - IP address - - - IP port number - - - <{0}> tag is missing or empty. - - - Attribute '{0}' is missing or empty at <{1}> tag. - - - <{0}> tag is missing or empty under <{1}> tag. - - - <{0}> tag is missing or empty under <{1}> tag. Value of '{2}' is '{3}'. - - - <{0}> tag is missing under <{1}> tag. - - - Value '{2}' specified at <{0}> tag is not a valid {1}. - - - Unable to load the content provider data - - - The content provider information file '{0}' is invalid or has severe errors. -{1} - -Please verify the XML syntax of the file and correct the detected errors. - - - Content provider data verification failure - - - See exception details (below) for detailed error information. - - - Application not correctly installed - - - Unable to find or open 'HKCU\{0}'. - - - The value '{1}' is missing under 'HKCU\{0}'. - - - There is a problem accessing the application configuration from the Windows Registry: -{0} - -Please install the application using the official installer or repair the installation. - - - Larger - - - Huge - - - Small - - - Regular - - - Medium - - - Large - - - {0} ({1}x{2}) - - - Loading content provider data... - - - Loading application configuration... - - - Loading user configuration and preferences... - - - SD TV - - - Radio (MPEG-1) - - - Teletext - - - Mosaic - - - Radio (HD) - - - Mosaic (HD) - - - Data - - - DVB MHP - - - HD TV (MPEG-2) - - - SD TV (AVC) - - - HD TV - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_128.png b/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_128.png deleted file mode 100644 index 3682d622..00000000 Binary files a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_128.png and /dev/null differ diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_16.png b/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_16.png deleted file mode 100644 index 70f05104..00000000 Binary files a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_16.png and /dev/null differ diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_256.png b/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_256.png deleted file mode 100644 index 8bf1a170..00000000 Binary files a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_256.png and /dev/null differ diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_32.png b/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_32.png deleted file mode 100644 index 670d8be0..00000000 Binary files a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_32.png and /dev/null differ diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_48.png b/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_48.png deleted file mode 100644 index ae2d053b..00000000 Binary files a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_48.png and /dev/null differ diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_64.png b/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_64.png deleted file mode 100644 index 5e4d03d0..00000000 Binary files a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_64.png and /dev/null differ diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_96.png b/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_96.png deleted file mode 100644 index b54802b2..00000000 Binary files a/1.5 'Kruger 60'/UiServices.Config/Resources/BrokenFile_96.png and /dev/null differ diff --git a/1.5 'Kruger 60'/UiServices.Config/Resources/domain-mappings.xml b/1.5 'Kruger 60'/UiServices.Config/Resources/domain-mappings.xml deleted file mode 100644 index b7d3e21b..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Resources/domain-mappings.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - generic - - - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - imagenio.es - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/AnalyticsConfig.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/AnalyticsConfig.cs deleted file mode 100644 index 72d560dc..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/AnalyticsConfig.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlType(TypeName = "TelemetryConfiguration", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class TelemetryConfiguration - { - public TelemetryConfiguration() - { - } // constructor - - public TelemetryConfiguration(bool enabled, bool usage, bool exceptions) - { - Enabled = enabled; - Usage = usage; - Exceptions = exceptions; - } // AnalyticsConfig - - public bool Enabled - { - get; - set; - } // Enabled - - public bool Usage - { - get; - set; - } // Usage - - public bool Exceptions - { - get; - set; - } // Exceptions - } // class AnalyticsConfig -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/EpgConfig.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/EpgConfig.cs deleted file mode 100644 index 53fb129d..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/EpgConfig.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlType(TypeName = "EpgConfig", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class EpgConfig - { - public EpgConfig() - { - // no op; default constructor - } // constructor - - public EpgConfig(bool enabled, int autoUpdateHours, int maxDays) - { - Enabled = enabled; - AutoUpdateHours = autoUpdateHours; - MaxDays = maxDays; - } // constructor - - public bool Enabled - { - get; - set; - } // Enabled - - public int AutoUpdateHours - { - get; - set; - } // AutoUpdateHours - - public int MaxDays - { - get; - set; - } // MaxDays - } // class EpgConfig -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs deleted file mode 100644 index 8851bc4f..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/RecordConfig.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlType(TypeName="RecordConfig", Namespace=ConfigCommon.ConfigXmlNamespace)] - public class RecordConfig - { - [XmlArray(ElementName="SaveLocations", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem(ElementName="Location")] - public RecordSaveLocation[] SaveLocations - { - get; - set; - } // SaveLocations - - [XmlArray("TaskSchedulerFolders", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem(ElementName="Folder")] - public RecordTaskSchedulerFolder[] TaskSchedulerFolders - { - get; - set; - } // TaskSchedulerFolders - - [XmlArray("Recorders", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem("Recorder")] - public RecorderConfig[] Recorders - { - get; - set; - } // Recorders - - [XmlIgnore] - public string RecorderLauncherPath - { - get { return Path.Combine(AppUiConfiguration.Current.Folders.Install, Properties.InvariantTexts.RecorderLauncher); } - } // RecorderLauncherPath - - public string Validate(string ownerTag) - { - string validationError; - - validationError = RecordSaveLocation.ValidateArray(SaveLocations, "Location", "SaveLocations", ownerTag); - if (validationError != null) return validationError; - - validationError = RecordTaskSchedulerFolder.ValidateArray(TaskSchedulerFolders, "Folder", "TaskSchedulerFolders", ownerTag); - if (validationError != null) return validationError; - - validationError = RecorderConfig.ValidateArray(Recorders, "Recorder", "Recorders", ownerTag); - if (validationError != null) return validationError; - - return null; - } // Validate - } // class RecordConfig -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/UserConfig.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/UserConfig.cs deleted file mode 100644 index de1eb575..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Config/UserConfig.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.Config -{ - [Serializable] - [XmlRoot(ElementName = "UserConfiguration", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class UserConfig - { - private string[] preferredLanguagesList; - - [XmlElement("Telemetry")] - public TelemetryConfiguration Telemetry - { - get; - set; - } // Telemetry - - [XmlElement("PreferredLanguages")] - public string PreferredLanguages - { - get; - set; - } // PreferredLanguages - - [XmlElement("Record")] - public RecordConfig Record - { - get; - set; - } // Record - - [XmlElement("EPG")] - public EpgConfig Epg - { - get; - set; - } // Epg - - public bool ChannelNumberStandardDefinitionPriority - { - get; - set; - } // ChannelNumberStandardDefinitionPriority - - [XmlElement("Configuration")] - public XmlConfigurationItems Configuration - { - get; - set; - } // Configuration - - [XmlIgnore] - public string[] PreferredLanguagesList - { - get - { - if (preferredLanguagesList == null) - { - preferredLanguagesList = PreferredLanguages.Split(',', ';'); - } // if - - return preferredLanguagesList; - } // get - } // PreferredLanguagesList - - internal string Validate() - { - string validationError; - string ownerTag = "UserConfiguration"; - - if (Record == null) return ConfigCommon.ErrorMissingTag("Record", ownerTag); - validationError = Record.Validate("Record"); - if (validationError != null) return validationError; - - return null; - } // Validate - } // UserConfig -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs deleted file mode 100644 index 63e34aeb..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/BootstrapMethod.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider -{ - /// - /// WARNING: Only 'Manual' is supported right now - /// - /// For now, we only support MANUAL bootstrapping - public enum BootstrapMethod - { - [XmlEnum("automatic")] - Auto, - - [XmlEnum("IANA")] - Iana, - - [XmlEnum("DVB-Service-DNS")] - DvbServiceDns, - - [XmlEnum("service-DNS-domain")] - ServiceDnsDomain, - - [XmlEnum("service-names")] - ServiceNames, - - [XmlEnum("manual")] - Manual - } // enum BootstrapMethod -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs deleted file mode 100644 index 966fe398..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/FriendlyNames.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - public class FriendlyNames - { - [XmlElement("ServiceProviders")] - public SpFriendlyNames[] Providers - { - get; - set; - } // Providers - } // class FriendlyNames -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/Identification.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/Identification.cs deleted file mode 100644 index 74e8d943..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/Identification.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - [XmlType(Namespace=SerializationCommon.XmlNamespace, AnonymousType=true)] - public class Identification - { - [XmlAttribute("id")] - public string Id - { - get; - set; - } // Id - - [XmlElement("Localized")] - public LocalizedIdentification[] Localized - { - get; - set; - } // Localized - - public string LogosPackageName - { - get; - set; - } // LogosPackageName - } // class ContentProviderIdentification -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs deleted file mode 100644 index cdd31864..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/IpTvProviderData.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Serialization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - [XmlRoot(ElementName = "IpTvProvider", Namespace = SerializationCommon.XmlNamespace)] - public class IpTvProviderData - { - public Identification Identification - { - get; - set; - } // Identification - - public BootstrapData Bootstrap - { - get; - set; - } // Bootstrap - - [XmlElement("FriendlyNames")] - public FriendlyNames FriendlyNames - { - get; - set; - } // FriendlyNames - - public static IpTvProviderData Load(string xmlPath) - { - return XmlSerialization.Deserialize(xmlPath,true); - } // Load - - public string Validate() - { - // TODO: validate content provider data - // The implementation of this method is not top-priority, as the xml is (for now) a 'private' file - - return null; - } // Validate - } // class IpTvProviderData -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs deleted file mode 100644 index c748e19d..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/ProviderTexts.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider -{ - [XmlType(Namespace=SerializationCommon.XmlNamespace)] - public class LocalizedIdentification : LocalizedObject - { - public string Name; - public string Description; - } // class LocalizedIdentification -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs deleted file mode 100644 index 2ec69b49..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SerializationCommon.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider -{ - public class SerializationCommon - { - public const string XmlNamespace = "http://movistartv.codeplex.com/schema/2015:Configuration:ContentProvider"; - } // class CommonSerialization -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs deleted file mode 100644 index ce3f4c3e..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyName.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - [XmlType(Namespace=SerializationCommon.XmlNamespace, AnonymousType=true)] - public class SpFriendlyName - { - [XmlAttribute("domainName")] - public string Domain - { - get; - set; - } // Domain - - [XmlText] - public string Name - { - get; - set; - } // Name - } // class SpFriendlyName -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs deleted file mode 100644 index c09c8ad3..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/ContentProvider/SpFriendlyNames.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.ContentProvider -{ - [Serializable] - [XmlType(TypeName="SP-FriendlyNames", Namespace=SerializationCommon.XmlNamespace)] - public class SpFriendlyNames : ILocalizedObject - { - [XmlAttribute("culture")] - public string CultureName - { - get; - set; - } // CultureName - - [XmlElement("Provider")] - public SpFriendlyName[] Names - { - get; - set; - } // Names - } // class ServiceProviderFriendlyName -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/DomainMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/DomainMappings.cs deleted file mode 100644 index e31f3486..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/DomainMappings.cs +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.Logos -{ - [Serializable] - [XmlRoot(ElementName = "Logos-Domains", Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class DomainMappingsXml - { - [XmlElement("Package")] - public DomainPackage[] Packages - { - get; - set; - } // Packages - - [XmlIgnore] - public string BasePath - { - get; - set; - } // BasePath - } // class DomainPackage - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class DomainPackage - { - [XmlAttribute("name")] - public string PackageName - { - get; - set; - } // PackageName - - [XmlElement("Mapping")] - public DomainMapping[] Mappings - { - get; - set; - } // Domains - - public override string ToString() - { - return string.Format("Domain package: {0}", PackageName); - } // ToString - } // DomainPackage - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class DomainMapping - { - [XmlAttribute("domainName")] - public string DomainName - { - get; - set; - } // Id - - [XmlAttribute("mandatory")] - [DefaultValue(true)] - public bool Mandatory - { - get; - set; - } // Mandatory - - [XmlText] - public string ReplacementDomain - { - get; - set; - } // ReplacementDomain - - public override string ToString() - { - return string.Format("Domain mapping: {0}=>{1}", DomainName, ReplacementDomain); - } // ToString - } // class DomainMapping -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/LogosCommon.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/LogosCommon.cs deleted file mode 100644 index 43997585..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/LogosCommon.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.Logos -{ - public class LogosCommon - { - public const string LogoMappingsXmlNamespace = "http://movistartv.codeplex.com/schema/2015:Configuration:Mappings"; - - public static ServiceMappingsXml ParseServiceMappingsXml(string filename) - { - var xmlMappings = XmlSerialization.Deserialize(filename, true); - xmlMappings.BasePath = System.IO.Path.GetDirectoryName(filename); - - return xmlMappings; - } // ParseServiceMappingsXml - - public static DomainMappingsXml ParseDomainMappingsXml(string filename) - { - var xmlMappings = XmlSerialization.Deserialize(filename, true); - xmlMappings.BasePath = System.IO.Path.GetDirectoryName(filename); - - return xmlMappings; - } // ParseDomainMappingsXml - - public static ProviderMappingsXml ParseProviderMappingsXml(string filename) - { - var xmlMappings = XmlSerialization.Deserialize(filename, true); - xmlMappings.BasePath = System.IO.Path.GetDirectoryName(filename); - - return xmlMappings; - } // ParseProviderMappingsXml - } // class Common -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ProviderMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ProviderMappings.cs deleted file mode 100644 index 90996af4..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ProviderMappings.cs +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.Logos -{ - [Serializable] - [XmlRoot(ElementName = "Logos-Providers", Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ProviderMappingsXml - { - [XmlElement("Package")] - public ProviderPackage[] Packages - { - get; - set; - } // Packages - - [XmlIgnore] - public string BasePath - { - get; - set; - } // BasePath - } // class ProviderMappingsXml - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ProviderPackage - { - [XmlAttribute("name")] - public string PackageName - { - get; - set; - } // PackageName - - [XmlElement("Mapping")] - public ProviderMapping[] Mappings - { - get; - set; - } // Mappings - - public override string ToString() - { - return string.Format("Provider package: {0}", PackageName); - } // ToString - } // DomainPackage - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ProviderMapping - { - [XmlAttribute("domainName")] - public string DomainName - { - get; - set; - } // Id - - [XmlAttribute("annotation")] - public string Annotation - { - get; - set; - } // Annotation - - [XmlAttribute("logo")] - public string LogoFile - { - get; - set; - } // LogoFile - - public override string ToString() - { - return string.Format("Provider mapping: {0}=>{1}", DomainName, LogoFile); - } // ToString - } // class ProviderMapping -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ServiceMappings.cs b/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ServiceMappings.cs deleted file mode 100644 index 3d9b90ec..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Schema2014/Logos/ServiceMappings.cs +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Schema2014.Logos -{ - [Serializable] - [XmlRoot(ElementName= "Logos-Services", Namespace=LogosCommon.LogoMappingsXmlNamespace)] - public class ServiceMappingsXml - { - [XmlElement("Package")] - public ServicePackage[] Packages - { - get; - set; - } // Packages - - [XmlIgnore] - public string BasePath - { - get; - set; - } // BasePath - } // class ServiceMappingsXml - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ServicePackage - { - [XmlAttribute("name")] - public string PackageName - { - get; - set; - } // PackageName - - [XmlElement("Domain")] - public ServiceDomains[] Domains - { - get; - set; - } // Domains - - public override string ToString() - { - return string.Format("Service package: {0}", PackageName); - } // ToString - } // ServicePackage - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ServiceDomains - { - [XmlAttribute("name")] - public string DomainName - { - get; - set; - } // DomainName - - [XmlAttribute("redirectDomain")] - public string RedirectDomainName - { - get; - set; - } // RedirectDomainName - - [XmlElement("Mapping")] - public ServiceMapping[] Mappings - { - get; - set; - } // Mappings - - public override string ToString() - { - return string.Format("Service domain: {0}", DomainName); - } // ToString - } // class ServiceDomains - - [XmlType(AnonymousType = true, Namespace = LogosCommon.LogoMappingsXmlNamespace)] - public class ServiceMapping - { - [XmlAttribute("serviceName")] - public string Name - { - get; - set; - } // Name - - [XmlAttribute("logo")] - public string Logo - { - get; - set; - } // Logo - -#if DEBUG - [XmlAttribute("remarks")] - public string Remarks - { - get; - set; - } // Remarks -#endif - - public override string ToString() - { - return string.Format("Service mapping: {0}=>{1}", Name, Logo); - } // ToString - } // class ServiceMapping -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/MulticastProxy.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/MulticastProxy.cs deleted file mode 100644 index d434d30b..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/MulticastProxy.cs +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Settings.Network -{ - [Serializable] - public class MulticastProxy - { - public const string ParameterOpenBrace = "{param:"; - public const string ParameterCloseBrace = "}"; - - public static MulticastProxy GetDefaultSettings() - { - var result = new MulticastProxy() - { - IsEnabled = false, - ProxyConfiguration = "http://proxy-host:8888/{param:protocol}/{param:multicastAddress}:{param:multicastPort}" - }; - - return result; - } // GetDefaultSettings - - public bool IsEnabled - { - get; - set; - } // IsEnabled - - public string ProxyConfiguration - { - get; - set; - } // ProxyConfiguration - - public string GetProxiedLocationUrl(string protocol, string address, ushort port) - { - if (!IsEnabled) - { - return string.Format("{0}://@{1}:{2}", protocol, address, port); - } // if - - var paramKeys = new string[] - { - "protocol", - "protocolU", - "multicastAddress", - "multicastPort" - }; - var paramValues = new string[] - { - protocol, - protocol.ToUpperInvariant(), - address, - port.ToString() - }; - var parameters = ArgumentsManager.CreateParameters(paramKeys, paramValues, false); - - return ArgumentsManager.ExpandArgument(ProxyConfiguration, parameters, ParameterOpenBrace, ParameterCloseBrace, StringComparison.CurrentCultureIgnoreCase); - } // GetProxiedLocationUrl - } // class MulticastProxy -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettings.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettings.cs deleted file mode 100644 index 0195108e..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettings.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.UiServices.Configuration.Schema2014.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Settings.Network -{ - [Serializable] - [XmlRoot("Network", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class NetworkSettings : IConfigurationItem - { - public static NetworkSettings GetDefaultSettings() - { - var result = new NetworkSettings() - { - MulticastProxy = MulticastProxy.GetDefaultSettings() - }; - - return result; - } // GetDefaultSettings - - public MulticastProxy MulticastProxy - { - get; - set; - } // MulticastProxy - - #region IConfigurationItem implementation - - bool IConfigurationItem.SupportsInitialization - { - get { return false; } - } // IConfigurationItem.SupportsInitialization - - bool IConfigurationItem.SupportsValidation - { - get { return false; } - } // IConfigurationItem.CanValidate - - InitializationResult IConfigurationItem.Initializate() - { - throw new NotSupportedException(); - } // IConfigurationItem.Initializate - - string IConfigurationItem.Validate(string ownerTag) - { - throw new NotSupportedException(); - } // IConfigurationItem.Validate - - #endregion - } // class NetworkSettings -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs deleted file mode 100644 index 6f51e2c3..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/Network/NetworkSettingsRegistration.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Settings.Network -{ - public class NetworkSettingsRegistration : IConfigurationItemRegistration - { - public const string ConfigurationGuid = "{BA2C8A80-A12A-48A2-91DE-1615D5CBA791}"; - private static int MyDirectIndex; - - public static NetworkSettings Settings - { - get { return AppUiConfiguration.Current[MyDirectIndex] as NetworkSettings; } - set { AppUiConfiguration.Current[MyDirectIndex] = value; } - } // Settings - - public Guid Id - { - get { return new Guid(ConfigurationGuid); } - } // Id - - public bool HasEditor - { - get { return true; } - } // HasEditor - - public Type ItemType - { - get { return typeof(NetworkSettings); } - } // GetItemType - - public IConfigurationItem CreateDefault() - { - return NetworkSettings.GetDefaultSettings(); - } // CreateDefault - - public string EditorDisplayName - { - get { return Properties.SettingsTexts.NetworkDisplayName; } - } // EditorDisplayName - - public string EditorDescription - { - get { return Properties.SettingsTexts.NetworkDescription; } - } // EditorDescription - - public Image EditorImage - { - get { return Properties.Resources.NetworkSettings_32; } - } // EditorImage - - public int EditorPriority - { - get { return 9000; } - } // EditorPriority - - public IConfigurationItemEditor CreateEditor(IConfigurationItem data) - { - var editor = new Editors.NetworkSettingsEditor() - { - Settings = data as NetworkSettings - }; - - return editor; - } // CreateEditor - - public int DirectIndex - { - get { return MyDirectIndex; } - set { MyDirectIndex = value; } - } // DirectIndex - } // class NetworkSettingsRegistration -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs deleted file mode 100644 index 7ef10e58..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/Editors/TvPlayersSettingsEditor.cs +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors -{ - public partial class TvPlayersSettingsEditor : UserControl, IConfigurationItemEditor - { - private int ManualUpdateLock; - private List Players; - - public TvPlayersSettingsEditor() - { - InitializeComponent(); - } // constructor - - public TvPlayersSettings Settings - { - get; - set; - } // Settings - - #region IConfigurationItemEditor implementation - - UserControl IConfigurationItemEditor.UserInterfaceItem - { - get { return this; } - } // IConfigurationItemEditor.UserInterfaceItem - - bool IConfigurationItemEditor.SupportsWinFormsValidation - { - get { return false; } - } // IConfigurationItemEditor.SupportsWinFormsValidation - - public bool IsDataChanged - { - get; - protected set; - } // IsDataChanged - - public bool IsAppRestartNeeded - { - get { return false; } - } // IsAppRestartNeeded - - bool IConfigurationItemEditor.Validate() - { - return true; - } // IConfigurationItemEditor.Validate - - IConfigurationItem IConfigurationItemEditor.GetNewData() - { - Settings.Players = Players.ToArray(); - - return Settings; - } // IConfigurationItemEditor.GetNewData - - void IConfigurationItemEditor.EditorClosing(out bool cancelClose) - { - cancelClose = false; - } // IConfigurationItemEditor.EditorClosing - - void IConfigurationItemEditor.EditorClosed(bool userCancel) - { - // no op - } // IConfigurationItemEditor.EditorClosed - - #endregion - - private void TvPlayersSettingsEditor_Load(object sender, EventArgs e) - { - listViewPlayers.SmallImageList = TvPlayersSettingsRegistration.Settings.PlayerIcons; - listViewPlayers.LargeImageList = TvPlayersSettingsRegistration.Settings.PlayerIcons; - - buttonEdit.Enabled = false; - buttonDelete.Enabled = false; - buttonSetDefault.Enabled = false; - - var tilesPerRow = 2; - listViewPlayers.TileSize = new Size((listViewPlayers.Width - SystemInformation.VerticalScrollBarWidth - 6) / tilesPerRow, - Settings.PlayerIcons.ImageSize.Height + 4); - - ManualUpdateLock++; - labelDefaultPlayer.Text = Settings.GetDefaultPlayer().Name; - checkBoxShortcut.Checked = !Settings.DirectLaunch; - ManualUpdateLock--; - - Players = new List(Settings.Players); - FillList(false, true); - } // TvPlayersSettingsEditor_Load - - private void listViewPlayers_SelectedIndexChanged(object sender, EventArgs e) - { - var player = (listViewPlayers.SelectedItems.Count > 0) ? (TvPlayer)listViewPlayers.SelectedItems[0].Tag : null; - - buttonEdit.Enabled = player != null; - buttonDelete.Enabled = player != null; - buttonSetDefault.Enabled = player != null; - - if (player == null) return; - - buttonDelete.Enabled = player.Id != Settings.DefaultPlayerId; - buttonSetDefault.Enabled = player.Id != Settings.DefaultPlayerId; - } // listViewPlayers_SelectedIndexChanged - - private void listViewPlayers_DoubleClick(object sender, EventArgs e) - { - buttonEdit.PerformClick(); - } // listViewPlayers_DoubleClick - - private void buttonEdit_Click(object sender, EventArgs e) - { - var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; - if (item == null) return; - - var player = (TvPlayer)item.Tag; - using (var editor = new TvPlayerEditorDialog()) - { - editor.Player = player; - editor.ShowDialog(this); - if (editor.IsDataChanged) - { - FillList(true, false); - IsDataChanged = true; - } // if - } // using - } // buttonEdit_Click - - private void buttonDelete_Click(object sender, EventArgs e) - { - var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; - if (item == null) return; - - var player = (TvPlayer)item.Tag; - - if (MessageBox.Show(this, - string.Format(Properties.SettingsTexts.TvPlayerDelete, player.Name), - Properties.SettingsTexts.TvPlayerDeleteCaption, - MessageBoxButtons.YesNo, MessageBoxIcon.Question, - MessageBoxDefaultButton.Button2) != DialogResult.Yes) return; - - item.Selected = false; - Players.Remove(player); - IsDataChanged = true; - FillList(false, false); - } // buttonDelete_Click - - private void buttonSetDefault_Click(object sender, EventArgs e) - { - var item = (listViewPlayers.SelectedItems.Count > 0) ? listViewPlayers.SelectedItems[0] : null; - if (item == null) return; - - var player = (TvPlayer)item.Tag; - Settings.DefaultPlayerId = player.Id; - IsDataChanged = true; - labelDefaultPlayer.Text = player.Name; - - // update list - FillList(true, true); - } // buttonSetDefault_Click - - private void buttonAdd_Click(object sender, EventArgs e) - { - using (var editor = new TvPlayerEditorDialog()) - { - editor.ShowDialog(this); - if (editor.IsDataChanged) - { - Players.Add(editor.Player); - FillList(false, false); - listViewPlayers.Items[listViewPlayers.Items.Count - 1].Selected = true; - } // if - } // using - } // buttonAdd_Click - - private void checkBoxShortcut_CheckedChanged(object sender, EventArgs e) - { - Settings.DirectLaunch = !checkBoxShortcut.Checked; - IsDataChanged = true; - } // checkBoxShortcut_CheckedChanged - - private void FillList(bool keepSelection, bool selectDefault) - { - FillList(listViewPlayers, Players, Settings.DefaultPlayerId, keepSelection, selectDefault); - } // FillList - - internal static void FillList(ListView list, IList players, Guid defaultPlayerId, bool keepSelection, bool selectDefault) - { - ListViewItem[] items; - int index; - int selectedIndex; - - selectedIndex = (list.SelectedItems.Count > 0) ? list.SelectedItems[0].Index : -1; - - items = new ListViewItem[players.Count]; - index = 0; - foreach (var player in players) - { - items[index++] = GetTvPlayerListItem(player, defaultPlayerId, list.Font, selectDefault); - } // foreach - - list.Items.Clear(); - list.Items.AddRange(items); - if ((selectedIndex >= 0) && (keepSelection)) - { - list.Items[selectedIndex].Selected = true; - } // if - } // FillList - - private static ListViewItem GetTvPlayerListItem(TvPlayer player, Guid defaultPlayerId, Font listFont, bool selectDefault) - { - var item = new ListViewItem(player.Name); - item.Tag = player; - item.ImageKey = TvPlayersSettingsRegistration.Settings.GetPlayerIconKey(player.Path); - if (player.Id == defaultPlayerId) - { - item.Font = new Font(listFont, FontStyle.Bold); - if (selectDefault) - { - item.Selected = true; - } // if - } // if - - return item; - } // GetTvPlayerListItem - } // class TvPlayersSettingsEditor -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs deleted file mode 100644 index 924ba650..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/SelectTvPlayerDialog.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.UiServices.Configuration.Settings.TvPlayers.Editors; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers -{ - public partial class SelectTvPlayerDialog : Form - { - public SelectTvPlayerDialog() - { - InitializeComponent(); - } // constructor - - public TvPlayer SelectedPlayer - { - get; - private set; - } // SelectedPlayer - - private void SelectTvPlayerDialog_Load(object sender, EventArgs e) - { - var settings = TvPlayersSettingsRegistration.Settings; - - buttonOk.Enabled = false; - - listViewPlayers.SmallImageList = settings.PlayerIcons; - listViewPlayers.LargeImageList = settings.PlayerIcons; - listViewPlayers.TileSize = new Size((listViewPlayers.Width - SystemInformation.VerticalScrollBarWidth - 6), - settings.PlayerIcons.ImageSize.Height + 4); - - TvPlayersSettingsEditor.FillList(listViewPlayers, new List(settings.Players), settings.DefaultPlayerId, false, true); - } // SelectTvPlayerDialog_Load - - private void listViewPlayers_SelectedIndexChanged(object sender, EventArgs e) - { - SelectedPlayer = (listViewPlayers.SelectedItems.Count > 0) ? (TvPlayer)listViewPlayers.SelectedItems[0].Tag : null; - buttonOk.Enabled = (SelectedPlayer != null); - } // listViewPlayers_SelectedIndexChanged - - private void listViewPlayers_DoubleClick(object sender, EventArgs e) - { - buttonOk.PerformClick(); - } // listViewPlayers_DoubleClick - } // class SelectTvPlayerDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs deleted file mode 100644 index 7f16a3ce..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettings.cs +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.UiServices.Configuration.Schema2014.Config; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers -{ - [XmlRoot("TvPlayers", Namespace = ConfigCommon.ConfigXmlNamespace)] - public class TvPlayersSettings : IConfigurationItem - { - private TvPlayer DefaultPlayer; - private Guid DefaultPlayerGuid; - - public TvPlayersSettings() - { - PlayerIcons = new ImageList(); - PlayerIcons.ImageSize = new Size(32, 32); - PlayerIcons.ColorDepth = ColorDepth.Depth32Bit; - } // constructor - - public Guid DefaultPlayerId - { - get - { - return DefaultPlayerGuid; - } // get - set - { - DefaultPlayerGuid = value; - DefaultPlayer = null; - } // set - } // DefaultPlayerId - - public bool DirectLaunch - { - get; - set; - } // DirectLaunch - - [XmlArray("Players", Namespace = ConfigCommon.ConfigXmlNamespace)] - [XmlArrayItem("Player")] - public TvPlayer[] Players - { - get; - set; - } // Players - - public TvPlayer GetDefaultPlayer() - { - if (DefaultPlayer == null) - { - foreach (var player in Players) - { - if (player.Id == DefaultPlayerGuid) - { - DefaultPlayer = player; - break; - } // if - } // foreach - } // if - - return DefaultPlayer; - } // GetDefaultPlayer - - [XmlIgnore] - public ImageList PlayerIcons - { - get; - private set; - } // PlayerIcons - - public string GetPlayerIconKey(string playerPath) - { - var key = playerPath.ToLower(); - if (!PlayerIcons.Images.ContainsKey(key)) - { - var icon = Icon.ExtractAssociatedIcon(playerPath); - PlayerIcons.Images.Add(key, icon); - } // if - - return key; - } // GetPlayerIconKey - - public Image GetPlayerIcon(string playerPath) - { - var key = GetPlayerIconKey(playerPath); - return PlayerIcons.Images[key]; - } // GetPlayerIcon - - #region IConfigurationItem implementation - - bool IConfigurationItem.SupportsInitialization - { - get { return false; } - } // IConfigurationItem.SupportsInitialization - - bool IConfigurationItem.SupportsValidation - { - get { return true; } - } // IConfigurationItem.CanValidate - - InitializationResult IConfigurationItem.Initializate() - { - throw new NotSupportedException(); - } // IConfigurationItem.Initializate - - string IConfigurationItem.Validate(string ownerTag) - { - string validationError; - - validationError = TvPlayer.ValidateArray(Players, "Player", "Players", ownerTag); - if (validationError != null) return validationError; - - return null; - } // IConfigurationItem.Validate - - #endregion - } // class TvPlayersSettings -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs b/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs deleted file mode 100644 index 8ee093ce..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/Settings/TvPlayers/TvPlayersSettingsRegistration.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration.Settings.TvPlayers -{ - public class TvPlayersSettingsRegistration : IConfigurationItemRegistration - { - public const string ConfigurationGuid = "{AE75DE5D-11A9-4B0F-9EFB-242E70C022C9}"; - private static int MyDirectIndex; - - public static TvPlayersSettings Settings - { - get { return AppUiConfiguration.Current[MyDirectIndex] as TvPlayersSettings; } - set { AppUiConfiguration.Current[MyDirectIndex] = value; } - } // Settings - - public Guid Id - { - get { return new Guid(ConfigurationGuid); } - } // Id - - public bool HasEditor - { - get { return true; } - } // HasEditor - - public Type ItemType - { - get { return typeof(TvPlayersSettings); } - } // GetItemType - - public IConfigurationItem CreateDefault() - { - return null; - } // CreateDefault - - public string EditorDisplayName - { - get { return Properties.SettingsTexts.TvPlayersDisplayName; } - } // EditorDisplayName - - public string EditorDescription - { - get { return Properties.SettingsTexts.TvPlayersDescription; } - } // EditorDescription - - public Image EditorImage - { - get { return Properties.Resources.TvPlayersSettings_32; } - } // EditorImage - - public int EditorPriority - { - get { return 250; } - } // EditorPriority - - public IConfigurationItemEditor CreateEditor(IConfigurationItem data) - { - var editor = new Editors.TvPlayersSettingsEditor() - { - Settings = data as TvPlayersSettings - }; - - return editor; - } // CreateEditor - - public int DirectIndex - { - get { return MyDirectIndex; } - set { MyDirectIndex = value; } - } // DirectIndex - } // class TvPlayersSettingsRegistration -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/StringPair.cs b/1.5 'Kruger 60'/UiServices.Config/StringPair.cs deleted file mode 100644 index d3048cd8..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/StringPair.cs +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Configuration -{ - [Serializable] - public class StringPair - { - private int? hashCode; - private string item1, item2; - - public StringPair() - { - // no op - } // constructor - - public StringPair(string item1, string item2) - { - this.item1 = item1; - this.item2 = item2; - } // constructor - - [XmlIgnore] - public string Item1 - { - get - { - return item1; - } // get - set - { - item1 = value; - CalcHashCode(); - } // set - } // Item1 - - [XmlIgnore] - public string Item2 - { - get - { - return item2; - } // get - set - { - item2 = value; - CalcHashCode(); - } // set - } // Item2 - - public string this[int index] - { - get - { - switch (index) - { - case 0: return Item1; - case 1: return Item2; - default: - throw new ArgumentOutOfRangeException(); - } // switch - } // get - set - { - switch (index) - { - case 0: Item1 = value; break; - case 1: Item2 = value; break; - default: - throw new ArgumentOutOfRangeException(); - } // switch - } // set - } // this[int] - - public void SetPair(string item1, string item2) - { - this.item1 = item1; - this.item2 = item2; - CalcHashCode(); - } // SetPair - - public override int GetHashCode() - { - if (!hashCode.HasValue) - { - CalcHashCode(); - } // if - - return hashCode.Value; - } // GetHashCode - - public override string ToString() - { - return string.Format("<{0}, {1}>", Item1, Item2); - } // ToString - - public override bool Equals(object obj) - { - var pair = obj as StringPair; - - if (object.ReferenceEquals(this, obj)) return true; - if (pair == null) return false; - - return ((pair.Item1 == Item1) && (pair.Item2 == Item2)); - } // Equals - - public static bool operator == (StringPair a, StringPair b) - { - if ((a == null) || (b == null)) return false; - return ((a.Item1 == b.Item1) && (a.Item2 == b.Item2)); - } // operator == - - public static bool operator !=(StringPair a, StringPair b) - { - if ((a == null) || (b == null)) return true; - return ((a.Item1 != b.Item1) || (a.Item2 != b.Item2)); - } // operator != - - private void CalcHashCode() - { - hashCode = ToString().GetHashCode(); - } // CalcHashCode - } // StringPair -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/UiContentProvider.cs b/1.5 'Kruger 60'/UiServices.Config/UiContentProvider.cs deleted file mode 100644 index 2c9e9695..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/UiContentProvider.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration -{ - public class UiContentProvider - { - public UiContentProviderIdentification Identification - { - get; - protected set; - } // Identification - - public UiContentProviderFriendlyNames FriendlyNames - { - get; - protected set; - } // FriendlyNames - - public BootstrapData Bootstrap - { - get; - protected set; - } // Bootstrap - - public static UiContentProvider FromXmlConfiguration(IpTvProviderData contentProvider, IEnumerable uiCultures) - { - if (contentProvider == null) throw new ArgumentNullException(); - if (uiCultures == null) throw new ArgumentNullException(); - - var result = new UiContentProvider(); - - result.Identification = UiContentProviderIdentification.FromXmlConfiguration(contentProvider.Identification, uiCultures); - result.FriendlyNames = UiContentProviderFriendlyNames.FromXmlConfiguration(contentProvider.FriendlyNames, uiCultures); - result.Bootstrap = contentProvider.Bootstrap; - - return result; - } // FromXmlConfiguration - } // class UiContentProvider -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/UiContentProviderFriendlyNames.cs b/1.5 'Kruger 60'/UiServices.Config/UiContentProviderFriendlyNames.cs deleted file mode 100644 index 9f7ca4b2..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/UiContentProviderFriendlyNames.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration -{ - public class UiContentProviderFriendlyNames - { - public IDictionary ServiceProvider - { - get; - protected set; - } // ServiceProvider - - public static UiContentProviderFriendlyNames FromXmlConfiguration(FriendlyNames friendlyNames, IEnumerable uiCultures) - { - if (friendlyNames == null) throw new ArgumentNullException(); - if (uiCultures == null) throw new ArgumentNullException(); - - var result = new UiContentProviderFriendlyNames(); - - result.ServiceProvider = FromSpFriendlyNames(friendlyNames.Providers, uiCultures); - - return result; - } // FromXmlConfiguration - - private static IDictionary FromSpFriendlyNames(SpFriendlyNames[] spNames, IEnumerable uiCultures) - { - if ((spNames == null) || (spNames.Length == 0)) - { - return new Dictionary(); - } // if - - // get list of localized names; if no culture was matched, get the first item of the array (we asume it's the default culture) - var matching = LocalizedObject.FindMatchingCultureObject(spNames, uiCultures); - var localizedNames = (matching != null) ? matching.Names : spNames[0].Names; - - // populate dictionary - var result = new Dictionary(localizedNames.Length, StringComparer.InvariantCultureIgnoreCase); - foreach (var serviceProvider in localizedNames) - { - result.Add(serviceProvider.Domain, serviceProvider.Name); - } // foreach - - return result; - } // LoadServiceProvider - } // class UiContentProviderFriendlyNames -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/UiContentProviderIdentification.cs b/1.5 'Kruger 60'/UiServices.Config/UiContentProviderIdentification.cs deleted file mode 100644 index 7830f74c..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/UiContentProviderIdentification.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Schema2014.ContentProvider; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Configuration -{ - public class UiContentProviderIdentification - { - public string Id - { - get; - protected set; - } // Id - - public string DisplayName - { - get; - protected set; - } // DisplayName - - public string DisplayDescription - { - get; - protected set; - } // DisplayDescription - - public string LogosPackage - { - get; - protected set; - } // LogosPackage - - public static UiContentProviderIdentification FromXmlConfiguration(Identification identification, IEnumerable uiCultures) - { - if (identification == null) throw new ArgumentNullException(); - if (uiCultures == null) throw new ArgumentNullException(); - - var result = new UiContentProviderIdentification(); - - // id - result.Id = identification.Id; - - // identification - var matching = LocalizedObject.FindMatchingCultureObject(identification.Localized, uiCultures); - var localized = (matching != null) ? matching : identification.Localized[0]; - - result.DisplayName = localized.Name; - result.DisplayDescription = localized.Description; - - // packages names - result.LogosPackage = identification.LogosPackageName; - - return result; - } // FromXmlConfiguration - } // class UiContentProviderIdentification -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj b/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj deleted file mode 100644 index 30f7cc00..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/UiServices.Config.csproj +++ /dev/null @@ -1,341 +0,0 @@ - - - - - Debug - AnyCPU - {A722DE9D-AE51-479C-825F-A19F4C69BD75} - Library - Properties - IpTviewr.UiServices.Configuration - UiServices.Configuration - v4.5.2 - 512 - SAK - SAK - SAK - SAK - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - Properties\AssemblySolutionInfo.cs - - - - - - - True - True - CommonUiResources.resx - - - Form - - - ConfigurationForm.cs - - - UserControl - - - ArgumentsEditor.cs - - - UserControl - - - ArgumentEditor.cs - - - Form - - - ArgumentEditorDialog.cs - - - - - - - - - - True - True - InvariantTexts.resx - - - True - True - Resources.resx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Texts.resx - - - True - True - SettingsTexts.resx - - - UserControl - - - NetworkSettingsEditor.cs - - - - - - Form - - - TvPlayerEditorDialog.cs - - - UserControl - - - TvPlayersSettingsEditor.cs - - - Form - - - SelectTvPlayerDialog.cs - - - - - - - - - - - - - - ResXFileCodeGenerator - Designer - CommonUiResources.Designer.cs - - - ConfigurationForm.cs - - - ConfigurationForm.cs - - - ArgumentsEditor.cs - - - ArgumentsEditor.cs - - - ArgumentEditor.cs - - - ArgumentEditor.cs - - - ArgumentEditorDialog.cs - - - ArgumentEditorDialog.cs - - - ResXFileCodeGenerator - InvariantTexts.Designer.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - - - Designer - - - ResXFileCodeGenerator - Texts.Designer.cs - - - - ResXFileCodeGenerator - SettingsTexts.Designer.cs - - - NetworkSettingsEditor.cs - - - NetworkSettingsEditor.cs - - - TvPlayerEditorDialog.cs - - - TvPlayerEditorDialog.cs - - - TvPlayersSettingsEditor.cs - - - TvPlayersSettingsEditor.cs - - - SelectTvPlayerDialog.cs - - - SelectTvPlayerDialog.cs - - - - - - - - - - - - - - - - - - - - - - - Resources\Action_Add_16xM.png - - - Resources\Action_AttachFile_16x16.png - - - Resources\Action_Cancel_16x16.png - - - Resources\Action_Delete_16x16.png - - - Resources\Action_GoNextDown_16x16.png - - - Resources\Action_GoPreviousUp_16x16.png - - - Resources\Action_Ok_16x16.png - - - Resources\Action_Properties_16x16.png - - - Resources\Action_Property_Add_16x16.png - - - Resources\Action_Property_Edit_16x16.png - - - Resources\Status_Info_16x16.png - - - Resources\Status_Ok_SmallCircle_16x16.png - - - Resources\Status_Warning_16x16.png - - - - - - - - - - - - - - {8da15060-5a78-4f89-a9f1-7aa56b0d622c} - Project.Common - - - {76346905-ac2f-4f01-ba99-bbffbb2a6fe9} - UiServices.Common - - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Config/XmlConfigurationItems.cs b/1.5 'Kruger 60'/UiServices.Config/XmlConfigurationItems.cs deleted file mode 100644 index d2d122e7..00000000 --- a/1.5 'Kruger 60'/UiServices.Config/XmlConfigurationItems.cs +++ /dev/null @@ -1,48 +0,0 @@ -using IpTviewr.Common.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Serialization; -using System.Xml.XPath; - -namespace IpTviewr.UiServices.Configuration -{ - [Serializable] - public class XmlConfigurationItems - { - public static XmlElement GetXmlElement(Guid id, IConfigurationItem item) - { - XmlDocument xDoc = new XmlDocument(); - XPathNavigator xNavigator = xDoc.CreateNavigator(); - using (XmlWriter writer = xNavigator.AppendChild()) - { - XmlSerializer ser = new XmlSerializer(item.GetType()); - ser.Serialize(writer, (object)item); - } // using - - var xAttr = xDoc.CreateAttribute("configurationId"); - xAttr.Value = id.ToString(); - xDoc.DocumentElement.Attributes.Append(xAttr); - - return xDoc.DocumentElement; - } // GetXmlElement - - [XmlArray("Registry")] - [XmlArrayItem("Type")] - public List Registry - { - get; - set; - } // Registry - - [XmlAnyElement] - public List XmlData - { - get; - set; - } // XmlData - } // class XmlConfigurationItems -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs deleted file mode 100644 index 8955c7fd..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditor.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors -{ - internal interface ISettingsEditor - { - void SetContainer(ISettingsEditorContainer container); - - bool IsDataChanged - { - get; - } // IsDataChanged - } // internal interface ISettingsEditor -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs deleted file mode 100644 index 7be02436..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorContainer.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors -{ - internal interface ISettingsEditorContainer - { - void SetDataChanged(); - } // internal interface ISettingsEditorContainer -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs deleted file mode 100644 index e0dc0d4a..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/ISettingsEditorModeColumns.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors -{ - internal interface ISettingsEditorModeColumns : ISettingsEditor - { - List> ColumnsList - { - set; - } // ColumnsList - - List> ColumnsNoneList - { - set; - } // ColumnsNoneList - - IList Columns - { - set; - } // Columns - - List SelectedColumns - { - get; - } // SelectedColumns - - Control GetUnderlyingControl(); - } // internal interface ISettingsEditorModeColumns -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs deleted file mode 100644 index 9f1608c9..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorBaseUserControl.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors -{ - internal class SettingsEditorBaseUserControl : UserControl, ISettingsEditor - { - private ISettingsEditorContainer EditorContainer - { - get; - set; - } // EditorContainer - - #region ISettingsEditor implementation - - public void SetContainer(ISettingsEditorContainer container) - { - EditorContainer = container; - } // SetContainer - - public bool IsDataChanged - { - get; - private set; - } // IsDataChanged - - #endregion - - protected void SetDataChanged() - { - IsDataChanged = true; - if (EditorContainer != null) - { - EditorContainer.SetDataChanged(); - } // if - } // SetDataChanged - } // internal class SettingsEditorBaseUserControl -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs deleted file mode 100644 index cd3aeb7a..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeBaseColumn.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors -{ - internal class SettingsEditorModeBaseColumn : SettingsEditorBaseUserControl, ISettingsEditorModeColumns - { - #region ISettingsEditorModeColumns implementation - - public List> ColumnsList - { - protected get; - set; - } // Columns - - public List> ColumnsNoneList - { - protected get; - set; - } // Columns - - public IList Columns - { - protected get; - set; - } // Columns - - public virtual List SelectedColumns - { - get { throw new NotImplementedException(); } - } // SelectedColumns - - public Control GetUnderlyingControl() - { - return this; - } // GetUnderlyingControl - - #endregion - } // SettingsEditorModeBaseColumn -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs deleted file mode 100644 index f6d185ea..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeMultiColumn.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.UiServices.Common.Controls; - -namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors -{ - internal partial class SettingsEditorModeMultiColumn : SettingsEditorModeBaseColumn - { - private ListItemsManager ItemsManager; - - public SettingsEditorModeMultiColumn() - { - InitializeComponent(); - } // constructor - - public override List SelectedColumns - { - get { return ItemsManager.GetListValues(); } - } // SelectedColumns - - private void SettingsEditorModeMultiColumn_Load(object sender, EventArgs e) - { - ItemsManager = new ListItemsManager(listSelectedColumns, buttonRemove, buttonMoveUp, buttonMoveDown); - - comboColumns.DataSource = ColumnsList.AsReadOnly(); - buttonAddColumn.Enabled = (comboColumns.Items.Count > 0); - - ItemsManager.SetValueDictionary(ColumnsList, null); - ItemsManager.Add(Columns); - } // SettingsEditorModeMultiColumn_Load - - private void buttonAddColumn_Click(object sender, EventArgs e) - { - ItemsManager.Add((UiBroadcastListColumn)comboColumns.SelectedValue); - SetDataChanged(); - } // buttonAddColumn_Click - - private void buttonRemove_Click(object sender, EventArgs e) - { - ItemsManager.RemoveSelection(); - SetDataChanged(); - } // buttonRemove_Click - - private void buttonMoveUp_Click(object sender, EventArgs e) - { - ItemsManager.MoveSelectionUp(); - SetDataChanged(); - } // buttonMoveUp_Click - - private void buttonMoveDown_Click(object sender, EventArgs e) - { - ItemsManager.MoveSelectionDown(); - SetDataChanged(); - } // buttonMoveDown_Click - } // class SettingsEditorModeMultiColumn -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs deleted file mode 100644 index 7b68ca10..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorModeSingleColumn.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors -{ - internal partial class SettingsEditorModeSingleColumn : SettingsEditorModeBaseColumn - { - private int ManualUpdateLock; - - public SettingsEditorModeSingleColumn() - { - InitializeComponent(); - } // constructor - - public override List SelectedColumns - { - get - { - var result = new List(1); - result.Add((UiBroadcastListColumn)comboColumns.SelectedValue); - - return result; - } // get - } // SelectedColumns - - private void SettingsEditorModeMultiColumn_Load(object sender, EventArgs e) - { - ManualUpdateLock++; - comboColumns.DataSource = ColumnsList.AsReadOnly(); - comboColumns.SelectedValue = Columns[0]; - ManualUpdateLock--; - } // SettingsEditorModeMultiColumn_Load - - private void comboColumns_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - SetDataChanged(); - } // comboColumns_SelectedIndexChanged - } // class SettingsEditorModeSingleColumn -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs deleted file mode 100644 index 5f255c83..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/SettingsEditorSorting.cs +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors -{ - internal partial class SettingsEditorSorting : SettingsEditorBaseUserControl - { - private UiBroadcastListSortColumn[] SortColumns; - private int ManualUpdateLock; - - public event EventHandler UseGlobalSortChanged; - - public SettingsEditorSorting() - { - InitializeComponent(); - } // constructor - - public List> ColumnsNoneList - { - private get; - set; - } // Columns - - public IList Sort - { - private get; - set; - } // Sort - - public bool UseGlobalSort - { - get; - set; - } // UseGlobalSort - - public bool ShowUseGlobalSort - { - get; - set; - } // ShowUseGlobalSort - - public List SelectedSort - { - get - { - var result = new List(SortColumns.Length); - for (int index = 0; index < SortColumns.Length; index++) - { - var sortColumn = SortColumns[index]; - result.Add(sortColumn); - if (sortColumn.Column == UiBroadcastListColumn.None) break; - } // for index - - return result; - } // get - } // SelectedSort - - private void SettingsEditorSorting_Load(object sender, EventArgs e) - { - if (DesignMode) - { - ColumnsNoneList = UiBroadcastListManager.GetSortedColumnNames(true); - Sort = new List(); - } // if - - SortColumns = new UiBroadcastListSortColumn[3]; - for (int index = 0; index < Math.Min(3, Sort.Count); index++) - { - SortColumns[index] = Sort[index]; - } // for - for (int index = Sort.Count; index < 3; index++) - { - SortColumns[index] = new UiBroadcastListSortColumn(UiBroadcastListColumn.None, false); - } // for - if (Sort.Count == 0) - { - SortColumns[0] = new UiBroadcastListSortColumn(UiBroadcastListColumn.Number, false); - } // if - - ManualUpdateLock++; - comboThirdColumn.DataSource = ColumnsNoneList.AsReadOnly(); - comboSecondColumn.DataSource = ColumnsNoneList.AsReadOnly(); - comboFirstColumn.DataSource = ColumnsNoneList.AsReadOnly(); - - comboThirdColumn.SelectedValue = SortColumns[2].Column; - comboSecondColumn.SelectedValue = SortColumns[1].Column; - comboFirstColumn.SelectedValue = SortColumns[0].Column; - - SetButtonDirectionStatus(buttonFirstDirection, 0, SortColumns[0].IsAscending); - SetButtonDirectionStatus(buttonSecondDirection, 1, SortColumns[1].IsAscending); - SetButtonDirectionStatus(buttonThirdDirection, 2, SortColumns[2].IsAscending); - - checkGlobalSorting.Visible = ShowUseGlobalSort; - checkGlobalSorting.Checked = UseGlobalSort; - EnableCombos(); - - ManualUpdateLock--; - } // SettingsEditorSorting_Load - - private void comboFirstColumn_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - var value = (UiBroadcastListColumn)comboFirstColumn.SelectedValue; - SortColumns[0].Column = value; - var enabled = (value != UiBroadcastListColumn.None); - buttonFirstDirection.Enabled = enabled; - - comboSecondColumn.Enabled = enabled; - comboSecondColumn.SelectedValue = ServiceSortComparer.GetSuggestedNextSortColumn(value); - SetButtonDirectionStatus(buttonSecondDirection, 1, SortColumns[0].IsAscending); - - comboSecondColumn_SelectedIndexChanged(sender, e); - } // comboFirstColumn_SelectedIndexChanged - - private void comboSecondColumn_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - var value = (UiBroadcastListColumn)comboSecondColumn.SelectedValue; - SortColumns[1].Column = value; - var enabled = (value != UiBroadcastListColumn.None); - buttonSecondDirection.Enabled = enabled; - SetButtonDirectionStatus(buttonThirdDirection, 2, SortColumns[1].IsAscending); - - comboThirdColumn.Enabled = enabled; - comboThirdColumn.SelectedValue = ServiceSortComparer.GetSuggestedNextSortColumn(value); - - comboThirdColumn_SelectedIndexChanged(sender, e); - } // comboSecondColumn_SelectedIndexChanged - - private void comboThirdColumn_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - var value = (UiBroadcastListColumn)comboThirdColumn.SelectedValue; - SortColumns[2].Column = value; - var enabled = (value != UiBroadcastListColumn.None); - buttonThirdDirection.Enabled = enabled; - - SetDataChanged(); - } // comboThirdColumn_SelectedIndexChanged - - private void buttonFirstDirection_Click(object sender, EventArgs e) - { - ToggleDirectionStatus(buttonFirstDirection, 0); - } // buttonFirstDirection_Click - - private void buttonSecondDirection_Click(object sender, EventArgs e) - { - ToggleDirectionStatus(buttonSecondDirection, 1); - } // buttonSecondDirection_Click - - private void buttonThirdDirection_Click(object sender, EventArgs e) - { - ToggleDirectionStatus(buttonThirdDirection, 2); - } // buttonThirdDirection_Click - - private void ToggleDirectionStatus(Button button, int index) - { - SetButtonDirectionStatus(button, index, !SortColumns[index].IsAscending); - SetDataChanged(); - } // ToggleDirectionStatus - - private void SetButtonDirectionStatus(Button button, int index, bool isAscending) - { - SortColumns[index].IsAscending = isAscending; - button.Image = isAscending ? Properties.Resources.Action_SortAscending_16x16 : Properties.Resources.Action_SortDescending_16x16; - toolTip.SetToolTip(button, isAscending ? Properties.SettingsEditor.SortAscendingTooltip : Properties.SettingsEditor.SortDescendingTooltip); - } // // SetButtonDirectionStatus - - private void checkGlobalSorting_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - UseGlobalSort = checkGlobalSorting.Checked; - EnableCombos(); - SetDataChanged(); - - UseGlobalSortChanged?.Invoke(this, EventArgs.Empty); - } // checkGlobalSorting_CheckedChanged - - private void EnableCombos() - { - if (!ShowUseGlobalSort) return; - - comboFirstColumn.Enabled = UseGlobalSort; - comboSecondColumn.Enabled = UseGlobalSort; - comboThirdColumn.Enabled = UseGlobalSort; - buttonFirstDirection.Enabled = UseGlobalSort; - buttonSecondDirection.Enabled = UseGlobalSort; - buttonThirdDirection.Enabled = UseGlobalSort; - } // EnableCombos - } // class SettingsEditorSorting -}// namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs deleted file mode 100644 index 8e6d876c..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/Editors/UiBroadcastListSettingsEditor.cs +++ /dev/null @@ -1,386 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Logos; - -namespace IpTviewr.UiServices.Discovery.BroadcastList.Editors -{ - public partial class UiBroadcastListSettingsEditor : UserControl, IConfigurationItemEditor, ISettingsEditorContainer - { - private int ManualUpdateLock; - private ToolStripButton[] ListModeItems; - private ISettingsEditorModeColumns[] EditorModeColumns; - private SettingsEditorSorting EditorGlobalSorting; - private SettingsEditorSorting[] EditorModeSorting; - - public UiBroadcastListSettingsEditor() - { - InitializeComponent(); - } // constructor - - public UiBroadcastListSettings Settings - { - get; - set; - } // Settings - - #region IConfigurationItemEditor implementation - - UserControl IConfigurationItemEditor.UserInterfaceItem - { - get { return this; } - } // IConfigurationItemEditor.UserInterfaceItem - - bool IConfigurationItemEditor.SupportsWinFormsValidation - { - get { return false; } - } // IConfigurationItemEditor.SupportsWinFormsValidation - - public bool IsDataChanged - { - get; - protected set; - } // IsDataChanged - - public bool IsAppRestartNeeded - { - get { return false; } - } // IsAppRestartNeeded - - bool IConfigurationItemEditor.Validate() - { - return true; - } // IConfigurationItemEditor.Validate - - IConfigurationItem IConfigurationItemEditor.GetNewData() - { - SaveGeneralTab(); - SaveModeSettingsTab(); - - return Settings; - } // IConfigurationItemEditor.GetNewData - - void IConfigurationItemEditor.EditorClosing(out bool cancelClose) - { - cancelClose = false; - } // IConfigurationItemEditor.EditorClosing - - void IConfigurationItemEditor.EditorClosed(bool userCancel) - { - // no op - } // IConfigurationItemEditor.EditorClosed - - #endregion - - #region ISettingsEditorContainer implementation - - void ISettingsEditorContainer.SetDataChanged() - { - IsDataChanged = true; - } // SetDataChanged - - protected void SetDataChanged() - { - IsDataChanged = true; - } // SetDataChanged - - #endregion - - private void UiBroadcastListSettingsEditor_Load(object sender, EventArgs e) - { - var sortedColumns = UiBroadcastListManager.GetSortedColumnNames(); - var sortedColumnsNone = UiBroadcastListManager.GetSortedColumnNames(true); - - // General tab - LoadGeneralTab(sortedColumnsNone); - - // Mode settings tab - LoadModeSettingsTab(sortedColumns, sortedColumnsNone); - } // UiBroadcastListSettingsEditor_Load - - #region General tab load/save - - private void LoadGeneralTab(List> sortedColumnsNone) - { - ListModeItems = new ToolStripButton[5]; - ListModeItems[0] = toolButtonDetails; - ListModeItems[1] = toolButtonLarge; - ListModeItems[2] = toolButtonSmall; - ListModeItems[3] = toolButtonList; - ListModeItems[4] = toolButtonTile; - ListModeItems[0].Tag = View.Details; - ListModeItems[1].Tag = View.LargeIcon; - ListModeItems[2].Tag = View.SmallIcon; - ListModeItems[3].Tag = View.List; - ListModeItems[4].Tag = View.Tile; - - ManualUpdateLock++; - - checkShowInactive.Checked = Settings.ShowInactiveServices; - checkShowHidden.Checked = Settings.ShowHiddenServices; - checkShowOutOfPackage.Checked = Settings.ShowOutOfPackage; - - EditorGlobalSorting = new SettingsEditorSorting(); - EditorGlobalSorting.ColumnsNoneList = sortedColumnsNone; - EditorGlobalSorting.Sort = Settings.GlobalSortColumns; - EditorGlobalSorting.SetContainer(this); - EditorGlobalSorting.Dock = DockStyle.Fill; - EditorGlobalSorting.UseGlobalSort = Settings.UseGlobalSortColumns; - EditorGlobalSorting.ShowUseGlobalSort = true; - EditorGlobalSorting.UseGlobalSortChanged += EditorGlobalSorting_UseGlobalSortChanged; - panelGlobalSorting.Controls.Add(EditorGlobalSorting); - - ManualUpdateLock--; - } // LoadGeneralTab - - private void SaveGeneralTab() - { - if (EditorGlobalSorting.IsDataChanged) - { - Settings.GlobalSortColumns = EditorGlobalSorting.SelectedSort; - Settings.UseGlobalSortColumns = EditorGlobalSorting.UseGlobalSort; - } // if - } // SaveGeneralTab - - #endregion - - #region General tab event handlers - - private void toolButtonDetails_Click(object sender, EventArgs e) - { - SetListMode(View.Details); - SetDataChanged(); - } // toolButtonDetails_Click - - private void toolButtonLarge_Click(object sender, EventArgs e) - { - SetListMode(View.LargeIcon); - SetDataChanged(); - } // toolButtonLarge_Click - - private void toolButtonSmall_Click(object sender, EventArgs e) - { - SetListMode(View.SmallIcon); - SetDataChanged(); - } // toolButtonSmall_Click - - private void toolButtonList_Click(object sender, EventArgs e) - { - SetListMode(View.List); - SetDataChanged(); - } // toolButtonList_Click - - private void toolButtonTile_Click(object sender, EventArgs e) - { - SetListMode(View.Tile); - SetDataChanged(); - } // toolButtonTile_Click - - private void SetListMode(View mode) - { - Settings.CurrentMode = mode; - foreach (var control in ListModeItems) - { - if (mode == (View)control.Tag) - { - control.BackColor = SystemColors.Highlight; - control.ForeColor = SystemColors.HighlightText; - } - else - { - control.BackColor = toolStripListMode.BackColor; - control.ForeColor = toolStripListMode.ForeColor; - } // if-else - } // foreach control - - comboMode.SelectedIndex = ViewToIndex(mode); - } // SetListMode - - private void checkShowInactive_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - Settings.ShowInactiveServices = checkShowInactive.Checked; - SetDataChanged(); - } - - private void checkShowHidden_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - Settings.ShowHiddenServices = checkShowHidden.Checked; - SetDataChanged(); - } // checkShowHidden_CheckedChanged - - private void checkShowOutOfPackage_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - Settings.ShowOutOfPackage = checkShowOutOfPackage.Checked; - SetDataChanged(); - } // checkShowOutOfPackage_CheckedChanged - - private void EditorGlobalSorting_UseGlobalSortChanged(object sender, EventArgs e) - { - foreach (var editor in EditorModeSorting) - { - editor.Enabled = !EditorGlobalSorting.UseGlobalSort; - } // foreach editor - } // EditorGlobalSorting_UseGlobalSortChanged - - #endregion - - #region Mode settings tab load/save - - private void LoadModeSettingsTab(List> sortedColumns, List> sortedColumnsNone) - { - EditorModeColumns = new ISettingsEditorModeColumns[5]; - EditorModeColumns[0] = new SettingsEditorModeMultiColumn(); - EditorModeColumns[1] = new SettingsEditorModeSingleColumn(); - EditorModeColumns[2] = new SettingsEditorModeSingleColumn(); - EditorModeColumns[3] = new SettingsEditorModeSingleColumn(); - EditorModeColumns[4] = new SettingsEditorModeTripleColumn(); - - EditorModeSorting = new SettingsEditorSorting[5]; - EditorModeSorting[0] = new SettingsEditorSorting(); - EditorModeSorting[1] = new SettingsEditorSorting(); - EditorModeSorting[2] = new SettingsEditorSorting(); - EditorModeSorting[3] = new SettingsEditorSorting(); - EditorModeSorting[4] = new SettingsEditorSorting(); - - for (int index = 0; index < EditorModeColumns.Length; index++) - { - var editor = EditorModeColumns[index]; - var view = IndexToView(index); - editor.SetContainer(this); - editor.ColumnsList = sortedColumns; - editor.ColumnsNoneList = sortedColumnsNone; - editor.Columns = Settings[view].Columns; - } // for - - for (int index = 0; index < EditorModeSorting.Length; index++) - { - var editor = EditorModeSorting[index]; - var view = IndexToView(index); - editor.SetContainer(this); - editor.ColumnsNoneList = sortedColumnsNone; - editor.Sort = Settings[view].Sort; - editor.Enabled = !Settings.UseGlobalSortColumns; - } // for - - ManualUpdateLock++; - - comboLogoSize.ValueMember = "Key"; - comboLogoSize.DisplayMember = "Value"; - comboLogoSize.DataSource = BaseLogo.GetListLogoSizes(true).AsReadOnly(); - - checkShowGridlines.Checked = Settings.ShowGridlines; - - ManualUpdateLock--; - - SetListMode(Settings.CurrentMode); - } // private LoadModeSettingsTab - - private void SaveModeSettingsTab() - { - for (int index = 0; index < EditorModeColumns.Length; index++) - { - var editor = EditorModeColumns[index]; - if (!editor.IsDataChanged) continue; - - var view = IndexToView(index); - Settings[view].Columns = editor.SelectedColumns; - } // for - - for (int index = 0; index < EditorModeSorting.Length; index++) - { - var editor = EditorModeSorting[index]; - if (!editor.IsDataChanged) continue; - - var view = IndexToView(index); - Settings[view].Sort = editor.SelectedSort; - } // for - } // SaveGeneralTab - - private int ViewToIndex(View view) - { - switch (view) - { - case View.Details: return 0; - case View.LargeIcon: return 1; - case View.SmallIcon: return 2; - case View.List: return 3; - case View.Tile: return 4; - default: - throw new IndexOutOfRangeException(); - } // switch - } // ViewToIndex - - private View IndexToView(int index) - { - switch (index) - { - case 0: return View.Details; - case 1: return View.LargeIcon; - case 2: return View.SmallIcon; - case 3: return View.List; - case 4: return View.Tile; - default: - throw new IndexOutOfRangeException(); - } // switch - } // IndexToView - - #endregion - - #region Mode settings tab event handlers - - private void comboMode_SelectedIndexChanged(object sender, EventArgs e) - { - ManualUpdateLock++; - - var index = comboMode.SelectedIndex; - - panelModeColumns.Controls.Clear(); - panelModeColumns.Controls.Add(EditorModeColumns[index].GetUnderlyingControl()); - panelModeColumns.Controls[0].Dock = DockStyle.Fill; - - panelModeSorting.Controls.Clear(); - panelModeSorting.Controls.Add(EditorModeSorting[index]); - panelModeSorting.Controls[0].Dock = DockStyle.Fill; - - var view = IndexToView(comboMode.SelectedIndex); - comboLogoSize.SelectedValue = Settings[view].LogoSize; - checkShowGridlines.Visible = (view == View.Details); - - ManualUpdateLock--; - } // comboMode_SelectedIndexChanged - - private void comboLogoSize_SelectedIndexChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - var view = IndexToView(comboMode.SelectedIndex); - Settings[view].LogoSize = (LogoSize) comboLogoSize.SelectedValue; - SetDataChanged(); - } // comboLogoSize_SelectedIndexChanged - - private void checkShowGridlines_CheckedChanged(object sender, EventArgs e) - { - if (ManualUpdateLock > 0) return; - - Settings.ShowGridlines = checkShowGridlines.Checked; - SetDataChanged(); - } // checkShowGridlines_CheckedChanged - - #endregion - } // class UiBroadcastListSettingsEditor -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs deleted file mode 100644 index 2a7e95e3..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListSelectionChangedEventArgs.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Discovery.BroadcastList -{ - public class ListSelectionChangedEventArgs: EventArgs - { - public ListSelectionChangedEventArgs() - { - // no op - } // constructor - - public ListSelectionChangedEventArgs(UiBroadcastService item) - { - Item = item; - } // constructor - - public UiBroadcastService Item - { - get; - set; - } // Item - } // class ListSelectionChangedEventArgs -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs deleted file mode 100644 index 3916d342..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/ListStatusChangedEventArgs.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Discovery.BroadcastList -{ - public class ListStatusChangedEventArgs: EventArgs - { - public ListStatusChangedEventArgs() - { - // no op - } // constructor - - public ListStatusChangedEventArgs(bool hasItems) - { - HasItems = hasItems; - } // constructor - - public bool HasItems - { - get; - set; - } // HasItems - } // class ListStatusChangedEventArgs -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs deleted file mode 100644 index 3eda05ab..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListColumn.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Discovery.BroadcastList -{ - public enum UiBroadcastListColumn - { - None = 0, - Name = 1, - Number = 2, - NumberAndName = 3, - NumberAndNameCrlf = 4, - NameAndNumber = 5, - Description = 6, - DvbType = 7, - LocationUrl = 8, - ShortName = 9, - Genre = 10, - GenreCode = 11, - ParentalRating = 12, - ParentalRatingCode = 13, - ServiceId = 14, - FullServiceId = 15, - UserName = 16, - UserNumber = 17, - OriginalName = 18, - OriginalNumber = 19, - IsActive = 20, - IsEnabled = 21, - LockLevel = 22, - } // UiBroadcastListViewColumn -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs deleted file mode 100644 index fab71cd2..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettings.cs +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Serialization; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Schema2014.Config; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.IO; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Discovery.BroadcastList -{ - [Serializable] - [XmlRoot("UiBroadcastList", Namespace=ConfigCommon.ConfigXmlNamespace)] - public class UiBroadcastListSettings : IConfigurationItem - { - private int[] fieldColumnWidth; - - public class ModeViewSettings - { - public UiBroadcastListModeSettings Details - { - get; - set; - } // Details - - public UiBroadcastListModeSettings LargeIcon - { - get; - set; - } // LargeIcon - - public UiBroadcastListModeSettings SmallIcon - { - get; - set; - } // SmallIcon - - public UiBroadcastListModeSettings List - { - get; - set; - } // List - - public UiBroadcastListModeSettings Tile - { - get; - set; - } // Tile - } // class ModeViewSettings - - #region Static methods - - public static UiBroadcastListSettings GetDefaultSettings() - { - var result = new UiBroadcastListSettings(); - - result.CurrentMode = View.Tile; - result.ShowGridlines = true; - result.ShowInactiveServices = true; - result.ShowOutOfPackage = true; - result.TilesPerRow = 4; - - result.ViewSettings = new ModeViewSettings(); - result.ViewSettings.Details = UiBroadcastListModeSettings.GetDefaultSettings(View.Details); - result.ViewSettings.LargeIcon = UiBroadcastListModeSettings.GetDefaultSettings(View.LargeIcon); - result.ViewSettings.SmallIcon = UiBroadcastListModeSettings.GetDefaultSettings(View.SmallIcon); - result.ViewSettings.List = UiBroadcastListModeSettings.GetDefaultSettings(View.List); - result.ViewSettings.Tile = UiBroadcastListModeSettings.GetDefaultSettings(View.Tile); - - result.GlobalSortColumns = ServiceSortComparer.GetSuggestedSortColumns(UiBroadcastListColumn.Number, true, 3); - result.UseGlobalSortColumns = false; - - // force creation of ColumnWidth field - var dummy = result.ColumnWidth[0]; - - return result; - } // GetDefaultSettings - - #endregion - - public UiBroadcastListSettings() - { - // no op - } // constructor - - public View CurrentMode - { - get; - set; - } // CurrentMode - - [XmlIgnore] - public UiBroadcastListModeSettings this[View mode] - { - get - { - switch (mode) - { - case View.Details: return ViewSettings.Details; - case View.LargeIcon: return ViewSettings.LargeIcon; - case View.SmallIcon: return ViewSettings.SmallIcon; - case View.List: return ViewSettings.List; - case View.Tile: return ViewSettings.Tile; - default: - throw new IndexOutOfRangeException(); - } // switch - } // get - set - { - switch (mode) - { - case View.Details: ViewSettings.Details = value; break; - case View.LargeIcon: ViewSettings.LargeIcon = value; break; - case View.SmallIcon: ViewSettings.SmallIcon = value; break; - case View.List: ViewSettings.List = value; break; - case View.Tile: ViewSettings.Tile = value; break; - default: - throw new IndexOutOfRangeException(); - } // switch - } // set - } // UiBroadcastListViewModeSettings - - public ModeViewSettings ViewSettings - { - get; - set; - } // ViewSettings - - [XmlArray("OverrideSortBy")] - [XmlArrayItem("Column")] - public List GlobalSortColumns - { - get; - set; - } // GlobalSortColumns - - [DefaultValue(false)] - [XmlElement("UseOverrideSortBy")] - public bool UseGlobalSortColumns - { - get; - set; - } // UseGlobalSortColumn - - [DefaultValue(false)] - public bool ShowInactiveServices - { - get; - set; - } // ShowInactiveServices - - [DefaultValue(false)] - public bool ShowHiddenServices - { - get; - set; - } // ShowHiddenServices - - [DefaultValue(false)] - public bool ShowOutOfPackage - { - get; - set; - } // ShowOutOfPackage - - [DefaultValue(false)] - public bool ShowGridlines - { - get; - set; - } // ShowGridlines - - public int TilesPerRow - { - get; - set; - } // TilesPerRow - - [XmlArrayItem("Width")] - public int[] ColumnWidth - { - get - { - if (fieldColumnWidth == null) - { - fieldColumnWidth = new int[23]; - } // if - return fieldColumnWidth; - } - set - { - fieldColumnWidth = value; - } // set - } // ColumnWidth - - [XmlIgnore] - public IList CurrentColumns - { - get { return this[CurrentMode].Columns.AsReadOnly(); } - } // CurrentColumns - - #region IConfigurationItem implementation - - bool IConfigurationItem.SupportsInitialization - { - get { return false; } - } // IConfigurationItem.SupportsInitialization - - bool IConfigurationItem.SupportsValidation - { - get { return false; } - } // IConfigurationItem.CanValidate - - InitializationResult IConfigurationItem.Initializate() - { - throw new NotSupportedException(); - } // IConfigurationItem.Initializate - - string IConfigurationItem.Validate(string ownerTag) - { - throw new NotSupportedException(); - } // IConfigurationItem.Validate - - #endregion - } // class UiBroadcastListViewSettings -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs deleted file mode 100644 index 4bea043c..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSettingsRegistration.cs +++ /dev/null @@ -1,82 +0,0 @@ -using IpTviewr.UiServices.Configuration; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Discovery.BroadcastList -{ - public class UiBroadcastListSettingsRegistration: IConfigurationItemRegistration - { - public const string RegistrationGuid = "{68B9F98B-DB50-4A08-AF04-35457F0224FB}"; - private static int MyDirectIndex; - - public static UiBroadcastListSettings Settings - { - get { return AppUiConfiguration.Current[MyDirectIndex] as UiBroadcastListSettings; } - set { AppUiConfiguration.Current[MyDirectIndex] = value; } - } // Settings - - public static Guid SettingsGuid - { - get { return new Guid(RegistrationGuid); } - } // SettingsGuid - - public Guid Id - { - get { return new Guid(RegistrationGuid); } - } // Id - - public bool HasEditor - { - get { return true; } - } // HasEditor - - public Type ItemType - { - get { return typeof(UiBroadcastListSettings); } - } // GetItemType - - public IConfigurationItem CreateDefault() - { - return UiBroadcastListSettings.GetDefaultSettings(); - } // CreateDefault - - public string EditorDisplayName - { - get { return Properties.SettingsEditor.DisplayName; } - } // EditorDisplayName - - public string EditorDescription - { - get { return Properties.SettingsEditor.Description; } - } // EditorDescription - - public Image EditorImage - { - get { return Properties.Resources.BroadcastListSettings_32x32; } - } // EditorImage - - public int EditorPriority - { - get { return 50; } - } // EditorPriority - - public IConfigurationItemEditor CreateEditor(IConfigurationItem data) - { - var editor = new Editors.UiBroadcastListSettingsEditor() - { - Settings = data as UiBroadcastListSettings - }; - - return editor; - } // CreateEditor - - public int DirectIndex - { - get { return MyDirectIndex; } - set { MyDirectIndex = value; } - } // DirectIndex - } // UiBroadcastListSettingsRegistration -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs b/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs deleted file mode 100644 index d8bd4637..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/BroadcastList/UiBroadcastListSortColumn.cs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Discovery.BroadcastList -{ - [Serializable] - public struct UiBroadcastListSortColumn - { - public UiBroadcastListSortColumn(UiBroadcastListColumn column, bool descending) - : this() - { - Column = column; - Descending = (column == UiBroadcastListColumn.None)? false : descending; - } // constructor - - [XmlAttribute("name")] - public UiBroadcastListColumn Column - { - get; - set; - } // Column - - [DefaultValue(false)] - [XmlAttribute("descending")] - public bool Descending - { - get; - set; - } // Descending - - [XmlIgnore] - public bool IsAscending - { - get { return !Descending; } - set { Descending = !value; } - } // IsAscending - - public override bool Equals(object obj) - { - // if parameter is null return false - if (object.ReferenceEquals(obj, null)) return false; - - try - { - // return true if the fields match - return this.Equals((UiBroadcastListSortColumn)obj); - } - catch (InvalidCastException) - { - // if parameter cannot be cast to this type return false - return false; - } // try-catch - } // Equals - - public bool Equals(UiBroadcastListSortColumn column) - { - if (this.Column != column.Column) return false; - if (this.IsAscending == column.IsAscending) return true; - // special case - if (this.Column == UiBroadcastListColumn.None) return true; - - return false; - } // Equals - - public override int GetHashCode() - { - return IsAscending ? (int)Column : -1 * (int)Column; - } // GetHashCode - - public static bool operator == (UiBroadcastListSortColumn column1, UiBroadcastListSortColumn column2) - { - return column1.Equals(column2); - } // operator == - - public static bool operator !=(UiBroadcastListSortColumn column1, UiBroadcastListSortColumn column2) - { - return !column1.Equals(column2); - } // operator != - } // class UiBroadcastListViewSortColumn -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/License.txt b/1.5 'Kruger 60'/UiServices.Discovery/License.txt deleted file mode 100644 index c9479ece..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/AssemblyInfo.cs deleted file mode 100644 index ff9c3c08..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UI Services: Discovery")] -[assembly: AssemblyDescription("IpTviewr.UiServices.Discovery")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("76dfac48-fa82-45c9-b77a-6a1d58e3bfcd")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/InvariantTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/InvariantTexts.Designer.cs deleted file mode 100644 index 206afe18..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/InvariantTexts.Designer.cs +++ /dev/null @@ -1,72 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Discovery.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class InvariantTexts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal InvariantTexts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.InvariantTexts", typeof(InvariantTexts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to {0}@{1}. - /// - internal static string FormatServiceProviderKey { - get { - return ResourceManager.GetString("FormatServiceProviderKey", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.Designer.cs deleted file mode 100644 index 8e8c4cae..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.Designer.cs +++ /dev/null @@ -1,223 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Discovery.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Add_16xM { - get { - object obj = ResourceManager.GetObject("Action_Add_16xM", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Delete_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_GoNextDown_16x16 { - get { - object obj = ResourceManager.GetObject("Action_GoNextDown_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_GoPreviousUp_16x16 { - get { - object obj = ResourceManager.GetObject("Action_GoPreviousUp_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_SortAscending_16x16 { - get { - object obj = ResourceManager.GetObject("Action_SortAscending_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_SortDescending_16x16 { - get { - object obj = ResourceManager.GetObject("Action_SortDescending_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap BroadcastListSettings_32x32 { - get { - object obj = ResourceManager.GetObject("BroadcastListSettings_32x32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ListView_Details_16x16 { - get { - object obj = ResourceManager.GetObject("ListView_Details_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ListView_List_16x16 { - get { - object obj = ResourceManager.GetObject("ListView_List_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ListView_MediumIcons_16x16 { - get { - object obj = ResourceManager.GetObject("ListView_MediumIcons_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ListView_SmallIcons_16x16 { - get { - object obj = ResourceManager.GetObject("ListView_SmallIcons_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ListView_Tiles_16x16 { - get { - object obj = ResourceManager.GetObject("ListView_Tiles_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Info_24x24 { - get { - object obj = ResourceManager.GetObject("Status_Info_24x24", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Success_24x24 { - get { - object obj = ResourceManager.GetObject("Status_Success_24x24", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.resx deleted file mode 100644 index 155c072c..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Resources.resx +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\..\common.ui\resources\action_add_16xm.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_copy_clip_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_gonextdown_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_gopreviousup_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_sortascending_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_sortdescending_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\broadcastlistsettings_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\listview_details_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\listview_list_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\listview_mediumicons_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\listview_smallicons_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\listview_tiles_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\status_info_24x24.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\status_success_24x24.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.Designer.cs deleted file mode 100644 index dea93fe5..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.Designer.cs +++ /dev/null @@ -1,306 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Discovery.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Discovery.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to The list has been successfully refreshed, but it is empty.. - /// - internal static string BroadcastListRefreshEmpty { - get { - return ResourceManager.GetString("BroadcastListRefreshEmpty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The channel list has been successfully refreshed.. - /// - internal static string BroadcastListRefreshSuccess { - get { - return ResourceManager.GetString("BroadcastListRefreshSuccess", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to obtain the list of TV channels/services. - /// - internal static string BroadcastListUnableRefresh { - get { - return ResourceManager.GetString("BroadcastListUnableRefresh", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Obtaining list of TV channels/services.... - /// - internal static string BroadcastObtainingList { - get { - return ResourceManager.GetString("BroadcastObtainingList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Parsing and extracting the list of TV channels/services.... - /// - internal static string BroadcastParsingList { - get { - return ResourceManager.GetString("BroadcastParsingList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No description is available for this TV channel/service. - /// - internal static string BroadcastUnknownDisplayDescription { - get { - return ResourceManager.GetString("BroadcastUnknownDisplayDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to xxx. - /// - internal static string ChannelNumberNone { - get { - return ResourceManager.GetString("ChannelNumberNone", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown: {0}.{1}. - /// - internal static string FormatBroadcastUnknownDisplayName { - get { - return ResourceManager.GetString("FormatBroadcastUnknownDisplayName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} (*). - /// - internal static string FormatProviderFriendlyDisplayName { - get { - return ResourceManager.GetString("FormatProviderFriendlyDisplayName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to (Name not provided) {0}. - /// - internal static string FormatProviderUnknownDisplayName { - get { - return ResourceManager.GetString("FormatProviderUnknownDisplayName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown ({0}). - /// - internal static string FormatServiceTypeIdUnknown { - get { - return ResourceManager.GetString("FormatServiceTypeIdUnknown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} channels have been reallocated. - /// - internal static string MergeResultChangedServicesCount { - get { - return ResourceManager.GetString("MergeResultChangedServicesCount", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to (No new, discontinued or modified channels). - /// - internal static string MergeResultDetailsNoData { - get { - return ResourceManager.GetString("MergeResultDetailsNoData", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} channels have not changed. - /// - internal static string MergeResultEqualServicesCount { - get { - return ResourceManager.GetString("MergeResultEqualServicesCount", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to There are {0} new channels. - /// - internal static string MergeResultNewServicesCount { - get { - return ResourceManager.GetString("MergeResultNewServicesCount", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} channels have been discontinued. - /// - internal static string MergeResultRemovedServicesCount { - get { - return ResourceManager.GetString("MergeResultRemovedServicesCount", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No channels have been reallocated. - /// - internal static string MergeResultZeroChangedServices { - get { - return ResourceManager.GetString("MergeResultZeroChangedServices", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to All channels have changed!. - /// - internal static string MergeResultZeroEqualServices { - get { - return ResourceManager.GetString("MergeResultZeroEqualServices", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to There are no new channels. - /// - internal static string MergeResultZeroNewServices { - get { - return ResourceManager.GetString("MergeResultZeroNewServices", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No channels have been discontinued. - /// - internal static string MergeResultZeroRemovedServices { - get { - return ResourceManager.GetString("MergeResultZeroRemovedServices", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No. - /// - internal static string No { - get { - return ResourceManager.GetString("No", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to <Not provided>. - /// - internal static string NotProvidedValue { - get { - return ResourceManager.GetString("NotProvidedValue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Channel description and data. - /// - internal static string Payload02DisplayName { - get { - return ResourceManager.GetString("Payload02DisplayName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Packages and channel numbers. - /// - internal static string Payload05DisplayName { - get { - return ResourceManager.GetString("Payload05DisplayName", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No description is available for this service provider. - /// - internal static string ProviderUnknownDisplayDescription { - get { - return ResourceManager.GetString("ProviderUnknownDisplayDescription", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The refreshing of the list has been cancelled by the user.. - /// - internal static string UserCancelListRefresh { - get { - return ResourceManager.GetString("UserCancelListRefresh", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Yes. - /// - internal static string Yes { - get { - return ResourceManager.GetString("Yes", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.es.resx b/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.es.resx deleted file mode 100644 index 84a16b95..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.es.resx +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - La lista se ha actualizado correctamente, pero no contiene canales o servicios. - - - La lista de canales se ha actualizado correctamente. - - - Obteniendo la lista de canales de TV o servicios... - - - Analizando y extrayendo la lista de servicios... - - - Propiedades del canal de TV o servicio - - - No existe una descripción de este canal de TV o servicio - - - xxx - - - Desconocido: {0}.{1} - - - {0} (*) - - - (Sin nombre) {0} - - - Desconocido ({0}) - - - {0} canales modificados - - - (No hay canales nuevos, suprimidos o modificados) - - - {0} canales no han cambiado - - - {0} nuevos canales - - - {0} canales han sido suprimidos - - - No hay canales con contenido modificado - - - ¡Todos los canales han cambiado! - - - No hay nuevos canales - - - No hay canales suprimidos - - - No - - - <No suministrado> - - - Descripción y datos de los canales - - - Paquetes y números de canal - - - No existe una descripción de este proveedor de servicios - - - La actualización de la lista ha sido cancelada por el usuario. - - - - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.resx b/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.resx deleted file mode 100644 index 79bb83bd..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/Properties/Texts.resx +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - The list has been successfully refreshed, but it is empty. - - - The channel list has been successfully refreshed. - - - Unable to obtain the list of TV channels/services - - - Obtaining list of TV channels/services... - - - Parsing and extracting the list of TV channels/services... - - - No description is available for this TV channel/service - - - xxx - - - Unknown: {0}.{1} - - - {0} (*) - - - (Name not provided) {0} - - - Unknown ({0}) - - - {0} channels have been reallocated - - - (No new, discontinued or modified channels) - - - {0} channels have not changed - - - There are {0} new channels - - - {0} channels have been discontinued - - - No channels have been reallocated - - - All channels have changed! - - - There are no new channels - - - No channels have been discontinued - - - No - - - <Not provided> - - - Channel description and data - - - Packages and channel numbers - - - No description is available for this service provider - - - The refreshing of the list has been cancelled by the user. - - - Yes - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs b/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs deleted file mode 100644 index fd195b1e..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/SerializationCommon.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Discovery -{ - internal class SerializationCommon - { - public const string XmlNamespace = "urn:AlphaCentaury:IpTViewr:2014:UiServices.Discovery"; - } // class SerializationCommon -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscovery.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscovery.cs deleted file mode 100644 index 2aa92513..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscovery.cs +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml.Serialization; - -namespace IpTviewr.UiServices.Discovery -{ - [Serializable] - [XmlRoot(ElementName="UI-BroadcastDiscovery", Namespace=SerializationCommon.XmlNamespace)] - public class UiBroadcastDiscovery - { - private IDictionary ServicesDictionary; - - public static UiBroadcastDiscoveryMergeResult Merge(UiBroadcastDiscovery oldDiscovery, UiBroadcastDiscovery newDiscovery) - { - if (newDiscovery == null) throw new ArgumentNullException("newDiscovery"); - - if (oldDiscovery == null) - { - return new UiBroadcastDiscoveryMergeResult() - { - RemovedServices = new List(), - NewServices = newDiscovery.Services.AsReadOnly(), - ChangedServices = new List(), - CountNotChanged = -1, - IsEmpty = (newDiscovery.Services.Count == 0) - }; - } // if - - var removedServices = new List(); - var newServices = new List(); - var changedServices = new List(); - int notChanged = 0; - - oldDiscovery.BuildServicesDictionary(); - newDiscovery.BuildServicesDictionary(); - - // detect new services and changes - foreach (var service in newDiscovery.Services) - { - UiBroadcastService oldService; - - if (oldDiscovery.ServicesDictionary.TryGetValue(service.Key, out oldService)) - { - if (service.IsSameService(oldService)) - { - notChanged++; - service.TransferMergeProperties(oldService); - } - else - { - changedServices.Add(service); - } // if-else - } - else - { - newServices.Add(service); - } // if-else - } // foreach service - - // detect removed services - foreach (var service in oldDiscovery.Services) - { - if (!newDiscovery.ServicesDictionary.ContainsKey(service.Key)) - { - removedServices.Add(service); - } // if - } // foreach service - - oldDiscovery.ServicesDictionary = null; - newDiscovery.ServicesDictionary = null; - - var result = new UiBroadcastDiscoveryMergeResult() - { - RemovedServices = removedServices.AsReadOnly(), - NewServices = newServices.AsReadOnly(), - ChangedServices = changedServices.AsReadOnly(), - CountNotChanged = notChanged, - IsEmpty = (newDiscovery.Services.Count == 0) - }; - - return result; - } // Merge - - /// Used by Serialization - protected UiBroadcastDiscovery() - { - } // constructor - - public UiBroadcastDiscovery(BroadcastDiscoveryRoot discoveryXml, string providerDomainName, int version) - { - Create(discoveryXml, providerDomainName, version); - } // constructor - - [XmlAttribute("version")] - public int Version - { - get; - set; - } // Version - - public List Services - { - get; - set; - } // Services - - public UiBroadcastService this[int index] - { - get { return Services[index]; } - } // this[index] - - public UiBroadcastService this[string serviceKey] - { - get - { - if (ServicesDictionary == null) BuildServicesDictionary(); - return ServicesDictionary[serviceKey]; - } // get - } // this[string] - - public bool TryGetService(string serviceKey, out UiBroadcastService service) - { - if (ServicesDictionary == null) BuildServicesDictionary(); - return ServicesDictionary.TryGetValue(serviceKey, out service); - } // TryGetService - - public UiBroadcastService TryGetService(string serviceKey) - { - UiBroadcastService service; - - if (ServicesDictionary == null) BuildServicesDictionary(); - return ServicesDictionary.TryGetValue(serviceKey, out service) ? service : null; - } // TryGetService - - private void Create(BroadcastDiscoveryRoot discoveryXml, string providerDomainName, int version) - { - var services = from offering in discoveryXml.BroadcastDiscovery - from list in offering.Services - from service in list.Services - select service; - - var uiServices = from service in services - select new UiBroadcastService(service, providerDomainName); - - var uiServicesList = new List(services.Count()); - uiServicesList.AddRange(uiServices); - - Version = version; - Services = uiServicesList; - } // Create - - private void BuildServicesDictionary() - { - ServicesDictionary = new Dictionary(Services.Count); - foreach (var service in Services) - { - ServicesDictionary.Add(service.Key, service); - } // foreach - } // BuildServicesDictionary - } // class UiBroadcastDiscovery -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs deleted file mode 100644 index 8b8c177a..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryDownloader.cs +++ /dev/null @@ -1,213 +0,0 @@ -using Etsi.Ts102034.v010501.XmlSerialization; -using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; -using Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery; -using IpTviewr.Common; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Cache; -using IpTviewr.UiServices.DvbStpClient; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Discovery -{ - public class UiBroadcastDiscoveryDownloader - { - #region EventArgs - public class CacheEventArgs : EventArgs - { - public CachedXmlDocument CachedDiscovery { get; set; } - - public CacheEventArgs() - { - // no op - } // default constructor - - public CacheEventArgs(CachedXmlDocument cachedDiscovery) - { - CachedDiscovery = cachedDiscovery; - } // constructor - } // class CacheEventArgs - - public class DownloadEventArgs : EventArgs - { - public UiDvbStpEnhancedDownloader Downloader { get; set; } - - public DownloadEventArgs() - { - // no op - } // default constructor - - public DownloadEventArgs(UiDvbStpEnhancedDownloader downloader) - { - Downloader = downloader; - } // constructor - } // class DownloadEventArgs - - public class MergeEventArgs: EventArgs - { - public UiBroadcastDiscovery Downloaded { get; set; } - public UiBroadcastDiscovery Current { get; set; } - - public MergeEventArgs() - { - // no-op - } // default constructor - - public MergeEventArgs(UiBroadcastDiscovery downloadedUiDiscovery, UiBroadcastDiscovery currentUiDiscovery) - { - Downloaded = downloadedUiDiscovery; - Current = currentUiDiscovery; - } // constructor - } // class MergeEventArgs - - public class AssignNumbersArgs: EventArgs - { - public UiBroadcastDiscovery Current { get; set; } - public PackageDiscoveryRoot PackageDiscovery { get; set; } - public UiServiceProvider ServiceProvider { get; set; } - public bool HighDefinitionPriority { get; set; } - - public AssignNumbersArgs() - { - // no-op - } // default constructor - - public AssignNumbersArgs(UiBroadcastDiscovery currentUiDiscovery, PackageDiscoveryRoot packageDiscovery, UiServiceProvider serviceProvider, bool highDefinitionPriority) - { - Current = currentUiDiscovery; - PackageDiscovery = packageDiscovery; - ServiceProvider = serviceProvider; - HighDefinitionPriority = highDefinitionPriority; - } // constructor - } // AssignNumbersArgs - #endregion - - public event EventHandler BeforeCacheLoad; - public event EventHandler AfterCacheLoad; - public event EventHandler BeforeDownload; - public event EventHandler AfterDownload; - public event EventHandler BeforeMerge; - public event EventHandler AfterMerge; - public event EventHandler BeforeAssignNumbers; - public event EventHandler AfterAssignNumbers; - public event EventHandler Exception; - - public UiBroadcastDiscovery Download(Form ownerForm, UiServiceProvider serviceProvider, UiBroadcastDiscovery currentUiDiscovery, bool fromCache, bool? highDefinitionPriority = null) - { - UiBroadcastDiscovery uiDiscovery; - - try - { - uiDiscovery = null; - if (fromCache) - { - OnBeforeCacheLoad(this, EventArgs.Empty); - var cachedDiscovery = AppUiConfiguration.Current.Cache.LoadXmlDocument("UiBroadcastDiscovery", serviceProvider.Key); - OnAfterCacheLoad(this, new CacheEventArgs(cachedDiscovery)); - - if (cachedDiscovery != null) uiDiscovery = cachedDiscovery.Document; - } // if - - if (uiDiscovery == null) - { - OnBeforeDownload(this, EventArgs.Empty); - var downloader = new UiDvbStpEnhancedDownloader() - { - Request = new UiDvbStpEnhancedDownloadRequest(2) - { - MulticastAddress = IPAddress.Parse(serviceProvider.Offering.Push[0].Address), - MulticastPort = serviceProvider.Offering.Push[0].Port, - Description = Properties.Texts.BroadcastObtainingList, - DescriptionParsing = Properties.Texts.BroadcastParsingList, - AllowXmlExtraWhitespace = false, - XmlNamespaceReplacer = NamespaceUnification.Replacer, -#if DEBUG - DumpToFolder = AppUiConfiguration.Current.Folders.Cache -#endif - }, - TextUserCancelled = Properties.Texts.UserCancelListRefresh, - TextDownloadException = Properties.Texts.BroadcastListUnableRefresh, - }; - downloader.Request.AddPayload(0x02, null, Properties.Texts.Payload02DisplayName, typeof(BroadcastDiscoveryRoot)); - downloader.Request.AddPayload(0x05, null, Properties.Texts.Payload05DisplayName, typeof(PackageDiscoveryRoot)); - downloader.Download(ownerForm); - OnAfterDownload(this, new DownloadEventArgs(downloader)); - if (!downloader.IsOk) return null; - - var xmlDiscovery = downloader.Request.Payloads[0].XmlDeserializedData as BroadcastDiscoveryRoot; - uiDiscovery = new UiBroadcastDiscovery(xmlDiscovery, serviceProvider.DomainName, downloader.Request.Payloads[0].SegmentVersion); - - OnBeforeMerge(this, new MergeEventArgs(uiDiscovery, currentUiDiscovery)); - UiBroadcastDiscoveryMergeResultDialog.Merge(ownerForm, currentUiDiscovery, uiDiscovery); - OnAfterMerge(this, new MergeEventArgs(uiDiscovery, currentUiDiscovery)); - - var packageDiscovery = downloader.Request.Payloads[1].XmlDeserializedData as PackageDiscoveryRoot; - highDefinitionPriority = highDefinitionPriority.HasValue ? highDefinitionPriority.Value : !AppUiConfiguration.Current.User.ChannelNumberStandardDefinitionPriority; - - OnBeforeAssignNumbers(this, new AssignNumbersArgs(uiDiscovery, packageDiscovery, serviceProvider, highDefinitionPriority.Value)); - UiServicesLogicalNumbers.AssignLogicalNumbers(uiDiscovery, packageDiscovery, serviceProvider.DomainName, highDefinitionPriority.Value); - OnAfterAssignNumbers(this, new AssignNumbersArgs(uiDiscovery, packageDiscovery, serviceProvider, highDefinitionPriority.Value)); - - AppUiConfiguration.Current.Cache.SaveXml("PackageDiscovery", serviceProvider.Key, 0, packageDiscovery); - AppUiConfiguration.Current.Cache.SaveXml("UiBroadcastDiscovery", serviceProvider.Key, uiDiscovery.Version, uiDiscovery); - } // if - - return uiDiscovery; - } - catch (Exception ex) - { - OnHandleException(this, new HandleExceptionEventArgs(ownerForm, null, Properties.Texts.BroadcastListUnableRefresh, ex)); - return null; - } // try-catch - } // Download - - protected void OnBeforeCacheLoad(object sender, EventArgs e) - { - BeforeCacheLoad?.Invoke(sender, e); - } // OnBeforeCacheLoad - - protected void OnAfterCacheLoad(object sender, CacheEventArgs e) - { - AfterCacheLoad?.Invoke(sender, e); - } // OnAfterCacheLoad - - protected void OnBeforeDownload(object sender, EventArgs e) - { - BeforeDownload?.Invoke(sender, e); - } // OnBeforeDownload - - protected void OnAfterDownload(object sender, DownloadEventArgs e) - { - AfterDownload?.Invoke(sender, e); - } // OnAfterDownload - - private void OnBeforeMerge(object sender, MergeEventArgs e) - { - BeforeMerge?.Invoke(sender, e); - } // OnBeforeMerge - - private void OnAfterMerge(object sender, MergeEventArgs e) - { - AfterMerge?.Invoke(sender, e); - } // OnAfterMerge - - private void OnBeforeAssignNumbers(object sender, AssignNumbersArgs e) - { - BeforeAssignNumbers?.Invoke(sender, e); - } // OnBeforeAssignNumbers - - private void OnAfterAssignNumbers(object sender, AssignNumbersArgs e) - { - AfterAssignNumbers?.Invoke(sender, e); - } // OnAfterAssignNumbers - - protected void OnHandleException(object sender, HandleExceptionEventArgs e) - { - Exception?.Invoke(sender, e); - } // OnHandleException - } // class UiBroadcastDiscoveryDownloader -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs deleted file mode 100644 index a9445238..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastDiscoveryMergeResult.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Discovery -{ - public class UiBroadcastDiscoveryMergeResult - { - public IList RemovedServices - { - get; - set; - } // RemovedServices - - public IList NewServices - { - get; - set; - } // NewServices - - public IList ChangedServices - { - get; - set; - } // ChangedServices - - public int CountNotChanged - { - get; - set; - } // CountNotChanged - - public bool IsEmpty - { - get; - set; - } // IsEmpty - } // class UiBroadcastDiscoveryMergeResult -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs deleted file mode 100644 index 29071e5e..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiBroadcastService.cs +++ /dev/null @@ -1,748 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization; -using Etsi.Ts102034.v010501.XmlSerialization.BroadcastDiscovery; -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using IpTviewr.Common; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Logos; -using IpTviewr.UiServices.Configuration.Schema2014; -using IpTviewr.UiServices.Configuration.Settings.Network; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Xml.Serialization; -using Property = System.Collections.Generic.KeyValuePair; - -namespace IpTviewr.UiServices.Discovery -{ - [Serializable] - [XmlType(TypeName="UI-BroadcastService", Namespace=SerializationCommon.XmlNamespace)] - public class UiBroadcastService - { - private string fieldDisplayOriginalName; - private string fieldDisplayShortName; - private string fieldDisplayDescription; - private string fieldDisplayGenre; - private string fieldDisplayGenreCode; - private string fieldDisplayParentalRating; - private string fieldDisplayParentalRatingCode; - private string fieldDisplayLockLevel; - private string fieldOriginalLocationUrl; - private string fieldDisplayServiceType; - [NonSerialized] - private ServiceLogo fieldLogo; - - /// Used by Serialization - public UiBroadcastService() - { - } // constructor - - public static string GetKey(TextualIdentifier serviceIdentifier, string defaultDomainName) - { - var domain = serviceIdentifier.DomainName ?? defaultDomainName; - - return string.Format(Properties.InvariantTexts.FormatServiceProviderKey, serviceIdentifier.ServiceName.ToLowerInvariant(), domain.ToLowerInvariant()); - } // CreateKey - - public UiBroadcastService(IpService service, string providerDomainName) - { - if (service == null) throw new ArgumentNullException("IpService service"); - - Data = service; - DomainName = (Data.TextualIdentifier.DomainName ?? providerDomainName).ToLowerInvariant(); - Key = GetKey(service.TextualIdentifier, providerDomainName); - } // constructor - - #region Data for UI display - - [XmlIgnore] - public bool IsHighDefinitionTv - { - get - { - switch (ServiceType) - { - case "17": // HD TV (MPEG-2) - case "25": // HD TV (AVC) - return true; - default: - return false; - } // switch - } // get - } // IsHighDefinitionTv - - [XmlIgnore] - public bool IsStandardDefinitionTv - { - get - { - switch (ServiceType) - { - case "1": // SD TV - case "22": // SD TV (AVC) - return true; - default: - return false; - } // switch - } // get - } // IsStandardDefinitionTv - - [XmlIgnore] - public bool IsTelevionService - { - get - { - switch (ServiceType) - { - case "1": // SD TV - case "22": // SD TV (AVC) - case "17": // HD TV (MPEG-2) - case "25": // HD TV (AVC) - return true; - default: - return false; - } // switch - } // get - } // IsTelevionService - - [XmlIgnore] - public string DisplayLogicalNumber - { - get { return (UserLogicalNumber ?? (ServiceLogicalNumber ?? Properties.Texts.ChannelNumberNone)); } - } // DisplayLogicalNumber - - [XmlIgnore] - public string DisplayName - { - get { return (UserDisplayName ?? DisplayOriginalName); } - } // DisplayName - - [XmlIgnore] - public string DisplayShortName - { - get - { - if (fieldDisplayShortName == null) - { - fieldDisplayShortName = GetDisplayShortName(); - } // if - - return fieldDisplayShortName; - } // get - } // DisplayShortName - - [XmlIgnore] - public string DisplayOriginalName - { - get - { - if (fieldDisplayOriginalName == null) - { - fieldDisplayOriginalName = GetDisplayOriginalName(); - } // if - - return fieldDisplayOriginalName; - } // get - } // DisplayOriginalName - - [XmlIgnore] - public string DisplayDescription - { - get - { - if (fieldDisplayDescription == null) - { - fieldDisplayDescription = GetDisplayDescription(); - } // if - - return fieldDisplayDescription; - } // get - } // DisplayDescription - - [XmlIgnore] - public string DisplayServiceType - { - get - { - if (fieldDisplayServiceType == null) - { - fieldDisplayServiceType = GetDisplayServiceType(); - } // if - - return fieldDisplayServiceType; - } // get - } // DisplayServiceType - - [XmlIgnore] - public string DisplayLocationUrl - { - get - { - var locationUrl = LocationUrl; - - return (locationUrl != null) ? locationUrl : Properties.Texts.NotProvidedValue; - } // get - } // DisplayLocationUrl - - [XmlIgnore] - public string DisplayGenre - { - get - { - if (fieldDisplayGenre == null) - { - fieldDisplayGenre = GetDisplayGenre(); - } // if - - return fieldDisplayGenre; - } // get - } // DisplayGenre - - [XmlIgnore] - public string DisplayGenreCode - { - get - { - if (fieldDisplayGenreCode == null) - { - fieldDisplayGenreCode = GetDisplayGenreCode(); - } // if - - return fieldDisplayGenreCode; - } // get - } // DisplayGenreCode - - [XmlIgnore] - public string DisplayParentalRating - { - get - { - if (fieldDisplayParentalRating == null) - { - fieldDisplayParentalRating = GetDisplayParentalRating(); - } // if - - return fieldDisplayParentalRating; - } // get - } // DisplayParentalRating - - [XmlIgnore] - public string DisplayParentalRatingCode - { - get - { - if (fieldDisplayParentalRatingCode == null) - { - fieldDisplayParentalRatingCode = GetDisplayParentalRatingCode(); - } // if - - return fieldDisplayParentalRatingCode; - } // get - } // DisplayParentalRatingCode - - [XmlIgnore] - public string DisplayLockLevel - { - get - { - if (fieldDisplayLockLevel == null) - { - fieldDisplayLockLevel = GetDisplayLockLevel(); - } // if - - return fieldDisplayLockLevel; - } // get - } // DisplayLockLevel - - #endregion - - #region UI additional data - - public string DomainName - { - get; - set; - } // DomainName - - [XmlIgnore] - public ServiceLogo Logo - { - get - { - if (fieldLogo == null) - { - fieldLogo = GetLogo(); - } // if - - return fieldLogo; - } - } // Logo - - public string Key - { - get; - set; - } // Key - - [DefaultValue(false)] - public bool IsInactive - { - get; - set; - } // IsInactive - - public string ServiceLogicalNumber - { - get; - set; - } // ServiceLogicalNumber - - #endregion - - #region User defined data - - [DefaultValue(false)] - public bool IsHidden - { - get; - set; - } // IsHidden - - [DefaultValue(0)] - public int LockLevel - { - get; - set; - } // LockLevel - - [DefaultValue(null)] - public string UserDisplayName - { - get; - set; - } // UserDisplayName - - [DefaultValue(null)] - public string UserLogicalNumber - { - get; - set; - } // UserLogicalNumber - - #endregion - - #region Shortcuts for underlying BroadcastService data - - [XmlElement(Namespace = IpService.Namespace)] - public IpService Data - { - get; - set; - } // Data - - [XmlIgnore] - public string ServiceName - { - get { return Data.TextualIdentifier.ServiceName; } - } // ServiceName - - [XmlIgnore] - public string FullServiceName - { - get { return ServiceName + "." + DomainName; } - } // FullServiceName - - [XmlIgnore] - public TextualIdentifier ReplacementService - { - get - { - var si = Data.ServiceInformation; - if (si == null) return null; - - var replacements = si.ReplacementService; - if ((replacements == null) || (replacements.Length == 0)) return null; - - var q = from r in replacements - let ti = r.TextualIdentifier - where ti != null - select ti; - var replacement = q.FirstOrDefault(); - - return replacement; - } // get - } // ReplacementService - - [XmlIgnore] - public string ServiceType - { - get { return (Data.ServiceInformation == null) ? null : Data.ServiceInformation.ServiceType; } - } // ServiceType - - [XmlIgnore] - public string LocationUrl - { - get - { - var networkSettings = NetworkSettingsRegistration.Settings; - if ((networkSettings == null) || (networkSettings.MulticastProxy == null) || (networkSettings.MulticastProxy.IsEnabled == false)) - { - return OriginalLocationUrl; - } // if - - return GetProxiedLocationUrl(networkSettings.MulticastProxy); - } // get - } // LocationUrl - - [XmlIgnore] - public string OriginalLocationUrl - { - get - { - if (fieldOriginalLocationUrl == null) - { - fieldOriginalLocationUrl = GetLocationUrl(); - } // if - - return fieldOriginalLocationUrl; - } // get - } // OriginalLocationUrl - - #endregion - - public bool IsSameService(UiBroadcastService service) - { - if (this.Key != service.Key) return false; - if (this.LocationUrl != service.LocationUrl) return false; - if (this.DisplayOriginalName != service.DisplayOriginalName) return false; - if (this.ServiceType != service.ServiceType) return false; - - return true; - } // IsSameService - - // v1.0 RC 0: code moved from ChannelList > ChanneListForm.cs > DumpProperties(UiBroadcastService) - - public IEnumerable DumpProperties() - { - var properties = new List(); - - properties.Add(new Property("Name (display)", DisplayName)); - properties.Add(new Property("Description (display)", DisplayDescription)); - properties.Add(new Property("Type (display)", DisplayServiceType)); - properties.Add(new Property("Location URL (display)", DisplayLocationUrl)); - properties.Add(new Property("Is active", (!IsInactive).ToString())); - - if (Data.ServiceLocation == null) - { - properties.Add(new Property("Service location", null)); - } - else - { - if (Data.ServiceLocation.IpMulticastAddress == null) - { - properties.Add(new Property("Service location (multicast)", null)); - } - else - { - properties.Add(new Property("Service location (multicast)", Data.ServiceLocation.IpMulticastAddress.Url)); - } // if-else - - if (Data.ServiceLocation.RtspUrl == null) - { - properties.Add(new Property("Service location (RTSP)", null)); - } - else - { - properties.Add(new Property("Service location (RTSP control URL)", Data.ServiceLocation.RtspUrl.ControlUrl)); - properties.Add(new Property("Service location (RTSP)", Data.ServiceLocation.RtspUrl.Value)); - } // if - - properties.Add(new Property("Service location (broadcast system)", Data.ServiceLocation.BroadcastSystem)); - } // if-else - - if (Data.TextualIdentifier == null) - { - properties.Add(new Property("Textual identifier", null)); - } - else - { - properties.Add(new Property("Identifier: Service name", Data.TextualIdentifier.ServiceName)); - properties.Add(new Property("Identifier: Domain", Data.TextualIdentifier.DomainName)); - } // if-else - - if ((Data.DvbTriplet == null) || (Data.DvbTriplet.Length == 0)) - { - properties.Add(new Property("DVB Triplet", null)); - } - else - { - foreach (var triplet in Data.DvbTriplet) - { - properties.Add(new Property("DVB Triplet", string.Format("OrigNetId='{0}', TSId='{1}', ServiceId='{2}'", - triplet.OrigNetId, triplet.TSId, triplet.ServiceId))); - } // foreach - } // if-else - - properties.Add(new Property("Max bitarate", Data.MaxBitrate)); - - if (Data.ServiceInformation == null) - { - properties.Add(new Property("Service information", null)); - } - else - { - properties.Add(new Property("Service type", Data.ServiceInformation.ServiceType)); - properties.Add(new Property("Primary information source", Data.ServiceInformation.PrimaryServiceInformationSource.ToString())); - if (Data.ServiceInformation.Name == null) - { - properties.Add(new Property("Name", null)); - } - else - { - foreach (var txt in Data.ServiceInformation.Name) - { - properties.Add(Utils.GetLanguageProperty("Name", txt)); - } // foreach - } // if-else - if (Data.ServiceInformation.Description == null) - { - properties.Add(new Property("Description", null)); - } - else - { - foreach (var txt in Data.ServiceInformation.Description) - { - properties.Add(Utils.GetLanguageProperty("Description", txt)); - } // foreach - } // if-else - - if ((Data.ServiceInformation.ServiceDescriptionLocation == null) || (Data.ServiceInformation.ServiceDescriptionLocation.Length == 0)) - { - properties.Add(new Property("Description location", null)); - } - else - { - foreach (var location in Data.ServiceInformation.ServiceDescriptionLocation) - { - properties.Add(new Property("Description location", location.Value)); - } // foreach - } // if-else - if (Data.ServiceInformation.ContentGenre == null) - { - properties.Add(new Property("Content genre", null)); - } - else - { - var buffer = new StringBuilder(); - foreach (var b in Data.ServiceInformation.ContentGenre) - { - buffer.AppendFormat("{0:X2} ", b); - } // foreach - properties.Add(new Property("Content genre", buffer.ToString())); - } // if-else - - // ServiceInformation.ReplacementService - if (Data.ServiceInformation.ReplacementService == null) - { - properties.Add(new Property("Replacement service", null)); - } - else - { - foreach (var replacement in Data.ServiceInformation.ReplacementService) - { - var triplet = replacement.DvbTriplet as DvbTriplet; - if (triplet != null) - { - properties.Add(new Property("Replacement service", string.Format("DVB Triplet: OrigNetId='{0}', TSId='{1}', ServiceId='{2}'", - triplet.OrigNetId, triplet.TSId, triplet.ServiceId))); - } // if - var textual = replacement.TextualIdentifier; - if (textual != null) - { - properties.Add(new Property("Replacement service", string.Format("Identifier: Name='{0}', Domain='{1}'", - textual.ServiceName, textual.DomainName))); - - } // if - if ((triplet == null) && (textual == null)) - { - properties.Add(new Property("Replacement service", null)); - } // if - properties.Add(new Property("Replacement type", replacement.Kind)); - } // foreach - } // if-else - - // ServiceInformation.MosaicDescription - properties.Add(new Property("Has mosaic description", (Data.ServiceInformation.MosaicDescription != null).ToString())); - - // ServiceInformation.AnnouncementSupport - properties.Add(new Property("Has announcement support", (Data.ServiceInformation.AnnouncementSupport != null).ToString())); - - // ServiceInformation.ExtraData - properties.Add(new Property("Has out-of-schema data", (Data.ServiceInformation.ExtraData != null).ToString())); - } // if-else - - // AudioAttibutes - properties.Add(new Property("Has audio details", (Data.AudioAttributes != null).ToString())); - - // VideoAttibutes - properties.Add(new Property("Has video details", (Data.VideoAttributes != null).ToString())); - - return properties; - } // DumpProperties - - internal void TransferMergeProperties(UiBroadcastService service) - { - IsInactive = service.IsInactive; - IsHidden = service.IsHidden; - LockLevel = service.LockLevel; - UserDisplayName = service.UserDisplayName; - UserLogicalNumber = service.UserLogicalNumber; - } // TransferMergeProperties - - #region Data extraction for underlying BroadcastService - - private string GetDisplayOriginalName() - { - if (Data.ServiceInformation != null) - { - var text = Data.ServiceInformation.Name.SafeGetLanguageValue(AppUiConfiguration.Current.User.PreferredLanguagesList, true, null); - if (text != null) return text; - } // if - - return string.Format(Properties.Texts.FormatBroadcastUnknownDisplayName, Data.TextualIdentifier.ServiceName, DomainName); - } // GetDisplayOriginalName - - private string GetDisplayShortName() - { - if (Data.ServiceInformation != null) - { - var text = Data.ServiceInformation.ProprietaryShortName.SafeGetLanguageValue(AppUiConfiguration.Current.User.PreferredLanguagesList, true, null); - if (text != null) return text; - } // if - - return Properties.Texts.NotProvidedValue; - } // GetDisplayShortName - - private string GetDisplayDescription() - { - if (Data.ServiceInformation != null) - { - var text = Data.ServiceInformation.Description.SafeGetLanguageValue(AppUiConfiguration.Current.User.PreferredLanguagesList, true, null); - if (text != null) return text; - } // if - - return Properties.Texts.BroadcastUnknownDisplayDescription; - } // GetDisplayDescription - - private string GetLocationUrl() - { - if (Data.ServiceLocation == null) return null; - - return Data.ServiceLocation.LocationUrl; - } // GetLocationUrl - - private string GetProxiedLocationUrl(MulticastProxy proxy) - { - if (Data == null) return null; - if (Data.ServiceLocation == null) return null; - if (Data.ServiceLocation.IpMulticastAddress != null) - { - var multicast = Data.ServiceLocation.IpMulticastAddress; - return proxy.GetProxiedLocationUrl(multicast.Protocol, multicast.Address, multicast.Port); - } // if - if (Data.ServiceLocation.RtspUrl != null) return Data.ServiceLocation.RtspUrl.Value; - return null; - } // GetProxiedLocationUrl - - private string GetDisplayServiceType() - { - if (Data.ServiceInformation != null) - { - string serviceTypeDescription; - string serviceType; - - serviceType = ServiceType; - if (!AppUiConfiguration.Current.DescriptionServiceTypes.TryGetValue(serviceType, out serviceTypeDescription)) - { - serviceTypeDescription = string.Format(Properties.Texts.FormatServiceTypeIdUnknown, serviceType); - } // if - - return serviceTypeDescription; - } - else - { - return Properties.Texts.NotProvidedValue; - } // if-else - } // GetDisplayServiceType - - private string GetDisplayGenre() - { - if ((Data.ServiceInformation != null) && (Data.ServiceInformation.ProprietaryGenre != null)) - { - return Data.ServiceInformation.ProprietaryGenre.Name; - } // if - - return Properties.Texts.NotProvidedValue; - } // GetDisplayGenre - - private string GetDisplayGenreCode() - { - if ((Data.ServiceInformation != null) && (Data.ServiceInformation.ProprietaryGenre != null)) - { - var code = Data.ServiceInformation.ProprietaryGenre.Code; - if (code.StartsWith("urn:miviewtv:cs:GenreCS:", StringComparison.InvariantCultureIgnoreCase)) - { - return code.Substring(21); - } // if - return code; - } // if - - return Properties.Texts.NotProvidedValue; - } // GetDisplayGenreCode - - private string GetDisplayParentalRating() - { - if ((Data.ServiceInformation != null) && (Data.ServiceInformation.ProprietaryParentalGuidance != null) && (Data.ServiceInformation.ProprietaryParentalGuidance.ParentalRating != null)) - { - return Data.ServiceInformation.ProprietaryParentalGuidance.ParentalRating.Name[0].Value; - } // if - - return Properties.Texts.NotProvidedValue; - } // GetDisplayParentalRating - - private string GetDisplayParentalRatingCode() - { - if ((Data.ServiceInformation != null) && (Data.ServiceInformation.ProprietaryParentalGuidance != null) && (Data.ServiceInformation.ProprietaryParentalGuidance.ParentalRating != null)) - { - var code = Data.ServiceInformation.ProprietaryParentalGuidance.ParentalRating.TermUrl; - if (code.StartsWith("urn:dvb:metadata:cs:ParentalGuidanceCS:", StringComparison.InvariantCultureIgnoreCase)) - { - return code.Substring(36); - } // if - return code; - } // if - - return Properties.Texts.NotProvidedValue; - } // GetDisplayParentalRatingCode - - private string GetDisplayLockLevel() - { - // TODO: GetDisplayLockLevel - return Properties.Texts.NotProvidedValue; - } // GetDisplayLockLevel - - private ServiceLogo GetLogo() - { - return AppUiConfiguration.Current.ServiceLogoMappings.Get(Data.TextualIdentifier.DomainName, - DomainName, - Data.TextualIdentifier.ServiceName, - ServiceType); - } // GetLogo - - #endregion - } // class UiBroadcastService -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiServiceProvider.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiServiceProvider.cs deleted file mode 100644 index 58a6718c..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiServiceProvider.cs +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization; -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Logos; -using IpTviewr.UiServices.Configuration.Schema2014; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Xml.Serialization; -using Property = System.Collections.Generic.KeyValuePair; - -namespace IpTviewr.UiServices.Discovery -{ - public class UiServiceProvider - { - private string fieldDisplayName; - private string fieldDisplayDescription; - private ProviderLogo fieldLogo; - - public UiServiceProvider(ServiceProvider provider) - { - if (provider == null) throw new ArgumentNullException("ServiceProvider provider"); - - Data = provider; - Key = provider.DomainName.ToLowerInvariant(); - } // constructor - - public ServiceProvider Data - { - get; - private set; - } // Data - - public string DomainName - { - get { return Data.DomainName; } - } // DomainName - - public ProviderOffering Offering - { - get { return Data.Offering; } - } // Offering - - public string DisplayName - { - get - { - if (fieldDisplayName == null) - { - fieldDisplayName = GetDisplayName(); - } // if - - return fieldDisplayName; - } // get - } // DisplayName - - public string DisplayDescription - { - get - { - if (fieldDisplayDescription == null) - { - fieldDisplayDescription = GetDisplayDescription(); - } // if - - return fieldDisplayDescription; - } // get - } // DisplayDescription - - public string Key - { - get; - private set; - } // Key - - public ProviderLogo Logo - { - get - { - if (fieldLogo == null) - { - fieldLogo = GetLogo(); - } // if - - return fieldLogo; - } - } // Logo - - // v1.0 RC 0: code moved from ChannelList > ChanneListForm.cs > DumpProperties(UiServiceProvider) - - public IEnumerable DumpProperties() - { - var properties = new List(); - - MultilingualText text; - - text = Data.Name.SafeGetLanguageItem(AppUiConfiguration.Current.User.PreferredLanguagesList, true); - properties.Add(Utils.GetLanguageProperty("Name (display)", text)); - text = Data.Description.SafeGetLanguageItem(AppUiConfiguration.Current.User.PreferredLanguagesList, true); - properties.Add(Utils.GetLanguageProperty("Description (display)", text)); - properties.Add(new Property("Domain name", DomainName)); - properties.Add(new Property("Logo URI", Data.LogoUrl)); - - if (Offering.Push != null) - { - foreach (var push in Offering.Push) - { - if (push.PayloadId == null) - { - properties.Add(new Property("Push offering", - string.Format("{0}:{1}", push.Address, push.Port))); - } - else - { - properties.Add(new Property("Push offering", - string.Format("{0}:{1} with {2} payloads", push.Address, push.Port, push.PayloadId.Length))); - } // if-else - } // foreach push - } - else - { - properties.Add(new Property("Push offering list", null)); - } // if-else - - if (Offering.Pull != null) - { - foreach (var pull in Offering.Pull) - { - if (pull.PayloadId == null) - { - properties.Add(new Property("Pull offering", - string.Format("{0}", pull.Location))); - } - else - { - properties.Add(new Property("Pull offering", - string.Format("{0} with {1} payloads", pull.Location, pull.PayloadId.Length))); - } // if-else - } // foreach pull - } - else - { - properties.Add(new Property("Pull offering list", null)); - } // if-else - - if (Data.Name != null) - { - foreach (var txt in Data.Name) - { - properties.Add(Utils.GetLanguageProperty("Name", txt)); - } // foreach - } - else - { - properties.Add(new Property("Name list", null)); - } // if-else - - if (Data.Description != null) - { - foreach (var txt in Data.Description) - { - properties.Add(Utils.GetLanguageProperty("Description", txt)); - } // foreach - } - else - { - properties.Add(new Property("Description list", null)); - } // if-else - - return properties; - } // DumpProperties - - private string GetDisplayName() - { - string friendlyName; - string result; - - result = Data.Name.SafeGetLanguageValue(AppUiConfiguration.Current.User.PreferredLanguagesList, AppUiConfiguration.Current.DisplayPreferredOrFirst, null); - if (result != null) return result; - - if (AppUiConfiguration.Current.ContentProvider.FriendlyNames.ServiceProvider.TryGetValue(Data.DomainName, out friendlyName)) - { - return string.Format(Properties.Texts.FormatProviderFriendlyDisplayName, friendlyName, Data.DomainName.ToLowerInvariant()); - } - else - { - return string.Format(Properties.Texts.FormatProviderUnknownDisplayName, Data.DomainName.ToLowerInvariant()); - } // if-else - } // GetDisplayName - - private string GetDisplayDescription() - { - string result; - - result = Data.Description.SafeGetLanguageValue(AppUiConfiguration.Current.User.PreferredLanguagesList, AppUiConfiguration.Current.DisplayPreferredOrFirst, null); - if (result != null) return result; - - return Properties.Texts.ProviderUnknownDisplayDescription; - } // GetDisplayDescription - - private ProviderLogo GetLogo() - { - return AppUiConfiguration.Current.ProviderLogoMappings.Get(DomainName); - } // GetLogo - } // class UiServiceProvider -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/UiServicesLogicalNumbers.cs b/1.5 'Kruger 60'/UiServices.Discovery/UiServicesLogicalNumbers.cs deleted file mode 100644 index f9e2deb9..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/UiServicesLogicalNumbers.cs +++ /dev/null @@ -1,251 +0,0 @@ -using Etsi.Ts102034.v010501.XmlSerialization.PackageDiscovery; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.Discovery -{ - public class UiServicesLogicalNumbers - { - UiBroadcastDiscovery UiDiscovery; - PackageDiscoveryRoot PackageDiscovery; - string DefaultDomain; - bool HighDefinitionPriority; - - private class LogicalNumberChannels - { - public ServicesCount SD = new ServicesCount(); - public ServicesCount HD = new ServicesCount(); - - public void Add(UiBroadcastService uiService) - { - var servicesCount = (IsHighDefinitionTv(uiService)) ? HD : SD; - servicesCount.Add(uiService); - } // Add - - public IEnumerable GetSortedServices(bool highDefinitionPriority) - { - var list1 = highDefinitionPriority ? HD.GetSortedServices() : SD.GetSortedServices(); - var list2 = highDefinitionPriority ? SD.GetSortedServices() : HD.GetSortedServices(); - - return list1.Concat(list2); - } // GetSortedServices - } // LogicalNumberChannels - - private class ServicesCount - { - private IDictionary Services = new Dictionary(); - - public void Add(UiBroadcastService uiService) - { - int count; - - if (Services.TryGetValue(uiService, out count)) - { - Services[uiService] = count + 1; - } - else - { - count = 1; - Services.Add(uiService, count); - } // if-else - } // Add - - public IEnumerable GetSortedServices() - { - var q = from entry in Services - orderby entry.Value descending - select entry.Key; - - return q; - } // GetSortedServices - } // ServicesCount - - public static void ClearLogicalNumbers(UiBroadcastDiscovery uiDiscovery) - { - foreach (var service in uiDiscovery.Services) - { - service.ServiceLogicalNumber = null; - } // foreach service - } // ClearLogicalNumbers - - public static void AssignLogicalNumbers(UiBroadcastDiscovery uiDiscovery, PackageDiscoveryRoot packageDiscovery, string defaultDomain, bool highDefinitionPriority = true) - { - var aux = new UiServicesLogicalNumbers(uiDiscovery, packageDiscovery, defaultDomain, highDefinitionPriority); - aux.Assign(); - } // AssignLogicalNumbers - - public static bool IsHighDefinitionTv(UiBroadcastService uiService) - { - // TODO: get this information in a content provider agnostic way - // Create IContentProvider and a default implementation - // Specific details of movistar+ will be provided by an overriden version of the default implementation - - // movistar+ specific - if (uiService.IsHighDefinitionTv) return true; - if (uiService.ServiceType == "1") return false; // 1 == SD TV MPEG-2 - if (uiService.ServiceType == "22") - { - if (uiService.ReplacementService != null) return true; - } // if - - return false; - } // IsHighDefinitionTv - - private UiServicesLogicalNumbers (UiBroadcastDiscovery uiDiscovery, PackageDiscoveryRoot packageDiscovery, string defaultDomain, bool highDefinitionPriority, bool clear = false) - { - UiDiscovery = uiDiscovery; - PackageDiscovery = packageDiscovery; - DefaultDomain = defaultDomain; - HighDefinitionPriority = highDefinitionPriority; - } // constructor - - private void Assign() - { - var packages = PackageDiscovery.GetPackages(); - - // step 1: create list of logical numbers and the associated channels - var numbers = GetNumbersList(packages); - - // step 2: count channels - var cumulativeNumbers = GetCumulativeNumbers(numbers); - - // step 3: assign number to channels - AssignNumbers(cumulativeNumbers); - - // step 4: assign number to unreferenced channels - AssignUnreferenced(); - } // Assign - - private Dictionary> GetNumbersList(IEnumerable packages) - { - var numbers = new Dictionary>(); - - foreach (var package in packages) - { - foreach (var service in package.Services) - { - if (service.TextualIdentifiers == null) continue; // no services assigned to logical number - - foreach (var textualIdentifier in service.TextualIdentifiers) - { - IList listUiServices; - - var uiServiceKey = UiBroadcastService.GetKey(textualIdentifier, DefaultDomain); - var uiService = UiDiscovery.TryGetService(uiServiceKey); - if (uiService == null) continue; // service not found in global list of services - - // get list of services assigned to logical number, or create if not found - if (!numbers.TryGetValue(service.LogicalChannelNumber, out listUiServices)) - { - listUiServices = new List(); - numbers.Add(service.LogicalChannelNumber, listUiServices); - } // if - - listUiServices.Add(uiService); - } /// foreach textualIdentifier - } // foreach service - } // foreach package - - return numbers; - } // GetNumbersList - - private Dictionary GetCumulativeNumbers(Dictionary> numbers) - { - var cumulativeNumbers = new Dictionary(numbers.Count); - - foreach (var entry in numbers) - { - var temp = new LogicalNumberChannels(); - cumulativeNumbers.Add(entry.Key, temp); - foreach (var uiService in entry.Value) - { - temp.Add(uiService); - } // foreach - } // foreach entry - - return cumulativeNumbers; - } // GetCumulativeNumbers - - private void AssignNumbers(Dictionary cumulativeNumbers) - { - // TODO: feature request: give priority to user-overriden logical numbers, treat them as assigned by packges, or ignore them - - var numbers = new Dictionary(UiDiscovery.Services.Count); - - foreach (var entry in cumulativeNumbers) - { - string logicalNumber; - int number; - - // format logical number - if (int.TryParse(entry.Key, out number)) - { - logicalNumber = string.Format("{0:000}", number); - } - else - { - logicalNumber = entry.Key; - } // if-else - - // assign numbers, in order of priority - var uiServices = entry.Value.GetSortedServices(HighDefinitionPriority); - foreach (var uiService in uiServices) - { - if (uiService == null) continue; - AssignNumber(uiService, logicalNumber, numbers); - } // foreach - } // foreach entry - }// AssignNumbers - - private void AssignNumber(UiBroadcastService uiService, string logicalNumber, IDictionary numbers) - { - string serviceLogicalNumber; - int count; - - if (!numbers.TryGetValue(logicalNumber, out count)) - { - // number not assigned; assign direct logical number - serviceLogicalNumber = logicalNumber; - uiService.ServiceLogicalNumber = serviceLogicalNumber; - count = 0; - } - else - { - // number already assigned - var prefix = IsHighDefinitionTv(uiService) ? "H" : "S"; - serviceLogicalNumber = prefix + logicalNumber; - - // avoid duplicated H/S numbers - if (!numbers.TryGetValue(serviceLogicalNumber, out count)) - { - // H/S number not assigned; assign H/S logical number - count = 0; - uiService.ServiceLogicalNumber = serviceLogicalNumber; - } - else - { - // H/S number already assign; create unique H/S number by adding a sufix leter - uiService.ServiceLogicalNumber = string.Format("{0}{1}", serviceLogicalNumber, (char)('a' + (count - 1))); - } // if-else - } // if-else - - // increase count - numbers[serviceLogicalNumber] = count + 1; - } // AssignNumber - - private void AssignUnreferenced() - { - var noNumber = 1; - foreach (var uiService in UiDiscovery.Services) - { - if (uiService.ServiceLogicalNumber == null) - { - uiService.ServiceLogicalNumber = string.Format("X{0:000}", noNumber++); - continue; - } // if - } // foreach uiService - } // AssignUnreferenced - } // class UiServicesLogicalNumbers -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Discovery/Utils.cs b/1.5 'Kruger 60'/UiServices.Discovery/Utils.cs deleted file mode 100644 index 09770450..00000000 --- a/1.5 'Kruger 60'/UiServices.Discovery/Utils.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization.Common; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Property = System.Collections.Generic.KeyValuePair; - -namespace IpTviewr.UiServices.Discovery -{ - internal class Utils - { - public static Property GetLanguageProperty(string name, MultilingualText text) - { - if (text == null) return new Property(name, null); - if (text.Language == null) return new Property(name, text.Value); - return new Property(string.Format("{0} ({1})", name, text.Language), text.Value); - } // GetLanguageProperty - } // internal class Utils -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs deleted file mode 100644 index 3f900679..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpEnhancedDownloadDialog.cs +++ /dev/null @@ -1,474 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Telemetry; -using IpTviewr.DvbStp.Client; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public partial class DvbStpEnhancedDownloadDialog : Form - { - private string FormatProgressPercentage; - private string FormatEllapsedTime; - private char DataReceptionSymbol; - private int DataReceptionMarquee; - private BackgroundWorker Worker; - private bool AllowFormToClose; - private Action CancelDownloadRequest; - private DateTime StartTime; - private double[] PayloadProgress; - private double GlobalProgress; - - private class SegmentProgressReport - { - public int ReceivedSections; - public int SectionCount; - public int Index; - } // SegmentProgressReport - - public UiDvbStpEnhancedDownloadRequest Request - { - get; - set; - } // Request - - public UiDvbStpEnhancedDownloadResponse Response - { - get; - private set; - } // Response - - public string TelemetryScreenName - { - get; - private set; - } // TelemetryScreenName - - public DvbStpEnhancedDownloadDialog() - { - InitializeComponent(); - } // constructor - - public DvbStpEnhancedDownloadDialog(UiDvbStpEnhancedDownloadRequest request) - : this() - { - Request = request; - } // constructor - - #region Dialog events - - private void Dialog_Load(object sender, EventArgs e) - { - if (Request == null) throw new ArgumentNullException(); - - TelemetryScreenName = string.Format("{0}: {1}:{2}", this.GetType().Name, Request.MulticastAddress, Request.MulticastPort); - - if (!string.IsNullOrEmpty(Request.Description)) - { - labelDownloadingPayloadName.Text = Request.Description; - } // if - labelDownloadSource.Text = string.Format(labelDownloadSource.Text, Request.MulticastAddress, Request.MulticastPort); - FormatProgressPercentage = labelProgressPct.Text; - FormatEllapsedTime = labelEllapsedTime.Text; - DataReceptionSymbol = labelDataReception.Text[0]; - - labelProgressPct.Text = null; - labelDataReception.Text = null; - labelReceiving.Visible = false; - labelEllapsedTime.Text = null; - - foreach (var segment in Request.Payloads) - { - var displayName = segment.DisplayName ?? string.Format("Payload 0x{0:X2}", segment.PayloadId); - var item = new ListViewItem(displayName); - item.SubItems.Add("-"); - item.SubItems.Add("-"); - item.ImageKey = "Waiting"; - item.Tag = segment; - listViewPayloads.Items.Add(item); - } // foreach - - PayloadProgress = new double[Request.Payloads.Count]; - - Response = new UiDvbStpEnhancedDownloadResponse(); - } // Dialog_Load - - private void Dialog_Shown(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(TelemetryScreenName); - StartDownload(); - } // Dialog_Shown - - private void Dialog_FormClosing(object sender, FormClosingEventArgs e) - { - if ((e.CloseReason != CloseReason.UserClosing) && (e.CloseReason != CloseReason.None)) return; - - if (AllowFormToClose) return; - - e.Cancel = true; - CancelDownload(); - } // Dialog_FormClosing - - #endregion - - #region Controls events - - private void buttonRequestCancel_Click(object sender, EventArgs e) - { - // race condition - if (CancelDownloadRequest == null) - { - MessageBox.Show(this, Properties.Texts.UnableCancelDownloadCaption, - Properties.Texts.UnableCancelDownloadMessage, - MessageBoxButtons.OK, MessageBoxIcon.Warning); - return; - } // if - - CancelDownload(); - } // buttonRequestCancel_Click - - private void timerEllapsed_Tick(object sender, EventArgs e) - { - DisplayEllapsedTime(); - } // timerEllapsed_Tick - - private void timerClose_Tick(object sender, EventArgs e) - { - CloseForm(); - } // timerClose_Tick - - #endregion - - private void StartDownload() - { - StartTime = DateTime.Now; - timerEllapsed.Enabled = true; - DisplayEllapsedTime(); - - Worker = new BackgroundWorker(); - Worker.WorkerReportsProgress = true; - Worker.WorkerSupportsCancellation = true; - Worker.ProgressChanged += Worker_ProgressChanged; - Worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - Worker.DoWork += Worker_DoWork; - Worker.RunWorkerAsync(Thread.CurrentThread); - } // StartDownload - - private void CancelDownload() - { - buttonRequestCancel.Enabled = false; - labelDownloadingPayloadName.Text = Properties.Texts.CancellingDownloadOperation; - - Response.UserCancelled = true; - Worker.CancelAsync(); - CancelDownloadRequest(); - } // CancelDownload - - private void StartClose() - { - if (Request.DialogCloseDelay <= 0) CloseForm(); - - timerClose.Interval = Request.DialogCloseDelay; - timerClose.Enabled = true; - } // private StartClose - - private void CloseForm() - { - timerClose.Enabled = false; - AllowFormToClose = true; - Close(); - } // CloseForm - - private void DisplayEllapsedTime() - { - TimeSpan ellapsed = DateTime.Now - StartTime; - TimeSpan ellapsedRounded = new TimeSpan(ellapsed.Days, ellapsed.Hours, ellapsed.Minutes, ellapsed.Seconds); - - labelEllapsedTime.Text = string.Format(FormatEllapsedTime, ellapsedRounded); - } // DisplayEllapsedTime - - #region Worker events - - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - timerEllapsed.Enabled = false; - Worker.Dispose(); - Worker = null; - - Response.UserCancelled = e.Cancelled; - Response.DownloadException = e.Error; - if ((!e.Cancelled) && (e.Error == null)) - { - Response.IsOk = true; - } // if - - StartClose(); - } // Worker_RunWorkerCompleted - - private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - switch (e.ProgressPercentage) - { - case -1: - DisplayDataReception(e); - break; - case 0: - { - progressBar.Style = ProgressBarStyle.Continuous; - progressBar.Value = 0; - labelProgressPct.Text = string.Format(FormatProgressPercentage, 0); - } - break; - case 10: - case 15: - case 18: - case 19: - DisplaySegmentProgress(e); - break; - case 999: - DisplayParsingData(e); - break; - } // switch - } // Worker_ProgressChanged - - private void DisplayDataReception(ProgressChangedEventArgs e) - { - DataReceptionMarquee++; - DataReceptionMarquee %= 6; - labelReceiving.Visible = true; - labelDataReception.Text = new string(DataReceptionSymbol, DataReceptionMarquee); - } // DisplayDataReception - - private void DisplaySegmentProgress(ProgressChangedEventArgs e) - { - var report = e.UserState as SegmentProgressReport; - var item = listViewPayloads.Items[report.Index]; - DisplaySegmentProgress(item, report); - - switch (e.ProgressPercentage) - { - case 10: - item.ImageKey = "Downloading"; - break; - case 18: - item.ImageKey = "Restarted"; - break; - case 19: - item.ImageKey = "Completed"; - break; - } // switch - } // DisplaySegmentProgress - - private void DisplaySegmentProgress(ListViewItem item, SegmentProgressReport report) - { - var progress = report.ReceivedSections / ((double)report.SectionCount); - - item.SubItems[1].Text = string.Format(Properties.Texts.DownloadFragmentProgressFormat, report.ReceivedSections, report.SectionCount); - item.SubItems[2].Text = string.Format(Properties.Texts.DownloadSegmentProgressFormat, progress); - - GlobalProgress -= PayloadProgress[report.Index]; - GlobalProgress += progress; - PayloadProgress[report.Index] = progress; - - var pct = GlobalProgress / PayloadProgress.Length; - labelProgressPct.Text = string.Format(FormatProgressPercentage, pct); - progressBar.Value = (int)(pct * 1000); - } // DisplaySegmentProgress - - private void DisplayParsingData(ProgressChangedEventArgs e) - { - labelDownloadingPayloadName.Text = Request.DescriptionParsing; - labelReceiving.Text = Properties.Texts.CompletedDownloadDataReception; - labelReceiving.Font = new Font(labelReceiving.Font, FontStyle.Bold); - labelDataReception.Text = null; - labelDownloadSource.Visible = false; - } // DisplayParsingData - - #endregion - - #region BackgroundWorker DoWork - - void Worker_DoWork(object sender, DoWorkEventArgs e) - { - DvbStpEnhancedClient stpClient; - - InitWorker(e); - - stpClient = null; - try - { - stpClient = CreateStpClient(); - stpClient.DownloadPayloads(GetDvbStpClientSegmentInfoList()); - - if (!stpClient.CancelRequested) - { -#if DEBUG - DumpPayloads(); -#endif - Deserialize(); - } // if - } - finally - { - e.Cancel = Worker.CancellationPending; - if (stpClient != null) - { - stpClient.Close(); - } // if - } // finally - } // Worker_DoWork - - private void InitWorker(DoWorkEventArgs e) - { - // set worker thread name (for debugging purposes) - var currentThread = Thread.CurrentThread; - currentThread.Name = "DvbStpEnhancedDownloadDialog BackgroundWorker"; - - // inherit parent thead culture settings - var parentThread = e.Argument as Thread; - if (parentThread != null) - { - currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case - currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread - } // if - } // InitWorker - - private DvbStpEnhancedClient CreateStpClient() - { - var stpClient = new DvbStpEnhancedClient(Request.MulticastAddress, Request.MulticastPort); - CancelDownloadRequest = stpClient.CancelRequest; - - stpClient.ReceiveDatagramTimeout = Request.ReceiveDatagramTimeout; - stpClient.NoDataTimeout = Request.NoDataTimeout; - stpClient.DownloadStarted += StpClient_DownloadStarted; - stpClient.SectionReceived += StpClient_SectionReceived; - stpClient.SegmentDownloadStarted += StpClient_SegmentDownloadStarted; - stpClient.SegmentSectionReceived += StpClient_SegmentSectionReceived; - stpClient.SegmentDownloadRestarted += StpClient_SegmentDownloadRestarted; - stpClient.SegmentDownloadCompleted += StpClient_SegmentDownloadCompleted; - - return stpClient; - } // CreateStpClient - - private IList GetDvbStpClientSegmentInfoList() - { - var list = new List(Request.Payloads.Count); - foreach (var item in Request.Payloads) - { - list.Add(item); - } // foreach - - return list; - } // GetDvbStpClientSegmentInfoList - - private void Deserialize() - { - if (Request.AvoidDeserialization) return; - Worker.ReportProgress(999); - - foreach (var payload in Request.Payloads) - { - if (payload.XmlType != null) - { - payload.XmlDeserializedData = UiDvbStpSimpleDownloadResponse.ParsePayload(payload.XmlType, - payload.Data, - payload.PayloadId, - !Request.AllowXmlExtraWhitespace, - Request.XmlNamespaceReplacer); - } // if - - if (!Request.KeepRawData) - { - payload.Data = null; - } // if - } // foreach - } // Deserialize - -#if DEBUG - private void DumpPayloads() - { - if (string.IsNullOrEmpty(Request.DumpToFolder)) return; - - foreach (var payload in Request.Payloads) - { - if (payload.Data != null) - { - var filename = Path.Combine(Request.DumpToFolder, string.Format("DvbStpEnhancedDownloadDialog_P{0:X2}_S{1:X4}v{2:X2}.xml", payload.PayloadId, payload.SegmentId.Value, payload.SegmentVersion)); - File.WriteAllBytes(filename, payload.Data); - } // if - } // foreach - } // DumpPayloads -#endif - - #endregion - - #region StpClient event handlers - - void StpClient_DownloadStarted(object sender, DvbStpEnhancedClient.DownloadStartedEventArgs e) - { - Worker.ReportProgress(0, e); - } // StpClient_DownloadStarted - - void StpClient_SectionReceived(object sender, DvbStpSimpleClient.SectionReceivedEventArgs e) - { - Worker.ReportProgress(-1, e); - } // StpClient_SectionReceived - - void StpClient_SegmentDownloadStarted(object sender, DvbStpEnhancedClient.SegmentSectionReceivedEventArgs e) - { - var data = new SegmentProgressReport() - { - Index = e.SegmentListIndex, - ReceivedSections = e.SectionsReceived, - SectionCount = e.SectionCount - }; - Worker.ReportProgress(10, data); - } // StpClient_SegmentDownloadStarted - - void StpClient_SegmentSectionReceived(object sender, DvbStpEnhancedClient.SegmentSectionReceivedEventArgs e) - { - var data = new SegmentProgressReport() - { - Index = e.SegmentListIndex, - ReceivedSections = e.SectionsReceived, - SectionCount = e.SectionCount - }; - Worker.ReportProgress(15, data); - } // StpClient_SegmentDownloadStarted - - void StpClient_SegmentDownloadRestarted(object sender, DvbStpEnhancedClient.SegmentDownloadRestartedEventArgs e) - { - var data = new SegmentProgressReport() - { - Index = e.SegmentListIndex, - ReceivedSections = 0, - SectionCount = e.SectionCount - }; - Worker.ReportProgress(18, data); - } // StpClient_SegmentDownloadRestarted - - void StpClient_SegmentDownloadCompleted(object sender, DvbStpEnhancedClient.SegmentDownloadCompletedEventArgs e) - { - var data = new SegmentProgressReport() - { - Index = e.SegmentListIndex, - ReceivedSections = e.SectionCount, - SectionCount = e.SectionCount - }; - Worker.ReportProgress(19, data); - } // StpClient_SegmentDownloadCompleted - - #endregion - } // class DvbStpDownloadMultiDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs deleted file mode 100644 index 604cb269..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/DvbStpSimpleDownloadDialog.cs +++ /dev/null @@ -1,315 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Telemetry; -using IpTviewr.DvbStp.Client; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public partial class DvbStpSimpleDownloadDialog : Form - { - private string FormatProgressPercentage; - private string FormatSectionProgress; - private string FormatEllapsedTime; - private char DataReceptionSymbol; - private int DataReceptionCount; - private BackgroundWorker Worker; - private bool AllowFormToClose; - private Action CancelDownloadRequest; - private DateTime StartTime; - - public UiDvbStpSimpleDownloadRequest Request - { - get; - set; - } // Request - - public UiDvbStpSimpleDownloadResponse Response - { - get; - private set; - } // Response - - public string TelemetryScreenName - { - get; - private set; - } // TelemetryScreenName - - public DvbStpSimpleDownloadDialog() - { - InitializeComponent(); - } // constructor - - public DvbStpSimpleDownloadDialog(UiDvbStpSimpleDownloadRequest request) - : this() - { - Request = request; - } // constructor - - #region DownloadDlg events - - private void DownloadDlg_Load(object sender, EventArgs e) - { - if (Request == null) throw new ArgumentNullException(); - - TelemetryScreenName = string.Format("{0}: {1}:{2} 0x{3:X2}", this.GetType().Name, Request.MulticastAddress, Request.MulticastPort, Request.PayloadId); - - if (!string.IsNullOrEmpty(Request.Description)) - { - labelDownloadingPayloadName.Text = Request.Description; - } // if - labelDownloadSource.Text = string.Format(labelDownloadSource.Text, Request.MulticastAddress, Request.MulticastPort); - FormatProgressPercentage = labelProgressPct.Text; - FormatSectionProgress = labelSectionProgress.Text; - FormatEllapsedTime = labelEllapsedTime.Text; - DataReceptionSymbol = labelDataReception.Text[0]; - - labelProgressPct.Text = null; - labelSectionProgress.Text = null; - labelDataReception.Text = null; - labelReceiving.Visible = false; - labelEllapsedTime.Text = null; - - Response = new UiDvbStpSimpleDownloadResponse(); - } // DownloadDlg_Load - - private void DownloadDlg_Shown(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(TelemetryScreenName); - StartDownload(); - } // DownloadDlg_Shown - - private void DownloadDlg_FormClosing(object sender, FormClosingEventArgs e) - { - if ((e.CloseReason != CloseReason.UserClosing) && (e.CloseReason != CloseReason.None)) return; - - if (AllowFormToClose) return; - - e.Cancel = true; - CancelDownload(); - } // DownloadDlg_FormClosing - - #endregion - - #region Controls events - - private void buttonRequestCancel_Click(object sender, EventArgs e) - { - // race condition - if (CancelDownloadRequest == null) - { - MessageBox.Show(this, Properties.Texts.UnableCancelDownloadCaption, - Properties.Texts.UnableCancelDownloadMessage, - MessageBoxButtons.OK, MessageBoxIcon.Warning); - return; - } // if - - CancelDownload(); - } // buttonRequestCancel_Click - - private void timerEllapsed_Tick(object sender, EventArgs e) - { - DisplayEllapsedTime(); - } // timerEllapsed_Tick - - private void timerClose_Tick(object sender, EventArgs e) - { - CloseForm(); - } // timerClose_Tick - - #endregion - - private void StartDownload() - { - StartTime = DateTime.Now; - timerEllapsed.Enabled = true; - DisplayEllapsedTime(); - - Worker = new BackgroundWorker(); - Worker.WorkerReportsProgress = true; - Worker.WorkerSupportsCancellation = true; - Worker.ProgressChanged += Worker_ProgressChanged; - Worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - Worker.DoWork += Worker_DoWork; - Worker.RunWorkerAsync(Thread.CurrentThread); - } // StartDownload - - private void CancelDownload() - { - buttonRequestCancel.Enabled = false; - labelDownloadingPayloadName.Text = Properties.Texts.CancellingDownloadOperation; - - Response.UserCancelled = true; - Worker.CancelAsync(); - CancelDownloadRequest(); - } // CancelDownload - - private void StartClose() - { - if (Request.DialogCloseDelay <= 0) CloseForm(); - - timerClose.Interval = Request.DialogCloseDelay; - timerClose.Enabled = true; - } // private StartClose - - private void CloseForm() - { - timerClose.Enabled = false; - AllowFormToClose = true; - Close(); - } // CloseForm - - private void DisplayEllapsedTime() - { - TimeSpan ellapsed = DateTime.Now - StartTime; - TimeSpan ellapsedRounded = new TimeSpan(ellapsed.Days, ellapsed.Hours, ellapsed.Minutes, ellapsed.Seconds); - - labelEllapsedTime.Text = string.Format(FormatEllapsedTime, ellapsedRounded); - } // DisplayEllapsedTime - - #region Worker events - - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - timerEllapsed.Enabled = false; - Worker.Dispose(); - Worker = null; - - Response.UserCancelled = e.Cancelled; - Response.DownloadException = e.Error; - if ((!e.Cancelled) && (e.Error == null)) - { - Response.PayloadData = e.Result as byte[]; - } // if - - StartClose(); - } // Worker_RunWorkerCompleted - - private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - if (e.ProgressPercentage < 0) - { - DisplayDataReception(e); - } - else if (e.ProgressPercentage < int.MaxValue) - { - DisplaySectionReception(e); - } - else - { - DisplayParsingData(e); - } // if-else - } // Worker_ProgressChanged - - private void DisplaySectionReception(ProgressChangedEventArgs e) - { - if (progressBar.Style == ProgressBarStyle.Marquee) progressBar.Style = ProgressBarStyle.Continuous; - - var sectionReceivedArgs = e.UserState as DvbStpSimpleClient.PayloadSectionReceivedEventArgs; - labelProgressPct.Text = string.Format(FormatProgressPercentage, e.ProgressPercentage / 1000.0); - labelSectionProgress.Text = string.Format(FormatSectionProgress, sectionReceivedArgs.SectionsReceived, sectionReceivedArgs.SectionCount); - progressBar.Value = e.ProgressPercentage / 10; - } // DisplaySectionReception - - private void DisplayDataReception(ProgressChangedEventArgs e) - { - DataReceptionCount++; - labelReceiving.Visible = true; - labelDataReception.Text = new string(DataReceptionSymbol, (DataReceptionCount % 6)); - } // DisplayDataReception - - private void DisplayParsingData(ProgressChangedEventArgs e) - { - labelDownloadingPayloadName.Text = Request.DescriptionParsing; - labelReceiving.Text = Properties.Texts.CompletedDownloadDataReception; - labelReceiving.Font = new Font(labelReceiving.Font, FontStyle.Bold); - labelDataReception.Text = null; - labelDownloadSource.Visible = false; - } // DisplayParsingData - - #endregion - - #region BackgroundWorker DoWork - - void Worker_DoWork(object sender, DoWorkEventArgs e) - { - DvbStpSimpleClient stpClient; - byte[] payload; - - InitWorker(e); - - stpClient = new DvbStpSimpleClient(Request.MulticastAddress, Request.MulticastPort); - CancelDownloadRequest = stpClient.CancelRequest; - try - { - stpClient.ReceiveDatagramTimeout = Request.ReceiveDatagramTimeout; - stpClient.NoDataTimeout = Request.NoDataTimeout; - stpClient.SectionReceived += StpClient_SectionReceived; - stpClient.PayloadSectionReceived += StpClient_PayloadSectionReceived; - - payload = stpClient.GetPayload(Request.PayloadId, Request.SegmentId); - Response.Version = stpClient.SegmentVersion; - e.Result = payload; -#if DEBUG - if ((payload != null) && (Request.DumpToFile != null)) - { - File.WriteAllBytes(Request.DumpToFile, payload); - } // if -#endif - if ((Request.PayloadDataType != null) && (payload != null)) - { - Worker.ReportProgress(int.MaxValue); - Response.DeserializedPayloadData = UiDvbStpSimpleDownloadResponse.ParsePayload(Request.PayloadDataType, payload, Request.PayloadId, !Request.AllowXmlExtraWhitespace, Request.XmlNamespaceReplacer); - } // if - } - finally - { - e.Cancel = Worker.CancellationPending; - stpClient.Close(); - } // finally - } // Worker_DoWork - - private void InitWorker(DoWorkEventArgs e) - { - // set worker thread name (for debugging purposes) - var currentThread = Thread.CurrentThread; - currentThread.Name = "DvbStpSimpleDownloadDialog BackgroundWorker"; - - // inherit parent thead culture settings - var parentThread = e.Argument as Thread; - if (parentThread != null) - { - currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case - currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread - } // if - } // InitWorker - -#endregion - - #region StpClient event handlers - - void StpClient_SectionReceived(object sender, DvbStpSimpleClient.SectionReceivedEventArgs e) - { - Worker.ReportProgress(-1, e); - } // StpClient_SectionReceived - - void StpClient_PayloadSectionReceived(object sender, DvbStpSimpleClient.PayloadSectionReceivedEventArgs e) - { - Worker.ReportProgress((e.SectionsReceived * 1000) / e.SectionCount, e); - } // StpClient_PayloadSectionReceived - - #endregion - } // class DvbStpSimpleDownloadDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/License.txt b/1.5 'Kruger 60'/UiServices.DvbStpClient/License.txt deleted file mode 100644 index c9479ece..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/AssemblyInfo.cs deleted file mode 100644 index 855feba5..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UiServices.DvbStpClient")] -[assembly: AssemblyDescription("IpTviewr.UiServices.DvbStpClient")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("e3918f69-9952-42eb-a538-f9fb93858387")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.Designer.cs deleted file mode 100644 index d56a41e5..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.Designer.cs +++ /dev/null @@ -1,113 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.DvbStpClient.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.DvbStpClient.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Cancel_Red_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Cancel_Red_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DvbStpDownload_128x128 { - get { - object obj = ResourceManager.GetObject("DvbStpDownload_128x128", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DvbStpDownload_Error_32x32 { - get { - object obj = ResourceManager.GetObject("DvbStpDownload_Error_32x32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap DvbStpDownload_Error_48x48 { - get { - object obj = ResourceManager.GetObject("DvbStpDownload_Error_48x48", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.resx deleted file mode 100644 index d64f6b35..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Resources.resx +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\..\common.ui\resources\action_cancel_red_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\dvbstpdownload_128x128.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\dvbstpdownload_error_32x32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\dvbstpdownload_error_48x48.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.Designer.cs deleted file mode 100644 index 026437f4..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.Designer.cs +++ /dev/null @@ -1,216 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.DvbStpClient.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.DvbStpClient.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Please wait. Canceling download.... - /// - internal static string CancellingDownloadOperation { - get { - return ResourceManager.GetString("CancellingDownloadOperation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Data reception is complete. - /// - internal static string CompletedDownloadDataReception { - get { - return ResourceManager.GetString("CompletedDownloadDataReception", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:N0} of {1:N0}. - /// - internal static string DownloadFragmentProgressFormat { - get { - return ResourceManager.GetString("DownloadFragmentProgressFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0:P1}. - /// - internal static string DownloadSegmentProgressFormat { - get { - return ResourceManager.GetString("DownloadSegmentProgressFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to HELP!. - /// - internal static string HandleExceptionHelpButton { - get { - return ResourceManager.GetString("HandleExceptionHelpButton", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error has ocurred while fetching data. - /// - internal static string HelperExceptionCaption { - get { - return ResourceManager.GetString("HelperExceptionCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error has ocurred while fetching data. - /// - internal static string HelperExceptionText { - get { - return ResourceManager.GetString("HelperExceptionText", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Request cancelled. - /// - internal static string HelperUserCancelledCaption { - get { - return ResourceManager.GetString("HelperUserCancelledCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The download of the data has been cancelled by the user.. - /// - internal static string HelperUserCancelledText { - get { - return ResourceManager.GetString("HelperUserCancelledText", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The received data can't be successfully parsed and extracted. - ///Payload Id: 0x{0:X2}. Data type: {1}.. - /// - internal static string ParsePayloadException { - get { - return ResourceManager.GetString("ParsePayloadException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fnil\fcharset2 Symbol;}} - ///{\colortbl ;\red0\green0\blue255;} - ///{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sl240\slmult1\qc\lang10\f0\fs22{\pict\wmetafile8\picw1270\pich1270\picwgoal720\pichgoal720 - ///010009000003ca0d00000000a10d000000000400000003010800050000000b0200000000050000 - ///000c0230003000030000001e0004000000070104000400000007010400a10d0000410b2000cc00 - ///30003000000000003000300000000000280000003000000030000000 [rest of string was truncated]";. - /// - internal static string RtfTroubleshootingGuide { - get { - return ResourceManager.GetString("RtfTroubleshootingGuide", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} - /// - ///Unable to receive data from movistar+ servers due to connectivity issues. (Reason: {1}) - ///Power-cycle your router and try again in a few minutes. - /// - ///If the problem persists, please click “HELP!” for guidance on how to troubleshoot connectivity issues.. - /// - internal static string SocketException { - get { - return ResourceManager.GetString("SocketException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} - /// - ///Data reception from movistar+ servers took too much time. This might be an indication of poor network performance or WiFi reception. - ///Power-cycle your router and try again in a few minutes. - /// - ///If the problem persists, please click “HELP!” for guidance on how to troubleshoot connectivity issues.. - /// - internal static string TimeoutException { - get { - return ResourceManager.GetString("TimeoutException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to cancel. - /// - internal static string UnableCancelDownloadCaption { - get { - return ResourceManager.GetString("UnableCancelDownloadCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to cancel right now. Please try again in a few seconds. - /// - ///The operation has been scheduled and cannot be cancelled until it has started.. - /// - internal static string UnableCancelDownloadMessage { - get { - return ResourceManager.GetString("UnableCancelDownloadMessage", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.es.resx b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.es.resx deleted file mode 100644 index 57b47350..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.es.resx +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Espere, por favor. Cancelando la descarga... - - - Completada la recepción de datos - - - {0:N0} de {1:N0} - - - {0:P1} - - - ¡AYUDA! - - - Se ha producido un error al obtener la información - - - Se ha producido un error al obtener la información - - - Petición cancelada - - - La descarga de la información ha sido cancelada por el usuario. - - - Los datos recibidos no son válidos y no es posible extraer su información. -Identificador de datos: 0x{0:X2}. Tipo de datos: {1}. - - - - ..\resources\guiaresolucionproblemas.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - - {0} - -No es posible recibir información de los servidores de movistar+ por problemas de conectividad. (Razón: {1}) -Por favor, apague y encienda su router e inténtelo de nuevo pasados unos minutos. - -Si el problema persiste, haga clic en el botón “¡AYUDA!” para obtener orientación sobre cómo solucionar problemas de conectividad. - - - {0} - -La recepción de información de los servidores de movistar+ tardó demasiado tiempo. Ésto puede ser indicativo de un rendimiento inadecuado de la red o de problemas de conectividad WiFi. -Por favor, apague y encienda su router e inténtelo de nuevo pasados unos minutos. - -Si el problema persiste, haga clic en el botón “¡AYUDA!” para obtener orientación sobre cómo solucionar problemas de conectividad. - - - No es posible cancelar - - - No es posible cancelar en este preciso instante. Por favor, aguarde unos segundo y reintente de nuevo. - -La operación de descarga ha sido programada y no puede ser cancelada hasta que haya comenzado. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.resx b/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.resx deleted file mode 100644 index 429d1879..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/Properties/Texts.resx +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Please wait. Canceling download... - - - Data reception is complete - - - {0:N0} of {1:N0} - - - {0:P1} - - - HELP! - - - An error has ocurred while fetching data - - - An error has ocurred while fetching data - - - Request cancelled - - - The download of the data has been cancelled by the user. - - - The received data can't be successfully parsed and extracted. -Payload Id: 0x{0:X2}. Data type: {1}. - - - - ..\resources\troubleshootingguide.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - - {0} - -Unable to receive data from movistar+ servers due to connectivity issues. (Reason: {1}) -Power-cycle your router and try again in a few minutes. - -If the problem persists, please click “HELP!” for guidance on how to troubleshoot connectivity issues. - - - {0} - -Data reception from movistar+ servers took too much time. This might be an indication of poor network performance or WiFi reception. -Power-cycle your router and try again in a few minutes. - -If the problem persists, please click “HELP!” for guidance on how to troubleshoot connectivity issues. - - - Unable to cancel - - - Unable to cancel right now. Please try again in a few seconds. - -The operation has been scheduled and cannot be cancelled until it has started. - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs deleted file mode 100644 index 873b504d..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloadResponse.cs +++ /dev/null @@ -1,45 +0,0 @@ -using IpTviewr.Common.Serialization; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public abstract class UiDvbStpBaseDownloadResponse - { - public Exception DownloadException - { - get; - set; - } // DownloadException - - public bool UserCancelled - { - get; - set; - } // UserCancelled - - public static object ParsePayload(Type payloadType, byte[] payloadData, byte payloadId, bool trimExtraWhitespace, Func namespaceReplacer) - { - try - { - using (MemoryStream input = new MemoryStream(payloadData, false)) - { - return XmlSerialization.Deserialize(input, payloadType, trimExtraWhitespace, namespaceReplacer); - } // using input - } - catch (Exception ex) - { - throw new ApplicationException(string.Format(Properties.Texts.ParsePayloadException, - payloadId, payloadType.FullName), ex); - } // try-catch - } // ParsePayload - - public static T ParsePayload(byte[] payloadData, byte payloadId, bool trimExtraWhitespace, Func namespaceReplacer) where T : class - { - return ParsePayload(typeof(T), payloadData, payloadId, trimExtraWhitespace, namespaceReplacer) as T; - } // ParsePayload - } // abstract class UiDvbStpBaseDownloadResponse -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs deleted file mode 100644 index c75be355..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpBaseDownloader.cs +++ /dev/null @@ -1,108 +0,0 @@ -using Microsoft.SqlServer.MessageBox; -using IpTviewr.Common.Telemetry; -using IpTviewr.UiServices.Common.Forms; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Sockets; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public abstract class UiDvbStpBaseDownloader - { - // "Input" properties - - public string CaptionUserCancelled - { - get; - set; - } // CaptionUserCancelled - - public string TextUserCancelled - { - get; - set; - } // TextUserCancelled - - public string TextDownloadException - { - get; - set; - } // TextDownloadException - - // "Return" properties - - public bool IsOk - { - get; - private set; - } // IsOk - - protected string TelemetryScreenName - { - get; - set; - } // TelemetryScreenName - - public void Download(IWin32Window owner) - { - var response = ShowDialog(owner); - - IsOk = ((response.UserCancelled == false) && (response.DownloadException == null)); - - if (response.UserCancelled) - { - var box = new ExceptionMessageBox() - { - Caption = CaptionUserCancelled ?? Properties.Texts.HelperUserCancelledCaption, - Text = TextUserCancelled ?? Properties.Texts.HelperUserCancelledText, - Beep = true, - Symbol = ExceptionMessageBoxSymbol.Information - }; - box.Show(owner); - - return; - } // if - - if (response.DownloadException != null) - { - HandleException(owner, response.DownloadException); - } // if - } // Download - - protected abstract UiDvbStpBaseDownloadResponse ShowDialog(IWin32Window owner); - - private void HandleException(IWin32Window owner, Exception ex) - { - string message; - - BasicGoogleTelemetry.SendExtendedExceptionHit(ex, false, TelemetryScreenName, TelemetryScreenName); - - var isSocket = ex as SocketException; - var isTimeout = ex as TimeoutException; - - message = TextDownloadException ?? Properties.Texts.HelperExceptionText; - if (isSocket != null) message = string.Format(Properties.Texts.SocketException, message, isSocket.SocketErrorCode); - else if (isTimeout != null) message = string.Format(Properties.Texts.TimeoutException, message); - - var box = new ExceptionMessageBox() - { - Buttons = ExceptionMessageBoxButtons.Custom, - InnerException = ex, - Text = message, - DefaultButton = ExceptionMessageBoxDefaultButton.Button2, - CustomSymbol = Properties.Resources.DvbStpDownload_Error_48x48 - }; - box.SetButtonText(ExceptionMessageBox.OKButtonText, Properties.Texts.HandleExceptionHelpButton); - box.Show(owner); - - if (box.CustomDialogResult == ExceptionMessageBoxDialogResult.Button2) - { - BasicGoogleTelemetry.SendEventHit("ShowDialog", "UiServices.DvbStpClient.HelpDialog", TelemetryScreenName, TelemetryScreenName); - HelpDialog.ShowRtfHelp(owner, Properties.Texts.RtfTroubleshootingGuide, null); - } // if - } // HandleException - } // abstract class UiDvbStpBaseDownloader -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs deleted file mode 100644 index 7d5430e5..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpClientSegmentInfo.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.DvbStp.Client; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public class UiDvbStpClientSegmentInfo: DvbStpClientSegmentInfo - { - public UiDvbStpClientSegmentInfo() - { - // no op - } // constructor - - public UiDvbStpClientSegmentInfo(byte payloadId, short? segmentId, string displayName, Type xmlType) - : base(payloadId, segmentId) - { - DisplayName = displayName; - XmlType = xmlType; - } // constructor - - // Required IN parameter - public string DisplayName - { - get; - set; - } // DisplayName - - // Required IN parameter - public Type XmlType - { - get; - set; - } // XmlType - - // Out parameter - public object XmlDeserializedData - { - get; - set; - } // XmlDeserializedData - } // class UiDvbStpClientSegmentInfo -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs deleted file mode 100644 index f8257481..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloadResponse.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public class UiDvbStpEnhancedDownloadResponse : UiDvbStpBaseDownloadResponse - { - public bool IsOk - { - get; - set; - } // IsOk - } // class UiDvbStpEnhancedDownloadResponse -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs deleted file mode 100644 index 27a4ecc4..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpEnhancedDownloader.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.SqlServer.MessageBox; -using IpTviewr.UiServices.DvbStpClient.Properties; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public sealed class UiDvbStpEnhancedDownloader : UiDvbStpBaseDownloader - { - // "Input" properties - - public UiDvbStpEnhancedDownloadRequest Request - { - get; - set; - } // Request - - // "Return" properties - - public UiDvbStpEnhancedDownloadResponse Response - { - get; - private set; - } // Response - - protected override UiDvbStpBaseDownloadResponse ShowDialog(IWin32Window owner) - { - using (var dlg = new DvbStpEnhancedDownloadDialog(Request)) - { - dlg.ShowDialog(owner); - TelemetryScreenName = dlg.TelemetryScreenName; - Response = dlg.Response; - return Response; - } // using - } // ShowDialog - } // UiDvbStpEnhancedDownloader -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs deleted file mode 100644 index 57a95628..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadRequest.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Net; -using System.Text; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public class UiDvbStpSimpleDownloadRequest: UiDvbStpBaseDownloadRequest - { - public byte PayloadId - { - get; - set; - } // PayloadId - - public short? SegmentId - { - get; - set; - } // SegmentId - - public Type PayloadDataType - { - get; - set; - } // PayloadDataType - -#if DEBUG - public string DumpToFile - { - get; - set; - } // DumpToFile -#endif - } // class DownloadDlgRequestData -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs deleted file mode 100644 index cce647e0..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloadResponse.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public class UiDvbStpSimpleDownloadResponse : UiDvbStpBaseDownloadResponse - { - public byte Version - { - get; - set; - } // Version - - public byte[] PayloadData - { - get; - set; - } // PayloadData - - public object DeserializedPayloadData - { - get; - set; - } // DeserializedPayloadData - } // class DvbStpDownloadResponse -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs b/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs deleted file mode 100644 index c86c9457..00000000 --- a/1.5 'Kruger 60'/UiServices.DvbStpClient/UiDvbStpSimpleDownloader.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Microsoft.SqlServer.MessageBox; -using IpTviewr.UiServices.DvbStpClient.Properties; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.DvbStpClient -{ - public sealed class UiDvbStpSimpleDownloader : UiDvbStpBaseDownloader - { - // "Input" properties - - public UiDvbStpSimpleDownloadRequest Request - { - get; - set; - } // Request - - // "Return" properties - - public UiDvbStpSimpleDownloadResponse Response - { - get; - private set; - } // Response - - protected override UiDvbStpBaseDownloadResponse ShowDialog(IWin32Window owner) - { - using (var dlg = new DvbStpSimpleDownloadDialog(Request)) - { - dlg.ShowDialog(owner); - TelemetryScreenName = dlg.TelemetryScreenName; - Response = dlg.Response; - return Response; - } // using - } // ShowDialog - } // UiDvbStpSimpleDownloader -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs deleted file mode 100644 index 2982fdcf..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgBasicGridDialog.cs +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Common.Telemetry; -using IpTviewr.Core.IpTvProvider; -using IpTviewr.Services.EpgDiscovery; -using IpTviewr.Services.SqlServerCE; -using IpTviewr.UiServices.Common.Forms; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Discovery; -using IpTviewr.UiServices.Discovery.BroadcastList; -using IpTviewr.Common; -using System.Threading; - -namespace IpTviewr.UiServices.EPG -{ - public partial class EpgBasicGridDialog : CommonBaseForm - { - private IList ServicesList; - private UiBroadcastService InitialService; - private UiBroadcastService SelectedService; - private IEpgLinkedList[] EpgPrograms; - private EpgDatastore Datastore; - private int SelectedRowIndex; - private DateTime LocalReferenceTime; - private bool IsGridReady; - - public static DialogResult ShowGrid(CommonBaseForm parentForm, IList list, UiBroadcastService currentService, EpgDatastore datastore) - { - using (var dialog = new EpgBasicGridDialog()) - { - dialog.ServicesList = list; - dialog.InitialService = currentService; - dialog.Datastore = datastore; - return dialog.ShowDialog(parentForm); - } // using - } // ShowGrid - - public EpgBasicGridDialog() - { - InitializeComponent(); - this.Icon = Properties.Resources.Epg; - } // constructor - - #region Event handlers - - private void EpgBasicGridDialog_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this); - - EpgPrograms = new IEpgLinkedList[ServicesList.Count]; - ChangeSelectedRow(-1); - - var workerOptions = new BackgroundWorkerOptions() - { - OutputData = EpgPrograms, - BackgroundTask = AsyncGetEpgPrograms, - AfterTask = FillGrid, - AllowAutoClose = true, - TaskDescription = Properties.Texts.EpgDataLoadingList, - AllowCancelButton = true, - }; - - var result = BackgroundWorkerDialog.RunWorkerAsync(this, workerOptions); - var close = false; - if (workerOptions.OutputException != null) - { - HandleException(new ExceptionEventData(Properties.Texts.ObtainingListException, workerOptions.OutputException)); - close = true; - } // if - if (result != DialogResult.OK) - { - close = true; - } // if - - if (close) - { - Visible = false; - Close(); - } // if - } // EpgBasicGridDialog_Load - - private void dataGridPrograms_SelectionChanged(object sender, EventArgs e) - { - if (!IsGridReady) return; - - var cell = (dataGridPrograms.SelectedCells.Count > 0) ? dataGridPrograms.SelectedCells[0] : null; - if (cell == null) - { - ChangeSelectedRow(-1); - } - else - { - ChangeSelectedRow(cell.RowIndex); - - // don't allow to select the service - if (cell.ColumnIndex == 0) - { - var row = dataGridPrograms.Rows[SelectedRowIndex]; - row.Cells[1].Selected = true; - - // changing the selected cell will cause SelectionChanged to be fired - // thus making unnecesary to call DisplayProgramData() - return; - } // if - - DisplayProgramData(cell.ColumnIndex); - } // if-else - } // dataGridPrograms_SelectionChanged - - #endregion - - private void FillGrid(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) - { - if (dialog.QueryCancel()) return; - dialog.SetProgressText("Filling the list..."); - - var serviceRowIndex = -1; - foreach (var service in ServicesList) - { - var name = UiBroadcastListManager.GetColumnData(service, UiBroadcastListColumn.NumberAndName); - var rowIndex = dataGridPrograms.Rows.Add(name); - - if (service.Key == InitialService?.Key) - { - serviceRowIndex = rowIndex; - } // if - - // TODO: use ListManager view options for hidden and inactive programs (to show or no to show) - if ((service.IsHidden) || (service.IsInactive)) - { - dataGridPrograms.Rows[rowIndex].DefaultCellStyle.ForeColor = SystemColors.GrayText; - } // if - } // foreach - - for (int index = 0; index < EpgPrograms.Length; index++) - { - int cellIndex; - var row = dataGridPrograms.Rows[index]; - - var node = EpgPrograms[index]?.Requested; - cellIndex = 1; - while ((node != null) && (cellIndex < 4)) - { - var cell = row.Cells[cellIndex]; - cell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft; - cell.Value = node.Program.Title; - node = node.Next; - cellIndex++; - } // while - - // mark remaining cells as empty - for (; cellIndex < 4; cellIndex++) - { - var cell = row.Cells[cellIndex]; - cell.Style.ForeColor = SystemColors.GrayText; - cell.Value = Properties.Texts.EpgNoInformationShort; - cell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; - } // for cellIndex - } // for index - - SelectedService = null; - IsGridReady = true; - - if (serviceRowIndex >= 0) - { - dataGridPrograms.CurrentCell = dataGridPrograms.Rows[serviceRowIndex].Cells[1]; - } - else - { - SelectedRowIndex = -1; - } // if-else - } // FillGrid - - private void AsyncGetEpgPrograms(BackgroundWorkerOptions options, IBackgroundWorkerDialog dialog) - { - IEpgLinkedList servicePrograms; - - dialog.SetProgressText("Requesting data for channels..."); - - LocalReferenceTime = DateTime.Now; - var programs = Datastore.GetAllPrograms(LocalReferenceTime, 0, 2); - - dialog.SetProgressText("Sorting information..."); - - var index = -1; - foreach (var service in ServicesList) - { - index++; - - // TODO: do NOT assume .imagenio.es - var fullServiceName = service.ServiceName + ".imagenio.es"; - var fullAlternateServiceName = service.ReplacementService?.ServiceName + ".imagenio.es"; - - if (!programs.TryGetValue(fullServiceName, out servicePrograms)) - { - if (!programs.TryGetValue(fullAlternateServiceName, out servicePrograms)) - { - continue; - } // if - } // if - - EpgPrograms[index] = servicePrograms; - } // foreach - } // AsyncGetEpgPrograms - - private void DisplayProgramData(int cellIndex) - { - if (cellIndex < 1) - { - pictureProgramThumbnail.Visible = false; - epgMiniGuide.Visible = false; - } - else - { - //pictureProgramThumbnail.SetImage(Properties.Resources.EpgLoadingProgramImage); - pictureProgramThumbnail.Visible = true; - - // TODO: load program image (async) - pictureProgramThumbnail.SetImage(Properties.Resources.EpgNoProgramImage); - - epgMiniGuide.Visible = true; - epgMiniGuide.GoTo(cellIndex); - } // if-else - } // DisplayProgramData - - private void ChangeSelectedRow(int rowIndex) - { - if (rowIndex == SelectedRowIndex) return; - SelectedRowIndex = rowIndex; - SelectedService = (rowIndex >= 0)? ServicesList[rowIndex] : null; - - if (rowIndex == -1) - { - pictureProgramThumbnail.Visible = false; - epgMiniGuide.Visible = false; - return; - } // if - - var epgPrograms = EpgPrograms[rowIndex]; - var singleServiceDatastore = new EpgSingleServiceDatastore(SelectedService.FullServiceName, EpgPrograms[SelectedRowIndex]); - - epgMiniGuide.LoadEpgPrograms(SelectedService, LocalReferenceTime, singleServiceDatastore, false); - epgMiniGuide.Visible = true; - } // ChangeSelectedRow - } // class EpgBasicGridDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.cs deleted file mode 100644 index 8d756286..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgChannelPrograms.cs +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using IpTviewr.Common.Telemetry; -using IpTviewr.Services.EpgDiscovery; -using IpTviewr.UiServices.Configuration.Logos; -using IpTviewr.UiServices.Discovery; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading; -using System.Windows.Forms; -using IpTviewr.UiServices.Common.Forms; -using IpTviewr.Core.IpTvProvider; - -namespace IpTviewr.UiServices.EPG -{ - public partial class EpgChannelPrograms : Form - { - DateTime ReferenceTime; - private Font BoldListFont, ItalicListFont; - - public int DaysDelta - { - get; - set; - } // DaysDelta - - public UiBroadcastService Service - { - get; - set; - } // ChannelLog - - public string FullServiceName - { - get; - set; - } // FullServiceName - - public string FullAlternateServiceName - { - get; - set; - } // FullAlternateServiceName - - public string EpgDatabase - { - get; - set; - } // EpgDatabase - - public EpgChannelPrograms() - { - InitializeComponent(); - } // constructor - - private void DisposeForm(bool disposing) - { - if (!disposing) return; - - if (BoldListFont != null) BoldListFont.Dispose(); - if (ItalicListFont != null) ItalicListFont.Dispose(); - } // DisposeForm - - private void EpgChannelPrograms_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this); - - pictureChannelLogo.Image = Service.Logo.GetImage(LogoSize.Size48, true); - labelChannelName.Text = string.Format("{0} - {1}", Service.DisplayLogicalNumber, Service.DisplayName); - - BoldListFont = new Font(listPrograms.Font, FontStyle.Bold); - ItalicListFont = new Font(listPrograms.Font, FontStyle.Italic); - - comboBoxDate.SelectedIndex = DaysDelta; - buttonDisplayChannel.Enabled = false; - buttonRecordChannel.Enabled = false; - } // EpgChannelPrograms_Load - - private void comboBoxDate_SelectedIndexChanged(object sender, EventArgs e) - { - DaysDelta = comboBoxDate.SelectedIndex; - StartLoadEpg(); - } // comboBoxDate_SelectedIndexChanged - - private void listPrograms_SelectedIndexChanged(object sender, EventArgs e) - { - var epgProgram = (listPrograms.SelectedItems.Count != 0) ? (EpgProgram)listPrograms.SelectedItems[0].Tag : null; - EpgProgramDetails.Visible = (epgProgram != null); - EpgProgramDetails.DisplayData(Service, epgProgram, ReferenceTime, "Programa"); - - buttonDisplayChannel.Enabled = (epgProgram != null) && (epgProgram.LocalStartTime <= ReferenceTime) && (epgProgram.LocalEndTime > ReferenceTime); - buttonRecordChannel.Enabled = (epgProgram != null) && (epgProgram.LocalEndTime >= ReferenceTime); - } // listPrograms_SelectedIndexChanged - - private void buttonDisplayChannel_Click(object sender, EventArgs e) - { - ExternalTvPlayer.ShowTvChannel(this, Service); - } // buttonDisplayChannel_Click - - private void buttonRecordChannel_Click(object sender, EventArgs e) - { - NotImplementedBox.ShowBox(this, "buttonRecordChannel"); - } // buttonRecordChannel_Click - - private void StartLoadEpg() - { - if (listPrograms.Items.Count > 0) - { - listPrograms.Items.Clear(); - var item = listPrograms.Items.Add(""); - item.SubItems.Add("Leyendo información de guía de programas..."); - } // if - - comboBoxDate.Enabled = false; - EpgProgramDetails.Visible = false; - - ThreadPool.QueueUserWorkItem(LoadEpg); - } // StartLoadEpg - - private void LoadEpg(object state) - { - ReferenceTime = DateTime.Now; - var start = new DateTime(ReferenceTime.Year, ReferenceTime.Month, ReferenceTime.Day).AddDays(DaysDelta); - var end = start.AddDays(1); - // TODO: EPG - //var epgPrograms = EpgDbSerialization.GetServiceEvents(EpgDatabase, FullServiceName, FullAlternateServiceName, start, end); - //this.BeginInvoke(new Action>(ShowEpg), epgPrograms); - } // LoadEpg - - private void ShowEpg(IList epgPrograms) - { - EpgProgram last; - ListViewItem item, select; - - last = null; - select = null; - - listPrograms.BeginUpdate(); - listPrograms.Items.Clear(); - - foreach (var epgProgram in epgPrograms) - { - if ((last != null) && (last.LocalEndTime != epgProgram.LocalStartTime)) - { - item = new ListViewItem(last.LocalEndTime.ToShortTimeString()); - item.UseItemStyleForSubItems = false; - item.SubItems.Add("Información de programa no disponible"); - item.SubItems[1].Font = ItalicListFont; - } - else - { - item = new ListViewItem(epgProgram.LocalStartTime.ToShortTimeString()); - item.UseItemStyleForSubItems = false; - item.Font = BoldListFont; - item.Tag = epgProgram; - item.SubItems.Add(epgProgram.Title); - item.ToolTipText = epgProgram.Title; - } // if-else - listPrograms.Items.Add(item); - last = epgProgram; - - if ((select == null) && (epgProgram.LocalStartTime <= ReferenceTime) && (epgProgram.LocalEndTime > ReferenceTime)) - { - select = item; - } // if - } // foreach - - if (epgPrograms.Count == 0) - { - item = new ListViewItem("--:--"); - item.SubItems.Add("Información de programas no disponible para este canal"); - item.UseItemStyleForSubItems = false; - listPrograms.Items.Add(item); - } // if - columnHeaderTitle.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); - - if (select != null) - { - select.Selected = (DaysDelta == 0); - select.EnsureVisible(); - select.IndentCount = 3; - listPrograms.Focus(); - } // if - - listPrograms.EndUpdate(); - - comboBoxDate.Enabled = true; - } // ShowEpg - } // class EpgChannelPrograms -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.cs deleted file mode 100644 index 8dd05cfe..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgEventMiniBar.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Common; -using IpTviewr.Core.IpTvProvider; -using IpTviewr.UiServices.Discovery; -using IpTviewr.UiServices.Common.Forms; -using IpTviewr.Services.EpgDiscovery; - -namespace IpTviewr.UiServices.EPG -{ - public partial class EpgProgramMiniBar : UserControl - { - private UiBroadcastService Service; - private EpgProgram EpgProgram; - - public EpgProgramMiniBar() - { - InitializeComponent(); - } // constructor - - public void DisplayData(UiBroadcastService service, EpgProgram epgProgram, DateTime referenceTime, string caption) - { - Service = service; - EpgProgram = epgProgram; - - labelProgramCaption.Text = caption; - labelProgramCaption.Visible = caption != null; - labelProgramTime.Visible = (epgProgram != null); - labelProgramDetails.Visible = (epgProgram != null); - pictureProgramThumbnail.ImageLocation = null; - buttonProgramProperties.Visible = (epgProgram != null); - pictureProgramThumbnail.Cursor = (epgProgram != null) ? Cursors.Hand : Cursors.Default; - - if (EpgProgram == null) - { - labelProgramTitle.Text = Properties.Texts.EpgNoInformation; - pictureProgramThumbnail.Image = Properties.Resources.EpgNoProgramImage; - } - else - { - labelProgramTitle.Text = EpgProgram.Title; - labelProgramTime.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(EpgProgram.LocalStartTime, EpgProgram.LocalEndTime, referenceTime), - FormatString.TimeSpanTotalMinutes(EpgProgram.Duration, FormatString.Format.Extended)); - labelProgramDetails.Text = string.Format("{0} / {1}", (EpgProgram.Genre != null) ? EpgProgram.Genre.Description : Properties.Texts.EpgNoGenre, - (EpgProgram.ParentalRating != null) ? EpgProgram.ParentalRating.Description : Properties.Texts.EpgNoParentalRating); - - pictureProgramThumbnail.Image = Properties.Resources.EpgLoadingProgramImage; - pictureProgramThumbnail.ImageLocation = null; - // TODO: EPG - // pictureProgramThumbnail.ImageLocation = IpTvProvider.Current.EpgInfo.GetEpgProgramThumbnailUrl(service, EpgProgram, false); - } // if-else - } // DisplayData - - private void buttonProgramProperties_Click(object sender, EventArgs e) - { - EpgExtendedInfoDialog.ShowExtendedInfo(this, Service, EpgProgram); - } // buttonProgramProperties_Click - - private void pictureProgramThumbnail_LoadCompleted(object sender, AsyncCompletedEventArgs e) - { - if ((e.Error != null) || (e.Cancelled)) - { - (sender as PictureBox).Image = Properties.Resources.EpgNoProgramImage; - } // if - } // pictureProgramThumbnail_LoadCompleted - - private void pictureProgramThumbnail_Click(object sender, EventArgs e) - { - EpgExtendedInfoDialog.ShowExtendedInfo(this, Service, EpgProgram); - } // pictureProgramThumbnail_Click - } // class EpgProgramMiniBar -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.cs deleted file mode 100644 index 744d1024..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideButtons.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.EPG -{ - public partial class EpgMiniGuideButtons : EpgMiniGuide - { - public EpgMiniGuideButtons() - { - InitializeComponent(); - } // constructor - } // class EpgMiniGuideButtons -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideEventArgs.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideEventArgs.cs deleted file mode 100644 index 0e98c0b2..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgMiniGuideEventArgs.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace IpTviewr.UiServices.EPG -{ - public class EpgMiniBarButtonClickedEventArgs : EventArgs - { - public EpgMiniBarButtonClickedEventArgs(EpgMiniGuide.Button button) - { - Button = button; - } // constructor - - public EpgMiniGuide.Button Button - { - get; - private set; - } // Button - } // class EpgMiniBarButtonClickedEventArgs - - public class EpgMiniBarNavigationButtonsChangedEventArgs : EventArgs - { - public EpgMiniBarNavigationButtonsChangedEventArgs(bool backEnabled, bool forwardEnabled) - { - IsBackEnabled = backEnabled; - IsForwardEnabled = forwardEnabled; - } // constructor - - public bool IsBackEnabled - { - get; - private set; - } // IsBackEnabled - - public bool IsForwardEnabled - { - get; - private set; - } // IsForwardEnabled - } // class EpgMiniBarNavigationButtonsChangedEventArgs -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.cs deleted file mode 100644 index c6d91411..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgNowThenDialog.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using IpTviewr.Common.Serialization; -using IpTviewr.Common.Telemetry; -using IpTviewr.Services.EpgDiscovery; -using IpTviewr.UiServices.Configuration.Logos; -using IpTviewr.UiServices.Discovery; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.EPG -{ - public partial class EpgNowThenDialog : Form - { - private UiBroadcastService Service; - private EpgProgram[] EpgPrograms; - private DateTime ReferenceTime; - - public EpgNowThenDialog() - { - InitializeComponent(); - } // constructor - - public static void ShowEpgPrograms(UiBroadcastService service, EpgProgram[] epg, IWin32Window owner, DateTime referenceTime) - { - using (var form = new EpgNowThenDialog()) - { - form.Service = service; - form.EpgPrograms = epg; - form.ReferenceTime = referenceTime; - form.ShowDialog(owner); - } // using form - } // ShowEpgBasicData - - private void FormBasicEpgData_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this); - - pictureChannelLogo.Image = Service.Logo.GetImage(LogoSize.Size48, true); - labelChannelName.Text = string.Format("{0}\r\n{1}", Service.DisplayLogicalNumber, Service.DisplayName); - - EpgProgramBefore.DisplayData(Service, (EpgPrograms != null) ? EpgPrograms[0] : null, ReferenceTime, Properties.Texts.EpgProgramBeforeCaption); - EpgProgramNow.DisplayData(Service, (EpgPrograms != null) ? EpgPrograms[1] : null, ReferenceTime, Properties.Texts.EpgProgramNowCaption); - EpgProgramThen.DisplayData(Service, (EpgPrograms != null) ? EpgPrograms[2] : null, ReferenceTime, Properties.Texts.EpgProgramThenCaption); - } // FormBasicEpgData_Load - } // class EpgNowThenDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgProgramPictureBox.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgProgramPictureBox.cs deleted file mode 100644 index 363b78bf..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgProgramPictureBox.cs +++ /dev/null @@ -1,42 +0,0 @@ -using IpTviewr.Core.IpTvProvider; -using IpTviewr.Core.IpTvProvider.EPG; -using IpTviewr.Services.EpgDiscovery; -using IpTviewr.UiServices.Common.Controls; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.EPG -{ - internal class EpgProgramPictureBox: PictureBoxEx - { - public void LoadProgramImageAsync(EpgProgram epgProgram, bool portrait) - { - if ((epgProgram == null)) // || (!IpTvProvider.Current.EpgInfo.Capabilities.HasFlag(EpgProviderCapabilities.ProgramThumbnail))) - { - OnProgramImageLoaded(null, portrait); - } - else - { - OnProgramImageLoaded(null, portrait); - // TODO: async load program image - } // if-else - } // LoadProgramImageAsync - - private void OnProgramImageLoaded(Image image, bool portrait) - { - if (image == null) - { - SetImage(portrait ? Properties.Resources.EpgNoProgramImageVertical : Properties.Resources.EpgNoProgramImage); - } - else - { - SetImage(image); - } // if-else - } // OnProgramImageLoaded - } // class EpgProgramPictureBox -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/EpgProgressBarFixed.cs b/1.5 'Kruger 60'/UiServices.EPG/EpgProgressBarFixed.cs deleted file mode 100644 index 1f75acd8..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/EpgProgressBarFixed.cs +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.EPG -{ - public class EpgProgressBarFixed: Control - { - private Image BarBase, BarFilled; - private double min, max, progressValue; - - public EpgProgressBarFixed() - { - min = 0; - max = 100; - progressValue = min; - } // constructor - - [DefaultValue(0.0)] - public double MinimumValue - { - get - { - return min; - } // get - set - { - if (min > max) throw new ArgumentOutOfRangeException(); - min = value; - if (progressValue < min) Value = min; - } // set - } // MinimumValue - - [DefaultValue(100.0)] - public double MaximumValue - { - get - { - return max; - } // get - set - { - if (max < min) throw new ArgumentOutOfRangeException(); - max = value; - if (progressValue > max) Value = max; - } // set - } // MaximumValue - - public double ValueRange - { - get { return max - min; } - } // ValueRange - - [DefaultValue(0.0)] - public double Value - { - get - { - return progressValue; - } // get - set - { - var old = progressValue; - progressValue = value; - if (progressValue < min) progressValue = min; - if (progressValue > max) progressValue = max; - if (progressValue != old) - { - Invalidate(); - } // if - } // set - } // Value - - protected override void OnCreateControl() - { - base.OnCreateControl(); - BarBase = Properties.Resources.ProgressBarBase; - BarFilled = Properties.Resources.ProgressBarFilled; - } // OnCreateControl - - protected override Size DefaultSize - { - get { return new Size(125, 20); } - } // DefaultSize - - protected override void Dispose(bool disposing) - { - base.Dispose(disposing); - if (disposing) - { - if (BarBase != null) BarBase.Dispose(); - if (BarFilled != null) BarFilled.Dispose(); - BarBase = null; - BarFilled = null; - } // if - } // Dispose - - protected override void OnPaint(PaintEventArgs e) - { - base.OnPaint(e); - if (BarBase == null) return; - - var width = (int)(((progressValue - min) * BarFilled.Width) / ValueRange); - - e.Graphics.DrawImage(BarFilled, 0, 0, new Rectangle(0, 0, width, BarFilled.Height), GraphicsUnit.Pixel); - e.Graphics.DrawImage(BarBase, width, 0, new Rectangle(width, 0, BarBase.Width - width, BarBase.Height), GraphicsUnit.Pixel); - } // OnPaint - } // class EpgProgressBarFixed -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.EPG/License.txt b/1.5 'Kruger 60'/UiServices.EPG/License.txt deleted file mode 100644 index b6e0e523..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/AssemblyInfo.cs deleted file mode 100644 index 27a7ac4d..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute parameters to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UI Services: EPG")] -[assembly: AssemblyDescription("IpTviewr.UiServices.EPG")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("b719e3c6-c6e5-4f3d-a764-1a466bc40402")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.Designer.cs deleted file mode 100644 index cfc3f26e..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.Designer.cs +++ /dev/null @@ -1,163 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.EPG.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class CommonUiResources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal CommonUiResources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.CommonUiResources", typeof(CommonUiResources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Back_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Back_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Cancel_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Close_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Close_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Copy_Clip_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Copy_Clip_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Forward_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Forward_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_FullView_16x16 { - get { - object obj = ResourceManager.GetObject("Action_FullView_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Play_LG_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Play_LG_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Properties_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Record_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Record_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.resx b/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.resx deleted file mode 100644 index d19f1504..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/CommonUiResources.resx +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\..\Common.UI\Resources\Action_Cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\Common.UI\Resources\Action_Close_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\Common.UI\Resources\Action_Ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\Common.UI\Resources\Action_Back_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\Common.UI\Resources\Action_Forward_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\Common.UI\Resources\Action_Fullview_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\Common.UI\Resources\Action_Record_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\Common.UI\Resources\Action_Play_LG_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\Common.UI\resources\action_copy_clip_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\Common.UI\resources\action_properties_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs deleted file mode 100644 index 96fa3dfb..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Resources.Designer.cs +++ /dev/null @@ -1,163 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.EPG.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Epg_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Epg_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Epg_Play_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Epg_Play_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Epg_Record_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Epg_Record_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon Epg { - get { - object obj = ResourceManager.GetObject("Epg", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap EpgLoadingProgramImage { - get { - object obj = ResourceManager.GetObject("EpgLoadingProgramImage", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap EpgLoadingProgramImageVertical { - get { - object obj = ResourceManager.GetObject("EpgLoadingProgramImageVertical", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap EpgNoProgramImage { - get { - object obj = ResourceManager.GetObject("EpgNoProgramImage", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap EpgNoProgramImageVertical { - get { - object obj = ResourceManager.GetObject("EpgNoProgramImageVertical", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ProgressBarBase { - get { - object obj = ResourceManager.GetObject("ProgressBarBase", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ProgressBarFilled { - get { - object obj = ResourceManager.GetObject("ProgressBarFilled", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs b/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs deleted file mode 100644 index 79ad8a8b..00000000 --- a/1.5 'Kruger 60'/UiServices.EPG/Properties/Texts.Designer.cs +++ /dev/null @@ -1,198 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.EPG.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Texts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Texts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.EPG.Properties.Texts", typeof(Texts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Loading program information.... - /// - internal static string EpgDataLoading { - get { - return ResourceManager.GetString("EpgDataLoading", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading EPG data.... - /// - internal static string EpgDataLoadingList { - get { - return ResourceManager.GetString("EpgDataLoadingList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No data. - /// - internal static string EpgNoData { - get { - return ResourceManager.GetString("EpgNoData", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Genre not available. - /// - internal static string EpgNoGenre { - get { - return ResourceManager.GetString("EpgNoGenre", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Program information is not available. - /// - internal static string EpgNoInformation { - get { - return ResourceManager.GetString("EpgNoInformation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Not available. - /// - internal static string EpgNoInformationShort { - get { - return ResourceManager.GetString("EpgNoInformationShort", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Parental rating not available. - /// - internal static string EpgNoParentalRating { - get { - return ResourceManager.GetString("EpgNoParentalRating", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to After. - /// - internal static string EpgProgramAfterCaption { - get { - return ResourceManager.GetString("EpgProgramAfterCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Before. - /// - internal static string EpgProgramBeforeCaption { - get { - return ResourceManager.GetString("EpgProgramBeforeCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Now. - /// - internal static string EpgProgramNowCaption { - get { - return ResourceManager.GetString("EpgProgramNowCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Then. - /// - internal static string EpgProgramThenCaption { - get { - return ResourceManager.GetString("EpgProgramThenCaption", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to There was an error retrieving the list of programs. - /// - internal static string ObtainingListException { - get { - return ResourceManager.GetString("ObtainingListException", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ended {0} ago. - /// - internal static string ProgramEnded { - get { - return ResourceManager.GetString("ProgramEnded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Started {0} ago. - /// - internal static string ProgramStarted { - get { - return ResourceManager.GetString("ProgramStarted", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Will start in {0}. - /// - internal static string ProgramWillStart { - get { - return ResourceManager.GetString("ProgramWillStart", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Forms/License.txt b/1.5 'Kruger 60'/UiServices.Forms/License.txt deleted file mode 100644 index c9479ece..00000000 --- a/1.5 'Kruger 60'/UiServices.Forms/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.cs b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.cs deleted file mode 100644 index d47e5f07..00000000 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerDialog.cs +++ /dev/null @@ -1,456 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using IpTviewr.Common.Telemetry; -using IpTviewr.UiServices.Common.Forms; -using IpTviewr.UiServices.Configuration.Logos; -using IpTviewr.UiServices.Discovery; -using IpTviewr.UiServices.Forms.Properties; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; -using System.Drawing; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Threading; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Forms -{ - //CA1301 Avoid duplicate accelerators Define unique accelerators for the following controls in 'MulticastScannerDialog' that all currently use &C as an accelerator: MulticastScannerDialog.buttonRequestCancel, MulticastScannerDialog.buttonClose. ChannelList MulticastScannerDialog.cs 23 - //This is OK. Both buttons are never active at the same time; in fact, one replaces the other when scan is completed (or cancelled) - [SuppressMessage("Microsoft.Globalization", "CA1301:AvoidDuplicateAccelerators")] - public partial class MulticastScannerDialog : CommonBaseForm - { - private const int UdpMaxDatagramSize = 65535; - private string FormatProgressPercentage; - private string FormatScanningProgress; - private string FormatEllapsedTime; - private BackgroundWorker Worker; - private bool AllowFormToClose; - private DateTime StartTime; - private bool RefreshNeeded; - - #region Inner classes - - public class ScanResultEventArgs: EventArgs - { - public bool IsInactive; - public bool WasInactive; - public bool IsSkipped; - public UiBroadcastService Service; - public bool IsInList; - } // class ScanResultEventArgs - - public class ScanCompletedEventArgs : EventArgs - { - public bool Cancelled - { - get; - set; - } // Cancelled - - public Exception Error - { - get; - set; - } // Error - - public bool IsListRefreshNeeded - { - get; - set; - } // IsListRefreshNeeded - } // ScanCompletedEventArgs - - private enum ProgressReportKind - { - Started, - Ended, - Progress, - ChannelScanned, - SkippedChannel, - } // ProgressReportKind - - private class Stats - { - public int Active, Dead, Skipped, Error; - public int Count, Total; - } // class Stats - - private class ProgressData : Stats - { - public UiBroadcastService Service; - public Image Logo; - public bool IsInactive; - public bool WasInactive; - - public ProgressData ShallowClone() - { - return MemberwiseClone() as ProgressData; - } // ShallowClone - } // ProgressData - - #endregion - - public MulticastScannerDialog() - { - InitializeComponent(); - Timeout = 5000; - } // constructor - - public event EventHandler ChannelScanResult; - public event EventHandler ScanCompleted; - - public IEnumerable BroadcastServices - { - get; - set; - } // BroadcastServices - - /// In milliseconds - public int Timeout - { - get; - set; - } // Timeout - - public bool ScanInProgress - { - get; - private set; - } // ScanInProgress - - private int BroadcastServicesCount - { - get; - set; - } // BroadcastServicesCount - - #region Form events - - private void DialogMulticastServiceScanner_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this); - - FormatProgressPercentage = labelProgressPercentage.Text; - FormatScanningProgress = labelScanning.Text; - FormatEllapsedTime = labelEllapsedTime.Text; - - BroadcastServicesCount = BroadcastServices.Count(); - DisplayStats(new Stats() { Total = BroadcastServicesCount }); - labelEllapsedTime.Text = null; - labelServiceName.Text = null; - labelServiceUrl.Text = null; - pictureBoxServiceLogo.Visible = false; - buttonRequestCancel.Enabled = false; - } // DialogMulticastServiceScanner_Load - - private void DialogMulticastServiceScanner_Shown(object sender, EventArgs e) - { - StartScan(); - } // DialogMulticastServiceScanner_Shown - - private void DialogMulticastServiceScanner_FormClosing(object sender, FormClosingEventArgs e) - { - if ((e.CloseReason != CloseReason.UserClosing) && (e.CloseReason != CloseReason.None)) return; - - if (AllowFormToClose) return; - - e.Cancel = true; - CancelScan(); - } // DialogMulticastServiceScanner_FormClosing - - private void DialogMulticastServiceScanner_FormClosed(object sender, FormClosedEventArgs e) - { - this.Dispose(); - } // DialogMulticastServiceScanner_FormClosed - - #endregion - - private void buttonRequestCancel_Click(object sender, EventArgs e) - { - CancelScan(); - } // buttonRequestCancel_Click - - private void buttonClose_Click(object sender, EventArgs e) - { - AllowFormToClose = true; - Close(); - } // buttonClose_Click - - private void timerEllapsed_Tick(object sender, EventArgs e) - { - DisplayEllapsedTime(); - } // timerEllapsed_Tick - - private void DisplayStats(Stats stats) - { - if (listViewStats.Items.Count == 0) - { - listViewStats.Items.Add(new ListViewItem(new string[] { MulticastScanner.Active, "-"})); - listViewStats.Items.Add(new ListViewItem(new string[] { MulticastScanner.Dead, "-" })); - listViewStats.Items.Add(new ListViewItem(new string[] { MulticastScanner.Error, "-" })); - listViewStats.Items.Add(new ListViewItem(new string[] { MulticastScanner.Skipped, "-" })); - listViewStats.Items.Add(new ListViewItem(new string[] { MulticastScanner.Total, "-" })); - for (int index = 0; index < listViewStats.Items.Count; index++) - { - listViewStats.Items[index].UseItemStyleForSubItems = false; - listViewStats.Items[index].SubItems[1].Font = labelServiceName.Font; - } // for - } - else - { - listViewStats.Items[0].SubItems[1].Text = stats.Active.ToString("N0"); - listViewStats.Items[1].SubItems[1].Text = stats.Dead.ToString("N0"); - listViewStats.Items[2].SubItems[1].Text = stats.Error.ToString("N0"); - listViewStats.Items[3].SubItems[1].Text = stats.Skipped.ToString("N0"); - listViewStats.Items[4].SubItems[1].Text = stats.Count.ToString("N0"); - } // if-else - - var progress = (stats.Total > 0) ? ((double)stats.Count) / ((double)stats.Total) : 1; - labelProgressPercentage.Text = string.Format(FormatProgressPercentage, progress); - progressBar.Value = (int) (progress * 1000); - labelScanning.Text = string.Format(FormatScanningProgress, stats.Count, stats.Total); - } // DisplayStats - - private void DisplayEllapsedTime() - { - TimeSpan ellapsed = DateTime.Now - StartTime; - TimeSpan ellapsedRounded = new TimeSpan(ellapsed.Days, ellapsed.Hours, ellapsed.Minutes, ellapsed.Seconds); - - labelEllapsedTime.Text = string.Format(FormatEllapsedTime, ellapsedRounded); - } // DisplayEllapsedTime - - private void StartScan() - { - RefreshNeeded = false; - - StartTime = DateTime.Now; - timerEllapsed.Enabled = true; - DisplayEllapsedTime(); - - Worker = new BackgroundWorker(); - Worker.WorkerReportsProgress = true; - Worker.WorkerSupportsCancellation = true; - Worker.ProgressChanged += Worker_ProgressChanged; - Worker.RunWorkerCompleted += Worker_RunWorkerCompleted; - Worker.DoWork += Worker_DoWork; - ScanInProgress = true; - Worker.RunWorkerAsync(Thread.CurrentThread); - } // StartScan - - private void CancelScan() - { - buttonRequestCancel.Enabled = false; - labelCaption.Text = MulticastScanner.ScanningCancelling; - - Worker.CancelAsync(); - } // CancelScan - - #region Worker events - - void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - timerEllapsed.Enabled = false; - Worker.Dispose(); - Worker = null; - buttonRequestCancel.Enabled = false; - - if (e.Cancelled) - { - labelCaption.Text = MulticastScanner.ScanningCancelled; - } - else if (e.Error == null) - { - labelCaption.Text = MulticastScanner.ScanningCompleted; - } - else if (e.Error != null) - { - labelCaption.Text = MulticastScanner.ScanningError; - HandleException(new ExceptionEventData(e.Error)); - } // if-else - - AllowFormToClose = true; - ScanInProgress = false; - - // replace cancel button with close button - buttonRequestCancel.Visible = false; - buttonClose.Location = buttonRequestCancel.Location; - buttonClose.Size = buttonRequestCancel.Size; - buttonClose.Visible = true; - - if (ScanCompleted != null) - { - var eventArgs = new ScanCompletedEventArgs() - { - Cancelled = e.Cancelled, - Error = e.Error, - IsListRefreshNeeded = RefreshNeeded - }; - ScanCompleted(this, eventArgs); - } // if - } // Worker_RunWorkerCompleted - - private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - ProgressData progress; - - progress = e.UserState as ProgressData; - switch ((ProgressReportKind)e.ProgressPercentage) - { - case ProgressReportKind.Started: - buttonRequestCancel.Enabled = true; - pictureBoxServiceLogo.Visible = true; - break; - case ProgressReportKind.Ended: - buttonRequestCancel.Enabled = false; - labelScanning.Visible = false; - labelServiceName.Visible = false; - labelServiceUrl.Visible = false; - pictureBoxServiceLogo.Visible = false; - ReplaceLogo(null); - DisplayStats(progress); - break; - case ProgressReportKind.Progress: - labelServiceName.Text = progress.Service.DisplayName; - labelServiceUrl.Text = progress.Service.DisplayLocationUrl; - ReplaceLogo(progress.Logo); - DisplayStats(progress); - break; - case ProgressReportKind.ChannelScanned: - NotifyScanResult(progress, false); - break; - case ProgressReportKind.SkippedChannel: - NotifyScanResult(progress, true); - break; - } // switch - } // Worker_ProgressChanged - - private void NotifyScanResult(ProgressData progress, bool isSkipped) - { - if (ChannelScanResult == null) - { - progress.Service.IsInactive = progress.IsInactive; - return; - } // if - - var e = new ScanResultEventArgs() - { - IsInactive = progress.IsInactive, - WasInactive = progress.WasInactive, - IsSkipped = isSkipped, - Service = progress.Service, - }; - - ChannelScanResult(this, e); - - if ((e.WasInactive != e.IsInactive) && (!e.IsInList)) - { - RefreshNeeded = true; - } // if - } // NotifyScanResult - - private void ReplaceLogo(Image newLogo) - { - var currentLogo = pictureBoxServiceLogo.Image; - pictureBoxServiceLogo.Image = newLogo; - if (currentLogo != null) currentLogo.Dispose(); - } // ReplaceLogo - - #endregion - - #region BackgroundWorker DoWork - - void Worker_DoWork(object sender, DoWorkEventArgs e) - { - ProgressData progress; - Socket s; - byte[] buffer; - IEnumerable services; - - // set worker thread name (for debugging pourposes) - var currentThread = Thread.CurrentThread; - currentThread.Name = "MulticastScannerDialog BackgroundWorker"; - - // inherit parent thead culture settings - var parentThread = e.Argument as Thread; - if (parentThread != null) - { - currentThread.CurrentCulture = parentThread.CurrentCulture; // matches regular application Culture; set again just-in-case - currentThread.CurrentUICulture = parentThread.CurrentUICulture; // UICulture not inherited from spwawning thread - } // if - - Worker.ReportProgress((int)ProgressReportKind.Started); - - buffer = new byte[UdpMaxDatagramSize]; - progress = new ProgressData() { Total = BroadcastServicesCount }; - services = BroadcastServices; - - foreach (var service in services) - { - if (Worker.CancellationPending) break; - - progress.Service = service; - progress.Logo = SafeLoadLogo(service.Logo); - Worker.ReportProgress((int)ProgressReportKind.Progress, progress.ShallowClone()); - progress.Count++; - - if ((service.Data.ServiceLocation == null) || (service.Data.ServiceLocation.IpMulticastAddress == null)) - { - progress.Skipped++; - progress.WasInactive = progress.Service.IsInactive; - progress.IsInactive = progress.Service.IsInactive; - Worker.ReportProgress((int)ProgressReportKind.SkippedChannel, progress.ShallowClone()); - continue; - } // if - - var multicastData = new MulticastOption(IPAddress.Parse(service.Data.ServiceLocation.IpMulticastAddress.Address), IPAddress.Any); - s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); - s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); - s.ReceiveTimeout = Timeout; - s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, multicastData); - s.Bind(new IPEndPoint(IPAddress.Any, service.Data.ServiceLocation.IpMulticastAddress.Port)); - - if (Worker.CancellationPending) break; - - try - { - s.Receive(buffer); - progress.Active++; - progress.WasInactive = service.IsInactive; - progress.IsInactive = false; - } - catch (SocketException ex) - { - progress.WasInactive = service.IsInactive; - progress.IsInactive = true; - if (ex.SocketErrorCode == SocketError.TimedOut) - { - progress.Dead++; - } - else - { - progress.Error++; - } // if - } // try-catch - s.Close(); - - Worker.ReportProgress((int)ProgressReportKind.ChannelScanned, progress.ShallowClone()); - } // foreach - - Worker.ReportProgress((int)ProgressReportKind.Ended, progress.ShallowClone()); - e.Cancel = Worker.CancellationPending; - } // Worker_DoWork - - private Image SafeLoadLogo(ServiceLogo logo) - { - return logo.GetImage(LogoSize.Size64, true); - } // SafeLoadLogo - - #endregion - } // class -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.cs b/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.cs deleted file mode 100644 index fd4feb23..00000000 --- a/1.5 'Kruger 60'/UiServices.Forms/MulticastScannerOptionsDialog.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common.Telemetry; -using System; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Forms -{ - public partial class MulticastScannerOptionsDialog : Form - { - public MulticastScannerOptionsDialog() - { - InitializeComponent(); - } // constructor - - public enum ScanWhatList - { - AllServices, - ActiveServices, - DeadServices - } // ScanWhatList - - /// - /// Timeout, in milliseconds - /// - public int Timeout - { - get; - private set; - } // Timeout - - public ScanWhatList ScanList - { - get; - private set; - } // ScanList - - private void MulticastScannerOptionsDialog_Load(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this); - } // MulticastScannerOptionsDialog_Load - - private void buttonStart_Click(object sender, EventArgs e) - { - Timeout = (int)(numericTimeout.Value * 1000); - - // What - if (radioScanAll.Checked) ScanList = ScanWhatList.AllServices; - else if (radioScanActive.Checked) ScanList = ScanWhatList.ActiveServices; - else if (radioScanDead.Checked) ScanList = ScanWhatList.DeadServices; - else ScanList = ScanWhatList.AllServices; - } // buttonStart_Click - } // AskMulticastScannerDlg -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/AssemblyInfo.cs deleted file mode 100644 index 2bbcacd6..00000000 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute parameters to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UI Services: Forms")] -[assembly: AssemblyDescription("IpTviewr.UiServices.Forms")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("02eda313-a279-429c-b594-5219b6394f2a")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/CommonUiResources.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/CommonUiResources.Designer.cs deleted file mode 100644 index 39bd5bc0..00000000 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/CommonUiResources.Designer.cs +++ /dev/null @@ -1,123 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Forms.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class CommonUiResources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal CommonUiResources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.CommonUiResources", typeof(CommonUiResources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Cancel_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Copy_Table { - get { - object obj = ResourceManager.GetObject("Action_Copy_Table", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Properties_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Properties_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Refresh_Blue_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Refresh_Blue_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Run_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Run_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs deleted file mode 100644 index c1b1cf9e..00000000 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/DiscoveryTexts.Designer.cs +++ /dev/null @@ -1,108 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Forms.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class DiscoveryTexts { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal DiscoveryTexts() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.DiscoveryTexts", typeof(DiscoveryTexts).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Unable to obtain the list of service providers. - /// - internal static string SPListUnableRefresh { - get { - return ResourceManager.GetString("SPListUnableRefresh", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Obtaining the list of service providers.... - /// - internal static string SPObtainingList { - get { - return ResourceManager.GetString("SPObtainingList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Parsing and extracting the list of providers.... - /// - internal static string SPParsingList { - get { - return ResourceManager.GetString("SPParsingList", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Properties of the service provider. - /// - internal static string SPProperties { - get { - return ResourceManager.GetString("SPProperties", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The refreshing of the list has been cancelled by the user.. - /// - internal static string UserCancelListRefresh { - get { - return ResourceManager.GetString("UserCancelListRefresh", resourceCulture); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Forms/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Forms/Properties/Resources.Designer.cs deleted file mode 100644 index 7575fc74..00000000 --- a/1.5 'Kruger 60'/UiServices.Forms/Properties/Resources.Designer.cs +++ /dev/null @@ -1,73 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Forms.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Forms.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap ScanTv_128x128 { - get { - object obj = ResourceManager.GetObject("ScanTv_128x128", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.cs b/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.cs deleted file mode 100644 index 0ad0b7b6..00000000 --- a/1.5 'Kruger 60'/UiServices.Forms/SelectProviderDialog.cs +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using Etsi.Ts102034.v010501.XmlSerialization; -using Etsi.Ts102034.v010501.XmlSerialization.ProviderDiscovery; -using IpTviewr.Common; -using IpTviewr.Common.Telemetry; -using IpTviewr.UiServices.Common.Forms; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Logos; -using IpTviewr.UiServices.Discovery; -using IpTviewr.UiServices.DvbStpClient; -using IpTviewr.UiServices.Forms; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Net; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Forms -{ - public partial class SelectProviderDialog : CommonBaseForm - { - UiProviderDiscovery ProvidersDiscovery; - - public SelectProviderDialog() - { - InitializeComponent(); - } // constructor - - public UiServiceProvider SelectedServiceProvider - { - get; - set; - } // SelectedServiceProvider - - private void SelectProviderDialog_Load(object sender, EventArgs e) - { - if (!SafeCall(SelectProviderDialog_Load_Implementation, sender, e)) - { - this.Close(); - } // if - } // SelectProviderDialog_Load - - private void listViewServiceProviders_SelectedIndexChanged(object sender, EventArgs e) - { - SafeCall(SelectedIndexChanged); - } // listViewServiceProviders_SelectedIndexChanged - - private void listViewServiceProviders_DoubleClick(object sender, EventArgs e) - { - if (SelectedServiceProvider != null) - { - buttonOk.PerformClick(); - } // if - } // listViewServiceProviders_DoubleClick - - private void buttonRefreshServiceProviderList_Click(object sender, EventArgs e) - { - SafeCall(buttonRefreshServiceProviderList_Click_Implementation, sender, e); - } // buttonRefreshServiceProviderList_Click - - private void buttonProviderDetails_Click(object sender, EventArgs e) - { - SafeCall(buttonProviderDetails_Click_Implementation, sender, e); - } // buttonProviderDetails_Click - - #region Event handlers implemention - - private void SelectProviderDialog_Load_Implementation(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this); - - if (SelectedServiceProvider == null) - { - SelectedIndexChanged(); - } // if - LoadServiceProviderList(true); - } // SelectProviderDialog_Load_Implementation - - private void buttonRefreshServiceProviderList_Click_Implementation(object sender, EventArgs e) - { - LoadServiceProviderList(false); - } // buttonRefreshServiceProviderList_Click_Implementation - - private void buttonProviderDetails_Click_Implementation(object sender, EventArgs e) - { - if (SelectedServiceProvider == null) return; - - using (var dlg = new PropertiesDialog() - { - Caption = Properties.DiscoveryTexts.SPProperties, - ItemProperties = SelectedServiceProvider.DumpProperties(), - Description = SelectedServiceProvider.DisplayName, - ItemIcon = SelectedServiceProvider.Logo.GetImage(LogoSize.Size64, true), - }) - { - dlg.ShowDialog(this); - } // using - } // buttonProviderDetails_Click_Implementation - - #endregion - - public static UiServiceProvider GetLastUserSelectedProvider(string lastSelectedServiceProvider) - { - var lastSelectedProvider = lastSelectedServiceProvider; - if (lastSelectedProvider == null) return null; - - var baseIpAddress = AppUiConfiguration.Current.ContentProvider.Bootstrap.MulticastAddress; - var discovery = AppUiConfiguration.Current.Cache.LoadXml("ProviderDiscovery", baseIpAddress); - if (discovery == null) return null; - - return UiProviderDiscovery.GetUiServiceProviderFromKey(discovery, lastSelectedProvider); - } // GetLastUserSelectedProvider - - private bool LoadServiceProviderList(bool fromCache) - { - try - { - ProviderDiscoveryRoot discovery; - var baseIpAddress = AppUiConfiguration.Current.ContentProvider.Bootstrap.MulticastAddress; - - // can load from cache? - discovery = null; - if (fromCache) - { - discovery = AppUiConfiguration.Current.Cache.LoadXml("ProviderDiscovery", baseIpAddress); - if (discovery == null) - { - return false; - } // if - } // if - - if (discovery == null) - { - var basePort = AppUiConfiguration.Current.ContentProvider.Bootstrap.MulticastPort; - - var downloader = new UiDvbStpSimpleDownloader() - { - Request = new UiDvbStpSimpleDownloadRequest() - { - PayloadId = 0x01, - SegmentId = null, // accept any segment - MulticastAddress = IPAddress.Parse(baseIpAddress), - MulticastPort = basePort, - Description = Properties.DiscoveryTexts.SPObtainingList, - DescriptionParsing = Properties.DiscoveryTexts.SPParsingList, - PayloadDataType = typeof(ProviderDiscoveryRoot), - AllowXmlExtraWhitespace = false, - XmlNamespaceReplacer = NamespaceUnification.Replacer, - }, - TextUserCancelled = Properties.DiscoveryTexts.UserCancelListRefresh, - TextDownloadException = Properties.DiscoveryTexts.SPListUnableRefresh, - }; - downloader.Download(this); - if (!downloader.IsOk) return false; - - discovery = downloader.Response.DeserializedPayloadData as ProviderDiscoveryRoot; - AppUiConfiguration.Current.Cache.SaveXml("ProviderDiscovery", baseIpAddress, downloader.Response.Version, discovery); - } // if - - ProvidersDiscovery = new UiProviderDiscovery(discovery); - FillServiceProviderList(); - - return true; - } - catch (Exception ex) - { - HandleException(new ExceptionEventData(Properties.DiscoveryTexts.SPListUnableRefresh, ex)); - return false; - } // try-catch - } // LoadServiceProviderList - - private void SelectedIndexChanged() - { - if (listViewServiceProviders.SelectedItems.Count > 0) - { - SelectedServiceProvider = listViewServiceProviders.SelectedItems[0].Tag as UiServiceProvider; - } - else - { - SelectedServiceProvider = null; - } // if-else - - buttonProviderDetails.Enabled = (SelectedServiceProvider != null); - buttonOk.Enabled = (SelectedServiceProvider != null); - } // SelectedIndexChanged - - private void FillServiceProviderList() - { - ListViewItem[] listItems; - ListViewItem selectedItem; - int index; - int maxWidth; - - listViewServiceProviders.BeginUpdate(); - listViewServiceProviders.Items.Clear(); - - if (ProvidersDiscovery == null) - { - listViewServiceProviders.EndUpdate(); - return; - } // if - - listItems = new ListViewItem[ProvidersDiscovery.Providers.Count()]; - index = 0; - selectedItem = null; - - foreach (var provider in ProvidersDiscovery.Providers) - { - var item = new ListViewItem(provider.DisplayName); - item.ImageKey = GetProviderLogoKey(provider.Logo); - item.SubItems.Add(provider.DisplayDescription); - item.Tag = provider; - item.Name = provider.Key; - if ((SelectedServiceProvider != null) && (provider.Key == SelectedServiceProvider.Key)) - { - selectedItem = item; - } // if - - listItems[index++] = item; - } // foreach - listViewServiceProviders.Items.AddRange(listItems); - - // trick for calculating the tile size width - // let the ListView do all of the math and item measuring - listViewServiceProviders.View = View.Details; - listViewServiceProviders.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); - maxWidth = listViewServiceProviders.Columns[0].Width; - listViewServiceProviders.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); - maxWidth = Math.Max(maxWidth, listViewServiceProviders.Columns[1].Width); - - listViewServiceProviders.TileSize = new Size(imageListProvidersLarge.ImageSize.Width + 6 + maxWidth, imageListProvidersLarge.ImageSize.Height + 6); - listViewServiceProviders.View = View.Tile; - - listViewServiceProviders.EndUpdate(); - - if (selectedItem != null) - { - selectedItem.Selected = true; - selectedItem.EnsureVisible(); - } // if - } // FillServiceProviderList - - private string GetProviderLogoKey(ProviderLogo logo) - { - if (!imageListProvidersLarge.Images.ContainsKey(logo.Key)) - { - using (var image = logo.GetImage(LogoSize.Size32, true)) - { - imageListProvidersLarge.Images.Add(logo.Key, image); - } // using image - } // if - - return logo.Key; - } // GetProviderLogoKey - } // class SelectProviderDialog -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/IRecordingScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/IRecordingScheduleFragment.cs deleted file mode 100644 index 9d08c182..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/IRecordingScheduleFragment.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Services.Record.Serialization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Record.Controls -{ - internal interface IRecordingScheduleFragment - { - UserControl UserControl - { - get; - } // UserControl - - RecordScheduleKind Kind - { - get; - } // Kind - - void UpdateStartDate(DateTime startDate); - void SetSchedule(RecordSchedule schedule); - RecordSchedule GetSchedule(); - } // interface IRecordingScheduleFragment -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs deleted file mode 100644 index 382b8020..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingDailyScheduleFragment.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Services.Record.Serialization; - -namespace IpTviewr.UiServices.Record.Controls -{ - internal partial class RecordingDailyScheduleFragment : UserControl, IRecordingScheduleFragment - { - private RecordDaily Schedule; - - public RecordingDailyScheduleFragment() - { - InitializeComponent(); - } // constructor - - #region IRecordingScheduleFragment - - public UserControl UserControl - { - get { return this; } - } // UserControl - - public RecordScheduleKind Kind - { - get { return RecordScheduleKind.Daily; } - } // ScheduleKind - - public void UpdateStartDate(DateTime startDate) - { - Schedule.StartDate = startDate; - } // UpdateStartDate - - public void SetSchedule(RecordSchedule schedule) - { - Schedule = (RecordDaily)schedule; - - numericRecurEvery.Value = Schedule.RecurEveryDays; - } // SetSchedule - - public RecordSchedule GetSchedule() - { - Schedule.RecurEveryDays = (short)numericRecurEvery.Value; - - return Schedule; - } // GetSchedule - - #endregion - - private void SchedulePatternDaily_Load(object sender, EventArgs e) - { - } // SchedulePatternDaily_Load - } // class SchedulePatternDaily -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs deleted file mode 100644 index bbee1d52..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.Designer.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -namespace IpTviewr.UiServices.Record.Controls -{ - partial class RecordingMonthlyScheduleFragment - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // SchedulePatternMonthly - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Name = "SchedulePatternMonthly"; - this.Size = new System.Drawing.Size(300, 150); - this.ResumeLayout(false); - - } - - #endregion - } -} diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs deleted file mode 100644 index a5e4bee8..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingMonthlyScheduleFragment.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Services.Record.Serialization; - -namespace IpTviewr.UiServices.Record.Controls -{ - internal partial class RecordingMonthlyScheduleFragment : UserControl, IRecordingScheduleFragment - { - private RecordMonthly Schedule; - - public RecordingMonthlyScheduleFragment() - { - InitializeComponent(); - } // constructor - - #region IRecordingScheduleFragment - - public UserControl UserControl - { - get { return this; } - } // UserControl - - public RecordScheduleKind Kind - { - get { return RecordScheduleKind.Monthly; } - } // ScheduleKind - - public void UpdateStartDate(DateTime startDate) - { - Schedule.StartDate = startDate; - } // UpdateStartDate - - public void SetSchedule(RecordSchedule schedule) - { - Schedule = (RecordMonthly)schedule; - } // SetSchedule - - public RecordSchedule GetSchedule() - { - throw new NotImplementedException(); - // return Schedule - } // GetSchedule - - #endregion - - } // class SchedulePatternMonthly -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs deleted file mode 100644 index ad49cd98..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingOneTimeScheduleFragment.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Services.Record.Serialization; - -namespace IpTviewr.UiServices.Record.Controls -{ - internal partial class RecordingOneTimeScheduleFragment : UserControl, IRecordingScheduleFragment - { - private RecordOneTime Schedule; - - public RecordingOneTimeScheduleFragment() - { - InitializeComponent(); - } // constructor - - #region IRecordingScheduleFragment - - public UserControl UserControl - { - get { return this; } - } // UserControl - - public RecordScheduleKind Kind - { - get { return RecordScheduleKind.OneTime; } - } // ScheduleKind - - public void UpdateStartDate(DateTime startDate) - { - Schedule.StartDate = startDate; - } // UpdateStartDate - - public void SetSchedule(RecordSchedule schedule) - { - Schedule = (RecordOneTime)schedule; - } // SetSchedule - - public RecordSchedule GetSchedule() - { - return Schedule; - } // GetSchedule - - #endregion - } // class SchedulePatternOneTime -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs deleted file mode 100644 index 48180884..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingRightNowScheduleFragment.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Services.Record.Serialization; - -namespace IpTviewr.UiServices.Record.Controls -{ - internal partial class RecordingRightNowScheduleFragment : UserControl, IRecordingScheduleFragment - { - private RecordRightNow Schedule; - - public RecordingRightNowScheduleFragment() - { - InitializeComponent(); - } // constructor - - #region IRecordingScheduleFragment - - public UserControl UserControl - { - get { return this; } - } // UserControl - - public RecordScheduleKind Kind - { - get { return RecordScheduleKind.RightNow; } - } // ScheduleKind - - public void UpdateStartDate(DateTime startDate) - { - // ignore - } // UpdateStartDate - - public void SetSchedule(RecordSchedule schedule) - { - Schedule = (RecordRightNow)schedule; - } // SetSchedule - - public RecordSchedule GetSchedule() - { - return Schedule; - } // GetSchedule - - #endregion - } // class SchedulePatternRightNow -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs deleted file mode 100644 index 56a333ee..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingSchedule.cs +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Services.Record.Serialization; -using IpTviewr.UiServices.Record.Properties; -using IpTviewr.Common; - -namespace IpTviewr.UiServices.Record.Controls -{ - public partial class RecordingSchedule : UserControl - { - private int ManualUpdate; - - private IRecordingScheduleFragment CurrentFragment; - private IRecordingScheduleFragment[] ScheduleFragments; - private RadioButton[] RadioButtons; - private DateTime OriginalDateTime; - - public event EventHandler ScheduleKindChanged; - public event EventHandler DateTimeChanged; - - public class KindChangedEventArgs : EventArgs - { - public KindChangedEventArgs(RecordScheduleKind kind) - { - Kind = kind; - } // constructor - - public RecordScheduleKind Kind - { - get; - private set; - } // Kind - } // KindChangedEventArgs - - public class DateTimeChangedEventArgs : EventArgs - { - public DateTimeChangedEventArgs(DateTime dateTime) - { - DateTime = dateTime; - } // constructor - - public DateTime DateTime - { - get; - private set; - } // DateTime - } // class DateTimeChangedEventArgs - - public RecordingSchedule() - { - InitializeComponent(); - - ScheduleFragments = new IRecordingScheduleFragment[4]; // 5 - ScheduleFragments[0] = fragmentRightNow; - ScheduleFragments[1] = fragmentOneTime; - ScheduleFragments[2] = fragmentDaily; - ScheduleFragments[3] = fragmentWeekly; - //ScheduleFragments[4] = fragmentMonthly; - - RadioButtons = new RadioButton[4]; // 5 - RadioButtons[0] = radioRightNow; - RadioButtons[1] = radioOneTime; - RadioButtons[2] = radioDaily; - RadioButtons[3] = radioWeekly; - //RadioButtons[4] = radioMonthly; - } // constructor - - public void SetSchedule(RecordSchedule schedule, bool isNew) - { - if ((schedule.Kind == RecordScheduleKind.RightNow) && (!isNew)) - { - throw new InvalidOperationException("A 'RightNow' recording task can not be edited!"); - } // if - - OriginalDateTime = schedule.StartDate; - - foreach (var fragment in ScheduleFragments) - { - if (schedule.Kind == fragment.Kind) fragment.SetSchedule(schedule); - else fragment.SetSchedule(RecordSchedule.CreateWithDefaultValues(fragment.Kind)); - } // foreach - - foreach (var radio in RadioButtons) - { - var kind = (RecordScheduleKind)radio.Tag; - radio.Checked = (schedule.Kind == kind); - // if we're editing an existing record task, we can't set its type as 'Right now' - radio.Enabled = isNew ? true : (kind != RecordScheduleKind.RightNow); - } // foreach - - SetPatternKind(schedule.Kind); - } // SetSchedule - - public RecordSchedule GetSchedule() - { - return CurrentFragment.GetSchedule(); - } // GetSchedule - - private void SchedulePattern_Load(object sender, EventArgs e) - { - ManualUpdate++; - - panelPlaceholder.Visible = false; - for(int index=0; index 0) return; - - selectedKind = (RecordScheduleKind)((RadioButton)sender).Tag; - canSelectDateTime = (selectedKind != RecordScheduleKind.RightNow); - - dateTimeStartDate.Enabled = canSelectDateTime; - dateTimeStartTime.Enabled = canSelectDateTime; - - ManualUpdate++; - - dateTimeStartDate.Value = OriginalDateTime; - dateTimeStartTime.Value = OriginalDateTime; - - ManualUpdate--; - - StartTimerUpdateRightNow(selectedKind == RecordScheduleKind.RightNow); - - SetPatternKind(selectedKind); - StartDateChanged(); - } // radioButton_CheckedChanged - - private void dateTimeStart_ValueChanged(object sender, EventArgs e) - { - if (ManualUpdate > 0) return; - - StartDateChanged(); - } // dateTimeStart_ValueChanged - - private void dateTimeStartDate_Validating(object sender, CancelEventArgs e) - { - var date = dateTimeStartDate.Value; - var time = dateTimeStartTime.Value; - var startDate = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); - - if (startDate < DateTime.Now) - { - e.Cancel = true; - MessageBox.Show(Parent, ControlTexts.RecordingInvalidStartDateTime, ControlTexts.RecordingScheduleValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); - this.Parent.Focus(); - this.Focus(); - } // if - } // dateTimeStartDate_Validating - - private void timerUpdateRightNow_Tick(object sender, EventArgs e) - { - UpdateStartTimeRightNow(); - } // timerUpdateRightNow_Tick - - private void SetPatternKind(RecordScheduleKind kind) - { - foreach (var patternControl in ScheduleFragments) - { - if (patternControl.Kind == kind) - { - if (CurrentFragment != null) CurrentFragment.UserControl.Visible = false; - patternControl.UserControl.Visible = true; - CurrentFragment = patternControl; - break; - } // if - } // foreach - - ScheduleKindChanged?.Invoke(this, new KindChangedEventArgs(kind)); - } // SetPatternKind - - private void StartDateChanged() - { - var date = dateTimeStartDate.Value; - var time = dateTimeStartTime.Value; - var startDate = new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second); - - foreach (var fragment in ScheduleFragments) - { - fragment.UpdateStartDate(startDate); - } // foreach - - DateTimeChanged?.Invoke(this, new DateTimeChangedEventArgs(startDate)); - } // StartDateChanged - - private void StartTimerUpdateRightNow(bool start) - { - timerUpdateRightNow.Enabled = start; - if (start) UpdateStartTimeRightNow(); - } // StartTimerUpdateRightNow - - private void UpdateStartTimeRightNow() - { - ManualUpdate++; - - var now = DateTime.Now.TruncateToSeconds(5); - dateTimeStartDate.Value = now; - - ManualUpdate--; - - dateTimeStartTime.Value = now; - } // UpdateStartTimeRightNow - } // class namespace -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs b/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs deleted file mode 100644 index 1b5ae5b3..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Controls/RecordingWeeklyScheduleFragment.cs +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using IpTviewr.Services.Record.Serialization; -using IpTviewr.UiServices.Record.Properties; - -namespace IpTviewr.UiServices.Record.Controls -{ - internal partial class RecordingWeeklyScheduleFragment : UserControl, IRecordingScheduleFragment - { - private RecordWeekly Schedule; - private RecordWeekDays[] ListIndexDay; - - public RecordingWeeklyScheduleFragment() - { - InitializeComponent(); - } // constructor - - #region IRecordingScheduleFragment - - public UserControl UserControl - { - get { return this; } - } // UserControl - - public RecordScheduleKind Kind - { - get { return RecordScheduleKind.Weekly; } - } // ScheduleKind - - public void UpdateStartDate(DateTime startDate) - { - Schedule.StartDate = startDate; - } // UpdateStartDate - - public void SetSchedule(RecordSchedule schedule) - { - Schedule = (RecordWeekly)schedule; - - numericRecurEvery.Value = Schedule.RecurEveryWeeks; - for (int index = 0; index < ListIndexDay.Length; index++) - { - checkedListDays.SetItemChecked(index, (Schedule.WeekDays & ListIndexDay[index]) != 0); - } // for index - } // SetSchedule - - public RecordSchedule GetSchedule() - { - Schedule.RecurEveryWeeks = (short)numericRecurEvery.Value; - - Schedule.WeekDays = default(RecordWeekDays); - for (int index = 0; index < checkedListDays.CheckedIndices.Count; index++) - { - Schedule.WeekDays |= ListIndexDay[checkedListDays.CheckedIndices[index]]; - } // for - - return Schedule; - } // GetSchedule - - #endregion - - private void SchedulePatternWeekly_Load(object sender, EventArgs e) - { - var culture = System.Threading.Thread.CurrentThread.CurrentCulture; - var info = culture.DateTimeFormat; - var dayNames = info.DayNames; - ListIndexDay = new RecordWeekDays[7]; - - for (int index = 0, day = (int)info.FirstDayOfWeek; index < dayNames.Length; index++) - { - var dayName = dayNames[(int)day]; - dayName = char.ToUpper(dayName[0], culture) + dayName.Substring(1, dayName.Length - 1); - checkedListDays.Items.Add(dayName); - - ListIndexDay[index] = RecordWeekly.ToRecordWeekDays((DayOfWeek)day); - day = (day + 1) % 7; - } // for - } // SchedulePatternWeekly_Load - - private void checkAllDays_CheckedChanged(object sender, EventArgs e) - { - if (checkAllDays.CheckState == CheckState.Indeterminate) return; - - var checkState = checkAllDays.CheckState; - for (int index = 0; index < checkedListDays.Items.Count; index++) - { - checkedListDays.SetItemCheckState(index, checkState); - } // for - } // checkAllDays_CheckedChanged - - private void checkedListDays_ItemCheck(object sender, ItemCheckEventArgs e) - { - int checkCount = checkedListDays.CheckedItems.Count; - checkCount += (e.NewValue == CheckState.Checked) ? 1 : -1; - if (checkCount == checkedListDays.Items.Count) - { - checkAllDays.CheckState = CheckState.Checked; - } - else - { - checkAllDays.CheckState = (checkCount == 0)? CheckState.Unchecked : CheckState.Indeterminate; - } // if-else - } // checkedListDays_ItemCheck - - private void checkedListDays_Validating(object sender, CancelEventArgs e) - { - e.Cancel = false; - if (!this.Visible) return; - - if (checkedListDays.CheckedIndices.Count == 0) - { - e.Cancel = true; - MessageBox.Show(this, ControlTexts.WeeklyScheduleNoDays, ControlTexts.RecordingScheduleValidationCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); - this.Focus(); - checkedListDays.Focus(); - } // if - } // checkedListDays_Validating - } // class SchedulePatternWeekly -} // namespace diff --git a/1.5 'Kruger 60'/UiServices.Record/License.txt b/1.5 'Kruger 60'/UiServices.Record/License.txt deleted file mode 100644 index c9479ece..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/License.txt +++ /dev/null @@ -1,43 +0,0 @@ -Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury and its contributors - -This Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in "EXCEPTIONS". -All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefónica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - -***************************************************************************** -** Microsoft Reciprocal License (Ms-RL) ** -***************************************************************************** - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. Definitions - -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights - -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations - -(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. -(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. -(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. -(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. -(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - -***************************************************************************** -** EXCEPTIONS ** -***************************************************************************** - -There are no exceptions diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/AssemblyInfo.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/AssemblyInfo.cs deleted file mode 100644 index f4231ace..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute parameters to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UI Services: Record")] -[assembly: AssemblyDescription("IpTviewr.UiServices.Record")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCopyright(SolutionVersion.DefaultCopyright)] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("cc6cd171-a739-43b5-b239-3864b3c78852")] - -// Version information for an assembly consists of the following four values: -// Major Version -// Minor Version -// Build Number -// Revision -[assembly: AssemblyVersion(SolutionVersion.DefaultAssemblyVersion)] diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs deleted file mode 100644 index c4c27a5a..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.Designer.cs +++ /dev/null @@ -1,193 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IpTviewr.UiServices.Record.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IpTviewr.UiServices.Record.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Cancel_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Cancel_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Delete_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Delete_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_EditTask_16x16 { - get { - object obj = ResourceManager.GetObject("Action_EditTask_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Ok_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Ok_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Play_LG_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Play_LG_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_Record_16x16 { - get { - object obj = ResourceManager.GetObject("Action_Record_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Action_RecordButton_16x16 { - get { - object obj = ResourceManager.GetObject("Action_RecordButton_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Icon_Record_48x48 { - get { - object obj = ResourceManager.GetObject("Icon_Record_48x48", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon Icon_Recorder { - get { - object obj = ResourceManager.GetObject("Icon_Recorder", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - - /// - /// Looks up a localized string similar to The selected TV channel has been marked as inactive and might not be available. - /// - ///Do you still want to schedule a recording of {0}?. - /// - internal static string RecordDeadTvChannel { - get { - return ResourceManager.GetString("RecordDeadTvChannel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recording task has been sucessfully created.. - /// - internal static string SchedulerCreateTaskOk { - get { - return ResourceManager.GetString("SchedulerCreateTaskOk", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Info_16x16 { - get { - object obj = ResourceManager.GetObject("Status_Info_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Status_Warning_16x16 { - get { - object obj = ResourceManager.GetObject("Status_Warning_16x16", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx b/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx deleted file mode 100644 index 4910e50f..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/Properties/Resources.resx +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\..\common.ui\resources\action_cancel_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_delete_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_edittask_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_ok_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\..\common.ui\resources\action_play_lg_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\action_record_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\icon_recorder.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\icon_record_48x48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - The selected TV channel has been marked as inactive and might not be available. - -Do you still want to schedule a recording of {0}? - - - The recording task has been sucessfully created. - - - ..\resources\status_info_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\status_warning_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\action_recordbutton_16x16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs b/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs deleted file mode 100644 index b997d17e..00000000 --- a/1.5 'Kruger 60'/UiServices.Record/RecordChannelDialog.cs +++ /dev/null @@ -1,695 +0,0 @@ -// Copyright (C) 2014-2016, Codeplex/GitHub user AlphaCentaury -// All rights reserved, except those granted by the governing license of this software. See 'license.txt' file in the project root for complete license information. - -using IpTviewr.Common; -using IpTviewr.Common.Telemetry; -using IpTviewr.Services.Record.Serialization; -using IpTviewr.UiServices.Common; -using IpTviewr.UiServices.Common.Forms; -using IpTviewr.UiServices.Configuration; -using IpTviewr.UiServices.Configuration.Logos; -using IpTviewr.UiServices.Configuration.Schema2014.Config; -using IpTviewr.UiServices.Record.Controls; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Linq; -using System.Windows.Forms; - -namespace IpTviewr.UiServices.Record -{ - public partial class RecordChannelDialog : CommonBaseForm - { - public static readonly TimeSpan DefaultExpiryDateTimeSpan = new TimeSpan(23, 0, 0); - - private const string ListLocationsSelectedImageKey = "selected"; - private const string ListLocationsDefaultImageKey = "folder"; - - private bool IsTaskNameUserProvided; - private DateTime CurrentStartDateTime; - private RecordScheduleKind CurrentScheduleKind; - private int CurrentSelectedLocationIndex; - - public RecordTask Task - { - get; - set; - } // Task - - public bool IsNewTask - { - get; - set; - } // IsNewTask - - public DateTime LocalReferenceTime - { - get; - set; - } // LocalReferenceTime - - public static string[] GetFilenameExtensions() - { - var separators = new string[] { "\r\n" }; - var extensions = Properties.RecordChannel.FileExtensions.Split(separators, StringSplitOptions.RemoveEmptyEntries); - - return extensions; - } // GetFilenameExtensions - - public RecordChannelDialog() - { - InitializeComponent(); - Icon = Properties.Resources.Icon_Recorder; - LocalReferenceTime = DateTime.Now; - } // constructor - - #region Form events - - private void DialogRecordChannel_Load(object sender, EventArgs e) - { - SafeCall(DialogRecordChannel_Load_Implementation, sender, e); - } // DialogRecordChannel_Load - - private void DialogRecordChannel_Shown(object sender, EventArgs e) - { - SafeCall(DialogRecordChannel_Shown_Implementation, sender, e); - } // DialogRecordChannel_Shown - - #endregion - - #region Form events implementation - - private void DialogRecordChannel_Load_Implementation(object sender, EventArgs e) - { - BasicGoogleTelemetry.SendScreenHit(this); - - // Initialize - if (Task == null) - { - if (this.DesignMode) - { - Task = RecordTask.CreateWithDefaultValues(null); - IsNewTask = true; - } - else - { - throw new ArgumentNullException(); - } // if-else - } // if - - // General - InitGeneralData(); - // Schedule tab - InitScheduleData(); - // Duration tab - InitDurationData(); - // Description tab - InitDescriptionData(); - // Save tab - InitSaveData(); - // Advanced tab - InitAdvancedData(); - } // DialogRecordChannel_Load_Implementation - - private void DialogRecordChannel_Shown_Implementation(object sender, EventArgs e) - { - if (CurrentSelectedLocationIndex >= 0) - { - // force creation of the control - // .NET WinForms BUG: selecting an item when the control is NOT created does not update the SelectedItems/SelectedIndexes collection - var x = listViewLocations.Handle; - Debug.Assert(listViewLocations.IsHandleCreated); - listViewLocations.Items[CurrentSelectedLocationIndex].Selected = true; - } // if - } // DialogRecordChannel_Shown_Implementation - - #endregion - - #region Form control events - - private void buttonOk_Click(object sender, EventArgs e) - { - SafeCall(buttonOk_Click_Implementation, sender, e); - } // buttonOk_Click - - private void buttonOk_Click_Implementation(object sender, EventArgs e) - { - var isValid = this.ValidateChildren(ValidationConstraints.Enabled); - if (!isValid) return; - - // General - GetGeneralData(); - // Schedule tab - GetScheduleData(); - // Duration tab - GetDurationData(); - // Description tab - GetDescriptionData(); - // Save tab - GetSaveData(); - // Advanced tab - GetAdvancedData(); - - this.DialogResult = System.Windows.Forms.DialogResult.OK; - } // buttonOk_Click_Implementation - - #endregion - - #region 'General' form setup & get data - - private void InitGeneralData() - { - // service logo - var serviceLogo = AppUiConfiguration.Current.ServiceLogoMappings.FromServiceKey(Task.Channel.ServiceKey); - pictureChannelLogo.Image = serviceLogo.GetImage(LogoSize.Size64); - - // service name - labelChannelName.Text = string.Format("{0} {1}", Task.Channel.LogicalNumber, Task.Channel.Name); - - // program name - if (Task.Program != null) - { - labelProgramDescription.Text = Task.Program.Title; - labelProgramSchedule.Text = string.Format("{0} ({1})", FormatString.DateTimeFromToMinutes(Task.Program.LocalStartTime, Task.Program.LocalEndTime, LocalReferenceTime), - FormatString.TimeSpanTotalMinutes(Task.Program.Duration, FormatString.Format.Extended)); - } - else - { - labelChannelName.Top = pictureChannelLogo.Top; - labelChannelName.Height = pictureChannelLogo.Height; - - labelProgramDescription.Visible = false; - labelProgramSchedule.Visible = false; - } // if-else - } // InitGeneralData - - private void GetGeneralData() - { - // nothing to get - } // GetGeneralData - - #endregion - - #region "Schedule" tab events / setup & get data - - private void InitScheduleData() - { - // Schedule kind - // Note: this will fire DateTimeChanged and ScheduleKindChanged events, - // thus allowing us to get the right StartDate and Kind and not having to call more 'setup' methods - recordingSchedule.SetSchedule(Task.Schedule, IsNewTask); - - // Expiry date - var schedule = Task.Schedule; - checkBoxExpiryDate.Checked = schedule.ExpiryDate.HasValue; - dateTimeExpiryDate.Value = (schedule.ExpiryDate.HasValue) ? schedule.ExpiryDate.Value : CurrentStartDateTime + DefaultExpiryDateTimeSpan; - - // Safety margin - checkBoxStartMargin.Checked = schedule.SafetyMargin.HasValue; - numericStartMargin.Value = schedule.SafetyMargin ?? RecordSchedule.DefaultSafetyMargin; - } // InitScheduleData - - private void GetScheduleData() - { - var schedule = recordingSchedule.GetSchedule(); - Task.Schedule = schedule; - - schedule.ExpiryDate = null; - schedule.SafetyMargin = null; - - if (schedule.Kind == RecordScheduleKind.OneTime) return; - - if ((checkBoxExpiryDate.Checked) && (checkBoxExpiryDate.Enabled)) - { - var date = dateTimeExpiryDate.Value; - var expiryDate = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0); - schedule.ExpiryDate = expiryDate; - } // if - - if ((checkBoxStartMargin.Checked) && (checkBoxStartMargin.Enabled) && (numericStartMargin.Value > 0)) - { - schedule.SafetyMargin = (int)numericStartMargin.Value; - } // if - } // GetScheduleData - - private void recordingSchedule_ScheduleKindChanged(object sender, RecordingSchedule.KindChangedEventArgs e) - { - CurrentScheduleKind = e.Kind; - - var enabled = (e.Kind != RecordScheduleKind.RightNow); - UpdateStartMarginStatus(enabled); - EnableExpiryDate(); - recordingTime.SetScheduleKind(e.Kind); - - ChangeOkButtonText(enabled); - } // recordingSchedule_ScheduleKindChanged - - private void recordingSchedule_DateTimeChanged(object sender, RecordingSchedule.DateTimeChangedEventArgs e) - { - CurrentStartDateTime = e.DateTime; - recordingTime.SetStartTime(CurrentStartDateTime); - UpdateTaskName(); - } // schedulePattern_DateTimeChanged - - private void checkBoxExpiryDate_CheckedChanged(object sender, EventArgs e) - { - EnableExpiryDate(); - } // checkBoxExpiryDate_CheckedChanged - - private void EnableExpiryDate() - { - var expiryDisallowed = (CurrentScheduleKind == RecordScheduleKind.RightNow) || - (CurrentScheduleKind == RecordScheduleKind.OneTime); - - checkBoxExpiryDate.Visible = !expiryDisallowed; - checkBoxExpiryDate.Enabled = !expiryDisallowed; - - dateTimeExpiryDate.Visible = !expiryDisallowed; - dateTimeExpiryDate.Enabled = checkBoxExpiryDate.Checked; - - EnableSchedulerDeleteTask(expiryDisallowed | (checkBoxExpiryDate.Enabled & checkBoxExpiryDate.Checked)); - } // EnableExpiryDate - - private void checkBoxStartMargin_CheckedChanged(object sender, EventArgs e) - { - UpdateStartMarginStatus(true); - } // checkBoxStartMargin_CheckedChanged - - private void UpdateStartMarginStatus(bool enabled) - { - checkBoxStartMargin.Visible = enabled; - checkBoxStartMargin.Enabled = enabled; - - numericStartMargin.Visible = enabled; - numericStartMargin.Enabled = checkBoxStartMargin.Checked; - - labelStartMarginSufix.Visible = enabled; - labelStartMarginSufix.Enabled = checkBoxStartMargin.Checked; - } // UpdateStartMarginStatus - - private void ChangeOkButtonText(bool schedule) - { - buttonOk.ChangeImage(schedule ? Properties.Resources.Action_Ok_16x16 : Properties.Resources.Action_RecordButton_16x16); - buttonOk.Text = schedule ? Properties.RecordChannel.RecordButtonSchedule : Properties.RecordChannel.RecordButtonRecord; - } // ChangeOkButtonText - - #endregion - - #region "Duration" tab events / setup & get data - - private void InitDurationData() - { - recordingTime.SetDuration(CurrentStartDateTime, Task.Schedule.Kind, Task.Duration); - } // InitDurationData() - - private void GetDurationData() - { - Task.Duration = recordingTime.GetDuration(); - } // GetDurationData - - #endregion - - #region "Save" tab events / setup & get data - - private void InitSaveData() - { - // Fill extensions combo - comboFileExtension.Items.AddRange(GetFilenameExtensions()); - - // Name (filename) - textFilename.SetText(string.IsNullOrEmpty(Task.Action.Filename)? Task.Channel.Name : Task.Action.Filename, false); - - // Extension - comboFileExtension.Text = string.IsNullOrEmpty(Task.Action.FileExtension) ? comboFileExtension.Items[0] as string : Task.Action.FileExtension; - - // Save locations - var defaultItem = SetListLocations(AppUiConfiguration.Current.User.Record.SaveLocations); - SelectSaveLocation(Task.Action.SaveLocationName, Task.Action.SaveLocationPath, defaultItem); - } // InitSaveData - - private void GetSaveData() - { - var locationName = listViewLocations.SelectedItems[0].SubItems[0].Text; - if (locationName == Properties.RecordChannel.SaveDefaultLocation) locationName = null; - var locationPath = listViewLocations.SelectedItems[0].SubItems[1].Text; - - Task.Action.Filename = textFilename.Text.Trim(); - Task.Action.FileExtension = comboFileExtension.Text.Trim(); - Task.Action.SaveLocationName = locationName; - Task.Action.SaveLocationPath = locationPath; - Task.Action.Recorder = RecordHelper.GetDefaultRecorder(); - } // GetSaveData - - private void textFilename_Validating(object sender, CancelEventArgs e) - { - var text = textFilename.Text.Trim(); - e.Cancel = (text.Length == 0); - - if (e.Cancel) - { - ControlValidationFailed(Properties.RecordChannel.EmptyFileName, sender as Control); - } // if - } // textFilename_Validating - - private void comboFileExtension_Validating(object sender, CancelEventArgs e) - { - var text = comboFileExtension.Text.Trim(); - e.Cancel = (text.Length == 0); - - if (e.Cancel) - { - ControlValidationFailed(Properties.RecordChannel.EmptyFileExtension, sender as Control); - } // if - } // comboFileExtension_Validating - - private void listViewLocations_SelectedIndexChanged(object sender, EventArgs e) - { - CurrentSelectedLocationIndex = (listViewLocations.SelectedIndices.Count > 0) ? listViewLocations.SelectedIndices[0] : -1; - - for (int index = 0; index < listViewLocations.Items.Count; index++) - { - var item = listViewLocations.Items[index]; - if (item.Index == CurrentSelectedLocationIndex) - { - item.ImageKey = ListLocationsSelectedImageKey; - } - else if (item.ImageKey != ListLocationsDefaultImageKey) - { - item.ImageKey = ListLocationsDefaultImageKey; - } // if-else - } // for index - } // listViewLocations_SelectedIndexChanged - - private void listViewLocations_Validating(object sender, CancelEventArgs e) - { - e.Cancel = (listViewLocations.SelectedIndices.Count == 0); - if (e.Cancel) - { - ControlValidationFailed(Properties.RecordChannel.NoSaveLocation, sender as Control); - } // if - } // listViewLocations_Validating - - private void buttonSelectFolder_Click(object sender, EventArgs e) - { - if (listViewLocations.SelectedItems.Count == 0) - { - selectFolder.SelectedPath = null; - } - else - { - selectFolder.SelectedPath = listViewLocations.SelectedItems[0].SubItems[1].Text; - } // if-else - - if (selectFolder.ShowDialog(this) != System.Windows.Forms.DialogResult.OK) return; - - SelectAppendSaveLocation(selectFolder.SelectedPath); - } // buttonSelectFolder_Click - - private ListViewItem SetListLocations(IList locations) - { - ListViewItem defaultItem; - - if (locations == null) throw new ArgumentNullException(); - - defaultItem = null; - listViewLocations.BeginUpdate(); - listViewLocations.Items.Clear(); - - CurrentSelectedLocationIndex = (locations.Count == 0) ? -1 : 0; - for (int index = 0; index < locations.Count; index++) - { - var name = locations[index].Name; - if (string.IsNullOrEmpty(name)) name = Properties.RecordChannel.SaveDefaultLocation; - - var item = listViewLocations.Items.Add(name); - item.ImageKey = ListLocationsDefaultImageKey; - item.SubItems.Add(locations[index].Path.Trim()); - - if (string.IsNullOrEmpty(locations[index].Name)) defaultItem = item; - } // for - - int sortColumn = (listViewLocations.CurrentSortColumn < 0) ? 0 : listViewLocations.CurrentSortColumn; - listViewLocations.Sort(sortColumn, !listViewLocations.CurrentSortIsDescending); - listViewLocations.EndUpdate(); - - return defaultItem; - } // SetListLocations - - private void SelectSaveLocation(string locationName, string path, ListViewItem defaultItem) - { - ListViewItem item; - - if ((locationName == null) && (!string.IsNullOrEmpty(path))) - { - locationName = Properties.RecordChannel.SaveDefaultLocation; - } // if - - var find = from ListViewItem listItem in listViewLocations.Items - where string.Compare(listItem.Text, locationName, StringComparison.InvariantCultureIgnoreCase) == 0 - select listItem; - item = find.FirstOrDefault(); - - if (item == null) - { - if (string.IsNullOrEmpty(path)) - { - if (listViewLocations.Items.Count > 0) - { - item = defaultItem; - } // if - } - else - { - locationName = (locationName != null) ? Properties.RecordChannel.SaveMissingLocation : Properties.RecordChannel.SaveCustomLocation; - item = listViewLocations.Items.Add(locationName); - item.ImageKey = ListLocationsDefaultImageKey; - item.SubItems.Add(Task.Action.SaveLocationPath); - } // if-else - } // if-else - - if (item == null) - { - CurrentSelectedLocationIndex = -1; - } - else - { - item.Selected = true; - CurrentSelectedLocationIndex = item.Index; - } // if-else - } // SelectSaveLocation - - private void SelectAppendSaveLocation(string path) - { - var find = from ListViewItem listItem in listViewLocations.Items - where string.Compare(listItem.SubItems[1].Text, path, StringComparison.InvariantCultureIgnoreCase) == 0 - select listItem; - var item = find.FirstOrDefault(); - - if (item == null) - { - item = listViewLocations.Items.Add(Properties.RecordChannel.SaveCustomLocation); - item.ImageKey = ListLocationsDefaultImageKey; - item.SubItems.Add(path); - } // if - - item.Selected = true; - CurrentSelectedLocationIndex = item.Index; - } // SelectAppendSaveLocation - - #endregion - - #region "Description" tab events / setup & get data - - private void InitDescriptionData() - { - textTaskDescription.Text = Task.Description.Description; - checkAppendRecordingDetails.Checked = Task.Description.AddDetails; - } // InitDescriptionData - - private void GetDescriptionData() - { - if (Task.Schedule.Kind == RecordScheduleKind.RightNow) - { - CurrentStartDateTime = DateTime.Now; - UpdateTaskName(); - } // if - Task.Description.Description = textTaskDescription.Text.Trim(); - Task.Description.AddDetails = checkAppendRecordingDetails.Checked; - } // GetDescriptionData - - private void textTaskName_TextChanged(object sender, EventArgs e) - { - IsTaskNameUserProvided = true; - } // textTaskName_TextChanged - - private void textTaskName_Validating(object sender, CancelEventArgs e) - { - var text = textTaskName.Text.Trim(); - - e.Cancel = (text.Length == 0); - if (e.Cancel) - { - ControlValidationFailed(Properties.RecordChannel.EmptyTaskName, sender as Control); - return; - } // if - - e.Cancel = (text.Length > RecordTaskSerialization.MaxTaskNameLength); - if (e.Cancel) - { - ControlValidationFailed(string.Format(Properties.RecordChannel.TooLongTaskName, RecordTaskSerialization.MaxTaskNameLength), sender as Control); - return; - } // if - } // textTaskName_Validating - - private void UpdateTaskName() - { - if (IsTaskNameUserProvided) return; - - var taskName = RecordDescription.CreateTaskName(Task.Channel, CurrentStartDateTime); - textTaskName.SetText(taskName, false); - } // UpdateTaskName - - #endregion - - #region "Advanced" tab events / setup & get data - - private void InitAdvancedData() - { - // task name - if (string.IsNullOrEmpty(Task.Description.TaskSchedulerName)) - { - // When the SetSchedule method of the RecordingSchedule is called, it will fire a DateTime changed event. - // As we capture this event to adjust the task name, there's no need to call UpdateTaskName() again - // UpdateTaskName(schedulePattern.Pattern.StartDateTime); - } - else - { - IsTaskNameUserProvided = true; - textTaskName.Text = Task.Description.TaskSchedulerName; - } // if-else - textTaskName.Enabled = IsNewTask; - checkAddTaskPrefix.Enabled = IsNewTask; - checkAddTaskPrefix.Checked = Task.Description.AddPrefix; - - // task folder - comboSchedulerFolder.DisplayMember = "Name"; - comboSchedulerFolder.ValueMember = "Path"; - var folders = AppUiConfiguration.Current.User.Record.TaskSchedulerFolders; - if (folders != null) - { - comboSchedulerFolder.Items.AddRange(folders); - } // if - comboSchedulerFolder.Items.Add(new RecordTaskSchedulerFolder(Properties.RecordChannel.TaskSchedulerRootFolder, "")); - comboSchedulerFolder.SelectedIndex = 0; - comboSchedulerFolder.Enabled = IsNewTask; - - checkSchedulerASAP.Checked = Task.AdvancedSettings.AsSoonAsPossible; - - checkSchedulerRetry.Checked = Task.AdvancedSettings.FailureRetry.Enabled && (Task.AdvancedSettings.FailureRetry.MaxRetries > 0); - timeSpanSchedulerRetry.Value = Task.AdvancedSettings.FailureRetry.RestartInterval; - numericSchedulerMaxRetries.Value = Task.AdvancedSettings.FailureRetry.MaxRetries; - - checkSchedulerDeleteTask.Checked = Task.AdvancedSettings.DeleteAfter.Enabled; - timeSpanSchedulerDeleteTaskAfter.Value = Task.AdvancedSettings.DeleteAfter.Time; - - switch (Task.AdvancedSettings.MultipleInstances) - { - case RecordMultipleInstances.RecordBoth: comboSchedulerAlreadyRunning.SelectedIndex = 0; break; // Run in paralel (record both) - case RecordMultipleInstances.DoNotRecord: comboSchedulerAlreadyRunning.SelectedIndex = 1; break; // Do not record (continue previous recording) - case RecordMultipleInstances.Queue: comboSchedulerAlreadyRunning.SelectedIndex = 2; break; // Wait for previous recording to end and start recording - case RecordMultipleInstances.StopPrevious: comboSchedulerAlreadyRunning.SelectedIndex = 3; break; // Stop previous recording and proceed - default: - comboSchedulerAlreadyRunning.SelectedIndex = -1; break; - } // switch - } // InitAdvancedData - - private void GetAdvancedData() - { - Task.Description.Name = textTaskName.Text.Trim(); - Task.Description.AddPrefix = checkAddTaskPrefix.Checked; - - // Task scheduler folder - if (comboSchedulerFolder.SelectedIndex < 0) - { - Task.AdvancedSettings.TaskSchedulerFolder = null; - } - else - { - Task.AdvancedSettings.TaskSchedulerFolder = (comboSchedulerFolder.SelectedItem as RecordTaskSchedulerFolder).Path; - } // if-else - - // ASAP - Task.AdvancedSettings.AsSoonAsPossible = checkSchedulerASAP.Checked & checkSchedulerASAP.Enabled; - - // Retry - Task.AdvancedSettings.FailureRetry.Enabled = checkSchedulerRetry.Checked & checkSchedulerRetry.Enabled; - Task.AdvancedSettings.FailureRetry.RestartInterval = timeSpanSchedulerRetry.Value; - Task.AdvancedSettings.FailureRetry.MaxRetries = (int)numericSchedulerMaxRetries.Value; - - // Delete after - Task.AdvancedSettings.DeleteAfter.Enabled = checkSchedulerDeleteTask.Checked && checkSchedulerDeleteTask.Enabled; - Task.AdvancedSettings.DeleteAfter.Time = timeSpanSchedulerDeleteTaskAfter.Value; - - // Max execution time - // TODO: no UI yet! - // Remember: - //Task.AdvancedSettings.ExecutionTimeLimit.Enabled = checkSchedulerExecutionLimit.Checked; - //Task.AdvancedSettings.ExecutionTimeLimit.Time = timeSpanSchedulerExecutionLimit.Value; - Task.AdvancedSettings.ExecutionTimeLimit.Enabled = true; // (Task.Schedule.Kind != RecordScheduleKind.RightNow); // use default time limit - - // Wake up computer - // TODO: no UI yet! - Task.AdvancedSettings.WakeComputer = true; - - // Multiple instances - switch (comboSchedulerAlreadyRunning.SelectedIndex) - { - default: - case 0: Task.AdvancedSettings.MultipleInstances = RecordMultipleInstances.RecordBoth; break; // Run in paralel (record both) - case 1: Task.AdvancedSettings.MultipleInstances = RecordMultipleInstances.DoNotRecord; break; // Do not record (continue previous recording) - case 2: Task.AdvancedSettings.MultipleInstances = RecordMultipleInstances.Queue; break; // Wait for previous recording to end and start recording - case 3: Task.AdvancedSettings.MultipleInstances = RecordMultipleInstances.StopPrevious; break; // Stop previous recording and proceed - } // switch - } // GetAdvancedData - - private void checkSchedulerRetry_CheckedChanged(object sender, EventArgs e) - { - bool enabled = checkSchedulerRetry.Checked; - - checkSchedulerRetry.Enabled = enabled; - timeSpanSchedulerRetry.Enabled = enabled; - labelSchedulerMaxRetries.Enabled = enabled; - numericSchedulerMaxRetries.Enabled = enabled; - } // checkSchedulerRetry_CheckedChanged - - private void checkSchedulerDeleteTask_CheckedChanged(object sender, EventArgs e) - { - EnableSchedulerDeleteTask(true); - } - - private void EnableSchedulerDeleteTask(bool enable) - { - checkSchedulerDeleteTask.Enabled = enable; - timeSpanSchedulerDeleteTaskAfter.Enabled = checkSchedulerDeleteTask.Checked & enable; - } // EnableSchedulerDeleteTask - - #endregion - - #region Private methods - - private void ControlValidationFailed(string text, Control control) - { - MessageBox.Show(this, text, this.Name, MessageBoxButtons.OK, MessageBoxIcon.Warning); - - var tabPage = control.Parent as TabPage; - if (tabPage != null) - { - tabProperties.SelectedTab = tabPage; - } // if - control.Focus(); - } // ControlValidationFailed - - #endregion - } // class DialogRecordChannel -} // namespace diff --git a/1.5 'Kruger 60'/internaltools.license.es.rtf b/1.5 'Kruger 60'/internaltools.license.es.rtf new file mode 100644 index 00000000..ed887b02 --- /dev/null +++ b/1.5 'Kruger 60'/internaltools.license.es.rtf @@ -0,0 +1,249 @@ +{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang3082\deflangfe3082\deftab708{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\fmodern\fprq1\fcharset0 Courier New;}{\f2\froman\fprq2\fcharset2 Symbol;}{\f3\fnil\fprq2\fcharset2 Wingdings;}} +{\colortbl ;\red0\green0\blue255;} +{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}{\s3 heading 3;}{\s4 heading 4;}} +\viewkind4\uc1\pard\brdrb\brdrs\brdrw30 \ltrpar\s1\sb100\sa100\kerning36\b\f0\fs48 Soluci\'f3n VS 'InternalTools.sln'\par +\pard\ltrpar\sb100\sa100\kerning0\b0\fs22 IPTViewr: Virtual Decoder for movistar+ version 1.5 \ldblquote Kruger 60\rdblquote Beta 1\line\i por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\cf1\ul\i \cf0\ulnone \line\cf1\ul \cf0\ulnone\i0\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s2\sb100\sa100\b\fs40 T\'e9rminos y condiciones de uso\par +\pard\ltrpar\sb100\sa100\b0\fs22 Los COMPONENTES y/o PROGRAMAS (el \ldblquote SOFTWARE\rdblquote ), ya sea en forma de c\'f3digo binario o fuente, est\'e1n \b sujeto a los t\'e9rminos de la Licencia Rec\'edproca de Microsoft \i\ldblquote Microsoft Reciprocal License\rdblquote (Ms-RL)\b0\i0 , salvo que se indique lo contrario. \line En particular, prevalecer\'e1n sobre estos t\'e9rminos de licencia, los especificados expresamente en el correspondiente archivo \ldblquote LICENSE\rdblquote de cada proyecto y/o carpeta. \line Todos los dem\'e1s derechos est\'e1n reservados por el/los autor(es) del software.\par +\b El SOFTWARE SE PROPORCIONA \ldblquote TAL CUAL\rdblquote , SIN GARANT\'cdA DE NING\'daN TIPO\b0 , expresa o impl\'edcita, incluyendo (pero no limit\'e1ndose a) las garant\'edas de comerciabilidad, idoneidad para un prop\'f3sito particular y no infracci\'f3n. \line En ning\'fan caso, los autores o titulares del Copyright ser\'e1n responsables de ninguna reclamaci\'f3n, da\'f1os o cualquier otra responsabilidad, ya sea en una acci\'f3n de contrato, agravio o cualquier otro motivo, con o sin relaci\'f3n con el software o el uso u otros aspectos del software.\par +\b AVISO IMPORTANTE: El presente software \i NO EST\'c1 SOPORTADO NI RESPALDADO\i0 por Movistar ni por Telef\'f3nica\b0 . \line El software puede dejar de funcionar en cualquier momento si movistar+ realiza cambios tecnol\'f3gicos en su plataforma.\par +\b NO DEBE LLAMARSE NUNCA al 1002 o al 1004\b0 si desaparecen canales de la lista o no pueden verse o cualquier otra anomal\'eda relaciona con el uso de este software. \line movistar+ s\'f3lo proporciona ayuda y soporte t\'e9cnico para su decodificador f\'edsico y \'fanicamente para los servicios contratados.\par +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. \line Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios.\par +Los logotipos de los canales de movistar+ pueden estar inclu\'eddos con el software. Estos logotipos son propiedad de los diferentes canales y sus compa\'f1\'edas propietarias. \line Los logos se suministran de \ldblquote buena fe\rdblquote , para poder identificar adecuadamente los diferentes canales, sin \'e1nimo de infringir ning\'fan derecho de copyright.\par +\pard\ltrpar\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34\ldblquote Microsoft Reciprocal License\rdblquote (\i Licencia rec\'edproca de Microsoft\i0 ) (Ms-RL)\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 A continuaci\'f3n se proporciona una traducci\'f3n aproximada de la \b Licencia rec\'edproca de Microsoft (Ms-RL)\b0 al espa\'f1ol. Esta traducci\'f3n carece de cualquier validez legal.\i0\par +Esta licencia rige el uso del software que lo acompa\'f1a. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definiciones\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 Los t\'e9rminos \ldblquote reproducir\rdblquote , \ldblquote reproducci\'f3n\rdblquote , \ldblquote obras derivadas\rdblquote y \ldblquote distribuci\'f3n\rdblquote tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 Una \ldblquote contribuci\'f3n\rdblquote es el software original, o cualquier adici\'f3n o cambio al software.\par +\f1\fs20 o\tab\f0\fs22 Un \ldblquote colaborador\rdblquote es cualquier persona que distribuye su contribuci\'f3n bajo esta licencia.\par +\f1\fs20 o\tab\f0\fs22 Las \ldblquote patentes licenciadas\rdblquote son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribuci\'f3n.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab Concesi\'f3n de derechos\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Concesi\'f3n de derechos de autor:\i0 Sujeto a los t\'e9rminos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la secci\'f3n 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regal\'edas para reproducir su contribuci\'f3n, preparar crear trabajos derivados de su contribuci\'f3n, y distribuir su contribuci\'f3n o cualquier trabajo derivado que usted cree.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i Concesi\'f3n de patentes:\i0 Sujeto a los t\'e9rminos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la secci\'f3n 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regal\'edas bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribuci\'f3n en el software o trabajos derivados de la contribuci\'f3n en el software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab Condiciones y limitaciones\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Derechos rec\'edprocos:\i0 Para cualquier archivo que distribuya que contenga c\'f3digo del software (en c\'f3digo fuente o formato binario), debe proporcionar a los destinatarios el c\'f3digo fuente de ese archivo junto con una copia de esta licencia, que ser\'e1 la licencia que regir\'e1 sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan c\'f3digo alguno del software en los t\'e9rminos de licenciamiento que usted elija.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i Sin licencia de marca comercial:\i0 esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ning\'fan colaborador.\par +\f1\fs20 o\tab\f0\fs22 (C) Si presenta una reclamaci\'f3n de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcion\'f3 finaliza autom\'e1ticamente.\par +\f1\fs20 o\tab\f0\fs22 (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribuci\'f3n que est\'e1n presentes en el software.\par +\f1\fs20 o\tab\f0\fs22 (E) Si distribuye cualquier porci\'f3n del software en forma de c\'f3digo fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribuci\'f3n. Si distribuye cualquier porci\'f3n del software en forma de c\'f3digo compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia.\par +\f1\fs20 o\tab\f0\fs22 (F) El software se proporciona \ldblquote tal cual est\'e1\rdblquote . Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garant\'edas o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garant\'edas impl\'edcitas de comerciabilidad, idoneidad para un prop\'f3sito particular y no infracci\'f3n.\par +\pard\ltrpar\sb100\sa100 []:\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s2\sb100\sa100\b\fs40 Licencias de uso\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b0\f2\fs20\'b7\tab\f0\fs22 Microsoft Reciprocal License (Ms-RL)\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f2\fs20\'b7\tab\f0\fs22 BSD 2-Clause \ldblquote Simplified\rdblquote License\par +\f2\fs20\'b7\tab\f0\fs22 BSD 3-Clause \ldblquote Revised\rdblquote License\par +\f2\fs20\'b7\tab\f0\fs22 The MIT License (MIT)\par +\f2\fs20\'b7\tab\f0\fs22 Microsoft\'ae Exception Message Box License Terms\par +\f2\fs20\'b7\tab\f0\fs22 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft Reciprocal License (Ms-RL)\par +\pard\ltrpar\sb100\sa100\b0\fs22 This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 The terms \ldblquote reproduce,\rdblquote \ldblquote reproduction,\rdblquote \ldblquote derivative works,\rdblquote and \ldblquote distribution\rdblquote have the same meaning here as under U.S. copyright law.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 A \ldblquote contribution\rdblquote is the original software, or any additions or changes to the software.\par +\f1\fs20 o\tab\f0\fs22 A \ldblquote contributor\rdblquote is any person that distributes its contribution under this license.\par +\f1\fs20 o\tab\f0\fs22\ldblquote Licensed patents\rdblquote are a contributor's patent claims that read directly on its contribution.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Rights\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Copyright Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i Patent Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab Conditions and Limitations\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Reciprocal Grants\i0 - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i No Trademark License\i0 - This license does not grant you rights to use any contributors' name, logo, or trademarks.\par +\f1\fs20 o\tab\f0\fs22 (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\par +\f1\fs20 o\tab\f0\fs22 (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\par +\f1\fs20 o\tab\f0\fs22 (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\par +\f1\fs20 o\tab\f0\fs22 (F) \i The software is licensed \ldblquote as-is.\rdblquote\i0 You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft Reciprocal License (Ms-RL)'\b0 aplica a los siguientes componentes:\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. AlphaCentaury.Licensing.Data\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. AlphaCentaury.Licensing.Data.Ui\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. ChannelLogos\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. ChannelLogosEditor\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. ConsoleExperiments\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. DvbStpClient\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 7. Etsi.Ts102034\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 8. ExceptionMsgBox\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 9. GuiTools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 10. InternalTools.sln\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Soluci\'f3n VS por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 11. IpTviewr.Common\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 12. IpTViewr.IpTvServices\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 13. IpTViewr.Native\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 14. IpTviewr.ToolsUiFramework\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 15. IpTviewrTools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 16. Services.EpgDiscovery\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 17. SourceCodeMaintenance\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 18. UiServices.Common\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 19. UiServices.Configuration\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 20. UiServices.Discovery\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 21. UiServices.DvbStpClient\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 22. UiServices.Forms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 BSD 2-Clause \ldblquote Simplified\rdblquote License\par +\pard\ltrpar\sb100\sa100\b0\fs22 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720 1.\tab Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +\pard\ltrpar\fi-360\li720\sb100\sa100 2.\tab Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +\pard\ltrpar\sb100\sa100\b THIS SOFTWARE IS PROVIDED\b0 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \b "AS IS"\b0 AND \b ANY EXPRESS OR IMPLIED WARRANTIES,\b0 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \b ARE DISCLAIMED.\b0 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\b 'BSD 2-Clause \ldblquote Simplified\rdblquote License'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Markdig\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Alexandre Mutel\i0\par +\b Copyright (c) 2018-2019, Alexandre Mutel\b0\par +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.)\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 BSD 3-Clause \ldblquote Revised\rdblquote License\par +\pard\ltrpar\sb100\sa100\b0\fs22 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720 1.\tab Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +\pard\ltrpar\fi-360\li720\sb100\sa100 2.\tab Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +3.\tab Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\par +\pard\ltrpar\sb100\sa100\b THIS SOFTWARE IS PROVIDED\b0 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \b "AS IS"\b0 AND \b ANY EXPRESS OR IMPLIED WARRANTIES,\b0 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \b ARE DISCLAIMED.\b0 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\b 'BSD 3-Clause \ldblquote Revised\rdblquote License'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. HtmlRenderer.Core\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Arthur Teplitzki, Jos\'e9 Manuel Men\'e9ndez Poo\i0\par +\b Copyright (c) 2009, Jos\'e9 Manuel Men\'e9ndez Poo\b0\par +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. HtmlRenderer.WinForms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Arthur Teplitzki, Jos\'e9 Manuel Men\'e9ndez Poo\i0\par +\b Copyright (c) 2009, Jos\'e9 Manuel Men\'e9ndez Poo\b0\par +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 The MIT License (MIT)\par +\pard\ltrpar\sb100\sa100\b0\fs22 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f2\fs20\'b7\tab\f0\fs22 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\pard\ltrpar\sb100\sa100\b THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND\b0 , EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\b 'The MIT License (MIT)'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. HtmlAgilityPack\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell\i0\par +\b Copyright \'a9 ZZZ Projects Inc. 2014 - 2017. All rights reserved.\b0\par +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. JetBrains.Annotations\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por JetBrains\i0\par +\pard\ltrpar\b Copyright (c) 2016 JetBrains \cf1\ul \cf0\ulnone\b0\par +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. Newtonsoft.Json\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por James Newton-King\i0\par +\b Copyright (c) 2007 James Newton-King\b0\par +Json.NET is a popular high-performance JSON framework for .NET\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. System.ValueTuple\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft\'ae Exception Message Box License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER\b0\par +\b PLEASE NOTE:\b0 Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. You may not use the supplement if you do not have a license for the software. The license terms for the software apply to your use of this supplement.\par +\b 'Microsoft\'ae Exception Message Box License Terms'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft\'ae Exception Message Box\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Microsoft\i0\par +\pard\ltrpar\cf1\ul \cf0\ulnone (Feature Pack for Microsoft SQL Server 2005 SP4) \line x86: ENU\\x86\\SQLServer2005_EMB.msi \line x64: ENU\\x64\\SQLServer2005_EMB.msi\par +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f2\fs20\'b7\tab\f0\fs22 updates,\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f2\fs20\'b7\tab\f0\fs22 supplements,\par +\f2\fs20\'b7\tab\f0\fs22 Internet-based services, and\par +\f2\fs20\'b7\tab\f0\fs22 support services\par +\pard\ltrpar\sb100\sa100 for this software, unless other terms accompany those items. If so, those terms apply.\par +\b BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\b0\par +\b If you comply with these license terms, you have the rights below.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\b\f0\fs22 Installation and Use.\b0 You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\b\f0\fs22 Included Microsoft Programs.\b0 The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at \b %Program Files%\\Microsoft SQL Server Compact Edition\\v4.0\b0 apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86.msm\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86.msm\par +\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_Microsoft.VC90.CRT.manifest\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_Microsoft.VC90.CRT.manifest\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\b 1.\tab Distributable Code.\b0 The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 1.\tab Right to Use and Distribute. The code and text files listed below are "Distributable Code."\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files.\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 add significant primary functionality to it in your programs;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code included in a setup program only as part of that setup program without modification;\par +\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement;\par +\f3\fs20\'a7\tab\f0\fs22 display your valid copyright notice on your programs; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 3.\tab Distribution Restrictions. You may not\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 alter any copyright, trademark or patent notice in the Distributable Code;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code to run on a platform other than the Windows platform;\par +\f3\fs20\'a7\tab\f0\fs22 include Distributable Code in malicious, deceptive or unlawful programs; or\par +\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that \par +\pard\ltrpar\fi-360\li3600\sb100\sa100\tx3600\f3\fs20\'a7\tab\f0\fs22 the code be disclosed or distributed in source code form; or\par +\pard\ltrpar\fi-360\li3600\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 others have the right to modify it.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;\par +\f1\fs20 o\tab\f0\fs22 make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation;\par +\f1\fs20 o\tab\f0\fs22 publish the software for others to copy;\par +\f1\fs20 o\tab\f0\fs22 rent, lease or lend the software; or\par +\f1\fs20 o\tab\f0\fs22 transfer the software or this agreement to any third party.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 4.\tab BACKUP COPY.\b0 You may make one backup copy of the software. You may use it only to reinstall the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 5.\tab DOCUMENTATION.\b0 Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.\par +\pard\ltrpar\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see \cf1\ul www.microsoft.com/exporting \cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is provided "as is," we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f2\fs20\'b7\tab\b\f0\fs22 United States.\b0 If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f2\fs20\'b7\tab\b\f0\fs22 Outside the United States.\b0 If you acquired the software in any other country, the laws of that country apply.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 10.\tab LEGAL EFFECT.\b0 This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 11.\tab DISCLAIMER OF WARRANTY.\b0 THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\par +\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\par +\pard\ltrpar\li720\sb100\sa100 This limitation applies to\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par +\pard\ltrpar\li720\sb100\sa100 It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft\'ae SQL Server Compact\'ae 4.0 SP1\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Microsoft\i0\par +\pard\ltrpar\cf1\ul \cf0\ulnone (Microsoft\'ae SQL Server\'ae Compact 4.0 SP1) \line x86: ENU\\SSCERuntime_x86-ENU.exe; \line x64: ENU\\SSCERuntime_x64-ENU.exe.msi\par +Microsoft\'ae SQL Server Compact\'ae 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder.\par +[]: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: \par +} diff --git a/1.5 'Kruger 60'/internaltools.license.es.txt b/1.5 'Kruger 60'/internaltools.license.es.txt new file mode 100644 index 00000000..7fd776ab --- /dev/null +++ b/1.5 'Kruger 60'/internaltools.license.es.txt @@ -0,0 +1,464 @@ +############################################################################## +## +## Solución VS 'InternalTools.sln' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## por Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Términos y condiciones de uso +============================================================================== + +Los COMPONENTES y/o PROGRAMAS (el “SOFTWARE”), ya sea en forma de código binario o fuente, están **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, salvo que se indique lo contrario. \ +En particular, prevalecerán sobre estos términos de licencia, los especificados expresamente en el correspondiente archivo “LICENSE” de cada proyecto y/o carpeta. \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**El SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +**AVISO IMPORTANTE: El presente software _NO ESTÁ SOPORTADO NI RESPALDADO_ por Movistar ni por Telefónica**. \ +El software puede dejar de funcionar en cualquier momento si movistar+ realiza cambios tecnológicos en su plataforma. + +**NO DEBE LLAMARSE NUNCA al 1002 o al 1004** si desaparecen canales de la lista o no pueden verse o cualquier otra anomalía relaciona con el uso de este software. \ +movistar+ sólo proporciona ayuda y soporte técnico para su decodificador físico y únicamente para los servicios contratados. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + +### “Microsoft Reciprocal License” (_Licencia recíproca de Microsoft_) (Ms-RL) + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + + +B.- Licencias de uso +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * BSD 2-Clause “Simplified” License + * BSD 3-Clause “Revised” License + * The MIT License (MIT) + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' aplica a los siguientes componentes: <<< + +1. AlphaCentaury.Licensing.Data +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. AlphaCentaury.Licensing.Data.Ui +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. ChannelLogos +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. ChannelLogosEditor +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. ConsoleExperiments +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. DvbStpClient +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. Etsi.Ts102034 +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. ExceptionMsgBox +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. GuiTools +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. InternalTools.sln +------------------------------ +Solución VS por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. IpTviewr.Common +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. IpTViewr.IpTvServices +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. IpTViewr.Native +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. IpTviewr.ToolsUiFramework +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +15. IpTviewrTools +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +16. Services.EpgDiscovery +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +17. SourceCodeMaintenance +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +18. UiServices.Common +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +19. UiServices.Configuration +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +20. UiServices.Discovery +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +21. UiServices.DvbStpClient +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +22. UiServices.Forms +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// BSD 2-Clause “Simplified” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 2-Clause “Simplified” License' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Markdig +------------------------------ +Paquete 'nuget' por Alexandre Mutel +Copyright (c) 2018-2019, Alexandre Mutel + A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + +//////////////////////////////////////////////////////////// +// +// BSD 3-Clause “Revised” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 3-Clause “Revised” License' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. HtmlRenderer.Core +------------------------------ +Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + +2. HtmlRenderer.WinForms +------------------------------ +Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. HtmlAgilityPack +------------------------------ +Paquete 'nuget' por ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell +Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved. + This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + +2. JetBrains.Annotations +------------------------------ +Paquete 'nuget' por JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +3. Newtonsoft.Json +------------------------------ +Paquete 'nuget' por James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +4. System.ValueTuple +------------------------------ +Paquete 'nuget' por Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Microsoft® Exception Message Box +------------------------------ +Biblioteca por Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Biblioteca por Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/internaltools.license.rtf b/1.5 'Kruger 60'/internaltools.license.rtf new file mode 100644 index 00000000..fd85426f --- /dev/null +++ b/1.5 'Kruger 60'/internaltools.license.rtf @@ -0,0 +1,229 @@ +{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang3082\deflangfe3082\deftab708{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fmodern\fprq1\fcharset0 Courier New;}{\f3\fnil\fprq2\fcharset2 Wingdings;}} +{\colortbl ;\red0\green0\blue255;} +{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}{\s3 heading 3;}{\s4 heading 4;}} +\viewkind4\uc1\pard\brdrb\brdrs\brdrw30 \ltrpar\s1\sb100\sa100\kerning36\b\f0\fs48 VS Solution 'InternalTools.sln'\par +\pard\ltrpar\sb100\sa100\kerning0\b0\fs22 IPTViewr: Virtual Decoder for movistar+ version 1.5 \ldblquote Kruger 60\rdblquote Beta 1\line\i by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\cf1\ul\i \cf0\ulnone \line\cf1\ul \cf0\ulnone\i0\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s2\sb100\sa100\b\fs40 Terms and conditions\par +\pard\ltrpar\sb100\sa100\b0\fs22 The COMPONENTS and/or PROGRAMS (\ldblquote SOFWARE\rdblquote ), either in binary or source code form, are \b licensed under the terms of the \i Microsoft Reciprocal License (Ms-RL)\b0\i0 , unless otherwise stated. \line In particular, those specified in the corresponding \ldblquote LICENSE\rdblquote file of each project and/or folder will prevail over these license terms. \line All other rights are reserved by the author(s) of the software.\par +\b\i The SOFTWARE IS PROVIDED \ldblquote AS IS\rdblquote , WITHOUT WARRANTY OF ANY KIND\b0\i0 , express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \line In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.\par +\b IMPORTANT NOTICE: This software is \i NOT SUPPORTED NOR ENDORSED\i0 by Movistar or Telef\'f3nica.\b0 \line This software may stop working at any time if movistar+ makes technological changes to its platform.\par +\b DO NOT EVER CALL 1002 nor 1004\b0 if channels disappear from the list or cannot be seen or if you experience any other anomaly related to the use of this software. \line movistar+ only provides help and support for their physical decoder and only for the contracted services.\par +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \line Its use in the context of this product does not constitute endorsement nor support by their respective owners.\par +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \line Logos are provided in \ldblquote good faith\rdblquote , in order to identify the different channels and no copyright infringement is intended.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s2\sb100\sa100\b\fs40 Licenses\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b0\f1\fs20\'b7\tab\f0\fs22 Microsoft Reciprocal License (Ms-RL)\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f1\fs20\'b7\tab\f0\fs22 BSD 2-Clause \ldblquote Simplified\rdblquote License\par +\f1\fs20\'b7\tab\f0\fs22 BSD 3-Clause \ldblquote Revised\rdblquote License\par +\f1\fs20\'b7\tab\f0\fs22 The MIT License (MIT)\par +\f1\fs20\'b7\tab\f0\fs22 Microsoft\'ae Exception Message Box License Terms\par +\f1\fs20\'b7\tab\f0\fs22 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft Reciprocal License (Ms-RL)\par +\pard\ltrpar\sb100\sa100\b0\fs22 This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 The terms \ldblquote reproduce,\rdblquote \ldblquote reproduction,\rdblquote \ldblquote derivative works,\rdblquote and \ldblquote distribution\rdblquote have the same meaning here as under U.S. copyright law.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 A \ldblquote contribution\rdblquote is the original software, or any additions or changes to the software.\par +\f2\fs20 o\tab\f0\fs22 A \ldblquote contributor\rdblquote is any person that distributes its contribution under this license.\par +\f2\fs20 o\tab\f0\fs22\ldblquote Licensed patents\rdblquote are a contributor's patent claims that read directly on its contribution.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Rights\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 (A) \i Copyright Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 (B) \i Patent Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab Conditions and Limitations\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 (A) \i Reciprocal Grants\i0 - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 (B) \i No Trademark License\i0 - This license does not grant you rights to use any contributors' name, logo, or trademarks.\par +\f2\fs20 o\tab\f0\fs22 (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\par +\f2\fs20 o\tab\f0\fs22 (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\par +\f2\fs20 o\tab\f0\fs22 (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\par +\f2\fs20 o\tab\f0\fs22 (F) \i The software is licensed \ldblquote as-is.\rdblquote\i0 You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft Reciprocal License (Ms-RL)'\b0 applies to the following components:\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. AlphaCentaury.Licensing.Data\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. AlphaCentaury.Licensing.Data.Ui\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. ChannelLogos\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. ChannelLogosEditor\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. ConsoleExperiments\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. DvbStpClient\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 7. Etsi.Ts102034\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 8. ExceptionMsgBox\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 9. GuiTools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 10. InternalTools.sln\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 VS Solution by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 11. IpTviewr.Common\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 12. IpTViewr.IpTvServices\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 13. IpTViewr.Native\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 14. IpTviewr.ToolsUiFramework\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 15. IpTviewrTools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 16. Services.EpgDiscovery\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 17. SourceCodeMaintenance\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 18. UiServices.Common\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 19. UiServices.Configuration\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 20. UiServices.Discovery\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 21. UiServices.DvbStpClient\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 22. UiServices.Forms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 BSD 2-Clause \ldblquote Simplified\rdblquote License\par +\pard\ltrpar\sb100\sa100\b0\fs22 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720 1.\tab Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +\pard\ltrpar\fi-360\li720\sb100\sa100 2.\tab Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +\pard\ltrpar\sb100\sa100\b THIS SOFTWARE IS PROVIDED\b0 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \b "AS IS"\b0 AND \b ANY EXPRESS OR IMPLIED WARRANTIES,\b0 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \b ARE DISCLAIMED.\b0 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\b 'BSD 2-Clause \ldblquote Simplified\rdblquote License'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Markdig\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Alexandre Mutel\i0\par +\b Copyright (c) 2018-2019, Alexandre Mutel\b0\par +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.)\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 BSD 3-Clause \ldblquote Revised\rdblquote License\par +\pard\ltrpar\sb100\sa100\b0\fs22 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720 1.\tab Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +\pard\ltrpar\fi-360\li720\sb100\sa100 2.\tab Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +3.\tab Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\par +\pard\ltrpar\sb100\sa100\b THIS SOFTWARE IS PROVIDED\b0 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \b "AS IS"\b0 AND \b ANY EXPRESS OR IMPLIED WARRANTIES,\b0 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \b ARE DISCLAIMED.\b0 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\b 'BSD 3-Clause \ldblquote Revised\rdblquote License'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. HtmlRenderer.Core\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Arthur Teplitzki, Jos\'e9 Manuel Men\'e9ndez Poo\i0\par +\b Copyright (c) 2009, Jos\'e9 Manuel Men\'e9ndez Poo\b0\par +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. HtmlRenderer.WinForms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Arthur Teplitzki, Jos\'e9 Manuel Men\'e9ndez Poo\i0\par +\b Copyright (c) 2009, Jos\'e9 Manuel Men\'e9ndez Poo\b0\par +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 The MIT License (MIT)\par +\pard\ltrpar\sb100\sa100\b0\fs22 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f1\fs20\'b7\tab\f0\fs22 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\pard\ltrpar\sb100\sa100\b THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND\b0 , EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\b 'The MIT License (MIT)'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. HtmlAgilityPack\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell\i0\par +\b Copyright \'a9 ZZZ Projects Inc. 2014 - 2017. All rights reserved.\b0\par +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. JetBrains.Annotations\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by JetBrains\i0\par +\pard\ltrpar\b Copyright (c) 2016 JetBrains \cf1\ul \cf0\ulnone\b0\par +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. Newtonsoft.Json\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by James Newton-King\i0\par +\b Copyright (c) 2007 James Newton-King\b0\par +Json.NET is a popular high-performance JSON framework for .NET\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. System.ValueTuple\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft\'ae Exception Message Box License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER\b0\par +\b PLEASE NOTE:\b0 Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. You may not use the supplement if you do not have a license for the software. The license terms for the software apply to your use of this supplement.\par +\b 'Microsoft\'ae Exception Message Box License Terms'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft\'ae Exception Message Box\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Microsoft\i0\par +\pard\ltrpar\cf1\ul \cf0\ulnone (Feature Pack for Microsoft SQL Server 2005 SP4) \line x86: ENU\\x86\\SQLServer2005_EMB.msi \line x64: ENU\\x64\\SQLServer2005_EMB.msi\par +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f1\fs20\'b7\tab\f0\fs22 updates,\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f1\fs20\'b7\tab\f0\fs22 supplements,\par +\f1\fs20\'b7\tab\f0\fs22 Internet-based services, and\par +\f1\fs20\'b7\tab\f0\fs22 support services\par +\pard\ltrpar\sb100\sa100 for this software, unless other terms accompany those items. If so, those terms apply.\par +\b BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\b0\par +\b If you comply with these license terms, you have the rights below.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\b\f0\fs22 Installation and Use.\b0 You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\b\f0\fs22 Included Microsoft Programs.\b0 The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at \b %Program Files%\\Microsoft SQL Server Compact Edition\\v4.0\b0 apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86.msm\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86.msm\par +\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_Microsoft.VC90.CRT.manifest\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_Microsoft.VC90.CRT.manifest\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\b 1.\tab Distributable Code.\b0 The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 1.\tab Right to Use and Distribute. The code and text files listed below are "Distributable Code."\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files.\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 add significant primary functionality to it in your programs;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code included in a setup program only as part of that setup program without modification;\par +\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement;\par +\f3\fs20\'a7\tab\f0\fs22 display your valid copyright notice on your programs; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 3.\tab Distribution Restrictions. You may not\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 alter any copyright, trademark or patent notice in the Distributable Code;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code to run on a platform other than the Windows platform;\par +\f3\fs20\'a7\tab\f0\fs22 include Distributable Code in malicious, deceptive or unlawful programs; or\par +\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that \par +\pard\ltrpar\fi-360\li3600\sb100\sa100\tx3600\f3\fs20\'a7\tab\f0\fs22 the code be disclosed or distributed in source code form; or\par +\pard\ltrpar\fi-360\li3600\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 others have the right to modify it.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;\par +\f2\fs20 o\tab\f0\fs22 make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation;\par +\f2\fs20 o\tab\f0\fs22 publish the software for others to copy;\par +\f2\fs20 o\tab\f0\fs22 rent, lease or lend the software; or\par +\f2\fs20 o\tab\f0\fs22 transfer the software or this agreement to any third party.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 4.\tab BACKUP COPY.\b0 You may make one backup copy of the software. You may use it only to reinstall the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 5.\tab DOCUMENTATION.\b0 Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.\par +\pard\ltrpar\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see \cf1\ul www.microsoft.com/exporting \cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is provided "as is," we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f1\fs20\'b7\tab\b\f0\fs22 United States.\b0 If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f1\fs20\'b7\tab\b\f0\fs22 Outside the United States.\b0 If you acquired the software in any other country, the laws of that country apply.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 10.\tab LEGAL EFFECT.\b0 This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 11.\tab DISCLAIMER OF WARRANTY.\b0 THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\par +\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\par +\pard\ltrpar\li720\sb100\sa100 This limitation applies to\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par +\pard\ltrpar\li720\sb100\sa100 It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft\'ae SQL Server Compact\'ae 4.0 SP1\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Microsoft\i0\par +\pard\ltrpar\cf1\ul \cf0\ulnone (Microsoft\'ae SQL Server\'ae Compact 4.0 SP1) \line x86: ENU\\SSCERuntime_x86-ENU.exe; \line x64: ENU\\SSCERuntime_x64-ENU.exe.msi\par +Microsoft\'ae SQL Server Compact\'ae 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder.\par +[]: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: \par +} diff --git a/1.5 'Kruger 60'/internaltools.license.txt b/1.5 'Kruger 60'/internaltools.license.txt new file mode 100644 index 00000000..55ae9680 --- /dev/null +++ b/1.5 'Kruger 60'/internaltools.license.txt @@ -0,0 +1,435 @@ +############################################################################## +## +## VS Solution 'InternalTools.sln' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +The COMPONENTS and/or PROGRAMS (“SOFWARE”), either in binary or source code form, are **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_**, unless otherwise stated. \ +In particular, those specified in the corresponding “LICENSE” file of each project and/or folder will prevail over these license terms. \ +All other rights are reserved by the author(s) of the software. + +_**The SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +**IMPORTANT NOTICE: This software is _NOT SUPPORTED NOR ENDORSED_ by Movistar or Telefónica.** \ +This software may stop working at any time if movistar+ makes technological changes to its platform. + +**DO NOT EVER CALL 1002 nor 1004** if channels disappear from the list or cannot be seen or if you experience any other anomaly related to the use of this software. \ +movistar+ only provides help and support for their physical decoder and only for the contracted services. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * BSD 2-Clause “Simplified” License + * BSD 3-Clause “Revised” License + * The MIT License (MIT) + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. AlphaCentaury.Licensing.Data +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. AlphaCentaury.Licensing.Data.Ui +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. ChannelLogos +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. ChannelLogosEditor +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. ConsoleExperiments +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. ExceptionMsgBox +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. GuiTools +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. InternalTools.sln +------------------------------ +VS Solution by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. IpTviewr.ToolsUiFramework +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +15. IpTviewrTools +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +16. Services.EpgDiscovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +17. SourceCodeMaintenance +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +18. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +19. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +20. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +21. UiServices.DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +22. UiServices.Forms +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// BSD 2-Clause “Simplified” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 2-Clause “Simplified” License' applies to the following THIRD-PARTY components: <<< + +1. Markdig +------------------------------ +'nuget' package by Alexandre Mutel +Copyright (c) 2018-2019, Alexandre Mutel + A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + +//////////////////////////////////////////////////////////// +// +// BSD 3-Clause “Revised” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 3-Clause “Revised” License' applies to the following THIRD-PARTY components: <<< + +1. HtmlRenderer.Core +------------------------------ +'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + +2. HtmlRenderer.WinForms +------------------------------ +'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. HtmlAgilityPack +------------------------------ +'nuget' package by ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell +Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved. + This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + +2. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +3. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +4. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/license.es.rtf b/1.5 'Kruger 60'/license.es.rtf new file mode 100644 index 00000000..d4fc5851 --- /dev/null +++ b/1.5 'Kruger 60'/license.es.rtf @@ -0,0 +1,535 @@ +{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang3082\deflangfe3082\deftab708{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\fmodern\fprq1\fcharset0 Courier New;}{\f2\froman\fprq2\fcharset2 Symbol;}{\f3\fnil\fprq2\fcharset2 Wingdings;}} +{\colortbl ;\red0\green0\blue255;} +{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}{\s3 heading 3;}{\s4 heading 4;}} +\viewkind4\uc1\pard\brdrb\brdrs\brdrw30 \ltrpar\s1\sb100\sa100\kerning36\b\f0\fs48 Soluci\'f3n VS ''\par +\pard\ltrpar\sb100\sa100\kerning0\b0\fs22 IPTViewr: Virtual Decoder for movistar+ version 1.5 \ldblquote Kruger 60\rdblquote Beta 1\line\i por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\cf1\ul\i \cf0\ulnone \line\cf1\ul \cf0\ulnone\i0\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s2\sb100\sa100\b\fs40 T\'e9rminos y condiciones de uso\par +\pard\ltrpar\sb100\sa100\b0\fs22 Los COMPONENTES y/o PROGRAMAS (el \ldblquote SOFTWARE\rdblquote ), ya sea en forma de c\'f3digo binario o fuente, est\'e1n \b sujeto a los t\'e9rminos de la Licencia Rec\'edproca de Microsoft \i\ldblquote Microsoft Reciprocal License\rdblquote (Ms-RL)\b0\i0 , salvo que se indique lo contrario. \line En particular, prevalecer\'e1n sobre estos t\'e9rminos de licencia, los especificados expresamente en el correspondiente archivo \ldblquote LICENSE\rdblquote de cada proyecto y/o carpeta. \line Todos los dem\'e1s derechos est\'e1n reservados por el/los autor(es) del software.\par +\b El SOFTWARE SE PROPORCIONA \ldblquote TAL CUAL\rdblquote , SIN GARANT\'cdA DE NING\'daN TIPO\b0 , expresa o impl\'edcita, incluyendo (pero no limit\'e1ndose a) las garant\'edas de comerciabilidad, idoneidad para un prop\'f3sito particular y no infracci\'f3n. \line En ning\'fan caso, los autores o titulares del Copyright ser\'e1n responsables de ninguna reclamaci\'f3n, da\'f1os o cualquier otra responsabilidad, ya sea en una acci\'f3n de contrato, agravio o cualquier otro motivo, con o sin relaci\'f3n con el software o el uso u otros aspectos del software.\par +\b AVISO IMPORTANTE: El presente software \i NO EST\'c1 SOPORTADO NI RESPALDADO\i0 por Movistar ni por Telef\'f3nica\b0 . \line El software puede dejar de funcionar en cualquier momento si movistar+ realiza cambios tecnol\'f3gicos en su plataforma.\par +\b NO DEBE LLAMARSE NUNCA al 1002 o al 1004\b0 si desaparecen canales de la lista o no pueden verse o cualquier otra anomal\'eda relaciona con el uso de este software. \line movistar+ s\'f3lo proporciona ayuda y soporte t\'e9cnico para su decodificador f\'edsico y \'fanicamente para los servicios contratados.\par +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. \line Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios.\par +Los logotipos de los canales de movistar+ pueden estar inclu\'eddos con el software. Estos logotipos son propiedad de los diferentes canales y sus compa\'f1\'edas propietarias. \line Los logos se suministran de \ldblquote buena fe\rdblquote , para poder identificar adecuadamente los diferentes canales, sin \'e1nimo de infringir ning\'fan derecho de copyright.\par +\pard\ltrpar\par +\pard\ltrpar\sb100\sa100\i A continuaci\'f3n se proporciona una traducci\'f3n aproximada de la \b Licencia rec\'edproca de Microsoft (Ms-RL)\b0 al espa\'f1ol. Esta traducci\'f3n carece de cualquier validez legal.\i0\par +Esta licencia rige el uso del software que lo acompa\'f1a. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definiciones\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 Los t\'e9rminos \ldblquote reproducir\rdblquote , \ldblquote reproducci\'f3n\rdblquote , \ldblquote obras derivadas\rdblquote y \ldblquote distribuci\'f3n\rdblquote tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 Una \ldblquote contribuci\'f3n\rdblquote es el software original, o cualquier adici\'f3n o cambio al software.\par +\f1\fs20 o\tab\f0\fs22 Un \ldblquote colaborador\rdblquote es cualquier persona que distribuye su contribuci\'f3n bajo esta licencia.\par +\f1\fs20 o\tab\f0\fs22 Las \ldblquote patentes licenciadas\rdblquote son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribuci\'f3n.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab Concesi\'f3n de derechos\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Concesi\'f3n de derechos de autor:\i0 Sujeto a los t\'e9rminos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la secci\'f3n 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regal\'edas para reproducir su contribuci\'f3n, preparar crear trabajos derivados de su contribuci\'f3n, y distribuir su contribuci\'f3n o cualquier trabajo derivado que usted cree.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i Concesi\'f3n de patentes:\i0 Sujeto a los t\'e9rminos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la secci\'f3n 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regal\'edas bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribuci\'f3n en el software o trabajos derivados de la contribuci\'f3n en el software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab Condiciones y limitaciones\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Derechos rec\'edprocos:\i0 Para cualquier archivo que distribuya que contenga c\'f3digo del software (en c\'f3digo fuente o formato binario), debe proporcionar a los destinatarios el c\'f3digo fuente de ese archivo junto con una copia de esta licencia, que ser\'e1 la licencia que regir\'e1 sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan c\'f3digo alguno del software en los t\'e9rminos de licenciamiento que usted elija.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i Sin licencia de marca comercial:\i0 esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ning\'fan colaborador.\par +\f1\fs20 o\tab\f0\fs22 (C) Si presenta una reclamaci\'f3n de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcion\'f3 finaliza autom\'e1ticamente.\par +\f1\fs20 o\tab\f0\fs22 (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribuci\'f3n que est\'e1n presentes en el software.\par +\f1\fs20 o\tab\f0\fs22 (E) Si distribuye cualquier porci\'f3n del software en forma de c\'f3digo fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribuci\'f3n. Si distribuye cualquier porci\'f3n del software en forma de c\'f3digo compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia.\par +\f1\fs20 o\tab\f0\fs22 (F) El software se proporciona \ldblquote tal cual est\'e1\rdblquote . Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garant\'edas o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garant\'edas impl\'edcitas de comerciabilidad, idoneidad para un prop\'f3sito particular y no infracci\'f3n.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s2\sb100\sa100\b\fs40 Licencias de uso\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b0\f2\fs20\'b7\tab\f0\fs22 Microsoft Reciprocal License (Ms-RL)\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f2\fs20\'b7\tab\f0\fs22 Apache License Version 2.0, January 2004\par +\f2\fs20\'b7\tab\f0\fs22 BSD 2-Clause \ldblquote Simplified\rdblquote License\par +\f2\fs20\'b7\tab\f0\fs22 BSD 3-Clause \ldblquote Revised\rdblquote License\par +\f2\fs20\'b7\tab\f0\fs22 The MIT License (MIT)\par +\f2\fs20\'b7\tab\f0\fs22 Microsoft .NET Library License Terms\par +\f2\fs20\'b7\tab\f0\fs22 Microsoft\'ae Exception Message Box License Terms\par +\f2\fs20\'b7\tab\f0\fs22 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft Reciprocal License (Ms-RL)\par +\pard\ltrpar\sb100\sa100\b0\fs22 This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 The terms \ldblquote reproduce,\rdblquote \ldblquote reproduction,\rdblquote \ldblquote derivative works,\rdblquote and \ldblquote distribution\rdblquote have the same meaning here as under U.S. copyright law.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 A \ldblquote contribution\rdblquote is the original software, or any additions or changes to the software.\par +\f1\fs20 o\tab\f0\fs22 A \ldblquote contributor\rdblquote is any person that distributes its contribution under this license.\par +\f1\fs20 o\tab\f0\fs22\ldblquote Licensed patents\rdblquote are a contributor's patent claims that read directly on its contribution.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Rights\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Copyright Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i Patent Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab Conditions and Limitations\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Reciprocal Grants\i0 - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i No Trademark License\i0 - This license does not grant you rights to use any contributors' name, logo, or trademarks.\par +\f1\fs20 o\tab\f0\fs22 (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\par +\f1\fs20 o\tab\f0\fs22 (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\par +\f1\fs20 o\tab\f0\fs22 (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\par +\f1\fs20 o\tab\f0\fs22 (F) \i The software is licensed \ldblquote as-is.\rdblquote\i0 You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft Reciprocal License (Ms-RL)'\b0 aplica a los siguientes componentes:\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. \par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Soluci\'f3n VS por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. AlphaCentaury.Licensing.Data\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. AlphaCentaury.Licensing.Data.Ui\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. ChannelLogos\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. ChannelLogosEditor\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. ConsoleExperiments\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 7. DvbStpClient\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 8. Etsi.Ts102034\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 9. ExceptionMsgBox\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 10. FirstTimeConfig\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 11. GuiTools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 12. IPTViewr\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 13. IpTviewr.Common\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 14. IpTViewr.Core\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 15. IpTViewr.IpTvServices\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 16. IpTViewr.MovistarPlus\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 17. IpTViewr.Native\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 18. IpTviewr.Telemetry\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 19. IpTviewr.ToolsUiFramework\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 20. IPTViewr_Movistar+_1-5_beta-1\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Instalador por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 21. IpTviewrTools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 22. IpTvRecorderLauncher\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 23. PackLogos\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 24. Services.EpgDiscovery\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 25. Services.Record\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 26. Services.Record.Serialization\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 27. Services.SqlServerCE\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 28. SourceCodeMaintenance\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 29. UiServices.Common\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 30. UiServices.Configuration\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 31. UiServices.Discovery\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 32. UiServices.DvbStpClient\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 33. UiServices.EPG\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 34. UiServices.Forms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 35. UiServices.Record\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Apache License Version 2.0, January 2004\par +\pard\ltrpar\cf1\ul\b0\fs22 \cf0\ulnone\par +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0 .\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 "\b License\b0 " shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 "\b Licensor\b0 " shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\par +\f1\fs20 o\tab\f0\fs22 "\b Legal Entity\b0 " shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "\b control\b0 " means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\par +\f1\fs20 o\tab\f0\fs22 "\b You\b0 " (or "\b Your\b0 ") shall mean an individual or Legal Entity exercising permissions granted by this License.\par +\f1\fs20 o\tab\f0\fs22 "\b Source\b0 " form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\par +\f1\fs20 o\tab\f0\fs22 "\b Object\b0 " form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\par +\f1\fs20 o\tab\f0\fs22 "\b Work\b0 " shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\par +\f1\fs20 o\tab\f0\fs22 "\b Derivative Works\b0 " shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\par +\f1\fs20 o\tab\f0\fs22 "\b Contribution\b0 " shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "\b submitted\b0 " means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "\b Not a Contribution.\b0 "\par +\f1\fs20 o\tab\f0\fs22 "\b Contributor\b0 " shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Copyright License\b0 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 3.\tab Grant of Patent License\b0 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\par +\b 4.\tab Redistribution\b0 . You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\par +\pard\ltrpar\fi-360\li1440\sb100\sa100 1.\tab You must give any other recipients of the Work or Derivative Works a copy of this License; and\par +2.\tab You must cause any modified files to carry prominent notices stating that You changed the files; and\par +3.\tab You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\par +4.\tab If the Work includes a "\b NOTICE\b0 " text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\par +\pard\ltrpar\li720\sb100\sa100 You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 5.\tab Submission of Contributions\b0 . Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 6.\tab Trademarks\b0 . This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\par +\b 7.\tab Disclaimer of Warranty\b0 . Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\par +\b 8.\tab Limitation of Liability\b0 . In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\par +\b 9.\tab Accepting Warranty or Additional Liability\b0 . While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\par +\pard\ltrpar\sb100\sa100 END OF TERMS AND CONDITIONS\par +\b 'Apache License Version 2.0, January 2004'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. SQLitePCLRaw.bundle_green\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink\i0\par +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. SQLitePCLRaw.core\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink, et al\i0\par +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. SQLitePCLRaw.lib.e_sqlite3.linux\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. SQLitePCLRaw.lib.e_sqlite3.osx\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. SQLitePCLRaw.provider.e_sqlite3.net45\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink et al\i0\par +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 BSD 2-Clause \ldblquote Simplified\rdblquote License\par +\pard\ltrpar\sb100\sa100\b0\fs22 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720 1.\tab Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +\pard\ltrpar\fi-360\li720\sb100\sa100 2.\tab Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +\pard\ltrpar\sb100\sa100\b THIS SOFTWARE IS PROVIDED\b0 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \b "AS IS"\b0 AND \b ANY EXPRESS OR IMPLIED WARRANTIES,\b0 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \b ARE DISCLAIMED.\b0 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\b 'BSD 2-Clause \ldblquote Simplified\rdblquote License'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Markdig\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Alexandre Mutel\i0\par +\b Copyright (c) 2018-2019, Alexandre Mutel\b0\par +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.)\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 BSD 3-Clause \ldblquote Revised\rdblquote License\par +\pard\ltrpar\sb100\sa100\b0\fs22 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720 1.\tab Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +\pard\ltrpar\fi-360\li720\sb100\sa100 2.\tab Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +3.\tab Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\par +\pard\ltrpar\sb100\sa100\b THIS SOFTWARE IS PROVIDED\b0 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \b "AS IS"\b0 AND \b ANY EXPRESS OR IMPLIED WARRANTIES,\b0 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \b ARE DISCLAIMED.\b0 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\b 'BSD 3-Clause \ldblquote Revised\rdblquote License'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. HtmlRenderer.Core\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Arthur Teplitzki, Jos\'e9 Manuel Men\'e9ndez Poo\i0\par +\b Copyright (c) 2009, Jos\'e9 Manuel Men\'e9ndez Poo\b0\par +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. HtmlRenderer.WinForms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Arthur Teplitzki, Jos\'e9 Manuel Men\'e9ndez Poo\i0\par +\b Copyright (c) 2009, Jos\'e9 Manuel Men\'e9ndez Poo\b0\par +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 The MIT License (MIT)\par +\pard\ltrpar\sb100\sa100\b0\fs22 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f2\fs20\'b7\tab\f0\fs22 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\pard\ltrpar\sb100\sa100\b THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND\b0 , EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\b 'The MIT License (MIT)'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. HtmlAgilityPack\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell\i0\par +\b Copyright \'a9 ZZZ Projects Inc. 2014 - 2017. All rights reserved.\b0\par +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. JetBrains.Annotations\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por JetBrains\i0\par +\pard\ltrpar\b Copyright (c) 2016 JetBrains \cf1\ul \cf0\ulnone\b0\par +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. Microsoft.AppCenter.Analytics\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +This package contains functionalities to collect session, device properties, events etc\'85 for your application.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. Microsoft.AppCenter.Crashes\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +This package contains functionalities to collect crash reports for your application.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. Microsoft.AppCenter\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +This package contains the basic functionalities that all App Center services use to communicate with the backend.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. Microsoft.NETCore.Platforms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 7. NETStandard.Library\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +A set of standard .NET APIs that are prescribed to be used and supported together.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 8. Newtonsoft.Json\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por James Newton-King\i0\par +\b Copyright (c) 2007 James Newton-King\b0\par +Json.NET is a popular high-performance JSON framework for .NET\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 9. sqlite-net-pcl\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Frank A. Krueger\i0\par +\b Copyright (c) Krueger Systems, Inc.\b0\par +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 10. System.ValueTuple\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 11. TaskScheduler\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por David Hall\i0\par +\b Copyright (c) 2003-2010 David Hall\b0\par +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft .NET Library License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms.\par +\b If you comply with these license terms, you have the rights below.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0 You may install and use any number of copies of the software to develop and test your applications.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 2.\tab THIRD PARTY COMPONENTS.\b0 The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software.\par +\b 3.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\b\f0\fs22 a. DISTRIBUTABLE CODE.\b0 The software is comprised of Distributable Code. \ldblquote Distributable Code\rdblquote is code that you are permitted to distribute in applications you develop if you comply with the terms below.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\b 1.\tab Right to Use and Distribute.\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 You may copy and distribute the object code form of the software.\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 use the Distributable Code in your applications and not as a standalone distribution;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\rquote fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\b 3.\tab Distribution Restrictions. You may not\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 use Microsoft\rquote s trademarks in your applications\rquote names or in a way that suggests your applications come from or are endorsed by Microsoft; or\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An \ldblquote Excluded License\rdblquote is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 4.\tab DATA.\b0\par +\pard\ltrpar\fi-360\li1440\f1\fs20 o\tab\b\f0\fs22 a. Data Collection.\b0 The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft\rquote s privacy statement. Our privacy statement is located at \cf1\ul \cf0\ulnone . You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices.\par +\f1\fs20 o\tab\b\f0\fs22 b. Processing of Personal Data.\b0 To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at \cf1\ul \cf0\ulnone .\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 5.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software;\par +\f1\fs20 o\tab\f0\fs22 remove, minimize, block or modify any notices of Microsoft or its suppliers in the software;\par +\f1\fs20 o\tab\f0\fs22 use the software in any way that is against the law; or\par +\f1\fs20 o\tab\f0\fs22 share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party.\par +\pard\ltrpar\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit \cf1\ul www.microsoft.com/exporting \cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is \ldblquote as is,\rdblquote we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0 If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply.\par +\b 10.\tab CONSUMER RIGHTS; REGIONAL VARIATIONS.\b0 This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you:\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\b\f0\fs22 a. Australia.\b0 You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\b\f0\fs22 b. Canada.\b0 If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software.\par +\f1\fs20 o\tab\b\f0\fs22 c. Germany and Austria.\b0\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\i\f0\fs22 (i) Warranty.\i0 The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\i\f0\fs22 (ii) Limitation of Liability.\i0 In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law.\par +\pard\ltrpar\li2160\sb100\sa100 Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 11.\tab DISCLAIMER OF WARRANTY.\b0 \b THE SOFTWARE IS LICENSED \ldblquote AS-IS.\rdblquote YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 \b YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\b0\par +\pard\ltrpar\li720\sb100\sa100 This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par +It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft .NET Library License Terms'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft.Win32.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common types for Win32-based libraries.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. System.AppContext\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. System.Collections.Concurrent\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. System.Collections\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. System.Console\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the System.Console class, which represents the standard input, output and error streams for console applications.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. System.Diagnostics.Debug\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes and attributes that allows basic interaction with a debugger.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 7. System.Diagnostics.DiagnosticSource\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools).\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 8. System.Diagnostics.Tools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 9. System.Diagnostics.Tracing\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW).\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 10. System.Globalization.Calendars\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 11. System.Globalization\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 12. System.IO.Compression.ZipFile\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes that support the compression and decompression of streams using file system paths.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 13. System.IO.Compression\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes that support the compression and decompression of streams.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 14. System.IO.FileSystem.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common enumerations and exceptions for path-based I/O libraries.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 15. System.IO.FileSystem\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types that allow reading and writing to files and types that provide basic file and directory support.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 16. System.IO\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 17. System.Linq.Expressions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 18. System.Linq\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ).\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 19. System.Net.Http\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 20. System.Net.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 21. System.Net.Sockets\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 22. System.ObjectModel\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 23. System.Reflection.Extensions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides custom attribute extension methods for System.Reflection types.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 24. System.Reflection.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common enumerations for reflection-based libraries.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 25. System.Reflection\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 26. System.Resources.ResourceManager\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 27. System.Runtime.Extensions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 28. System.Runtime.Handles\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 29. System.Runtime.InteropServices.RuntimeInformation\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides APIs to query about runtime and OS information.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 30. System.Runtime.InteropServices\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types that support COM interop and platform invoke services.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 31. System.Runtime.Numerics\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 32. System.Runtime\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 33. System.Security.Cryptography.Algorithms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 34. System.Security.Cryptography.Encoding\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 35. System.Security.Cryptography.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common types for the cryptographic libraries.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 36. System.Security.Cryptography.X509Certificates\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 37. System.Text.Encoding.Extensions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 38. System.Text.Encoding\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 39. System.Text.RegularExpressions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 40. System.Threading.Tasks\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types that simplify the work of writing concurrent and asynchronous code.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 41. System.Threading.Timer\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 42. System.Threading\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 43. System.Xml.ReaderWriter\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 44. System.Xml.XDocument\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft\'ae Exception Message Box License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER\b0\par +\b PLEASE NOTE:\b0 Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. You may not use the supplement if you do not have a license for the software. The license terms for the software apply to your use of this supplement.\par +\b 'Microsoft\'ae Exception Message Box License Terms'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft\'ae Exception Message Box\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Microsoft\i0\par +\pard\ltrpar\cf1\ul \cf0\ulnone (Feature Pack for Microsoft SQL Server 2005 SP4) \line x86: ENU\\x86\\SQLServer2005_EMB.msi \line x64: ENU\\x64\\SQLServer2005_EMB.msi\par +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f2\fs20\'b7\tab\f0\fs22 updates,\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f2\fs20\'b7\tab\f0\fs22 supplements,\par +\f2\fs20\'b7\tab\f0\fs22 Internet-based services, and\par +\f2\fs20\'b7\tab\f0\fs22 support services\par +\pard\ltrpar\sb100\sa100 for this software, unless other terms accompany those items. If so, those terms apply.\par +\b BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\b0\par +\b If you comply with these license terms, you have the rights below.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\b\f0\fs22 Installation and Use.\b0 You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\b\f0\fs22 Included Microsoft Programs.\b0 The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at \b %Program Files%\\Microsoft SQL Server Compact Edition\\v4.0\b0 apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86.msm\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86.msm\par +\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_Microsoft.VC90.CRT.manifest\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_Microsoft.VC90.CRT.manifest\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\b 1.\tab Distributable Code.\b0 The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 1.\tab Right to Use and Distribute. The code and text files listed below are "Distributable Code."\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files.\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 add significant primary functionality to it in your programs;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code included in a setup program only as part of that setup program without modification;\par +\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement;\par +\f3\fs20\'a7\tab\f0\fs22 display your valid copyright notice on your programs; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 3.\tab Distribution Restrictions. You may not\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 alter any copyright, trademark or patent notice in the Distributable Code;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code to run on a platform other than the Windows platform;\par +\f3\fs20\'a7\tab\f0\fs22 include Distributable Code in malicious, deceptive or unlawful programs; or\par +\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that \par +\pard\ltrpar\fi-360\li3600\sb100\sa100\tx3600\f3\fs20\'a7\tab\f0\fs22 the code be disclosed or distributed in source code form; or\par +\pard\ltrpar\fi-360\li3600\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 others have the right to modify it.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;\par +\f1\fs20 o\tab\f0\fs22 make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation;\par +\f1\fs20 o\tab\f0\fs22 publish the software for others to copy;\par +\f1\fs20 o\tab\f0\fs22 rent, lease or lend the software; or\par +\f1\fs20 o\tab\f0\fs22 transfer the software or this agreement to any third party.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 4.\tab BACKUP COPY.\b0 You may make one backup copy of the software. You may use it only to reinstall the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 5.\tab DOCUMENTATION.\b0 Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.\par +\pard\ltrpar\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see \cf1\ul www.microsoft.com/exporting \cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is provided "as is," we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f2\fs20\'b7\tab\b\f0\fs22 United States.\b0 If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f2\fs20\'b7\tab\b\f0\fs22 Outside the United States.\b0 If you acquired the software in any other country, the laws of that country apply.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 10.\tab LEGAL EFFECT.\b0 This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 11.\tab DISCLAIMER OF WARRANTY.\b0 THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\par +\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\par +\pard\ltrpar\li720\sb100\sa100 This limitation applies to\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par +\pard\ltrpar\li720\sb100\sa100 It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft\'ae SQL Server Compact\'ae 4.0 SP1\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Biblioteca por Microsoft\i0\par +\pard\ltrpar\cf1\ul \cf0\ulnone (Microsoft\'ae SQL Server\'ae Compact 4.0 SP1) \line x86: ENU\\SSCERuntime_x86-ENU.exe; \line x64: ENU\\SSCERuntime_x64-ENU.exe.msi\par +Microsoft\'ae SQL Server Compact\'ae 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder.\par +[]: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: \par +} diff --git a/1.5 'Kruger 60'/license.es.txt b/1.5 'Kruger 60'/license.es.txt new file mode 100644 index 00000000..cb6726a5 --- /dev/null +++ b/1.5 'Kruger 60'/license.es.txt @@ -0,0 +1,958 @@ +############################################################################## +## +## Solución VS '' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## por Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Términos y condiciones de uso +============================================================================== + +Los COMPONENTES y/o PROGRAMAS (el “SOFTWARE”), ya sea en forma de código binario o fuente, están **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, salvo que se indique lo contrario. \ +En particular, prevalecerán sobre estos términos de licencia, los especificados expresamente en el correspondiente archivo “LICENSE” de cada proyecto y/o carpeta. \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**El SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +**AVISO IMPORTANTE: El presente software _NO ESTÁ SOPORTADO NI RESPALDADO_ por Movistar ni por Telefónica**. \ +El software puede dejar de funcionar en cualquier momento si movistar+ realiza cambios tecnológicos en su plataforma. + +**NO DEBE LLAMARSE NUNCA al 1002 o al 1004** si desaparecen canales de la lista o no pueden verse o cualquier otra anomalía relaciona con el uso de este software. \ +movistar+ sólo proporciona ayuda y soporte técnico para su decodificador físico y únicamente para los servicios contratados. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + + +B.- Licencias de uso +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Apache License Version 2.0, January 2004 + * BSD 2-Clause “Simplified” License + * BSD 3-Clause “Revised” License + * The MIT License (MIT) + * Microsoft .NET Library License Terms + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' aplica a los siguientes componentes: <<< + +1. +------------------------------ +Solución VS por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. AlphaCentaury.Licensing.Data +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. AlphaCentaury.Licensing.Data.Ui +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. ChannelLogos +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. ChannelLogosEditor +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. ConsoleExperiments +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. DvbStpClient +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. Etsi.Ts102034 +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. ExceptionMsgBox +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. FirstTimeConfig +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. GuiTools +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. IPTViewr +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. IpTviewr.Common +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. IpTViewr.Core +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +15. IpTViewr.IpTvServices +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +16. IpTViewr.MovistarPlus +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +17. IpTViewr.Native +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +18. IpTviewr.Telemetry +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +19. IpTviewr.ToolsUiFramework +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +20. IPTViewr_Movistar+_1-5_beta-1 +------------------------------ +Instalador por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +21. IpTviewrTools +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +22. IpTvRecorderLauncher +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +23. PackLogos +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +24. Services.EpgDiscovery +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +25. Services.Record +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +26. Services.Record.Serialization +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +27. Services.SqlServerCE +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +28. SourceCodeMaintenance +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +29. UiServices.Common +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +30. UiServices.Configuration +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +31. UiServices.Discovery +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +32. UiServices.DvbStpClient +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +33. UiServices.EPG +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +34. UiServices.Forms +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +35. UiServices.Record +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Apache License Version 2.0, January 2004 +// +//////////////////////////////////////////////////////////// + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +//////////////////////////////////////////////////////////// + +>>> 'Apache License Version 2.0, January 2004' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. SQLitePCLRaw.bundle_green +------------------------------ +Paquete 'nuget' por Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + +2. SQLitePCLRaw.core +------------------------------ +Paquete 'nuget' por Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + +3. SQLitePCLRaw.lib.e_sqlite3.linux +------------------------------ +Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +4. SQLitePCLRaw.lib.e_sqlite3.osx +------------------------------ +Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +------------------------------ +Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +6. SQLitePCLRaw.provider.e_sqlite3.net45 +------------------------------ +Paquete 'nuget' por Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +//////////////////////////////////////////////////////////// +// +// BSD 2-Clause “Simplified” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 2-Clause “Simplified” License' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Markdig +------------------------------ +Paquete 'nuget' por Alexandre Mutel +Copyright (c) 2018-2019, Alexandre Mutel + A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + +//////////////////////////////////////////////////////////// +// +// BSD 3-Clause “Revised” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 3-Clause “Revised” License' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. HtmlRenderer.Core +------------------------------ +Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + +2. HtmlRenderer.WinForms +------------------------------ +Paquete 'nuget' por Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. HtmlAgilityPack +------------------------------ +Paquete 'nuget' por ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell +Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved. + This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + +2. JetBrains.Annotations +------------------------------ +Paquete 'nuget' por JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +3. Microsoft.AppCenter.Analytics +------------------------------ +Paquete 'nuget' por Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + +4. Microsoft.AppCenter.Crashes +------------------------------ +Paquete 'nuget' por Microsoft + This package contains functionalities to collect crash reports for your application. + +5. Microsoft.AppCenter +------------------------------ +Paquete 'nuget' por Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + +6. Microsoft.NETCore.Platforms +------------------------------ +Paquete 'nuget' por Microsoft +Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + +7. NETStandard.Library +------------------------------ +Paquete 'nuget' por Microsoft +Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + +8. Newtonsoft.Json +------------------------------ +Paquete 'nuget' por James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +9. sqlite-net-pcl +------------------------------ +Paquete 'nuget' por Frank A. Krueger +Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + +10. System.ValueTuple +------------------------------ +Paquete 'nuget' por Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + +11. TaskScheduler +------------------------------ +Paquete 'nuget' por David Hall +Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft .NET Library License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at https://docs.microsoft.com/en-us/legal/gdpr. + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit www.microsoft.com/exporting. + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft .NET Library License Terms' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Microsoft.Win32.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common types for Win32-based libraries. + +2. System.AppContext +------------------------------ +Paquete 'nuget' por Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + +3. System.Collections.Concurrent +------------------------------ +Paquete 'nuget' por Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + +4. System.Collections +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + +5. System.Console +------------------------------ +Paquete 'nuget' por Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + +6. System.Diagnostics.Debug +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + +7. System.Diagnostics.DiagnosticSource +------------------------------ +Paquete 'nuget' por Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + +8. System.Diagnostics.Tools +------------------------------ +Paquete 'nuget' por Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + +9. System.Diagnostics.Tracing +------------------------------ +Paquete 'nuget' por Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + +10. System.Globalization.Calendars +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + +11. System.Globalization +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + +12. System.IO.Compression.ZipFile +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + +13. System.IO.Compression +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes that support the compression and decompression of streams. + +14. System.IO.FileSystem.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + +15. System.IO.FileSystem +------------------------------ +Paquete 'nuget' por Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + +16. System.IO +------------------------------ +Paquete 'nuget' por Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + +17. System.Linq.Expressions +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + +18. System.Linq +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + +19. System.Net.Http +------------------------------ +Paquete 'nuget' por Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + +20. System.Net.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + +21. System.Net.Sockets +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + +22. System.ObjectModel +------------------------------ +Paquete 'nuget' por Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + +23. System.Reflection.Extensions +------------------------------ +Paquete 'nuget' por Microsoft + Provides custom attribute extension methods for System.Reflection types. + +24. System.Reflection.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common enumerations for reflection-based libraries. + +25. System.Reflection +------------------------------ +Paquete 'nuget' por Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + +26. System.Resources.ResourceManager +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + +27. System.Runtime.Extensions +------------------------------ +Paquete 'nuget' por Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + +28. System.Runtime.Handles +------------------------------ +Paquete 'nuget' por Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + +29. System.Runtime.InteropServices.RuntimeInformation +------------------------------ +Paquete 'nuget' por Microsoft + Provides APIs to query about runtime and OS information. + +30. System.Runtime.InteropServices +------------------------------ +Paquete 'nuget' por Microsoft + Provides types that support COM interop and platform invoke services. + +31. System.Runtime.Numerics +------------------------------ +Paquete 'nuget' por Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + +32. System.Runtime +------------------------------ +Paquete 'nuget' por Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + +33. System.Security.Cryptography.Algorithms +------------------------------ +Paquete 'nuget' por Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + +34. System.Security.Cryptography.Encoding +------------------------------ +Paquete 'nuget' por Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + +35. System.Security.Cryptography.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common types for the cryptographic libraries. + +36. System.Security.Cryptography.X509Certificates +------------------------------ +Paquete 'nuget' por Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + +37. System.Text.Encoding.Extensions +------------------------------ +Paquete 'nuget' por Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + +38. System.Text.Encoding +------------------------------ +Paquete 'nuget' por Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + +39. System.Text.RegularExpressions +------------------------------ +Paquete 'nuget' por Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + +40. System.Threading.Tasks +------------------------------ +Paquete 'nuget' por Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + +41. System.Threading.Timer +------------------------------ +Paquete 'nuget' por Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + +42. System.Threading +------------------------------ +Paquete 'nuget' por Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + +43. System.Xml.ReaderWriter +------------------------------ +Paquete 'nuget' por Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + +44. System.Xml.XDocument +------------------------------ +Paquete 'nuget' por Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Microsoft® Exception Message Box +------------------------------ +Biblioteca por Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Biblioteca por Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/license.rtf b/1.5 'Kruger 60'/license.rtf new file mode 100644 index 00000000..f78f0b4f --- /dev/null +++ b/1.5 'Kruger 60'/license.rtf @@ -0,0 +1,517 @@ +{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang3082\deflangfe3082\deftab708{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fmodern\fprq1\fcharset0 Courier New;}{\f3\fnil\fprq2\fcharset2 Wingdings;}} +{\colortbl ;\red0\green0\blue255;} +{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}{\s3 heading 3;}{\s4 heading 4;}} +\viewkind4\uc1\pard\brdrb\brdrs\brdrw30 \ltrpar\s1\sb100\sa100\kerning36\b\f0\fs48 VS Solution ''\par +\pard\ltrpar\sb100\sa100\kerning0\b0\fs22 IPTViewr: Virtual Decoder for movistar+ version 1.5 \ldblquote Kruger 60\rdblquote Beta 1\line\i by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\cf1\ul\i \cf0\ulnone \line\cf1\ul \cf0\ulnone\i0\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s2\sb100\sa100\b\fs40 Terms and conditions\par +\pard\ltrpar\sb100\sa100\b0\fs22 The COMPONENTS and/or PROGRAMS (\ldblquote SOFWARE\rdblquote ), either in binary or source code form, are \b licensed under the terms of the \i Microsoft Reciprocal License (Ms-RL)\b0\i0 , unless otherwise stated. \line In particular, those specified in the corresponding \ldblquote LICENSE\rdblquote file of each project and/or folder will prevail over these license terms. \line All other rights are reserved by the author(s) of the software.\par +\b\i The SOFTWARE IS PROVIDED \ldblquote AS IS\rdblquote , WITHOUT WARRANTY OF ANY KIND\b0\i0 , express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \line In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. \\\par +\b IMPORTANT NOTICE: This software is \i NOT SUPPORTED NOR ENDORSED\i0 by Movistar or Telef\'f3nica.\b0 \line This software may stop working at any time if movistar+ makes technological changes to its platform.\par +\b DO NOT EVER CALL 1002 nor 1004\b0 if channels disappear from the list or cannot be seen or if you experience any other anomaly related to the use of this software. \line movistar+ only provides help and support for their physical decoder and only for the contracted services.\par +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \line Its use in the context of this product does not constitute endorsement nor support by their respective owners.\par +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \line Logos are provided in \ldblquote good faith\rdblquote , in order to identify the different channels and no copyright infringement is intended.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s2\sb100\sa100\b\fs40 Licenses\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b0\f1\fs20\'b7\tab\f0\fs22 Microsoft Reciprocal License (Ms-RL)\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f1\fs20\'b7\tab\f0\fs22 Apache License Version 2.0, January 2004\par +\f1\fs20\'b7\tab\f0\fs22 BSD 2-Clause \ldblquote Simplified\rdblquote License\par +\f1\fs20\'b7\tab\f0\fs22 BSD 3-Clause \ldblquote Revised\rdblquote License\par +\f1\fs20\'b7\tab\f0\fs22 The MIT License (MIT)\par +\f1\fs20\'b7\tab\f0\fs22 Microsoft .NET Library License Terms\par +\f1\fs20\'b7\tab\f0\fs22 Microsoft\'ae Exception Message Box License Terms\par +\f1\fs20\'b7\tab\f0\fs22 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft Reciprocal License (Ms-RL)\par +\pard\ltrpar\sb100\sa100\b0\fs22 This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 The terms \ldblquote reproduce,\rdblquote \ldblquote reproduction,\rdblquote \ldblquote derivative works,\rdblquote and \ldblquote distribution\rdblquote have the same meaning here as under U.S. copyright law.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 A \ldblquote contribution\rdblquote is the original software, or any additions or changes to the software.\par +\f2\fs20 o\tab\f0\fs22 A \ldblquote contributor\rdblquote is any person that distributes its contribution under this license.\par +\f2\fs20 o\tab\f0\fs22\ldblquote Licensed patents\rdblquote are a contributor's patent claims that read directly on its contribution.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Rights\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 (A) \i Copyright Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 (B) \i Patent Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab Conditions and Limitations\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 (A) \i Reciprocal Grants\i0 - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 (B) \i No Trademark License\i0 - This license does not grant you rights to use any contributors' name, logo, or trademarks.\par +\f2\fs20 o\tab\f0\fs22 (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\par +\f2\fs20 o\tab\f0\fs22 (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\par +\f2\fs20 o\tab\f0\fs22 (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\par +\f2\fs20 o\tab\f0\fs22 (F) \i The software is licensed \ldblquote as-is.\rdblquote\i0 You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft Reciprocal License (Ms-RL)'\b0 applies to the following components:\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. \par +\pard\ltrpar\sb100\sa100\b0\i\fs22 VS Solution by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. AlphaCentaury.Licensing.Data\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. AlphaCentaury.Licensing.Data.Ui\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. ChannelLogos\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. ChannelLogosEditor\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. ConsoleExperiments\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 7. DvbStpClient\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 8. Etsi.Ts102034\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 9. ExceptionMsgBox\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 10. FirstTimeConfig\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 11. GuiTools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 12. IPTViewr\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 13. IpTviewr.Common\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 14. IpTViewr.Core\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 15. IpTViewr.IpTvServices\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 16. IpTViewr.MovistarPlus\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 17. IpTViewr.Native\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 18. IpTviewr.Telemetry\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 19. IpTviewr.ToolsUiFramework\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 20. IPTViewr_Movistar+_1-5_beta-1\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Installer by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 21. IpTviewrTools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 22. IpTvRecorderLauncher\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 23. PackLogos\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 24. Services.EpgDiscovery\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 25. Services.Record\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 26. Services.Record.Serialization\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 27. Services.SqlServerCE\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 28. SourceCodeMaintenance\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 29. UiServices.Common\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 30. UiServices.Configuration\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 31. UiServices.Discovery\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 32. UiServices.DvbStpClient\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 33. UiServices.EPG\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 34. UiServices.Forms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 35. UiServices.Record\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Apache License Version 2.0, January 2004\par +\pard\ltrpar\cf1\ul\b0\fs22 \cf0\ulnone\par +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0 .\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 "\b License\b0 " shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 "\b Licensor\b0 " shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\par +\f2\fs20 o\tab\f0\fs22 "\b Legal Entity\b0 " shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "\b control\b0 " means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\par +\f2\fs20 o\tab\f0\fs22 "\b You\b0 " (or "\b Your\b0 ") shall mean an individual or Legal Entity exercising permissions granted by this License.\par +\f2\fs20 o\tab\f0\fs22 "\b Source\b0 " form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\par +\f2\fs20 o\tab\f0\fs22 "\b Object\b0 " form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\par +\f2\fs20 o\tab\f0\fs22 "\b Work\b0 " shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\par +\f2\fs20 o\tab\f0\fs22 "\b Derivative Works\b0 " shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\par +\f2\fs20 o\tab\f0\fs22 "\b Contribution\b0 " shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "\b submitted\b0 " means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "\b Not a Contribution.\b0 "\par +\f2\fs20 o\tab\f0\fs22 "\b Contributor\b0 " shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Copyright License\b0 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 3.\tab Grant of Patent License\b0 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\par +\b 4.\tab Redistribution\b0 . You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\par +\pard\ltrpar\fi-360\li1440\sb100\sa100 1.\tab You must give any other recipients of the Work or Derivative Works a copy of this License; and\par +2.\tab You must cause any modified files to carry prominent notices stating that You changed the files; and\par +3.\tab You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\par +4.\tab If the Work includes a "\b NOTICE\b0 " text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\par +\pard\ltrpar\li720\sb100\sa100 You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 5.\tab Submission of Contributions\b0 . Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 6.\tab Trademarks\b0 . This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\par +\b 7.\tab Disclaimer of Warranty\b0 . Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\par +\b 8.\tab Limitation of Liability\b0 . In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\par +\b 9.\tab Accepting Warranty or Additional Liability\b0 . While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\par +\pard\ltrpar\sb100\sa100 END OF TERMS AND CONDITIONS\par +\b 'Apache License Version 2.0, January 2004'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. SQLitePCLRaw.bundle_green\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink\i0\par +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. SQLitePCLRaw.core\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink, et al\i0\par +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. SQLitePCLRaw.lib.e_sqlite3.linux\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. SQLitePCLRaw.lib.e_sqlite3.osx\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. SQLitePCLRaw.provider.e_sqlite3.net45\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink et al\i0\par +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 BSD 2-Clause \ldblquote Simplified\rdblquote License\par +\pard\ltrpar\sb100\sa100\b0\fs22 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720 1.\tab Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +\pard\ltrpar\fi-360\li720\sb100\sa100 2.\tab Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +\pard\ltrpar\sb100\sa100\b THIS SOFTWARE IS PROVIDED\b0 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \b "AS IS"\b0 AND \b ANY EXPRESS OR IMPLIED WARRANTIES,\b0 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \b ARE DISCLAIMED.\b0 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\b 'BSD 2-Clause \ldblquote Simplified\rdblquote License'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Markdig\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Alexandre Mutel\i0\par +\b Copyright (c) 2018-2019, Alexandre Mutel\b0\par +A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.)\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 BSD 3-Clause \ldblquote Revised\rdblquote License\par +\pard\ltrpar\sb100\sa100\b0\fs22 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720 1.\tab Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par +\pard\ltrpar\fi-360\li720\sb100\sa100 2.\tab Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par +3.\tab Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\par +\pard\ltrpar\sb100\sa100\b THIS SOFTWARE IS PROVIDED\b0 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \b "AS IS"\b0 AND \b ANY EXPRESS OR IMPLIED WARRANTIES,\b0 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \b ARE DISCLAIMED.\b0 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par +\b 'BSD 3-Clause \ldblquote Revised\rdblquote License'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. HtmlRenderer.Core\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Arthur Teplitzki, Jos\'e9 Manuel Men\'e9ndez Poo\i0\par +\b Copyright (c) 2009, Jos\'e9 Manuel Men\'e9ndez Poo\b0\par +Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. HtmlRenderer.WinForms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Arthur Teplitzki, Jos\'e9 Manuel Men\'e9ndez Poo\i0\par +\b Copyright (c) 2009, Jos\'e9 Manuel Men\'e9ndez Poo\b0\par +Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 The MIT License (MIT)\par +\pard\ltrpar\sb100\sa100\b0\fs22 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f1\fs20\'b7\tab\f0\fs22 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par +\pard\ltrpar\sb100\sa100\b THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND\b0 , EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\b 'The MIT License (MIT)'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. HtmlAgilityPack\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell\i0\par +\b Copyright \'a9 ZZZ Projects Inc. 2014 - 2017. All rights reserved.\b0\par +This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. JetBrains.Annotations\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by JetBrains\i0\par +\pard\ltrpar\b Copyright (c) 2016 JetBrains \cf1\ul \cf0\ulnone\b0\par +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. Microsoft.AppCenter.Analytics\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +This package contains functionalities to collect session, device properties, events etc\'85 for your application.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. Microsoft.AppCenter.Crashes\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +This package contains functionalities to collect crash reports for your application.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. Microsoft.AppCenter\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +This package contains the basic functionalities that all App Center services use to communicate with the backend.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. Microsoft.NETCore.Platforms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 7. NETStandard.Library\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +A set of standard .NET APIs that are prescribed to be used and supported together.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 8. Newtonsoft.Json\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by James Newton-King\i0\par +\b Copyright (c) 2007 James Newton-King\b0\par +Json.NET is a popular high-performance JSON framework for .NET\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 9. sqlite-net-pcl\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Frank A. Krueger\i0\par +\b Copyright (c) Krueger Systems, Inc.\b0\par +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 10. System.ValueTuple\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 11. TaskScheduler\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by David Hall\i0\par +\b Copyright (c) 2003-2010 David Hall\b0\par +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft .NET Library License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms.\par +\b If you comply with these license terms, you have the rights below.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0 You may install and use any number of copies of the software to develop and test your applications.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 2.\tab THIRD PARTY COMPONENTS.\b0 The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software.\par +\b 3.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\b\f0\fs22 a. DISTRIBUTABLE CODE.\b0 The software is comprised of Distributable Code. \ldblquote Distributable Code\rdblquote is code that you are permitted to distribute in applications you develop if you comply with the terms below.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\b 1.\tab Right to Use and Distribute.\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 You may copy and distribute the object code form of the software.\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 use the Distributable Code in your applications and not as a standalone distribution;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\rquote fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\b 3.\tab Distribution Restrictions. You may not\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 use Microsoft\rquote s trademarks in your applications\rquote names or in a way that suggests your applications come from or are endorsed by Microsoft; or\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An \ldblquote Excluded License\rdblquote is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 4.\tab DATA.\b0\par +\pard\ltrpar\fi-360\li1440\f2\fs20 o\tab\b\f0\fs22 a. Data Collection.\b0 The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft\rquote s privacy statement. Our privacy statement is located at \cf1\ul \cf0\ulnone . You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices.\par +\f2\fs20 o\tab\b\f0\fs22 b. Processing of Personal Data.\b0 To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at \cf1\ul \cf0\ulnone .\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 5.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software;\par +\f2\fs20 o\tab\f0\fs22 remove, minimize, block or modify any notices of Microsoft or its suppliers in the software;\par +\f2\fs20 o\tab\f0\fs22 use the software in any way that is against the law; or\par +\f2\fs20 o\tab\f0\fs22 share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party.\par +\pard\ltrpar\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit \cf1\ul www.microsoft.com/exporting \cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is \ldblquote as is,\rdblquote we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0 If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply.\par +\b 10.\tab CONSUMER RIGHTS; REGIONAL VARIATIONS.\b0 This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you:\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\b\f0\fs22 a. Australia.\b0 You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\b\f0\fs22 b. Canada.\b0 If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software.\par +\f2\fs20 o\tab\b\f0\fs22 c. Germany and Austria.\b0\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\i\f0\fs22 (i) Warranty.\i0 The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\i\f0\fs22 (ii) Limitation of Liability.\i0 In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law.\par +\pard\ltrpar\li2160\sb100\sa100 Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 11.\tab DISCLAIMER OF WARRANTY.\b0 \b THE SOFTWARE IS LICENSED \ldblquote AS-IS.\rdblquote YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 \b YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\b0\par +\pard\ltrpar\li720\sb100\sa100 This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par +It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft .NET Library License Terms'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft.Win32.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common types for Win32-based libraries.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 2. System.AppContext\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 3. System.Collections.Concurrent\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 4. System.Collections\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 5. System.Console\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the System.Console class, which represents the standard input, output and error streams for console applications.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 6. System.Diagnostics.Debug\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes and attributes that allows basic interaction with a debugger.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 7. System.Diagnostics.DiagnosticSource\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools).\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 8. System.Diagnostics.Tools\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 9. System.Diagnostics.Tracing\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW).\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 10. System.Globalization.Calendars\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 11. System.Globalization\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 12. System.IO.Compression.ZipFile\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes that support the compression and decompression of streams using file system paths.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 13. System.IO.Compression\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes that support the compression and decompression of streams.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 14. System.IO.FileSystem.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common enumerations and exceptions for path-based I/O libraries.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 15. System.IO.FileSystem\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types that allow reading and writing to files and types that provide basic file and directory support.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 16. System.IO\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 17. System.Linq.Expressions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 18. System.Linq\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ).\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 19. System.Net.Http\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 20. System.Net.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 21. System.Net.Sockets\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 22. System.ObjectModel\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 23. System.Reflection.Extensions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides custom attribute extension methods for System.Reflection types.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 24. System.Reflection.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common enumerations for reflection-based libraries.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 25. System.Reflection\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 26. System.Resources.ResourceManager\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 27. System.Runtime.Extensions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 28. System.Runtime.Handles\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 29. System.Runtime.InteropServices.RuntimeInformation\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides APIs to query about runtime and OS information.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 30. System.Runtime.InteropServices\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types that support COM interop and platform invoke services.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 31. System.Runtime.Numerics\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 32. System.Runtime\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 33. System.Security.Cryptography.Algorithms\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 34. System.Security.Cryptography.Encoding\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 35. System.Security.Cryptography.Primitives\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common types for the cryptographic libraries.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 36. System.Security.Cryptography.X509Certificates\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 37. System.Text.Encoding.Extensions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 38. System.Text.Encoding\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 39. System.Text.RegularExpressions\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 40. System.Threading.Tasks\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types that simplify the work of writing concurrent and asynchronous code.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 41. System.Threading.Timer\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 42. System.Threading\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 43. System.Xml.ReaderWriter\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data.\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 44. System.Xml.XDocument\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft\'ae Exception Message Box License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER\b0\par +\b PLEASE NOTE:\b0 Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. You may not use the supplement if you do not have a license for the software. The license terms for the software apply to your use of this supplement.\par +\b 'Microsoft\'ae Exception Message Box License Terms'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft\'ae Exception Message Box\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Microsoft\i0\par +\pard\ltrpar\cf1\ul \cf0\ulnone (Feature Pack for Microsoft SQL Server 2005 SP4) \line x86: ENU\\x86\\SQLServer2005_EMB.msi \line x64: ENU\\x64\\SQLServer2005_EMB.msi\par +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages.\par +\pard\brdrb\brdrs\brdrw20 \ltrpar\s3\sb100\sa100\b\fs34 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par +\pard\ltrpar\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f1\fs20\'b7\tab\f0\fs22 updates,\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f1\fs20\'b7\tab\f0\fs22 supplements,\par +\f1\fs20\'b7\tab\f0\fs22 Internet-based services, and\par +\f1\fs20\'b7\tab\f0\fs22 support services\par +\pard\ltrpar\sb100\sa100 for this software, unless other terms accompany those items. If so, those terms apply.\par +\b BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\b0\par +\b If you comply with these license terms, you have the rights below.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\b\f0\fs22 Installation and Use.\b0 You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software.\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\b\f0\fs22 Included Microsoft Programs.\b0 The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at \b %Program Files%\\Microsoft SQL Server Compact Edition\\v4.0\b0 apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86.msm\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86.msm\par +\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_Microsoft.VC90.CRT.manifest\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_Microsoft.VC90.CRT.manifest\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 2.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\b 1.\tab Distributable Code.\b0 The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 1.\tab Right to Use and Distribute. The code and text files listed below are "Distributable Code."\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files.\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 add significant primary functionality to it in your programs;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code included in a setup program only as part of that setup program without modification;\par +\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement;\par +\f3\fs20\'a7\tab\f0\fs22 display your valid copyright notice on your programs; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs.\par +\pard\ltrpar\fi-360\li2160\sb100\sa100\b 3.\tab Distribution Restrictions. You may not\b0\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 alter any copyright, trademark or patent notice in the Distributable Code;\par +\pard\ltrpar\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code to run on a platform other than the Windows platform;\par +\f3\fs20\'a7\tab\f0\fs22 include Distributable Code in malicious, deceptive or unlawful programs; or\par +\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that \par +\pard\ltrpar\fi-360\li3600\sb100\sa100\tx3600\f3\fs20\'a7\tab\f0\fs22 the code be disclosed or distributed in source code form; or\par +\pard\ltrpar\fi-360\li3600\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 others have the right to modify it.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 3.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;\par +\f2\fs20 o\tab\f0\fs22 make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation;\par +\f2\fs20 o\tab\f0\fs22 publish the software for others to copy;\par +\f2\fs20 o\tab\f0\fs22 rent, lease or lend the software; or\par +\f2\fs20 o\tab\f0\fs22 transfer the software or this agreement to any third party.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 4.\tab BACKUP COPY.\b0 You may make one backup copy of the software. You may use it only to reinstall the software.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 5.\tab DOCUMENTATION.\b0 Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.\par +\pard\ltrpar\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see \cf1\ul www.microsoft.com/exporting \cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is provided "as is," we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\f1\fs20\'b7\tab\b\f0\fs22 United States.\b0 If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\f1\fs20\'b7\tab\b\f0\fs22 Outside the United States.\b0 If you acquired the software in any other country, the laws of that country apply.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\tx720\b 10.\tab LEGAL EFFECT.\b0 This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.\par +\pard\ltrpar\fi-360\li720\sb100\sa100\b 11.\tab DISCLAIMER OF WARRANTY.\b0 THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\par +\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\par +\pard\ltrpar\li720\sb100\sa100 This limitation applies to\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and\par +\pard\ltrpar\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par +\pard\ltrpar\li720\sb100\sa100 It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.\par +\pard\ltrpar\sb100\sa100\b 'Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms'\b0 applies to the following \b third-party components:\b0\par +\pard\ltrpar\s4\sb100\sa100\b\fs28 1. Microsoft\'ae SQL Server Compact\'ae 4.0 SP1\par +\pard\ltrpar\sb100\sa100\b0\i\fs22 Library by Microsoft\i0\par +\pard\ltrpar\cf1\ul \cf0\ulnone (Microsoft\'ae SQL Server\'ae Compact 4.0 SP1) \line x86: ENU\\SSCERuntime_x86-ENU.exe; \line x64: ENU\\SSCERuntime_x64-ENU.exe.msi\par +Microsoft\'ae SQL Server Compact\'ae 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder.\par +[]: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: \par +} diff --git a/1.5 'Kruger 60'/license.txt b/1.5 'Kruger 60'/license.txt new file mode 100644 index 00000000..d69b97e9 --- /dev/null +++ b/1.5 'Kruger 60'/license.txt @@ -0,0 +1,931 @@ +############################################################################## +## +## VS Solution '' +## +############################################################################## +## +## IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +The COMPONENTS and/or PROGRAMS (“SOFWARE”), either in binary or source code form, are **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_**, unless otherwise stated. \ +In particular, those specified in the corresponding “LICENSE” file of each project and/or folder will prevail over these license terms. \ +All other rights are reserved by the author(s) of the software. + +_**The SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. \ + +**IMPORTANT NOTICE: This software is _NOT SUPPORTED NOR ENDORSED_ by Movistar or Telefónica.** \ +This software may stop working at any time if movistar+ makes technological changes to its platform. + +**DO NOT EVER CALL 1002 nor 1004** if channels disappear from the list or cannot be seen or if you experience any other anomaly related to the use of this software. \ +movistar+ only provides help and support for their physical decoder and only for the contracted services. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Apache License Version 2.0, January 2004 + * BSD 2-Clause “Simplified” License + * BSD 3-Clause “Revised” License + * The MIT License (MIT) + * Microsoft .NET Library License Terms + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. +------------------------------ +VS Solution by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. AlphaCentaury.Licensing.Data +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. AlphaCentaury.Licensing.Data.Ui +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. ChannelLogos +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. ChannelLogosEditor +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. ConsoleExperiments +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. ExceptionMsgBox +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. FirstTimeConfig +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. GuiTools +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. IPTViewr +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. IpTViewr.Core +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +15. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +16. IpTViewr.MovistarPlus +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +17. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +18. IpTviewr.Telemetry +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +19. IpTviewr.ToolsUiFramework +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +20. IPTViewr_Movistar+_1-5_beta-1 +------------------------------ +Installer by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +21. IpTviewrTools +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +22. IpTvRecorderLauncher +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +23. PackLogos +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +24. Services.EpgDiscovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +25. Services.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +26. Services.Record.Serialization +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +27. Services.SqlServerCE +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +28. SourceCodeMaintenance +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +29. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +30. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +31. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +32. UiServices.DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +33. UiServices.EPG +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +34. UiServices.Forms +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +35. UiServices.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Apache License Version 2.0, January 2004 +// +//////////////////////////////////////////////////////////// + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +//////////////////////////////////////////////////////////// + +>>> 'Apache License Version 2.0, January 2004' applies to the following THIRD-PARTY components: <<< + +1. SQLitePCLRaw.bundle_green +------------------------------ +'nuget' package by Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + +2. SQLitePCLRaw.core +------------------------------ +'nuget' package by Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + +3. SQLitePCLRaw.lib.e_sqlite3.linux +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +4. SQLitePCLRaw.lib.e_sqlite3.osx +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +6. SQLitePCLRaw.provider.e_sqlite3.net45 +------------------------------ +'nuget' package by Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +//////////////////////////////////////////////////////////// +// +// BSD 2-Clause “Simplified” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 2-Clause “Simplified” License' applies to the following THIRD-PARTY components: <<< + +1. Markdig +------------------------------ +'nuget' package by Alexandre Mutel +Copyright (c) 2018-2019, Alexandre Mutel + A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + +//////////////////////////////////////////////////////////// +// +// BSD 3-Clause “Revised” License +// +//////////////////////////////////////////////////////////// + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +**THIS SOFTWARE IS PROVIDED** BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS **"AS IS"** AND **ANY EXPRESS OR IMPLIED WARRANTIES,** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE **ARE DISCLAIMED.** +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//////////////////////////////////////////////////////////// + +>>> 'BSD 3-Clause “Revised” License' applies to the following THIRD-PARTY components: <<< + +1. HtmlRenderer.Core +------------------------------ +'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + +2. HtmlRenderer.WinForms +------------------------------ +'nuget' package by Arthur Teplitzki, José Manuel Menéndez Poo +Copyright (c) 2009, José Manuel Menéndez Poo + Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. HtmlAgilityPack +------------------------------ +'nuget' package by ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell +Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved. + This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + +2. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +3. Microsoft.AppCenter.Analytics +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + +4. Microsoft.AppCenter.Crashes +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect crash reports for your application. + +5. Microsoft.AppCenter +------------------------------ +'nuget' package by Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + +6. Microsoft.NETCore.Platforms +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + +7. NETStandard.Library +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + +8. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +9. sqlite-net-pcl +------------------------------ +'nuget' package by Frank A. Krueger +Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + +10. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + +11. TaskScheduler +------------------------------ +'nuget' package by David Hall +Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft .NET Library License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at https://docs.microsoft.com/en-us/legal/gdpr. + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit www.microsoft.com/exporting. + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft .NET Library License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft.Win32.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for Win32-based libraries. + +2. System.AppContext +------------------------------ +'nuget' package by Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + +3. System.Collections.Concurrent +------------------------------ +'nuget' package by Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + +4. System.Collections +------------------------------ +'nuget' package by Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + +5. System.Console +------------------------------ +'nuget' package by Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + +6. System.Diagnostics.Debug +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + +7. System.Diagnostics.DiagnosticSource +------------------------------ +'nuget' package by Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + +8. System.Diagnostics.Tools +------------------------------ +'nuget' package by Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + +9. System.Diagnostics.Tracing +------------------------------ +'nuget' package by Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + +10. System.Globalization.Calendars +------------------------------ +'nuget' package by Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + +11. System.Globalization +------------------------------ +'nuget' package by Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + +12. System.IO.Compression.ZipFile +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + +13. System.IO.Compression +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams. + +14. System.IO.FileSystem.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + +15. System.IO.FileSystem +------------------------------ +'nuget' package by Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + +16. System.IO +------------------------------ +'nuget' package by Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + +17. System.Linq.Expressions +------------------------------ +'nuget' package by Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + +18. System.Linq +------------------------------ +'nuget' package by Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + +19. System.Net.Http +------------------------------ +'nuget' package by Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + +20. System.Net.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + +21. System.Net.Sockets +------------------------------ +'nuget' package by Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + +22. System.ObjectModel +------------------------------ +'nuget' package by Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + +23. System.Reflection.Extensions +------------------------------ +'nuget' package by Microsoft + Provides custom attribute extension methods for System.Reflection types. + +24. System.Reflection.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations for reflection-based libraries. + +25. System.Reflection +------------------------------ +'nuget' package by Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + +26. System.Resources.ResourceManager +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + +27. System.Runtime.Extensions +------------------------------ +'nuget' package by Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + +28. System.Runtime.Handles +------------------------------ +'nuget' package by Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + +29. System.Runtime.InteropServices.RuntimeInformation +------------------------------ +'nuget' package by Microsoft + Provides APIs to query about runtime and OS information. + +30. System.Runtime.InteropServices +------------------------------ +'nuget' package by Microsoft + Provides types that support COM interop and platform invoke services. + +31. System.Runtime.Numerics +------------------------------ +'nuget' package by Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + +32. System.Runtime +------------------------------ +'nuget' package by Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + +33. System.Security.Cryptography.Algorithms +------------------------------ +'nuget' package by Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + +34. System.Security.Cryptography.Encoding +------------------------------ +'nuget' package by Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + +35. System.Security.Cryptography.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for the cryptographic libraries. + +36. System.Security.Cryptography.X509Certificates +------------------------------ +'nuget' package by Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + +37. System.Text.Encoding.Extensions +------------------------------ +'nuget' package by Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + +38. System.Text.Encoding +------------------------------ +'nuget' package by Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + +39. System.Text.RegularExpressions +------------------------------ +'nuget' package by Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + +40. System.Threading.Tasks +------------------------------ +'nuget' package by Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + +41. System.Threading.Timer +------------------------------ +'nuget' package by Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + +42. System.Threading +------------------------------ +'nuget' package by Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + +43. System.Xml.ReaderWriter +------------------------------ +'nuget' package by Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + +44. System.Xml.XDocument +------------------------------ +'nuget' package by Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/licensing.xml b/1.5 'Kruger 60'/licensing.xml new file mode 100644 index 00000000..b2fe70f7 --- /dev/null +++ b/1.5 'Kruger 60'/licensing.xml @@ -0,0 +1,962 @@ + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr: Virtual Decoder for movistar+ version 1.5 “Kruger 60” Beta 1 + + + + + + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + AlphaCentaury.Licensing.Data + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + AlphaCentaury.Licensing.Data.Ui + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + SourceCodeMaintenance + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ExceptionMsgBox + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Etsi.Ts102034 + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Core + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewrTools + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ChannelLogos + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ChannelLogosEditor + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + ConsoleExperiments + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + GuiTools + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.ToolsUiFramework + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.IpTvServices + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.MovistarPlus + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTViewr.Native + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTvRecorderLauncher + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.EpgDiscovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.Record.Serialization + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + Services.SqlServerCE + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + PackLogos + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IpTviewr.Telemetry + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + FirstTimeConfig + Program + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Common + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Configuration + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Discovery + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.DvbStpClient + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.EPG + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Forms + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + UiServices.Record + Library + + + Ms-RL + Codeplex/GitHub user AlphaCentaury + Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + IPTViewr_Movistar+_1-5_beta-1 + Installer + + + + + Apache-2.0 + Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + + + Apache-2.0 + Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + + + Apache-2.0 + Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + BSD-2-Clause + Alexandre Mutel + Copyright (c) 2018-2019, Alexandre Mutel + A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET with 20+ builtin extensions (pipetables, footnotes, definition lists... etc.) + + + BSD-3-Clause + Arthur Teplitzki, José Manuel Menéndez Poo + Copyright (c) 2009, José Manuel Menéndez Poo + Cross framework (WinForms/WPF/PDF/Metro/Mono/etc.), Multipurpose (UI Controls / Image generation / PDF generation / etc.), 100% managed (C#), High performance HTML Rendering library. + + + BSD-3-Clause + Arthur Teplitzki, José Manuel Menéndez Poo + Copyright (c) 2009, José Manuel Menéndez Poo + Multipurpose (UI Controls / Image generation), 100% managed (C#), High performance HTML Rendering library for WinForms. + + + MIT + ZZZ Projects,Simon Mourrier,Jeff Klawiter,Stephan Grell + Copyright © ZZZ Projects Inc. 2014 - 2017. All rights reserved. + This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. + + + MIT + JetBrains + Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + + + MIT + Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + + + MIT + Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + + + MIT + Microsoft + This package contains functionalities to collect crash reports for your application. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + + + MIT + James Newton-King + Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + + + MIT + Frank A. Krueger + Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + + + MIT + Microsoft + Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + + + MIT + David Hall + Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + MS.NET + Microsoft + Provides common types for Win32-based libraries. + + + MS.NET + Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + + + MS.NET + Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + + + MS.NET + Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + + + MS.NET + Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + + + MS.NET + Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + + + MS.NET + Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + + + MS.NET + Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + + + MS.NET + Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + + + MS.NET + Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + + + MS.NET + Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + + + MS.NET + Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams. + + + MS.NET + Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + + + MS.NET + Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + + + MS.NET + Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + + + MS.NET + Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + + + MS.NET + Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + + + MS.NET + Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + + + MS.NET + Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + + + MS.NET + Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + + + MS.NET + Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + + + MS.NET + Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + + + MS.NET + Microsoft + Provides custom attribute extension methods for System.Reflection types. + + + MS.NET + Microsoft + Provides common enumerations for reflection-based libraries. + + + MS.NET + Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + + + MS.NET + Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + + + MS.NET + Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + + + MS.NET + Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + + + MS.NET + Microsoft + Provides types that support COM interop and platform invoke services. + + + MS.NET + Microsoft + Provides APIs to query about runtime and OS information. + + + MS.NET + Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + + + MS.NET + Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + + + MS.NET + Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + + + MS.NET + Microsoft + Provides common types for the cryptographic libraries. + + + MS.NET + Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + + + MS.NET + Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + + + MS.NET + Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + + + MS.NET + Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + + + MS.NET + Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + + + MS.NET + Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + + + MS.NET + Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + + + MS.NET + Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + + + MS.NET + Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + MS-SQL-2005-EMB + Microsoft + + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + MS-SQLCE-4.0-SP1 + Microsoft + + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + + + + + + + + + + + + + + diff --git a/1.5 'Kruger 60'/movistarplus.json b/1.5 'Kruger 60'/movistarplus.json new file mode 100644 index 00000000..374752ff --- /dev/null +++ b/1.5 'Kruger 60'/movistarplus.json @@ -0,0 +1,27 @@ +{ + "environment": { + "contents.url": "http://172.26.22.23:2001/appclientv/nux", + "appserver.url": "{OPCH:cfg.resources.url}/appserver/mvtv.do" + }, + "variables": { + "clientProfile": { + "tvWholesaler": "1" + }, + "getConfigurationParams": { + "tvChannelLogoPath2": "incoming/epg/channelLogo/bn/", + "landscapeSubPath": "landscape/", + "portraitSubPath": "portrait/", + "smallSubpath": "small/", + "bigSubpath": "big/", + "epgPath": "incoming/epg/", + "videoServerUrl": "rtsp://cdvr1.catchup2.imagenio.telefonica.net/" + } + }, + "opch": { + "multicastAddress": "239.0.2.30", + "multicastPort": 22222, + "default": { + "cfg.resources.url": "http://www-60.svc.imagenio.telefonica.net:2001" + } + } +} \ No newline at end of file diff --git a/1.5 'Kruger 60'/movistartv-config.xml b/1.5 'Kruger 60'/movistartv-config.xml index 267ac2e2..d37d0188 100644 --- a/1.5 'Kruger 60'/movistartv-config.xml +++ b/1.5 'Kruger 60'/movistartv-config.xml @@ -1,5 +1,19 @@ - + + movistar+ @@ -56,4 +70,4 @@ Valencia movistar+ - \ No newline at end of file + diff --git a/1.5 'Kruger 60'/movistartv.license.es.rtf b/1.5 'Kruger 60'/movistartv.license.es.rtf new file mode 100644 index 00000000..ba88a4ae --- /dev/null +++ b/1.5 'Kruger 60'/movistartv.license.es.rtf @@ -0,0 +1,782 @@ +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082\deflangfe3082\deftab708{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\fmodern\fprq1\fcharset0 Courier New;}{\f2\froman\fprq2\fcharset2 Symbol;}{\f3\fnil\fprq2\fcharset2 Wingdings;}} +{\colortbl ;\red0\green0\blue255;} +{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}{\s3 heading 3;}{\s4 heading 4;}} +{\*\generator Riched20 10.0.18362}\viewkind4\uc1 +\pard\brdrb\brdrs\brdrw30 \s1\sb100\sa100\kerning36\b\f0\fs48 IPTViewr v1.5\par + +\pard\sb100\sa100\kerning0\b0\fs22 Decodificador virtual IPTV para movistar+ 1.5 \ldblquote Kruger 60\rdblquote beta 1\line\i por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\cf1\ul\i <{{\field{\*\fldinst{HYPERLINK "http://www.alphacentaury.org/movistartv"}}{\fldrslt{http://www.alphacentaury.org/movistartv}}}}\f0\fs22 >\cf0\ulnone \line\cf1\ul <{{\field{\*\fldinst{HYPERLINK "https://github.com/AlphaCentaury"}}{\fldrslt{https://github.com/AlphaCentaury}}}}\f0\fs22 >\cf0\ulnone\i0\par + +\pard\brdrb\brdrs\brdrw20 \s2\sb100\sa100\b\fs40 T\'e9rminos y condiciones de uso\par + +\pard\sb100\sa100\b0\fs22 Los COMPONENTES y/o PROGRAMAS (el \ldblquote SOFTWARE\rdblquote ), ya sea en forma de c\'f3digo binario o fuente, est\'e1n \b sujeto a los t\'e9rminos de la Licencia Rec\'edproca de Microsoft \i\ldblquote Microsoft Reciprocal License\rdblquote (Ms-RL)\b0\i0 , salvo que se indique lo contrario. \line En particular, prevalecer\'e1n sobre estos t\'e9rminos de licencia, los especificados expresamente en el correspondiente archivo \ldblquote LICENSE\rdblquote de cada proyecto y/o carpeta. \line Todos los dem\'e1s derechos est\'e1n reservados por el/los autor(es) del software.\par +\b El SOFTWARE SE PROPORCIONA \ldblquote TAL CUAL\rdblquote , SIN GARANT\'cdA DE NING\'daN TIPO\b0 , expresa o impl\'edcita, incluyendo (pero no limit\'e1ndose a) las garant\'edas de comerciabilidad, idoneidad para un prop\'f3sito particular y no infracci\'f3n. \line En ning\'fan caso, los autores o titulares del Copyright ser\'e1n responsables de ninguna reclamaci\'f3n, da\'f1os o cualquier otra responsabilidad, ya sea en una acci\'f3n de contrato, agravio o cualquier otro motivo, con o sin relaci\'f3n con el software o el uso u otros aspectos del software.\par +\b AVISO IMPORTANTE: El presente software \i NO EST\'c1 SOPORTADO NI RESPALDADO\i0 por Movistar ni por Telef\'f3nica\b0 . \line El software puede dejar de funcionar en cualquier momento si movistar+ realiza cambios tecnol\'f3gicos en su plataforma.\par +\b NO DEBE LLAMARSE NUNCA al 1002 o al 1004\b0 si desaparecen canales de la lista o no pueden verse o cualquier otra anomal\'eda relaciona con el uso de este software. \line movistar+ s\'f3lo proporciona ayuda y soporte t\'e9cnico para su decodificador f\'edsico y \'fanicamente para los servicios contratados.\par +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. \line Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios.\par +Los logotipos de los canales de movistar+ pueden estar inclu\'eddos con el software. Estos logotipos son propiedad de los diferentes canales y sus compa\'f1\'edas propietarias. \line Los logos se suministran de \ldblquote buena fe\rdblquote , para poder identificar adecuadamente los diferentes canales, sin \'e1nimo de infringir ning\'fan derecho de copyright.\par + +\pard\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34\ldblquote Microsoft Reciprocal License\rdblquote (\i Licencia rec\'edproca de Microsoft\i0 ) (Ms-RL)\par + +\pard\sb100\sa100\b0\i\fs22 A continuaci\'f3n se proporciona una traducci\'f3n aproximada de la \b Licencia rec\'edproca de Microsoft (Ms-RL)\b0 al espa\'f1ol. Esta traducci\'f3n carece de cualquier validez legal.\i0\par +Esta licencia rige el uso del software que lo acompa\'f1a. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definiciones\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 Los t\'e9rminos \ldblquote reproducir\rdblquote , \ldblquote reproducci\'f3n\rdblquote , \ldblquote obras derivadas\rdblquote y \ldblquote distribuci\'f3n\rdblquote tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU.\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 Una \ldblquote contribuci\'f3n\rdblquote es el software original, o cualquier adici\'f3n o cambio al software.\par +\f1\fs20 o\tab\f0\fs22 Un \ldblquote colaborador\rdblquote es cualquier persona que distribuye su contribuci\'f3n bajo esta licencia.\par +\f1\fs20 o\tab\f0\fs22 Las \ldblquote patentes licenciadas\rdblquote son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribuci\'f3n.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 2.\tab Concesi\'f3n de derechos\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Concesi\'f3n de derechos de autor:\i0 Sujeto a los t\'e9rminos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la secci\'f3n 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regal\'edas para reproducir su contribuci\'f3n, preparar crear trabajos derivados de su contribuci\'f3n, y distribuir su contribuci\'f3n o cualquier trabajo derivado que usted cree.\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i Concesi\'f3n de patentes:\i0 Sujeto a los t\'e9rminos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la secci\'f3n 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regal\'edas bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribuci\'f3n en el software o trabajos derivados de la contribuci\'f3n en el software.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 3.\tab Condiciones y limitaciones\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Derechos rec\'edprocos:\i0 Para cualquier archivo que distribuya que contenga c\'f3digo del software (en c\'f3digo fuente o formato binario), debe proporcionar a los destinatarios el c\'f3digo fuente de ese archivo junto con una copia de esta licencia, que ser\'e1 la licencia que regir\'e1 sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan c\'f3digo alguno del software en los t\'e9rminos de licenciamiento que usted elija.\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i Sin licencia de marca comercial:\i0 esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ning\'fan colaborador.\par +\f1\fs20 o\tab\f0\fs22 (C) Si presenta una reclamaci\'f3n de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcion\'f3 finaliza autom\'e1ticamente.\par +\f1\fs20 o\tab\f0\fs22 (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribuci\'f3n que est\'e1n presentes en el software.\par +\f1\fs20 o\tab\f0\fs22 (E) Si distribuye cualquier porci\'f3n del software en forma de c\'f3digo fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribuci\'f3n. Si distribuye cualquier porci\'f3n del software en forma de c\'f3digo compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia.\par +\f1\fs20 o\tab\f0\fs22 (F) El software se proporciona \ldblquote tal cual est\'e1\rdblquote . Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garant\'edas o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garant\'edas impl\'edcitas de comerciabilidad, idoneidad para un prop\'f3sito particular y no infracci\'f3n.\par + +\pard\sb100\sa100 []:\par + +\pard\brdrb\brdrs\brdrw20 \s2\sb100\sa100\b\fs40 Licencias de uso\par + +\pard\fi-360\li720\sb100\sa100\tx720\b0\f2\fs20\'b7\tab\f0\fs22 Microsoft Reciprocal License (Ms-RL)\par + +\pard\fi-360\li720\sb100\sa100\f2\fs20\'b7\tab\f0\fs22 Apache License Version 2.0, January 2004\par +\f2\fs20\'b7\tab\f0\fs22 The MIT License (MIT)\par +\f2\fs20\'b7\tab\f0\fs22 Microsoft .NET Library License Terms\par +\f2\fs20\'b7\tab\f0\fs22 Microsoft\'ae Exception Message Box License Terms\par +\f2\fs20\'b7\tab\f0\fs22 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Microsoft Reciprocal License (Ms-RL)\par + +\pard\sb100\sa100\b0\fs22 This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 The terms \ldblquote reproduce,\rdblquote \ldblquote reproduction,\rdblquote \ldblquote derivative works,\rdblquote and \ldblquote distribution\rdblquote have the same meaning here as under U.S. copyright law.\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 A \ldblquote contribution\rdblquote is the original software, or any additions or changes to the software.\par +\f1\fs20 o\tab\f0\fs22 A \ldblquote contributor\rdblquote is any person that distributes its contribution under this license.\par +\f1\fs20 o\tab\f0\fs22\ldblquote Licensed patents\rdblquote are a contributor's patent claims that read directly on its contribution.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Rights\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Copyright Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i Patent Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 3.\tab Conditions and Limitations\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 (A) \i Reciprocal Grants\i0 - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 (B) \i No Trademark License\i0 - This license does not grant you rights to use any contributors' name, logo, or trademarks.\par +\f1\fs20 o\tab\f0\fs22 (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\par +\f1\fs20 o\tab\f0\fs22 (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\par +\f1\fs20 o\tab\f0\fs22 (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\par +\f1\fs20 o\tab\f0\fs22 (F) \i The software is licensed \ldblquote as-is.\rdblquote\i0 You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\par + +\pard\sb100\sa100\b 'Microsoft Reciprocal License (Ms-RL)'\b0 aplica a los siguientes componentes:\par + +\pard\s4\sb100\sa100\b\fs28 1. AlphaCentaury.Licensing.Data\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 2. AlphaCentaury.Licensing.Data.Ui\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 3. DvbStpClient\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 4. Etsi.Ts102034\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 5. FirstTimeConfig\par + +\pard\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 6. IPTViewr\par + +\pard\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 7. IpTviewr.Common\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 8. IpTViewr.Core\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 9. IpTViewr.IpTvServices\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 10. IpTViewr.MovistarPlus\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 11. IpTViewr.Native\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 12. IpTviewr.Telemetry\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 13. IPTViewr_Movistar+_1-5_beta-1\par + +\pard\sb100\sa100\b0\i\fs22 Instalador por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 14. IpTvRecorderLauncher\par + +\pard\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 15. MovistarTV.sln\par + +\pard\sb100\sa100\b0\i\fs22 Soluci\'f3n VS por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 16. PackLogos\par + +\pard\sb100\sa100\b0\i\fs22 Programa por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 17. Services.EpgDiscovery\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 18. Services.Record\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 19. Services.Record.Serialization\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 20. Services.SqlServerCE\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 21. UiServices.Common\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 22. UiServices.Configuration\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 23. UiServices.Discovery\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 24. UiServices.DvbStpClient\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 25. UiServices.EPG\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 26. UiServices.Forms\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 27. UiServices.Record\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Apache License Version 2.0, January 2004\par + +\pard\cf1\ul\b0\fs22 <{{\field{\*\fldinst{HYPERLINK "http://www.apache.org/licenses/"}}{\fldrslt{http://www.apache.org/licenses/}}}}\f0\fs22 >\cf0\ulnone\par +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0 .\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 "\b License\b0 " shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 "\b Licensor\b0 " shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\par +\f1\fs20 o\tab\f0\fs22 "\b Legal Entity\b0 " shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "\b control\b0 " means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\par +\f1\fs20 o\tab\f0\fs22 "\b You\b0 " (or "\b Your\b0 ") shall mean an individual or Legal Entity exercising permissions granted by this License.\par +\f1\fs20 o\tab\f0\fs22 "\b Source\b0 " form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\par +\f1\fs20 o\tab\f0\fs22 "\b Object\b0 " form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\par +\f1\fs20 o\tab\f0\fs22 "\b Work\b0 " shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\par +\f1\fs20 o\tab\f0\fs22 "\b Derivative Works\b0 " shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\par +\f1\fs20 o\tab\f0\fs22 "\b Contribution\b0 " shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "\b submitted\b0 " means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "\b Not a Contribution.\b0 "\par +\f1\fs20 o\tab\f0\fs22 "\b Contributor\b0 " shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Copyright License\b0 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\par + +\pard\fi-360\li720\sb100\sa100\b 3.\tab Grant of Patent License\b0 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\par +\b 4.\tab Redistribution\b0 . You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\par + +\pard\fi-360\li1440\sb100\sa100 1.\tab You must give any other recipients of the Work or Derivative Works a copy of this License; and\par +2.\tab You must cause any modified files to carry prominent notices stating that You changed the files; and\par +3.\tab You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\par +4.\tab If the Work includes a "\b NOTICE\b0 " text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\par + +\pard\li720\sb100\sa100 You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 5.\tab Submission of Contributions\b0 . Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\par + +\pard\fi-360\li720\sb100\sa100\b 6.\tab Trademarks\b0 . This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\par +\b 7.\tab Disclaimer of Warranty\b0 . Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\par +\b 8.\tab Limitation of Liability\b0 . In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\par +\b 9.\tab Accepting Warranty or Additional Liability\b0 . While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\par + +\pard\sb100\sa100 END OF TERMS AND CONDITIONS\par +\b 'Apache License Version 2.0, January 2004'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. SQLitePCLRaw.bundle_green\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink\i0\par +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases.\par + +\pard\s4\sb100\sa100\b\fs28 2. SQLitePCLRaw.core\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink, et al\i0\par +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite.\par + +\pard\s4\sb100\sa100\b\fs28 3. SQLitePCLRaw.lib.e_sqlite3.linux\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par + +\pard\s4\sb100\sa100\b\fs28 4. SQLitePCLRaw.lib.e_sqlite3.osx\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par + +\pard\s4\sb100\sa100\b\fs28 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par + +\pard\s4\sb100\sa100\b\fs28 6. SQLitePCLRaw.provider.e_sqlite3.net45\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Eric Sink et al\i0\par +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library.\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 The MIT License (MIT)\par + +\pard\sb100\sa100\b0\fs22 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par + +\pard\fi-360\li720\sb100\sa100\tx720\f2\fs20\'b7\tab\f0\fs22 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par + +\pard\sb100\sa100\b THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND\b0 , EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\b 'The MIT License (MIT)'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. JetBrains.Annotations\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por JetBrains\i0\par + +\pard\b Copyright (c) 2016 JetBrains \cf1\ul <{{\field{\*\fldinst{HYPERLINK "http://www.jetbrains.com"}}{\fldrslt{http://www.jetbrains.com}}}}\f0\fs22 >\cf0\ulnone\b0\par +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections.\par + +\pard\s4\sb100\sa100\b\fs28 2. Microsoft.AppCenter.Analytics\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +This package contains functionalities to collect session, device properties, events etc\'85 for your application.\par + +\pard\s4\sb100\sa100\b\fs28 3. Microsoft.AppCenter.Crashes\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +This package contains functionalities to collect crash reports for your application.\par + +\pard\s4\sb100\sa100\b\fs28 4. Microsoft.AppCenter\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +This package contains the basic functionalities that all App Center services use to communicate with the backend.\par + +\pard\s4\sb100\sa100\b\fs28 5. Microsoft.NETCore.Platforms\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages.\par + +\pard\s4\sb100\sa100\b\fs28 6. NETStandard.Library\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +A set of standard .NET APIs that are prescribed to be used and supported together.\par + +\pard\s4\sb100\sa100\b\fs28 7. Newtonsoft.Json\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por James Newton-King\i0\par +\b Copyright (c) 2007 James Newton-King\b0\par +Json.NET is a popular high-performance JSON framework for .NET\par + +\pard\s4\sb100\sa100\b\fs28 8. sqlite-net-pcl\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Frank A. Krueger\i0\par +\b Copyright (c) Krueger Systems, Inc.\b0\par +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite.\par + +\pard\s4\sb100\sa100\b\fs28 9. System.ValueTuple\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic.\par + +\pard\s4\sb100\sa100\b\fs28 10. TaskScheduler\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por David Hall\i0\par +\b Copyright (c) 2003-2010 David Hall\b0\par +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support.\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Microsoft .NET Library License Terms\par + +\pard\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms.\par +\b If you comply with these license terms, you have the rights below.\b0\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0 You may install and use any number of copies of the software to develop and test your applications.\par + +\pard\fi-360\li720\sb100\sa100\b 2.\tab THIRD PARTY COMPONENTS.\b0 The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software.\par +\b 3.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\b\f0\fs22 a. DISTRIBUTABLE CODE.\b0 The software is comprised of Distributable Code. \ldblquote Distributable Code\rdblquote is code that you are permitted to distribute in applications you develop if you comply with the terms below.\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\b 1.\tab Right to Use and Distribute.\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 You may copy and distribute the object code form of the software.\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications.\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 use the Distributable Code in your applications and not as a standalone distribution;\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\rquote fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code.\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\b 3.\tab Distribution Restrictions. You may not\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 use Microsoft\rquote s trademarks in your applications\rquote names or in a way that suggests your applications come from or are endorsed by Microsoft; or\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An \ldblquote Excluded License\rdblquote is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 4.\tab DATA.\b0\par + +\pard\fi-360\li1440\f1\fs20 o\tab\b\f0\fs22 a. Data Collection.\b0 The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft\rquote s privacy statement. Our privacy statement is located at \cf1\ul <{{\field{\*\fldinst{HYPERLINK "https://go.microsoft.com/fwlink/?LinkID=824704"}}{\fldrslt{https://go.microsoft.com/fwlink/?LinkID=824704}}}}\f0\fs22 >\cf0\ulnone . You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices.\par +\f1\fs20 o\tab\b\f0\fs22 b. Processing of Personal Data.\b0 To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at \cf1\ul <{{\field{\*\fldinst{HYPERLINK "https://docs.microsoft.com/en-us/legal/gdpr"}}{\fldrslt{https://docs.microsoft.com/en-us/legal/gdpr}}}}\f0\fs22 >\cf0\ulnone .\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 5.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software;\par +\f1\fs20 o\tab\f0\fs22 remove, minimize, block or modify any notices of Microsoft or its suppliers in the software;\par +\f1\fs20 o\tab\f0\fs22 use the software in any way that is against the law; or\par +\f1\fs20 o\tab\f0\fs22 share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party.\par + +\pard\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit {\cf1\ul{\field{\*\fldinst{HYPERLINK www.microsoft.com/exporting }}{\fldrslt{www.microsoft.com/exporting}}}}\cf1\ul\f0\fs22 <{{\field{\*\fldinst{HYPERLINK "http://www.microsoft.com/exporting"}}{\fldrslt{http://www.microsoft.com/exporting}}}}\f0\fs22 >\cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is \ldblquote as is,\rdblquote we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0 If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply.\par +\b 10.\tab CONSUMER RIGHTS; REGIONAL VARIATIONS.\b0 This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you:\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\b\f0\fs22 a. Australia.\b0 You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights.\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\b\f0\fs22 b. Canada.\b0 If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software.\par +\f1\fs20 o\tab\b\f0\fs22 c. Germany and Austria.\b0\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\i\f0\fs22 (i) Warranty.\i0 The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software.\par + +\pard\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\i\f0\fs22 (ii) Limitation of Liability.\i0 In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law.\par + +\pard\li2160\sb100\sa100 Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 11.\tab DISCLAIMER OF WARRANTY.\b0 \b THE SOFTWARE IS LICENSED \ldblquote AS-IS.\rdblquote YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\b0\par + +\pard\fi-360\li720\sb100\sa100\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 \b YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\b0\par + +\pard\li720\sb100\sa100 This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par +It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages.\par + +\pard\sb100\sa100\b 'Microsoft .NET Library License Terms'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. Microsoft.Win32.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common types for Win32-based libraries.\par + +\pard\s4\sb100\sa100\b\fs28 2. System.AppContext\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data.\par + +\pard\s4\sb100\sa100\b\fs28 3. System.Collections.Concurrent\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently.\par + +\pard\s4\sb100\sa100\b\fs28 4. System.Collections\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections.\par + +\pard\s4\sb100\sa100\b\fs28 5. System.Console\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the System.Console class, which represents the standard input, output and error streams for console applications.\par + +\pard\s4\sb100\sa100\b\fs28 6. System.Diagnostics.Debug\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes and attributes that allows basic interaction with a debugger.\par + +\pard\s4\sb100\sa100\b\fs28 7. System.Diagnostics.DiagnosticSource\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools).\par + +\pard\s4\sb100\sa100\b\fs28 8. System.Diagnostics.Tools\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools.\par + +\pard\s4\sb100\sa100\b\fs28 9. System.Diagnostics.Tracing\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW).\par + +\pard\s4\sb100\sa100\b\fs28 10. System.Globalization.Calendars\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars.\par + +\pard\s4\sb100\sa100\b\fs28 11. System.Globalization\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings.\par + +\pard\s4\sb100\sa100\b\fs28 12. System.IO.Compression.ZipFile\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes that support the compression and decompression of streams using file system paths.\par + +\pard\s4\sb100\sa100\b\fs28 13. System.IO.Compression\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes that support the compression and decompression of streams.\par + +\pard\s4\sb100\sa100\b\fs28 14. System.IO.FileSystem.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common enumerations and exceptions for path-based I/O libraries.\par + +\pard\s4\sb100\sa100\b\fs28 15. System.IO.FileSystem\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types that allow reading and writing to files and types that provide basic file and directory support.\par + +\pard\s4\sb100\sa100\b\fs28 16. System.IO\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams.\par + +\pard\s4\sb100\sa100\b\fs28 17. System.Linq.Expressions\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees.\par + +\pard\s4\sb100\sa100\b\fs28 18. System.Linq\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ).\par + +\pard\s4\sb100\sa100\b\fs28 19. System.Net.Http\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers.\par + +\pard\s4\sb100\sa100\b\fs28 20. System.Net.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer.\par + +\pard\s4\sb100\sa100\b\fs28 21. System.Net.Sockets\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network.\par + +\pard\s4\sb100\sa100\b\fs28 22. System.ObjectModel\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it.\par + +\pard\s4\sb100\sa100\b\fs28 23. System.Reflection.Extensions\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides custom attribute extension methods for System.Reflection types.\par + +\pard\s4\sb100\sa100\b\fs28 24. System.Reflection.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common enumerations for reflection-based libraries.\par + +\pard\s4\sb100\sa100\b\fs28 25. System.Reflection\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods.\par + +\pard\s4\sb100\sa100\b\fs28 26. System.Resources.ResourceManager\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application.\par + +\pard\s4\sb100\sa100\b\fs28 27. System.Runtime.Extensions\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information.\par + +\pard\s4\sb100\sa100\b\fs28 28. System.Runtime.Handles\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles.\par + +\pard\s4\sb100\sa100\b\fs28 29. System.Runtime.InteropServices.RuntimeInformation\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides APIs to query about runtime and OS information.\par + +\pard\s4\sb100\sa100\b\fs28 30. System.Runtime.InteropServices\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types that support COM interop and platform invoke services.\par + +\pard\s4\sb100\sa100\b\fs28 31. System.Runtime.Numerics\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32.\par + +\pard\s4\sb100\sa100\b\fs28 32. System.Runtime\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application.\par + +\pard\s4\sb100\sa100\b\fs28 33. System.Security.Cryptography.Algorithms\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations.\par + +\pard\s4\sb100\sa100\b\fs28 34. System.Security.Cryptography.Encoding\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data.\par + +\pard\s4\sb100\sa100\b\fs28 35. System.Security.Cryptography.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides common types for the cryptographic libraries.\par + +\pard\s4\sb100\sa100\b\fs28 36. System.Security.Cryptography.X509Certificates\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate.\par + +\pard\s4\sb100\sa100\b\fs28 37. System.Text.Encoding.Extensions\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32.\par + +\pard\s4\sb100\sa100\b\fs28 38. System.Text.Encoding\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes.\par + +\pard\s4\sb100\sa100\b\fs28 39. System.Text.RegularExpressions\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine.\par + +\pard\s4\sb100\sa100\b\fs28 40. System.Threading.Tasks\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides types that simplify the work of writing concurrent and asynchronous code.\par + +\pard\s4\sb100\sa100\b\fs28 41. System.Threading.Timer\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals.\par + +\pard\s4\sb100\sa100\b\fs28 42. System.Threading\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code.\par + +\pard\s4\sb100\sa100\b\fs28 43. System.Xml.ReaderWriter\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data.\par + +\pard\s4\sb100\sa100\b\fs28 44. System.Xml.XDocument\par + +\pard\sb100\sa100\b0\i\fs22 Paquete 'nuget' por Microsoft\i0\par +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily.\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Microsoft\'ae Exception Message Box License Terms\par + +\pard\sb100\sa100\fs22 MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER\b0\par +\b PLEASE NOTE:\b0 Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. You may not use the supplement if you do not have a license for the software. The license terms for the software apply to your use of this supplement.\par +\b 'Microsoft\'ae Exception Message Box License Terms'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. Microsoft\'ae Exception Message Box\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Microsoft\i0\par + +\pard\cf1\ul <{{\field{\*\fldinst{HYPERLINK "http://www.microsoft.com/en-us/download/details.aspx?id=20101"}}{\fldrslt{http://www.microsoft.com/en-us/download/details.aspx?id=20101}}}}\f0\fs22 >\cf0\ulnone (Feature Pack for Microsoft SQL Server 2005 SP4) \line x86: ENU\\x86\\SQLServer2005_EMB.msi \line x64: ENU\\x64\\SQLServer2005_EMB.msi\par +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages.\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par + +\pard\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft\par + +\pard\fi-360\li720\sb100\sa100\tx720\f2\fs20\'b7\tab\f0\fs22 updates,\par + +\pard\fi-360\li720\sb100\sa100\f2\fs20\'b7\tab\f0\fs22 supplements,\par +\f2\fs20\'b7\tab\f0\fs22 Internet-based services, and\par +\f2\fs20\'b7\tab\f0\fs22 support services\par + +\pard\sb100\sa100 for this software, unless other terms accompany those items. If so, those terms apply.\par +\b BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\b0\par +\b If you comply with these license terms, you have the rights below.\b0\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\b\f0\fs22 Installation and Use.\b0 You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software.\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\b\f0\fs22 Included Microsoft Programs.\b0 The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at \b %Program Files%\\Microsoft SQL Server Compact Edition\\v4.0\b0 apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software.\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86.msm\par + +\pard\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86.msm\par +\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_Microsoft.VC90.CRT.manifest\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_Microsoft.VC90.CRT.manifest\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 2.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par + +\pard\fi-360\li1440\sb100\sa100\b 1.\tab Distributable Code.\b0 The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below.\par + +\pard\fi-360\li2160\sb100\sa100\b 1.\tab Right to Use and Distribute. The code and text files listed below are "Distributable Code."\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files.\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.\par + +\pard\fi-360\li2160\sb100\sa100\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 add significant primary functionality to it in your programs;\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code included in a setup program only as part of that setup program without modification;\par +\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement;\par +\f3\fs20\'a7\tab\f0\fs22 display your valid copyright notice on your programs; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs.\par + +\pard\fi-360\li2160\sb100\sa100\b 3.\tab Distribution Restrictions. You may not\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 alter any copyright, trademark or patent notice in the Distributable Code;\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code to run on a platform other than the Windows platform;\par +\f3\fs20\'a7\tab\f0\fs22 include Distributable Code in malicious, deceptive or unlawful programs; or\par +\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that \par + +\pard\fi-360\li3600\sb100\sa100\tx3600\f3\fs20\'a7\tab\f0\fs22 the code be disclosed or distributed in source code form; or\par + +\pard\fi-360\li3600\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 others have the right to modify it.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 3.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;\par +\f1\fs20 o\tab\f0\fs22 make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation;\par +\f1\fs20 o\tab\f0\fs22 publish the software for others to copy;\par +\f1\fs20 o\tab\f0\fs22 rent, lease or lend the software; or\par +\f1\fs20 o\tab\f0\fs22 transfer the software or this agreement to any third party.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 4.\tab BACKUP COPY.\b0 You may make one backup copy of the software. You may use it only to reinstall the software.\par + +\pard\fi-360\li720\sb100\sa100\b 5.\tab DOCUMENTATION.\b0 Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.\par + +\pard\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see {\cf1\ul{\field{\*\fldinst{HYPERLINK www.microsoft.com/exporting }}{\fldrslt{www.microsoft.com/exporting}}}}\cf1\ul\f0\fs22 <{{\field{\*\fldinst{HYPERLINK "http://www.microsoft.com/exporting"}}{\fldrslt{http://www.microsoft.com/exporting}}}}\f0\fs22 >\cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is provided "as is," we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0\par + +\pard\fi-360\li720\sb100\sa100\tx720\f2\fs20\'b7\tab\b\f0\fs22 United States.\b0 If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.\par + +\pard\fi-360\li720\sb100\sa100\f2\fs20\'b7\tab\b\f0\fs22 Outside the United States.\b0 If you acquired the software in any other country, the laws of that country apply.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 10.\tab LEGAL EFFECT.\b0 This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.\par + +\pard\fi-360\li720\sb100\sa100\b 11.\tab DISCLAIMER OF WARRANTY.\b0 THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\par +\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\par + +\pard\li720\sb100\sa100 This limitation applies to\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f1\fs20 o\tab\f0\fs22 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and\par + +\pard\fi-360\li1440\sb100\sa100\f1\fs20 o\tab\f0\fs22 claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par + +\pard\li720\sb100\sa100 It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.\par + +\pard\sb100\sa100\b 'Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms'\b0 aplica a los siguientes \b componentes de terceros \i (\ldblquote THIRD-PARTY\rdblquote )\i0 :\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. Microsoft\'ae SQL Server Compact\'ae 4.0 SP1\par + +\pard\sb100\sa100\b0\i\fs22 Biblioteca por Microsoft\i0\par + +\pard\cf1\ul <{{\field{\*\fldinst{HYPERLINK "http://www.microsoft.com/en-us/download/details.aspx?id=30709"}}{\fldrslt{http://www.microsoft.com/en-us/download/details.aspx?id=30709}}}}\f0\fs22 >\cf0\ulnone (Microsoft\'ae SQL Server\'ae Compact 4.0 SP1) \line x86: ENU\\SSCERuntime_x86-ENU.exe; \line x64: ENU\\SSCERuntime_x64-ENU.exe.msi\par +Microsoft\'ae SQL Server Compact\'ae 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder.\par +[]: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: \par +} + \ No newline at end of file diff --git a/1.5 'Kruger 60'/movistartv.license.es.txt b/1.5 'Kruger 60'/movistartv.license.es.txt new file mode 100644 index 00000000..088796c4 --- /dev/null +++ b/1.5 'Kruger 60'/movistartv.license.es.txt @@ -0,0 +1,853 @@ +############################################################################## +## +## IPTViewr v1.5 +## +############################################################################## +## +## Decodificador virtual IPTV para movistar+ 1.5 “Kruger 60” beta 1 +## por Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Términos y condiciones de uso +============================================================================== + +Los COMPONENTES y/o PROGRAMAS (el “SOFTWARE”), ya sea en forma de código binario o fuente, están **sujeto a los términos de la Licencia Recíproca de Microsoft _“Microsoft Reciprocal License” (Ms-RL)_**, salvo que se indique lo contrario. \ +En particular, prevalecerán sobre estos términos de licencia, los especificados expresamente en el correspondiente archivo “LICENSE” de cada proyecto y/o carpeta. \ +Todos los demás derechos están reservados por el/los autor(es) del software. + +**El SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO**, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. \ +En ningún caso, los autores o titulares del Copyright serán responsables de ninguna reclamación, daños o cualquier otra responsabilidad, ya sea en una acción de contrato, agravio o cualquier otro motivo, con o sin relación con el software o el uso u otros aspectos del software. + +**AVISO IMPORTANTE: El presente software _NO ESTÁ SOPORTADO NI RESPALDADO_ por Movistar ni por Telefónica**. \ +El software puede dejar de funcionar en cualquier momento si movistar+ realiza cambios tecnológicos en su plataforma. + +**NO DEBE LLAMARSE NUNCA al 1002 o al 1004** si desaparecen canales de la lista o no pueden verse o cualquier otra anomalía relaciona con el uso de este software. \ +movistar+ sólo proporciona ayuda y soporte técnico para su decodificador físico y únicamente para los servicios contratados. + +Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios. \ +Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. + +Los logotipos de los canales de movistar+ pueden estar incluídos con el software. Estos logotipos son propiedad de los diferentes canales y sus compañías propietarias. \ +Los logos se suministran de “buena fe”, para poder identificar adecuadamente los diferentes canales, sin ánimo de infringir ningún derecho de copyright. + +---------------------------------------------------------------------- + +### “Microsoft Reciprocal License” (_Licencia recíproca de Microsoft_) (Ms-RL) + +_A continuación se proporciona una traducción aproximada de la **Licencia recíproca de Microsoft (Ms-RL)** al español. Esta traducción carece de cualquier validez legal._ + +Esta licencia rige el uso del software que lo acompaña. Si utiliza el software, usted acepta esta licencia. Si no acepta la licencia, no use el software. + +1. **Definiciones** + + - Los términos “reproducir”, “reproducción”, “obras derivadas” y “distribución” tienen el mismo significado en este acuerdo de licencia que en la Ley de Derechos de Autor de EE. UU. + - Una “contribución” es el software original, o cualquier adición o cambio al software. + - Un “colaborador” es cualquier persona que distribuye su contribución bajo esta licencia. + - Las “patentes licenciadas” son declaraciones de patente de un contribuyente y que aplican directamente sobre su contribución. + +2. **Concesión de derechos** + + - (A) _Concesión de derechos de autor:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le otorga una licencia de copyright no exclusiva, mundial y libre de regalías para reproducir su contribución, preparar crear trabajos derivados de su contribución, y distribuir su contribución o cualquier trabajo derivado que usted cree. + - (B) _Concesión de patentes:_ Sujeto a los términos de esta licencia, incluidas las condiciones y limitaciones de la licencia en la sección 3, cada colaborador le concede una licencia no exclusiva, mundial y libre de regalías bajo sus patentes autorizadas para realizar, haber realizado, usar, vender, ofrecer para la venta, importar y/o disponer de su contribución en el software o trabajos derivados de la contribución en el software. + +3. **Condiciones y limitaciones** + + - (A) _Derechos recíprocos:_ Para cualquier archivo que distribuya que contenga código del software (en código fuente o formato binario), debe proporcionar a los destinatarios el código fuente de ese archivo junto con una copia de esta licencia, que será la licencia que regirá sobre el archivo. Puede licenciar otros archivos que son totalmente de su propiedad y que no contengan código alguno del software en los términos de licenciamiento que usted elija. + - (B) _Sin licencia de marca comercial:_ esta licencia no le concede el derecho a utilizar el nombre, el logotipo o las marcas comerciales de ningún colaborador. + - (C) Si presenta una reclamación de patente contra un contribuyente por patentes que usted alega son infringidas por el software, la licencia de patente sobre el software que dicho colaborador le proporcionó finaliza automáticamente. + - (D) Si distribuye cualquier parte del software, debe conservar todos los avisos de copyright, patente, marca comercial y atribución que están presentes en el software. + - (E) Si distribuye cualquier porción del software en forma de código fuente, puede hacerlo solo bajo esta licencia incluyendo una copia completa de esta licencia con su distribución. Si distribuye cualquier porción del software en forma de código compilado u objeto, solo puede hacerlo bajo una licencia que cumpla con esta licencia. + - (F) El software se proporciona “tal cual está”. Usted asume los riesgos derivados de su uso. Los colaboradores no proporcionan expresamente garantías o condiciones. Es posible que tenga derechos adicionales como consumidor bajo las leyes locales que esta licencia no puede cambiar. En la medida permitida por las leyes locales, los contribuyentes excluyen las garantías implícitas de comerciabilidad, idoneidad para un propósito particular y no infracción. + + +B.- Licencias de uso +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Apache License Version 2.0, January 2004 + * The MIT License (MIT) + * Microsoft .NET Library License Terms + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' aplica a los siguientes componentes: <<< + +1. AlphaCentaury.Licensing.Data +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. AlphaCentaury.Licensing.Data.Ui +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. DvbStpClient +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. Etsi.Ts102034 +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. FirstTimeConfig +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. IPTViewr +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. IpTviewr.Common +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. IpTViewr.Core +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. IpTViewr.IpTvServices +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. IpTViewr.MovistarPlus +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. IpTViewr.Native +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. IpTviewr.Telemetry +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. IPTViewr_Movistar+_1-5_beta-1 +------------------------------ +Instalador por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. IpTvRecorderLauncher +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +15. MovistarTV.sln +------------------------------ +Solución VS por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +16. PackLogos +------------------------------ +Programa por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +17. Services.EpgDiscovery +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +18. Services.Record +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +19. Services.Record.Serialization +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +20. Services.SqlServerCE +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +21. UiServices.Common +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +22. UiServices.Configuration +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +23. UiServices.Discovery +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +24. UiServices.DvbStpClient +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +25. UiServices.EPG +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +26. UiServices.Forms +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +27. UiServices.Record +------------------------------ +Biblioteca por Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Apache License Version 2.0, January 2004 +// +//////////////////////////////////////////////////////////// + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +//////////////////////////////////////////////////////////// + +>>> 'Apache License Version 2.0, January 2004' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. SQLitePCLRaw.bundle_green +------------------------------ +Paquete 'nuget' por Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + +2. SQLitePCLRaw.core +------------------------------ +Paquete 'nuget' por Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + +3. SQLitePCLRaw.lib.e_sqlite3.linux +------------------------------ +Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +4. SQLitePCLRaw.lib.e_sqlite3.osx +------------------------------ +Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +------------------------------ +Paquete 'nuget' por Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +6. SQLitePCLRaw.provider.e_sqlite3.net45 +------------------------------ +Paquete 'nuget' por Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. JetBrains.Annotations +------------------------------ +Paquete 'nuget' por JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Microsoft.AppCenter.Analytics +------------------------------ +Paquete 'nuget' por Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + +3. Microsoft.AppCenter.Crashes +------------------------------ +Paquete 'nuget' por Microsoft + This package contains functionalities to collect crash reports for your application. + +4. Microsoft.AppCenter +------------------------------ +Paquete 'nuget' por Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + +5. Microsoft.NETCore.Platforms +------------------------------ +Paquete 'nuget' por Microsoft +Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + +6. NETStandard.Library +------------------------------ +Paquete 'nuget' por Microsoft +Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + +7. Newtonsoft.Json +------------------------------ +Paquete 'nuget' por James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +8. sqlite-net-pcl +------------------------------ +Paquete 'nuget' por Frank A. Krueger +Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + +9. System.ValueTuple +------------------------------ +Paquete 'nuget' por Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + +10. TaskScheduler +------------------------------ +Paquete 'nuget' por David Hall +Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft .NET Library License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at https://docs.microsoft.com/en-us/legal/gdpr. + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit www.microsoft.com/exporting. + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft .NET Library License Terms' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Microsoft.Win32.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common types for Win32-based libraries. + +2. System.AppContext +------------------------------ +Paquete 'nuget' por Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + +3. System.Collections.Concurrent +------------------------------ +Paquete 'nuget' por Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + +4. System.Collections +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + +5. System.Console +------------------------------ +Paquete 'nuget' por Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + +6. System.Diagnostics.Debug +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + +7. System.Diagnostics.DiagnosticSource +------------------------------ +Paquete 'nuget' por Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + +8. System.Diagnostics.Tools +------------------------------ +Paquete 'nuget' por Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + +9. System.Diagnostics.Tracing +------------------------------ +Paquete 'nuget' por Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + +10. System.Globalization.Calendars +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + +11. System.Globalization +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + +12. System.IO.Compression.ZipFile +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + +13. System.IO.Compression +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes that support the compression and decompression of streams. + +14. System.IO.FileSystem.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + +15. System.IO.FileSystem +------------------------------ +Paquete 'nuget' por Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + +16. System.IO +------------------------------ +Paquete 'nuget' por Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + +17. System.Linq.Expressions +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + +18. System.Linq +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + +19. System.Net.Http +------------------------------ +Paquete 'nuget' por Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + +20. System.Net.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + +21. System.Net.Sockets +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + +22. System.ObjectModel +------------------------------ +Paquete 'nuget' por Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + +23. System.Reflection.Extensions +------------------------------ +Paquete 'nuget' por Microsoft + Provides custom attribute extension methods for System.Reflection types. + +24. System.Reflection.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common enumerations for reflection-based libraries. + +25. System.Reflection +------------------------------ +Paquete 'nuget' por Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + +26. System.Resources.ResourceManager +------------------------------ +Paquete 'nuget' por Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + +27. System.Runtime.Extensions +------------------------------ +Paquete 'nuget' por Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + +28. System.Runtime.Handles +------------------------------ +Paquete 'nuget' por Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + +29. System.Runtime.InteropServices.RuntimeInformation +------------------------------ +Paquete 'nuget' por Microsoft + Provides APIs to query about runtime and OS information. + +30. System.Runtime.InteropServices +------------------------------ +Paquete 'nuget' por Microsoft + Provides types that support COM interop and platform invoke services. + +31. System.Runtime.Numerics +------------------------------ +Paquete 'nuget' por Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + +32. System.Runtime +------------------------------ +Paquete 'nuget' por Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + +33. System.Security.Cryptography.Algorithms +------------------------------ +Paquete 'nuget' por Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + +34. System.Security.Cryptography.Encoding +------------------------------ +Paquete 'nuget' por Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + +35. System.Security.Cryptography.Primitives +------------------------------ +Paquete 'nuget' por Microsoft + Provides common types for the cryptographic libraries. + +36. System.Security.Cryptography.X509Certificates +------------------------------ +Paquete 'nuget' por Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + +37. System.Text.Encoding.Extensions +------------------------------ +Paquete 'nuget' por Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + +38. System.Text.Encoding +------------------------------ +Paquete 'nuget' por Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + +39. System.Text.RegularExpressions +------------------------------ +Paquete 'nuget' por Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + +40. System.Threading.Tasks +------------------------------ +Paquete 'nuget' por Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + +41. System.Threading.Timer +------------------------------ +Paquete 'nuget' por Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + +42. System.Threading +------------------------------ +Paquete 'nuget' por Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + +43. System.Xml.ReaderWriter +------------------------------ +Paquete 'nuget' por Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + +44. System.Xml.XDocument +------------------------------ +Paquete 'nuget' por Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Microsoft® Exception Message Box +------------------------------ +Biblioteca por Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' aplica a los siguientes componentes de terceros (“THIRD-PARTY”): <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Biblioteca por Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/movistartv.license.rtf b/1.5 'Kruger 60'/movistartv.license.rtf new file mode 100644 index 00000000..39d279df --- /dev/null +++ b/1.5 'Kruger 60'/movistartv.license.rtf @@ -0,0 +1,749 @@ +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082\deflangfe3082\deftab708{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fmodern\fprq1\fcharset0 Courier New;}{\f3\fnil\fprq2\fcharset2 Wingdings;}} +{\colortbl ;\red0\green0\blue255;} +{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}{\s3 heading 3;}{\s4 heading 4;}} +{\*\generator Riched20 10.0.18362}\viewkind4\uc1 +\pard\brdrb\brdrs\brdrw30 \s1\sb100\sa100\kerning36\b\f0\fs48 IPTViewr v1.5\par + +\pard\sb100\sa100\kerning0\b0\fs22 IPTV Virtual Decoder for movistar+ v1.5 \ldblquote Kruger 60\rdblquote Beta 1\line\i by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\cf1\ul\i <{{\field{\*\fldinst{HYPERLINK "http://www.alphacentaury.org/movistartv"}}{\fldrslt{http://www.alphacentaury.org/movistartv}}}}\f0\fs22 >\cf0\ulnone \line\cf1\ul <{{\field{\*\fldinst{HYPERLINK "https://github.com/AlphaCentaury"}}{\fldrslt{https://github.com/AlphaCentaury}}}}\f0\fs22 >\cf0\ulnone\i0\par + +\pard\brdrb\brdrs\brdrw20 \s2\sb100\sa100\b\fs40 Terms and conditions\par + +\pard\sb100\sa100\b0\fs22 The COMPONENTS and/or PROGRAMS (\ldblquote SOFWARE\rdblquote ), either in binary or source code form, are \b licensed under the terms of the \i Microsoft Reciprocal License (Ms-RL)\b0\i0 , unless otherwise stated. \line In particular, those specified in the corresponding \ldblquote LICENSE\rdblquote file of each project and/or folder will prevail over these license terms. \line All other rights are reserved by the author(s) of the software.\par +\b\i The SOFTWARE IS PROVIDED \ldblquote AS IS\rdblquote , WITHOUT WARRANTY OF ANY KIND\b0\i0 , express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \line In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.\par +\b IMPORTANT NOTICE: This software is \i NOT SUPPORTED NOR ENDORSED\i0 by Movistar or Telef\'f3nica.\b0 \line This software may stop working at any time if movistar+ makes technological changes to its platform.\par +\b DO NOT EVER CALL 1002 nor 1004\b0 if channels disappear from the list or cannot be seen or if you experience any other anomaly related to the use of this software. \line movistar+ only provides help and support for their physical decoder and only for the contracted services.\par +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \line Its use in the context of this product does not constitute endorsement nor support by their respective owners.\par +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \line Logos are provided in \ldblquote good faith\rdblquote , in order to identify the different channels and no copyright infringement is intended.\par + +\pard\brdrb\brdrs\brdrw20 \s2\sb100\sa100\b\fs40 Licenses\par + +\pard\fi-360\li720\sb100\sa100\tx720\b0\f1\fs20\'b7\tab\f0\fs22 Microsoft Reciprocal License (Ms-RL)\par + +\pard\fi-360\li720\sb100\sa100\f1\fs20\'b7\tab\f0\fs22 Apache License Version 2.0, January 2004\par +\f1\fs20\'b7\tab\f0\fs22 The MIT License (MIT)\par +\f1\fs20\'b7\tab\f0\fs22 Microsoft .NET Library License Terms\par +\f1\fs20\'b7\tab\f0\fs22 Microsoft\'ae Exception Message Box License Terms\par +\f1\fs20\'b7\tab\f0\fs22 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Microsoft Reciprocal License (Ms-RL)\par + +\pard\sb100\sa100\b0\fs22 This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 The terms \ldblquote reproduce,\rdblquote \ldblquote reproduction,\rdblquote \ldblquote derivative works,\rdblquote and \ldblquote distribution\rdblquote have the same meaning here as under U.S. copyright law.\par + +\pard\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 A \ldblquote contribution\rdblquote is the original software, or any additions or changes to the software.\par +\f2\fs20 o\tab\f0\fs22 A \ldblquote contributor\rdblquote is any person that distributes its contribution under this license.\par +\f2\fs20 o\tab\f0\fs22\ldblquote Licensed patents\rdblquote are a contributor's patent claims that read directly on its contribution.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Rights\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 (A) \i Copyright Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\par + +\pard\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 (B) \i Patent Grant\i0 - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 3.\tab Conditions and Limitations\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 (A) \i Reciprocal Grants\i0 - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.\par + +\pard\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 (B) \i No Trademark License\i0 - This license does not grant you rights to use any contributors' name, logo, or trademarks.\par +\f2\fs20 o\tab\f0\fs22 (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\par +\f2\fs20 o\tab\f0\fs22 (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\par +\f2\fs20 o\tab\f0\fs22 (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\par +\f2\fs20 o\tab\f0\fs22 (F) \i The software is licensed \ldblquote as-is.\rdblquote\i0 You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\par + +\pard\sb100\sa100\b 'Microsoft Reciprocal License (Ms-RL)'\b0 applies to the following components:\par + +\pard\s4\sb100\sa100\b\fs28 1. AlphaCentaury.Licensing.Data\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 2. AlphaCentaury.Licensing.Data.Ui\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 3. DvbStpClient\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 4. Etsi.Ts102034\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 5. FirstTimeConfig\par + +\pard\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 6. IPTViewr\par + +\pard\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 7. IpTviewr.Common\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 8. IpTViewr.Core\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 9. IpTViewr.IpTvServices\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 10. IpTViewr.MovistarPlus\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 11. IpTViewr.Native\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 12. IpTviewr.Telemetry\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 13. IPTViewr_Movistar+_1-5_beta-1\par + +\pard\sb100\sa100\b0\i\fs22 Installer by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 14. IpTvRecorderLauncher\par + +\pard\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 15. MovistarTV.sln\par + +\pard\sb100\sa100\b0\i\fs22 VS Solution by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 16. PackLogos\par + +\pard\sb100\sa100\b0\i\fs22 Program by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 17. Services.EpgDiscovery\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 18. Services.Record\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 19. Services.Record.Serialization\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 20. Services.SqlServerCE\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 21. UiServices.Common\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 22. UiServices.Configuration\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 23. UiServices.Discovery\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 24. UiServices.DvbStpClient\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 25. UiServices.EPG\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 26. UiServices.Forms\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\s4\sb100\sa100\b\fs28 27. UiServices.Record\par + +\pard\sb100\sa100\b0\i\fs22 Library by Codeplex/GitHub user AlphaCentaury\i0\par +\b Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors\b0\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Apache License Version 2.0, January 2004\par + +\pard\cf1\ul\b0\fs22 <{{\field{\*\fldinst{HYPERLINK "http://www.apache.org/licenses/"}}{\fldrslt{http://www.apache.org/licenses/}}}}\f0\fs22 >\cf0\ulnone\par +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 1.\tab Definitions\b0 .\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 "\b License\b0 " shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\par + +\pard\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 "\b Licensor\b0 " shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\par +\f2\fs20 o\tab\f0\fs22 "\b Legal Entity\b0 " shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "\b control\b0 " means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\par +\f2\fs20 o\tab\f0\fs22 "\b You\b0 " (or "\b Your\b0 ") shall mean an individual or Legal Entity exercising permissions granted by this License.\par +\f2\fs20 o\tab\f0\fs22 "\b Source\b0 " form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\par +\f2\fs20 o\tab\f0\fs22 "\b Object\b0 " form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\par +\f2\fs20 o\tab\f0\fs22 "\b Work\b0 " shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\par +\f2\fs20 o\tab\f0\fs22 "\b Derivative Works\b0 " shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\par +\f2\fs20 o\tab\f0\fs22 "\b Contribution\b0 " shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "\b submitted\b0 " means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "\b Not a Contribution.\b0 "\par +\f2\fs20 o\tab\f0\fs22 "\b Contributor\b0 " shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 2.\tab Grant of Copyright License\b0 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.\par + +\pard\fi-360\li720\sb100\sa100\b 3.\tab Grant of Patent License\b0 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.\par +\b 4.\tab Redistribution\b0 . You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:\par + +\pard\fi-360\li1440\sb100\sa100 1.\tab You must give any other recipients of the Work or Derivative Works a copy of this License; and\par +2.\tab You must cause any modified files to carry prominent notices stating that You changed the files; and\par +3.\tab You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and\par +4.\tab If the Work includes a "\b NOTICE\b0 " text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\par + +\pard\li720\sb100\sa100 You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 5.\tab Submission of Contributions\b0 . Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.\par + +\pard\fi-360\li720\sb100\sa100\b 6.\tab Trademarks\b0 . This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.\par +\b 7.\tab Disclaimer of Warranty\b0 . Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\par +\b 8.\tab Limitation of Liability\b0 . In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.\par +\b 9.\tab Accepting Warranty or Additional Liability\b0 . While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.\par + +\pard\sb100\sa100 END OF TERMS AND CONDITIONS\par +\b 'Apache License Version 2.0, January 2004'\b0 applies to the following \b third-party components:\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. SQLitePCLRaw.bundle_green\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink\i0\par +This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases.\par + +\pard\s4\sb100\sa100\b\fs28 2. SQLitePCLRaw.core\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink, et al\i0\par +SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite.\par + +\pard\s4\sb100\sa100\b\fs28 3. SQLitePCLRaw.lib.e_sqlite3.linux\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par + +\pard\s4\sb100\sa100\b\fs28 4. SQLitePCLRaw.lib.e_sqlite3.osx\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par + +\pard\s4\sb100\sa100\b\fs28 5. SQLitePCLRaw.lib.e_sqlite3.v110_xp\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink, D. Richard Hipp, et al\i0\par +This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw.\par + +\pard\s4\sb100\sa100\b\fs28 6. SQLitePCLRaw.provider.e_sqlite3.net45\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Eric Sink et al\i0\par +A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library.\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 The MIT License (MIT)\par + +\pard\sb100\sa100\b0\fs22 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par + +\pard\fi-360\li720\sb100\sa100\tx720\f1\fs20\'b7\tab\f0\fs22 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par + +\pard\sb100\sa100\b THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND\b0 , EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\par +\b 'The MIT License (MIT)'\b0 applies to the following \b third-party components:\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. JetBrains.Annotations\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by JetBrains\i0\par + +\pard\b Copyright (c) 2016 JetBrains \cf1\ul <{{\field{\*\fldinst{HYPERLINK "http://www.jetbrains.com"}}{\fldrslt{http://www.jetbrains.com}}}}\f0\fs22 >\cf0\ulnone\b0\par +ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections.\par + +\pard\s4\sb100\sa100\b\fs28 2. Microsoft.AppCenter.Analytics\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +This package contains functionalities to collect session, device properties, events etc\'85 for your application.\par + +\pard\s4\sb100\sa100\b\fs28 3. Microsoft.AppCenter.Crashes\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +This package contains functionalities to collect crash reports for your application.\par + +\pard\s4\sb100\sa100\b\fs28 4. Microsoft.AppCenter\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +This package contains the basic functionalities that all App Center services use to communicate with the backend.\par + +\pard\s4\sb100\sa100\b\fs28 5. Microsoft.NETCore.Platforms\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages.\par + +\pard\s4\sb100\sa100\b\fs28 6. NETStandard.Library\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +A set of standard .NET APIs that are prescribed to be used and supported together.\par + +\pard\s4\sb100\sa100\b\fs28 7. Newtonsoft.Json\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by James Newton-King\i0\par +\b Copyright (c) 2007 James Newton-King\b0\par +Json.NET is a popular high-performance JSON framework for .NET\par + +\pard\s4\sb100\sa100\b\fs28 8. sqlite-net-pcl\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Frank A. Krueger\i0\par +\b Copyright (c) Krueger Systems, Inc.\b0\par +SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite.\par + +\pard\s4\sb100\sa100\b\fs28 9. System.ValueTuple\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +\b Copyright (c) .NET Foundation and Contributors\b0\par +Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic.\par + +\pard\s4\sb100\sa100\b\fs28 10. TaskScheduler\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by David Hall\i0\par +\b Copyright (c) 2003-2010 David Hall\b0\par +Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support.\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Microsoft .NET Library License Terms\par + +\pard\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms.\par +\b If you comply with these license terms, you have the rights below.\b0\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0 You may install and use any number of copies of the software to develop and test your applications.\par + +\pard\fi-360\li720\sb100\sa100\b 2.\tab THIRD PARTY COMPONENTS.\b0 The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software.\par +\b 3.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\b\f0\fs22 a. DISTRIBUTABLE CODE.\b0 The software is comprised of Distributable Code. \ldblquote Distributable Code\rdblquote is code that you are permitted to distribute in applications you develop if you comply with the terms below.\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\b 1.\tab Right to Use and Distribute.\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 You may copy and distribute the object code form of the software.\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications.\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 use the Distributable Code in your applications and not as a standalone distribution;\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\rquote fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code.\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\b 3.\tab Distribution Restrictions. You may not\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 use Microsoft\rquote s trademarks in your applications\rquote names or in a way that suggests your applications come from or are endorsed by Microsoft; or\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An \ldblquote Excluded License\rdblquote is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 4.\tab DATA.\b0\par + +\pard\fi-360\li1440\f2\fs20 o\tab\b\f0\fs22 a. Data Collection.\b0 The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft\rquote s privacy statement. Our privacy statement is located at \cf1\ul <{{\field{\*\fldinst{HYPERLINK "https://go.microsoft.com/fwlink/?LinkID=824704"}}{\fldrslt{https://go.microsoft.com/fwlink/?LinkID=824704}}}}\f0\fs22 >\cf0\ulnone . You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices.\par +\f2\fs20 o\tab\b\f0\fs22 b. Processing of Personal Data.\b0 To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at \cf1\ul <{{\field{\*\fldinst{HYPERLINK "https://docs.microsoft.com/en-us/legal/gdpr"}}{\fldrslt{https://docs.microsoft.com/en-us/legal/gdpr}}}}\f0\fs22 >\cf0\ulnone .\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 5.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par + +\pard\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software;\par +\f2\fs20 o\tab\f0\fs22 remove, minimize, block or modify any notices of Microsoft or its suppliers in the software;\par +\f2\fs20 o\tab\f0\fs22 use the software in any way that is against the law; or\par +\f2\fs20 o\tab\f0\fs22 share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party.\par + +\pard\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit {\cf1\ul{\field{\*\fldinst{HYPERLINK www.microsoft.com/exporting }}{\fldrslt{www.microsoft.com/exporting}}}}\cf1\ul\f0\fs22 <{{\field{\*\fldinst{HYPERLINK "http://www.microsoft.com/exporting"}}{\fldrslt{http://www.microsoft.com/exporting}}}}\f0\fs22 >\cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is \ldblquote as is,\rdblquote we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0 If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply.\par +\b 10.\tab CONSUMER RIGHTS; REGIONAL VARIATIONS.\b0 This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you:\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\b\f0\fs22 a. Australia.\b0 You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights.\par + +\pard\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\b\f0\fs22 b. Canada.\b0 If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software.\par +\f2\fs20 o\tab\b\f0\fs22 c. Germany and Austria.\b0\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\i\f0\fs22 (i) Warranty.\i0 The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software.\par + +\pard\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\i\f0\fs22 (ii) Limitation of Liability.\i0 In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law.\par + +\pard\li2160\sb100\sa100 Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 11.\tab DISCLAIMER OF WARRANTY.\b0 \b THE SOFTWARE IS LICENSED \ldblquote AS-IS.\rdblquote YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\b0\par + +\pard\fi-360\li720\sb100\sa100\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 \b YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\b0\par + +\pard\li720\sb100\sa100 This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par +It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages.\par + +\pard\sb100\sa100\b 'Microsoft .NET Library License Terms'\b0 applies to the following \b third-party components:\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. Microsoft.Win32.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common types for Win32-based libraries.\par + +\pard\s4\sb100\sa100\b\fs28 2. System.AppContext\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data.\par + +\pard\s4\sb100\sa100\b\fs28 3. System.Collections.Concurrent\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently.\par + +\pard\s4\sb100\sa100\b\fs28 4. System.Collections\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections.\par + +\pard\s4\sb100\sa100\b\fs28 5. System.Console\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the System.Console class, which represents the standard input, output and error streams for console applications.\par + +\pard\s4\sb100\sa100\b\fs28 6. System.Diagnostics.Debug\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes and attributes that allows basic interaction with a debugger.\par + +\pard\s4\sb100\sa100\b\fs28 7. System.Diagnostics.DiagnosticSource\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools).\par + +\pard\s4\sb100\sa100\b\fs28 8. System.Diagnostics.Tools\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools.\par + +\pard\s4\sb100\sa100\b\fs28 9. System.Diagnostics.Tracing\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW).\par + +\pard\s4\sb100\sa100\b\fs28 10. System.Globalization.Calendars\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars.\par + +\pard\s4\sb100\sa100\b\fs28 11. System.Globalization\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings.\par + +\pard\s4\sb100\sa100\b\fs28 12. System.IO.Compression.ZipFile\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes that support the compression and decompression of streams using file system paths.\par + +\pard\s4\sb100\sa100\b\fs28 13. System.IO.Compression\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes that support the compression and decompression of streams.\par + +\pard\s4\sb100\sa100\b\fs28 14. System.IO.FileSystem.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common enumerations and exceptions for path-based I/O libraries.\par + +\pard\s4\sb100\sa100\b\fs28 15. System.IO.FileSystem\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types that allow reading and writing to files and types that provide basic file and directory support.\par + +\pard\s4\sb100\sa100\b\fs28 16. System.IO\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams.\par + +\pard\s4\sb100\sa100\b\fs28 17. System.Linq.Expressions\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees.\par + +\pard\s4\sb100\sa100\b\fs28 18. System.Linq\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ).\par + +\pard\s4\sb100\sa100\b\fs28 19. System.Net.Http\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers.\par + +\pard\s4\sb100\sa100\b\fs28 20. System.Net.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer.\par + +\pard\s4\sb100\sa100\b\fs28 21. System.Net.Sockets\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network.\par + +\pard\s4\sb100\sa100\b\fs28 22. System.ObjectModel\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it.\par + +\pard\s4\sb100\sa100\b\fs28 23. System.Reflection.Extensions\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides custom attribute extension methods for System.Reflection types.\par + +\pard\s4\sb100\sa100\b\fs28 24. System.Reflection.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common enumerations for reflection-based libraries.\par + +\pard\s4\sb100\sa100\b\fs28 25. System.Reflection\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods.\par + +\pard\s4\sb100\sa100\b\fs28 26. System.Resources.ResourceManager\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application.\par + +\pard\s4\sb100\sa100\b\fs28 27. System.Runtime.Extensions\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information.\par + +\pard\s4\sb100\sa100\b\fs28 28. System.Runtime.Handles\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles.\par + +\pard\s4\sb100\sa100\b\fs28 29. System.Runtime.InteropServices.RuntimeInformation\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides APIs to query about runtime and OS information.\par + +\pard\s4\sb100\sa100\b\fs28 30. System.Runtime.InteropServices\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types that support COM interop and platform invoke services.\par + +\pard\s4\sb100\sa100\b\fs28 31. System.Runtime.Numerics\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32.\par + +\pard\s4\sb100\sa100\b\fs28 32. System.Runtime\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application.\par + +\pard\s4\sb100\sa100\b\fs28 33. System.Security.Cryptography.Algorithms\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations.\par + +\pard\s4\sb100\sa100\b\fs28 34. System.Security.Cryptography.Encoding\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data.\par + +\pard\s4\sb100\sa100\b\fs28 35. System.Security.Cryptography.Primitives\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides common types for the cryptographic libraries.\par + +\pard\s4\sb100\sa100\b\fs28 36. System.Security.Cryptography.X509Certificates\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate.\par + +\pard\s4\sb100\sa100\b\fs28 37. System.Text.Encoding.Extensions\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32.\par + +\pard\s4\sb100\sa100\b\fs28 38. System.Text.Encoding\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes.\par + +\pard\s4\sb100\sa100\b\fs28 39. System.Text.RegularExpressions\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine.\par + +\pard\s4\sb100\sa100\b\fs28 40. System.Threading.Tasks\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides types that simplify the work of writing concurrent and asynchronous code.\par + +\pard\s4\sb100\sa100\b\fs28 41. System.Threading.Timer\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals.\par + +\pard\s4\sb100\sa100\b\fs28 42. System.Threading\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code.\par + +\pard\s4\sb100\sa100\b\fs28 43. System.Xml.ReaderWriter\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data.\par + +\pard\s4\sb100\sa100\b\fs28 44. System.Xml.XDocument\par + +\pard\sb100\sa100\b0\i\fs22 'nuget' package by Microsoft\i0\par +Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily.\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Microsoft\'ae Exception Message Box License Terms\par + +\pard\sb100\sa100\fs22 MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER\b0\par +\b PLEASE NOTE:\b0 Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. You may not use the supplement if you do not have a license for the software. The license terms for the software apply to your use of this supplement.\par +\b 'Microsoft\'ae Exception Message Box License Terms'\b0 applies to the following \b third-party components:\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. Microsoft\'ae Exception Message Box\par + +\pard\sb100\sa100\b0\i\fs22 Library by Microsoft\i0\par + +\pard\cf1\ul <{{\field{\*\fldinst{HYPERLINK "http://www.microsoft.com/en-us/download/details.aspx?id=20101"}}{\fldrslt{http://www.microsoft.com/en-us/download/details.aspx?id=20101}}}}\f0\fs22 >\cf0\ulnone (Feature Pack for Microsoft SQL Server 2005 SP4) \line x86: ENU\\x86\\SQLServer2005_EMB.msi \line x64: ENU\\x64\\SQLServer2005_EMB.msi\par +The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages.\par + +\pard\brdrb\brdrs\brdrw20 \s3\sb100\sa100\b\fs34 Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms\par + +\pard\sb100\sa100\fs22 MICROSOFT SOFTWARE LICENSE TERMS\b0\par +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft\par + +\pard\fi-360\li720\sb100\sa100\tx720\f1\fs20\'b7\tab\f0\fs22 updates,\par + +\pard\fi-360\li720\sb100\sa100\f1\fs20\'b7\tab\f0\fs22 supplements,\par +\f1\fs20\'b7\tab\f0\fs22 Internet-based services, and\par +\f1\fs20\'b7\tab\f0\fs22 support services\par + +\pard\sb100\sa100 for this software, unless other terms accompany those items. If so, those terms apply.\par +\b BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\b0\par +\b If you comply with these license terms, you have the rights below.\b0\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 1.\tab INSTALLATION AND USE RIGHTS.\b0\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\b\f0\fs22 Installation and Use.\b0 You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software.\par + +\pard\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\b\f0\fs22 Included Microsoft Programs.\b0 The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at \b %Program Files%\\Microsoft SQL Server Compact Edition\\v4.0\b0 apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software.\par + +\pard\fi-360\li2160\sb100\sa100\tx2160\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86.msm\par + +\pard\fi-360\li2160\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86.msm\par +\f3\fs20\'a7\tab\f0\fs22 Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 policy_9_0_Microsoft_VC90_CRT_x86_x64.msm\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_X86_Microsoft.VC90.CRT.manifest\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_msvcr90.dll\par +\f3\fs20\'a7\tab\f0\fs22 CRT_AMD64_Microsoft.VC90.CRT.manifest\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 2.\tab ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\b0\par + +\pard\fi-360\li1440\sb100\sa100\b 1.\tab Distributable Code.\b0 The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below.\par + +\pard\fi-360\li2160\sb100\sa100\b 1.\tab Right to Use and Distribute. The code and text files listed below are "Distributable Code."\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files.\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.\par + +\pard\fi-360\li2160\sb100\sa100\b 2.\tab Distribution Requirements. For any Distributable Code you distribute, you must\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 add significant primary functionality to it in your programs;\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code included in a setup program only as part of that setup program without modification;\par +\f3\fs20\'a7\tab\f0\fs22 require distributors and external end users to agree to terms that protect it at least as much as this agreement;\par +\f3\fs20\'a7\tab\f0\fs22 display your valid copyright notice on your programs; and\par +\f3\fs20\'a7\tab\f0\fs22 indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs.\par + +\pard\fi-360\li2160\sb100\sa100\b 3.\tab Distribution Restrictions. You may not\b0\par + +\pard\fi-360\li2880\sb100\sa100\tx2880\f3\fs20\'a7\tab\f0\fs22 alter any copyright, trademark or patent notice in the Distributable Code;\par + +\pard\fi-360\li2880\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft;\par +\f3\fs20\'a7\tab\f0\fs22 distribute Distributable Code to run on a platform other than the Windows platform;\par +\f3\fs20\'a7\tab\f0\fs22 include Distributable Code in malicious, deceptive or unlawful programs; or\par +\f3\fs20\'a7\tab\f0\fs22 modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that \par + +\pard\fi-360\li3600\sb100\sa100\tx3600\f3\fs20\'a7\tab\f0\fs22 the code be disclosed or distributed in source code form; or\par + +\pard\fi-360\li3600\sb100\sa100\f3\fs20\'a7\tab\f0\fs22 others have the right to modify it.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 3.\tab SCOPE OF LICENSE.\b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 work around any technical limitations in the software;\par + +\pard\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;\par +\f2\fs20 o\tab\f0\fs22 make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation;\par +\f2\fs20 o\tab\f0\fs22 publish the software for others to copy;\par +\f2\fs20 o\tab\f0\fs22 rent, lease or lend the software; or\par +\f2\fs20 o\tab\f0\fs22 transfer the software or this agreement to any third party.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 4.\tab BACKUP COPY.\b0 You may make one backup copy of the software. You may use it only to reinstall the software.\par + +\pard\fi-360\li720\sb100\sa100\b 5.\tab DOCUMENTATION.\b0 Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.\par + +\pard\fi-360\li720\b 6.\tab EXPORT RESTRICTIONS.\b0 The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see {\cf1\ul{\field{\*\fldinst{HYPERLINK www.microsoft.com/exporting }}{\fldrslt{www.microsoft.com/exporting}}}}\cf1\ul\f0\fs22 <{{\field{\*\fldinst{HYPERLINK "http://www.microsoft.com/exporting"}}{\fldrslt{http://www.microsoft.com/exporting}}}}\f0\fs22 >\cf0\ulnone .\par +\b 7.\tab SUPPORT SERVICES.\b0 Because this software is provided "as is," we may not provide support services for it.\par +\b 8.\tab ENTIRE AGREEMENT.\b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par +\b 9.\tab APPLICABLE LAW.\b0\par + +\pard\fi-360\li720\sb100\sa100\tx720\f1\fs20\'b7\tab\b\f0\fs22 United States.\b0 If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.\par + +\pard\fi-360\li720\sb100\sa100\f1\fs20\'b7\tab\b\f0\fs22 Outside the United States.\b0 If you acquired the software in any other country, the laws of that country apply.\par + +\pard\fi-360\li720\sb100\sa100\tx720\b 10.\tab LEGAL EFFECT.\b0 This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.\par + +\pard\fi-360\li720\sb100\sa100\b 11.\tab DISCLAIMER OF WARRANTY.\b0 THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\par +\b 12.\tab LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.\b0 YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\par + +\pard\li720\sb100\sa100 This limitation applies to\par + +\pard\fi-360\li1440\sb100\sa100\tx1440\f2\fs20 o\tab\f0\fs22 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and\par + +\pard\fi-360\li1440\sb100\sa100\f2\fs20 o\tab\f0\fs22 claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par + +\pard\li720\sb100\sa100 It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.\par + +\pard\sb100\sa100\b 'Microsoft\'ae SQL Server Compact\'ae 4.0 SP1 License Terms'\b0 applies to the following \b third-party components:\b0\par + +\pard\s4\sb100\sa100\b\fs28 1. Microsoft\'ae SQL Server Compact\'ae 4.0 SP1\par + +\pard\sb100\sa100\b0\i\fs22 Library by Microsoft\i0\par + +\pard\cf1\ul <{{\field{\*\fldinst{HYPERLINK "http://www.microsoft.com/en-us/download/details.aspx?id=30709"}}{\fldrslt{http://www.microsoft.com/en-us/download/details.aspx?id=30709}}}}\f0\fs22 >\cf0\ulnone (Microsoft\'ae SQL Server\'ae Compact 4.0 SP1) \line x86: ENU\\SSCERuntime_x86-ENU.exe; \line x64: ENU\\SSCERuntime_x64-ENU.exe.msi\par +Microsoft\'ae SQL Server Compact\'ae 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder.\par +[]: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: []: \par +} + \ No newline at end of file diff --git a/1.5 'Kruger 60'/movistartv.license.txt b/1.5 'Kruger 60'/movistartv.license.txt new file mode 100644 index 00000000..169bc4d7 --- /dev/null +++ b/1.5 'Kruger 60'/movistartv.license.txt @@ -0,0 +1,824 @@ +############################################################################## +## +## IPTViewr v1.5 +## +############################################################################## +## +## IPTV Virtual Decoder for movistar+ v1.5 “Kruger 60” Beta 1 +## by Codeplex/GitHub user AlphaCentaury +## +## Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors +## +## http://www.alphacentaury.org/movistartv +## https://github.com/AlphaCentaury +## +############################################################################## + +A.- Terms and conditions +============================================================================== + +The COMPONENTS and/or PROGRAMS (“SOFWARE”), either in binary or source code form, are **licensed under the terms of the _Microsoft Reciprocal License (Ms-RL)_**, unless otherwise stated. \ +In particular, those specified in the corresponding “LICENSE” file of each project and/or folder will prevail over these license terms. \ +All other rights are reserved by the author(s) of the software. + +_**The SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. \ +In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. + +**IMPORTANT NOTICE: This software is _NOT SUPPORTED NOR ENDORSED_ by Movistar or Telefónica.** \ +This software may stop working at any time if movistar+ makes technological changes to its platform. + +**DO NOT EVER CALL 1002 nor 1004** if channels disappear from the list or cannot be seen or if you experience any other anomaly related to the use of this software. \ +movistar+ only provides help and support for their physical decoder and only for the contracted services. + +All trademarks, service marks, trade names, product names and logos are the property of their respective owners. \ +Its use in the context of this product does not constitute endorsement nor support by their respective owners. + +Logos of movistar+ channels might be provided with this software. These logos are the property of the respective channels and businesses. \ +Logos are provided in “good faith”, in order to identify the different channels and no copyright infringement is intended. + + +B.- Licenses +============================================================================== + + * Microsoft Reciprocal License (Ms-RL) + * Apache License Version 2.0, January 2004 + * The MIT License (MIT) + * Microsoft .NET Library License Terms + * Microsoft® Exception Message Box License Terms + * Microsoft® SQL Server Compact® 4.0 SP1 License Terms + + +//////////////////////////////////////////////////////////// +// +// Microsoft Reciprocal License (Ms-RL) +// +//////////////////////////////////////////////////////////// + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. **Definitions** + + - The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law. + - A “contribution” is the original software, or any additions or changes to the software. + - A “contributor” is any person that distributes its contribution under this license. + - “Licensed patents” are a contributor's patent claims that read directly on its contribution. + +2. **Grant of Rights** + + - (A) _Copyright Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + - (B) _Patent Grant_ - Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. **Conditions and Limitations** + + - (A) _Reciprocal Grants_ - For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. + - (B) _No Trademark License_ - This license does not grant you rights to use any contributors' name, logo, or trademarks. + - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + - (F) _The software is licensed “as-is.”_ You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft Reciprocal License (Ms-RL)' applies to the following components: <<< + +1. AlphaCentaury.Licensing.Data +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +2. AlphaCentaury.Licensing.Data.Ui +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +3. DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +4. Etsi.Ts102034 +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +5. FirstTimeConfig +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +6. IPTViewr +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +7. IpTviewr.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +8. IpTViewr.Core +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +9. IpTViewr.IpTvServices +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +10. IpTViewr.MovistarPlus +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +11. IpTViewr.Native +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +12. IpTviewr.Telemetry +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +13. IPTViewr_Movistar+_1-5_beta-1 +------------------------------ +Installer by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +14. IpTvRecorderLauncher +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +15. MovistarTV.sln +------------------------------ +VS Solution by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +16. PackLogos +------------------------------ +Program by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +17. Services.EpgDiscovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +18. Services.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +19. Services.Record.Serialization +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +20. Services.SqlServerCE +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +21. UiServices.Common +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +22. UiServices.Configuration +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +23. UiServices.Discovery +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +24. UiServices.DvbStpClient +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +25. UiServices.EPG +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +26. UiServices.Forms +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + +27. UiServices.Record +------------------------------ +Library by Codeplex/GitHub user AlphaCentaury +Copyright (C) 2014-2020, Codeplex/GitHub user AlphaCentaury and its contributors + + + +//////////////////////////////////////////////////////////// +// +// Apache License Version 2.0, January 2004 +// +//////////////////////////////////////////////////////////// + +[http://www.apache.org/licenses/](http://www.apache.org/licenses/) + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. **Definitions**. + - "**License**" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + - "**Licensor**" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + - "**Legal Entity**" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "**control**" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + - "**You**" (or "**Your**") shall mean an individual or Legal Entity exercising permissions granted by this License. + - "**Source**" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + - "**Object**" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + - "**Work**" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + - "**Derivative Works**" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + - "**Contribution**" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "**submitted**" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "**Not a Contribution.**" + - "**Contributor**" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. **Grant of Copyright License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. **Grant of Patent License**. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. **Redistribution**. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "**NOTICE**" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. **Submission of Contributions**. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. **Trademarks**. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. **Disclaimer of Warranty**. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. **Limitation of Liability**. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. **Accepting Warranty or Additional Liability**. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +//////////////////////////////////////////////////////////// + +>>> 'Apache License Version 2.0, January 2004' applies to the following THIRD-PARTY components: <<< + +1. SQLitePCLRaw.bundle_green +------------------------------ +'nuget' package by Eric Sink + This 'batteries-included' bundle brings in SQLitePCLRaw.core and the necessary stuff for certain common use cases. + +2. SQLitePCLRaw.core +------------------------------ +'nuget' package by Eric Sink, et al + SQLitePCL.raw is a Portable Class Library (PCL) for low-level (raw) access to SQLite. + +3. SQLitePCLRaw.lib.e_sqlite3.linux +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +4. SQLitePCLRaw.lib.e_sqlite3.osx +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +5. SQLitePCLRaw.lib.e_sqlite3.v110_xp +------------------------------ +'nuget' package by Eric Sink, D. Richard Hipp, et al + This package contains a platform-specific native code build of SQLite for use with SQLitePCL.raw. + +6. SQLitePCLRaw.provider.e_sqlite3.net45 +------------------------------ +'nuget' package by Eric Sink et al + A SQLitePCL.raw 'provider' bridges the gap between SQLitePCLRaw.core and a particular instance of the native SQLite library. + + + +//////////////////////////////////////////////////////////// +// +// The MIT License (MIT) +// +//////////////////////////////////////////////////////////// + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND**, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +//////////////////////////////////////////////////////////// + +>>> 'The MIT License (MIT)' applies to the following THIRD-PARTY components: <<< + +1. JetBrains.Annotations +------------------------------ +'nuget' package by JetBrains +Copyright (c) 2016 JetBrains http://www.jetbrains.com + ReSharper Annotations help reduce false positive warnings, explicitly declare purity and nullability in your code, deal with implicit usages of members, support special semantics of APIs in ASP.NET and XAML frameworks and otherwise increase accuracy of ReSharper code inspections. + +2. Microsoft.AppCenter.Analytics +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect session, device properties, events etc… for your application. + +3. Microsoft.AppCenter.Crashes +------------------------------ +'nuget' package by Microsoft + This package contains functionalities to collect crash reports for your application. + +4. Microsoft.AppCenter +------------------------------ +'nuget' package by Microsoft + This package contains the basic functionalities that all App Center services use to communicate with the backend. + +5. Microsoft.NETCore.Platforms +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides runtime information required to resolve target framework, platform, and runtime specific implementations of .NETCore packages. + +6. NETStandard.Library +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + A set of standard .NET APIs that are prescribed to be used and supported together. + +7. Newtonsoft.Json +------------------------------ +'nuget' package by James Newton-King +Copyright (c) 2007 James Newton-King + Json.NET is a popular high-performance JSON framework for .NET + +8. sqlite-net-pcl +------------------------------ +'nuget' package by Frank A. Krueger +Copyright (c) Krueger Systems, Inc. + SQLite-net is an open source and light weight library providing easy SQLite database storage for .NET, Mono, and Xamarin applications. This version uses SQLitePCLRaw to provide platform independent versions of SQLite. + +9. System.ValueTuple +------------------------------ +'nuget' package by Microsoft +Copyright (c) .NET Foundation and Contributors + Provides the System.ValueTuple structs, which implement the underlying types for tuples in C# and Visual Basic. + +10. TaskScheduler +------------------------------ +'nuget' package by David Hall +Copyright (c) 2003-2010 David Hall + Provides a single assembly wrapper for the 1.0 and 2.0 versions of Task Scheduler found in all Microsoft operating systems post Windows 98. It simplifies the coding, aggregates the multiple versions and allows for localization support. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft .NET Library License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between you and Microsoft Corporation (or based on where you live, one of its affiliates). +They apply to the software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have different terms. + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** You may install and use any number of copies of the software to develop and test your applications. + +2. **THIRD PARTY COMPONENTS.** The software may include third party components with separate legal notices or governed by other agreements, as may be described in the ThirdPartyNotices file(s) accompanying the software. + +3. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + - **a. DISTRIBUTABLE CODE.** The software is comprised of Distributable Code. “Distributable Code” is code that you are permitted to distribute in applications you develop if you comply with the terms below. + + 1. **Right to Use and Distribute.** + - You may copy and distribute the object code form of the software. + - Third Party Distribution. You may permit distributors of your applications to copy and distribute the Distributable Code as part of those applications. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + - use the Distributable Code in your applications and not as a standalone distribution; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your applications, except to the extent that any claim is based solely on the unmodified Distributable Code. + + 3. **Distribution Restrictions. You may not** + - use Microsoft’s trademarks in your applications’ names or in a way that suggests your applications come from or are endorsed by Microsoft; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An “Excluded License” is one that requires, as a condition of use, modification or distribution of code, that (i) it be disclosed or distributed in source code form; or (ii) others have the right to modify it. + +4. **DATA.** + + - **a. Data Collection.** The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt-out of many of these scenarios, but not all, as described in the software documentation. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and its use from the software documentation and our privacy statement. Your use of the software operates as your consent to these practices. + + - **b. Processing of Personal Data.** To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at https://docs.microsoft.com/en-us/legal/gdpr. + +5. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + + - reverse engineer, decompile or disassemble the software, or otherwise attempt to derive the source code for the software, except and to the extent required by third party licensing terms governing use of certain open source components that may be included in the software; + + - remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; + + - use the software in any way that is against the law; or + + - share, publish, rent or lease the software, provide the software as a stand-alone offering for others to use, or transfer the software or this agreement to any third party. + +6. **EXPORT RESTRICTIONS.** You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users, and end use. For further information on export restrictions, visit www.microsoft.com/exporting. + +7. **SUPPORT SERVICES.** Because this software is “as is,” we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** If you acquired the software in the United States, Washington law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. + +10. **CONSUMER RIGHTS; REGIONAL VARIATIONS.** This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: + + - **a. Australia.** You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. + + - **b. Canada.** If you acquired this software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. + + - **c. Germany and Austria.** + + - *(i) Warranty.* The software will perform substantially as described in any Microsoft materials that accompany it. However, Microsoft gives no contractual guarantee in relation to the software. + + - *(ii) Limitation of Liability.* In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as in case of death or personal or physical injury, Microsoft is liable according to the statutory law. + + Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence + +11. **DISCLAIMER OF WARRANTY.** **THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.** + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** **YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.** + + This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party applications; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your state or country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft .NET Library License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft.Win32.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for Win32-based libraries. + +2. System.AppContext +------------------------------ +'nuget' package by Microsoft + Provides the System.AppContext class, which allows access to the BaseDirectory property and other application specific data. + +3. System.Collections.Concurrent +------------------------------ +'nuget' package by Microsoft + Provides several thread-safe collection classes that should be used in place of the corresponding types in the System.Collections.NonGeneric and System.Collections packages whenever multiple threads are accessing the collection concurrently. + +4. System.Collections +------------------------------ +'nuget' package by Microsoft + Provides classes that define generic collections, which allow developers to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections. + +5. System.Console +------------------------------ +'nuget' package by Microsoft + Provides the System.Console class, which represents the standard input, output and error streams for console applications. + +6. System.Diagnostics.Debug +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allows basic interaction with a debugger. + +7. System.Diagnostics.DiagnosticSource +------------------------------ +'nuget' package by Microsoft + Provides Classes that allow you to decouple code logging rich (unserializable) diagnostics/telemetry (e.g. framework) from code that consumes it (e.g. tools). + +8. System.Diagnostics.Tools +------------------------------ +'nuget' package by Microsoft + Provides attributes, such as GeneratedCodeAttribute and SuppresMessageAttribute, that are emitted or consumed by analysis tools. + +9. System.Diagnostics.Tracing +------------------------------ +'nuget' package by Microsoft + Provides class that enable you to create high performance tracing events to be captured by event tracing for Windows (ETW). + +10. System.Globalization.Calendars +------------------------------ +'nuget' package by Microsoft + Provides classes for performing date calculations using specific calendars, including the Gregorian, Julian, Hijri and Korean calendars. + +11. System.Globalization +------------------------------ +'nuget' package by Microsoft + Provides classes that define culture-related information, including language, country/region, calendars in use, format patterns for dates, currency, and numbers, and sort order for strings. + +12. System.IO.Compression.ZipFile +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams using file system paths. + +13. System.IO.Compression +------------------------------ +'nuget' package by Microsoft + Provides classes that support the compression and decompression of streams. + +14. System.IO.FileSystem.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations and exceptions for path-based I/O libraries. + +15. System.IO.FileSystem +------------------------------ +'nuget' package by Microsoft + Provides types that allow reading and writing to files and types that provide basic file and directory support. + +16. System.IO +------------------------------ +'nuget' package by Microsoft + Provides base input and output (I/O) types, including System.IO.Stream, System.IO.StreamReader and System.IO.StreamWriter, that allow reading and writing to data streams. + +17. System.Linq.Expressions +------------------------------ +'nuget' package by Microsoft + Provides classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. + +18. System.Linq +------------------------------ +'nuget' package by Microsoft + Provides classes and interfaces that supports queries that use Language-Integrated Query (LINQ). + +19. System.Net.Http +------------------------------ +'nuget' package by Microsoft + Provides a programming interface for modern HTTP applications, including HTTP client components that allow applications to consume web services over HTTP and HTTP components that can be used by both clients and servers for parsing HTTP headers. + +20. System.Net.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for network-based libraries, including System.Net.IPAddress, System.Net.IPEndPoint, and System.Net.CookieContainer. + +21. System.Net.Sockets +------------------------------ +'nuget' package by Microsoft + Provides classes such as Socket, TcpClient and UdpClient, which enable developers to send and receive data over the network. + +22. System.ObjectModel +------------------------------ +'nuget' package by Microsoft + Provides types and interfaces that allow the creation of observable types that provide notifications to clients when changes are made to it. + +23. System.Reflection.Extensions +------------------------------ +'nuget' package by Microsoft + Provides custom attribute extension methods for System.Reflection types. + +24. System.Reflection.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common enumerations for reflection-based libraries. + +25. System.Reflection +------------------------------ +'nuget' package by Microsoft + Provides types that retrieve information about assemblies, modules, members, parameters, and other entities in managed code by examining their metadata. These types also can be used to manipulate instances of loaded types, for example to hook up events or to invoke methods. + +26. System.Resources.ResourceManager +------------------------------ +'nuget' package by Microsoft + Provides classes and attributes that allow developers to create, store, and manage various culture-specific resources used in an application. + +27. System.Runtime.Extensions +------------------------------ +'nuget' package by Microsoft + Provides commonly-used classes for performing mathematical functions, conversions, string comparisons and querying environment information. + +28. System.Runtime.Handles +------------------------------ +'nuget' package by Microsoft + Provides base classes, including System.Runtime.InteropServices.CriticalHandle and System.Runtime.InteropServices.SafeHandle, for types that represent operating system handles. + +29. System.Runtime.InteropServices.RuntimeInformation +------------------------------ +'nuget' package by Microsoft + Provides APIs to query about runtime and OS information. + +30. System.Runtime.InteropServices +------------------------------ +'nuget' package by Microsoft + Provides types that support COM interop and platform invoke services. + +31. System.Runtime.Numerics +------------------------------ +'nuget' package by Microsoft + Provides the numeric types System.Numerics.BigInteger and System.Numerics.Complex, which complement the numeric primitives, such as System.Byte, System.Double and System.Int32. + +32. System.Runtime +------------------------------ +'nuget' package by Microsoft + Provides the fundamental primitives, classes and base classes that define commonly-used value and reference data types, events and event handlers, interfaces, attributes, and exceptions. This packages represents the core package, and provides the minimal set of types required to build a managed application. + +33. System.Security.Cryptography.Algorithms +------------------------------ +'nuget' package by Microsoft + Provides base types for cryptographic algorithms, including hashing, encryption, and signing operations. + +34. System.Security.Cryptography.Encoding +------------------------------ +'nuget' package by Microsoft + Provides types for representing Abstract Syntax Notation One (ASN.1)-encoded data. + +35. System.Security.Cryptography.Primitives +------------------------------ +'nuget' package by Microsoft + Provides common types for the cryptographic libraries. + +36. System.Security.Cryptography.X509Certificates +------------------------------ +'nuget' package by Microsoft + Provides types for reading, exporting and verifying Authenticode X.509 v3 certificates. These certificates are signed with a private key that uniquely and positively identifies the holder of the certificate. + +37. System.Text.Encoding.Extensions +------------------------------ +'nuget' package by Microsoft + Provides support for specific encodings, including ASCII, UTF-7, UTF-8, UTF-16, and UTF-32. + +38. System.Text.Encoding +------------------------------ +'nuget' package by Microsoft + Provides base abstract encoding classes for converting blocks of characters to and from blocks of bytes. + +39. System.Text.RegularExpressions +------------------------------ +'nuget' package by Microsoft + Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression engine. + +40. System.Threading.Tasks +------------------------------ +'nuget' package by Microsoft + Provides types that simplify the work of writing concurrent and asynchronous code. + +41. System.Threading.Timer +------------------------------ +'nuget' package by Microsoft + Provides the System.Threading.Timer class, which is a mechanism for executing a method at specified intervals. + +42. System.Threading +------------------------------ +'nuget' package by Microsoft + Provides the fundamental synchronization primitives, including System.Threading.Monitor and System.Threading.Mutex, that are required when writing asynchronous code. + +43. System.Xml.ReaderWriter +------------------------------ +'nuget' package by Microsoft + Provides provides a fast, non-cached, forward-only way to read and write Extensible Markup Language (XML) data. + +44. System.Xml.XDocument +------------------------------ +'nuget' package by Microsoft + Provides the classes for Language-Integrated Query (LINQ) to Extensible Markup Language (XML). LINQ to XML is an in-memory XML programming interface that enables you to modify XML documents efficiently and easily. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® Exception Message Box License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE TERMS FOR MICROSOFT EXCEPTION MESSAGE BOX FOR MICROSOFT SQL SERVER** + +**PLEASE NOTE:** Refer to your license terms for Microsoft SQL Server 2005 software (the "software") to identify the entity licensing this supplement to you and for support information. You may use a copy of this supplement with each validly licensed copy of the software. +You may not use the supplement if you do not have a license for the software. +The license terms for the software apply to your use of this supplement. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® Exception Message Box License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® Exception Message Box +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) + x86: ENU\x86\SQLServer2005_EMB.msi + x64: ENU\x64\SQLServer2005_EMB.msi + The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. + + + +//////////////////////////////////////////////////////////// +// +// Microsoft® SQL Server Compact® 4.0 SP1 License Terms +// +//////////////////////////////////////////////////////////// + +**MICROSOFT SOFTWARE LICENSE TERMS** + +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + +- updates, +- supplements, +- Internet-based services, and +- support services + +for this software, unless other terms accompany those items. If so, those terms apply. + +**BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.** + +**If you comply with these license terms, you have the rights below.** + +1. **INSTALLATION AND USE RIGHTS.** + + - **Installation and Use.** You may install and use any number of copies of the software on your devices to design, develop and test your programs for use with the software. + + - **Included Microsoft Programs.** The software contains the Microsoft Visual C++ 2008 Express Edition components listed below. You may only use these components with the software. The Microsoft Visual C++ 2008 Express license terms located at **%Program Files%\Microsoft SQL Server Compact Edition\v4.0** apply to your use of them, except that the components listed below may be used for commercial hosting services when used in conjunction with the software. + + - Microsoft\_VC90\_CRT\_x86.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86.msm + - Microsoft\_VC90\_CRT\_x86\_x64.msm + - policy\_9\_0\_Microsoft\_VC90\_CRT\_x86\_x64.msm + - CRT\_X86\_msvcr90.dll + - CRT\_X86\_Microsoft.VC90.CRT.manifest + - CRT\_AMD64\_msvcr90.dll + - CRT\_AMD64\_Microsoft.VC90.CRT.manifest + +2. **ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.** + + 1. **Distributable Code.** The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below. + + 1. **Right to Use and Distribute. The code and text files listed below are "Distributable Code."** + + - TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files. + - Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + + 2. **Distribution Requirements. For any Distributable Code you distribute, you must** + + - add significant primary functionality to it in your programs; + - for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your program; + - distribute Distributable Code included in a setup program only as part of that setup program without modification; + - require distributors and external end users to agree to terms that protect it at least as much as this agreement; + - display your valid copyright notice on your programs; and + - indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + + 3. **Distribution Restrictions. You may not** + + - alter any copyright, trademark or patent notice in the Distributable Code; + - use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + - distribute Distributable Code to run on a platform other than the Windows platform; + - include Distributable Code in malicious, deceptive or unlawful programs; or + - modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + - the code be disclosed or distributed in source code form; or + - others have the right to modify it. + +3. **SCOPE OF LICENSE.** The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + + - work around any technical limitations in the software; + - reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + - make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; + - publish the software for others to copy; + - rent, lease or lend the software; or + - transfer the software or this agreement to any third party. + +4. **BACKUP COPY.** You may make one backup copy of the software. You may use it only to reinstall the software. + +5. **DOCUMENTATION.** Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. + +6. **EXPORT RESTRICTIONS.** The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see [www.microsoft.com/exporting](http://www.microsoft.com/exporting). + +7. **SUPPORT SERVICES.** Because this software is provided "as is," we may not provide support services for it. + +8. **ENTIRE AGREEMENT.** This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. + +9. **APPLICABLE LAW.** + + - **United States.** If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + - **Outside the United States.** If you acquired the software in any other country, the laws of that country apply. + +10. **LEGAL EFFECT.** This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. + +11. **DISCLAIMER OF WARRANTY.** THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +12. **LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES.** YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. + + This limitation applies to + + - anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + - claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. + + It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. + +//////////////////////////////////////////////////////////// + +>>> 'Microsoft® SQL Server Compact® 4.0 SP1 License Terms' applies to the following THIRD-PARTY components: <<< + +1. Microsoft® SQL Server Compact® 4.0 SP1 +------------------------------ +Library by Microsoft + http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft® SQL Server® Compact 4.0 SP1) + x86: ENU\SSCERuntime_x86-ENU.exe; + x64: ENU\SSCERuntime_x64-ENU.exe.msi + Microsoft® SQL Server Compact® 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. + diff --git a/1.5 'Kruger 60'/solution-license.rtf b/1.5 'Kruger 60'/solution-license.rtf deleted file mode 100644 index 238cdc46..00000000 --- a/1.5 'Kruger 60'/solution-license.rtf +++ /dev/null @@ -1,67 +0,0 @@ -{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil\fcharset2 Symbol;}} -{\colortbl ;\red0\green0\blue255;} -{\*\generator Riched20 10.0.10586}\viewkind4\uc1 -\pard\nowidctlpar\sa200\sl276\slmult1\qj\b\f0\fs22\lang10 IPTViewr: Virtual Decoder for movistar+ version 1.5 \ldblquote Kruger 60\rdblquote Beta 1\ul\fs18\par -\fs20 Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors.\ulnone\i\fs18\par -THIS SOFTWARE IS \ul PROVIDED \ldblquote AS IS\rdblquote\ulnone , WITHOUT WARRANTY OF ANY KIND\b0\i0 , express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement.\line In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.\par -The Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in \ldblquote EXCEPTIONS\rdblquote . All other rights are reserved by the author(s) of the software.\par -\b\i THE SOFTWARE IS NOT SUPPORTED NOR ENDORSED by Movistar or Telef\'f3nica. \ul DO NOT EVER CALL 1002 nor 1004\ulnone\b0\i0 if channels disappear from the list or cannot be seen or any other problems arising from the use of this software.\line Telef\'f3nica de Espa\'f1a only provides help and support for their physical decoder and only for the contracted services.\par -The logos for most/all movistar+ channels broadcasting at the time of writing this software, are provided in this package. These logos are the property of the respective channels and businesses. Logos are provided in \ldblquote good faith\rdblquote , in order to identify the different channels and no copyright infringement is intended.\par -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telef\'f3nica.\line Its use in the context of this product does not constitute endorsement nor support by their respective owners.\par -\ul\b\i\fs20 Microsoft Reciprocal License (Ms-RL)\ulnone\b0\i0\par -\fs18 This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\par - -\pard\nowidctlpar\sl276\slmult1\qj 1. Definitions\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sl276\slmult1\qj The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.\par -{\pntext\f1\'B7\tab}A "contribution" is the original software, or any additions or changes to the software.\par -{\pntext\f1\'B7\tab}A "contributor" is any person that distributes its contribution under this license.\par -{\pntext\f1\'B7\tab}"Licensed patents" are a contributor's patent claims that read directly on its contribution.\par - -\pard{\*\pn\pnlvlcont\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\sl276\slmult1\qj 2. Grant of Rights\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sl276\slmult1\qj (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\par -{\pntext\f1\'B7\tab}(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\par - -\pard{\*\pn\pnlvlcont\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\sl276\slmult1\qj 3. Conditions and Limitations\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sl276\slmult1\qj (A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.\par -{\pntext\f1\'B7\tab}(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.\par -{\pntext\f1\'B7\tab}(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\par -{\pntext\f1\'B7\tab}(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\par -{\pntext\f1\'B7\tab}(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sa200\sl276\slmult1\qj (F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\par - -\pard\nowidctlpar\sa200\sl276\slmult1\qj\ul\b\i\fs20 EXCEPTIONS\ulnone\b0\i0\fs18\par -\ul\i "Microsoft Exception Message Box"\ulnone\i0\par - -\pard\sa200 EULA is provided with the installation program.\par - -\pard\nowidctlpar\sa200\sl276\slmult1\qj The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages.\par - -\pard {{\field{\*\fldinst{HYPERLINK http://www.microsoft.com/en-us/download/details.aspx?id=20101 }}{\fldrslt{http://www.microsoft.com/en-us/download/details.aspx?id=20101\ul0\cf0}}}}\f0\fs18 (Feature Pack for Microsoft SQL Server 2005 SP4)\par - -\pard\sa200 x86: ENU\\x86\\SQLServer2005_EMB.msi; x64: ENU\\x64\\SQLServer2005_EMB.msi\par -\ul\i "Microsoft\'ae SQL Server Compact\'ae 4.0 SP1"\par -\ulnone\i0 EULA is provided with the installation program.\par -Microsoft\'ae SQL Server Compact\'ae 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder.\par -{{\field{\*\fldinst{HYPERLINK http://www.microsoft.com/en-us/download/details.aspx?id=30709 }}{\fldrslt{http://www.microsoft.com/en-us/download/details.aspx?id=30709\ul0\cf0}}}}\f0\fs18 (Microsoft\'ae SQL Server\'ae Compact 4.0 SP1)\line x86: ENU\\SSCERuntime_x86-ENU.exe; x64: ENU\\SSCERuntime_x64-ENU.exe.msi\par -\ul\i "Task Scheduler Managed Wrapper 2.2.2"\par -\ulnone\i0 This software links to binary code from the Codeplex project "Task Scheduler Managed Wrapper" {{\field{\*\fldinst{HYPERLINK https://taskscheduler.codeplex.com/ }}{\fldrslt{https://taskscheduler.codeplex.com/\ul0\cf0}}}}\f0\fs18\par -"Task Scheduler Managed Wrapper" software is licensed under the MIT License (MIT). Complete license text is provided below. Copyright (c) 2003-2010 David Hall\par -\ul\i "FolderBrowserDialogEx class (from DotNetZip)"\par -\ulnone\i0 Contains code extracted from the DotNetZip Codeplex project ({{\field{\*\fldinst{HYPERLINK http://dotnetzip.codeplex.com/ }}{\fldrslt{http://dotnetzip.codeplex.com/\ul0\cf0}}}}\f0\fs18 ) and modified where needed. Original source code: {{\field{\*\fldinst{HYPERLINK http://dotnetzip.codeplex.com/SourceControl/changeset/view/29832#432677 }}{\fldrslt{http://dotnetzip.codeplex.com/SourceControl/changeset/view/29832#432677\ul0\cf0}}}}\f0\fs18\par -"DotNetZip" software is licensed under the Ms-PL license ({{\field{\*\fldinst{HYPERLINK http://dotnetzip.codeplex.com/license }}{\fldrslt{http://dotnetzip.codeplex.com/license\ul0\cf0}}}}\f0\fs18 )\par -\ul\i "JSON.Net 7.0 Release 1"\par -\ulnone\i0 This software links to binary code from the Codeplex project "JSON.Net"\line {{\field{\*\fldinst{HYPERLINK http://json.codeplex.com/ }}{\fldrslt{http://json.codeplex.com/\ul0\cf0}}}}\f0\fs18\par -"JSON.Net" software is licensed under the MIT License (MIT). Complete license text is provided below. Copyright (c) 2007 James Newton-King\par - -\pard\nowidctlpar\sa200\sl276\slmult1\qj\ul\b\i\fs20 The MIT License (MIT)\ulnone\b0\i0\fs18\par -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sl276\slmult1\qj The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sa200\sl276\slmult1\qj\i THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\i0\par -} - \ No newline at end of file diff --git a/1.5 'Kruger 60'/solution-license.txt b/1.5 'Kruger 60'/solution-license.txt deleted file mode 100644 index c6bc63d8..00000000 --- a/1.5 'Kruger 60'/solution-license.txt +++ /dev/null @@ -1,89 +0,0 @@ -***************************************************************************** -IPTViewr: Virtual Decoder for movistar+ version 1.5 Kruger 60 Beta 1 -***************************************************************************** - -Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors -========================================================================= - -THIS SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. -In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. - -The Software, either in binary or source code form, is licensed under the terms of the Microsoft Reciprocal License (Ms-RL) except when noted in EXCEPTIONS. All other rights are reserved by the author(s) of the software. - -THE SOFTWARE IS NOT SUPPORTED NOR ENDORSED by Movistar or Telefnica. DO NOT EVER CALL 1002 nor 1004 if channels disappear from the list or cannot be seen or any other problems arising from the use of this software. -Telefnica de Espaa only provides help and support for their physical decoder and only for the contracted services. - -The logos for most/all movistar+ channels broadcasting at the time of writing this software, are provided in this package. These logos are the property of the respective channels and businesses. Logos are provided in good faith, in order to identify the different channels and no copyright infringement is intended. - -All trademarks, service marks, trade names, product names and logos are the property of their respective owners, including in some instances Grupo Telefnica. -Its use in the context of this product does not constitute endorsement nor support by their respective owners. - ------------------------------------------------------------------------------ - Microsoft Reciprocal License (Ms-RL) ------------------------------------------------------------------------------ - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. DEFINITIONS - - The terms reproduce, reproduction, derivative works, and distribution have the same meaning here as under U.S. copyright law. - - A contribution is the original software, or any additions or changes to the software. - - A contributor is any person that distributes its contribution under this license. - - Licensed patents are a contributor's patent claims that read directly on its contribution. -2. GRANT of RIGHTS - - (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. - - (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. -3. CONDITIONS and LIMITATIONS - - (A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. - - (B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. - - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. - - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. - - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. - - (F) The software is licensed as-is. You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - ------------------------------------------------------------------------------ - EXCEPTIONS ------------------------------------------------------------------------------ - ->> "Microsoft Exception Message Box" - -EULA is provided with the installation program. -The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. - -http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) -x86: ENU\x86\SQLServer2005_EMB.msi; x64: ENU\x64\SQLServer2005_EMB.msi - ->> "Microsoft SQL Server Compact 4.0 SP1" - -EULA is provided with the installation program. -Microsoft SQL Server Compact 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. - -http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft SQL Server Compact 4.0 SP1) -x86: ENU\SSCERuntime_x86-ENU.exe; x64: ENU\SSCERuntime_x64-ENU.exe.msi - ->> "Task Scheduler Managed Wrapper 2.2.2" - -This software links to binary code from the Codeplex project "Task Scheduler Managed Wrapper" -https://taskscheduler.codeplex.com/ - -"Task Scheduler Managed Wrapper" software is licensed under the MIT License (MIT). Complete license text is provided below. Copyright (c) 2003-2010 David Hall - ->> FolderBrowserDialogEx class (from DotNetZip) - -Contains code extracted from the DotNetZip Codeplex project (http://dotnetzip.codeplex.com/) and modified where needed. -Original source code: http://dotnetzip.codeplex.com/SourceControl/changeset/view/29832#432677 -"DotNetZip" software is licensed under the Ms-PL license (http://dotnetzip.codeplex.com/license) - ->> "JSON.Net 7.0 Release 1" - -This software links to binary code from the Codeplex project "JSON.Net" -http://json.codeplex.com/ - -"JSON.Net" software is licensed under the MIT License (MIT). Complete license text is provided below. Copyright (c) 2007 James Newton-King - ------------------------------------------------------------------------------ - The MIT License (MIT) ------------------------------------------------------------------------------ - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/1.5 'Kruger 60'/solution-license_es.rtf b/1.5 'Kruger 60'/solution-license_es.rtf deleted file mode 100644 index fbb26557..00000000 --- a/1.5 'Kruger 60'/solution-license_es.rtf +++ /dev/null @@ -1,67 +0,0 @@ -{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3082{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil\fcharset2 Symbol;}} -{\colortbl ;\red0\green0\blue255;} -{\*\generator Riched20 10.0.10586}\viewkind4\uc1 -\pard\nowidctlpar\sa200\sl276\slmult1\qj\b\f0\fs22\lang10 IPTViewr: Decodificador virtual para movistar+ versi\'f3n 1.5 \ldblquote Kruger 60\rdblquote beta 1\par -\ul\fs20 Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors\par -\ulnone\i\fs18 ESTE SOFTWARE \ul SE PROPORCIONA \ldblquote TAL CUAL\rdblquote\ulnone , SIN GARANT\'cdA DE NING\'daN TIPO\b0\i0 , expresa o impl\'edcita, incluyendo (pero no limit\'e1ndose a) las garant\'edas de comerciabilidad, idoneidad para un prop\'f3sito particular y no infracci\'f3n.\line En ning\'fan caso, los autores o titulares del Copyright ser\'e1n responsables de ninguna reclamaci\'f3n, da\'f1os o cualquier otra responsabilidad, ya sea en una acci\'f3n de contrato, agravio o cualquier otro motivo, con o sin relaci\'f3n con el software o el uso u otros aspectos del software.\par -El software, ya sea en forma de c\'f3digo binario o fuente, est\'e1 sujeto a los t\'e9rminos de la Licencia Rec\'edproca de Microsoft \ldblquote Microsoft Reciprocal License\rdblquote (Ms-RL), excepto cuanto se indica en \ldblquote EXCEPCIONES\rdblquote . Todos los dem\'e1s derechos est\'e1n reservados por el/los autor(es) del software.\par -\b\i AVISO IMPORTANTE: El presente software NO EST\'c1 SOPORTADO NI RESPALDADO por Movistar ni por Telef\'f3nica. \ul NO DEBE LLAMARSE NUNCA al 1002 o al 1004\ulnone\b0\i0 si desaparecen canales de la lista o no pueden verse o cualquier otra anomal\'eda relaciona con el uso de este software.\line Telef\'f3nica de Espa\'f1a s\'f3lo proporciona ayuda y soporte t\'e9cnico para su decodificador f\'edsico y s\'f3lo para los servicios contratados.\par -Se proporcionan los logotipos de la totalidad de canales de movistar+ en el momento de escribir el software. Estos logotipos son propiedad de los diferentes canales y sus compa\'f1\'edas propietarias. Los logos se suministran de \ldblquote buena fe\rdblquote , para poder identificar adecuadamente los diferentes canales, sin \'e1nimo de infringir ning\'fan derecho de copyright.\par -Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios, incluyendo en algunos casos el Grupo Telef\'f3nica.\line Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios.\par -\ul\b\i\fs20 Microsoft Reciprocal License (Ms-RL)\ulnone\b0\i0\par -\fs18 This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.\par - -\pard\nowidctlpar\sl276\slmult1\qj 1. Definitions\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sl276\slmult1\qj The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.\par -{\pntext\f1\'B7\tab}A "contribution" is the original software, or any additions or changes to the software.\par -{\pntext\f1\'B7\tab}A "contributor" is any person that distributes its contribution under this license.\par -{\pntext\f1\'B7\tab}"Licensed patents" are a contributor's patent claims that read directly on its contribution.\par - -\pard{\*\pn\pnlvlcont\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\sl276\slmult1\qj 2. Grant of Rights\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sl276\slmult1\qj (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.\par -{\pntext\f1\'B7\tab}(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.\par - -\pard{\*\pn\pnlvlcont\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\sl276\slmult1\qj 3. Conditions and Limitations\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sl276\slmult1\qj (A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.\par -{\pntext\f1\'B7\tab}(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.\par -{\pntext\f1\'B7\tab}(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.\par -{\pntext\f1\'B7\tab}(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.\par -{\pntext\f1\'B7\tab}(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sa200\sl276\slmult1\qj (F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\par - -\pard\nowidctlpar\sa200\sl276\slmult1\qj\ul\b\i\fs20 EXCEPTIONS\ulnone\b0\i0\fs18\par -\ul\i "Microsoft Exception Message Box"\ulnone\i0\par - -\pard\sa200 EULA is provided with the installation program.\par - -\pard\nowidctlpar\sa200\sl276\slmult1\qj The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages.\par - -\pard {{\field{\*\fldinst{HYPERLINK http://www.microsoft.com/en-us/download/details.aspx?id=20101 }}{\fldrslt{http://www.microsoft.com/en-us/download/details.aspx?id=20101\ul0\cf0}}}}\f0\fs18 (Feature Pack for Microsoft SQL Server 2005 SP4)\par - -\pard\sa200 x86: ENU\\x86\\SQLServer2005_EMB.msi; x64: ENU\\x64\\SQLServer2005_EMB.msi\par -\ul\i "Microsoft\'ae SQL Server Compact\'ae 4.0 SP1"\par -\ulnone\i0 EULA is provided with the installation program.\par -Microsoft\'ae SQL Server Compact\'ae 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder.\par -{{\field{\*\fldinst{HYPERLINK http://www.microsoft.com/en-us/download/details.aspx?id=30709 }}{\fldrslt{http://www.microsoft.com/en-us/download/details.aspx?id=30709\ul0\cf0}}}}\f0\fs18 (Microsoft\'ae SQL Server\'ae Compact 4.0 SP1)\line x86: ENU\\SSCERuntime_x86-ENU.exe; x64: ENU\\SSCERuntime_x64-ENU.exe.msi\par -\ul\i "Task Scheduler Managed Wrapper 2.2.2"\par -\ulnone\i0 This software links to binary code from the Codeplex project "Task Scheduler Managed Wrapper" {{\field{\*\fldinst{HYPERLINK https://taskscheduler.codeplex.com/ }}{\fldrslt{https://taskscheduler.codeplex.com/\ul0\cf0}}}}\f0\fs18\par -"Task Scheduler Managed Wrapper" software is licensed under the MIT License (MIT). Complete license text is provided below. Copyright (c) 2003-2010 David Hall\par -\ul\i "FolderBrowserDialogEx class (from DotNetZip)"\par -\ulnone\i0 Contains code extracted from the DotNetZip Codeplex project ({{\field{\*\fldinst{HYPERLINK http://dotnetzip.codeplex.com/ }}{\fldrslt{http://dotnetzip.codeplex.com/\ul0\cf0}}}}\f0\fs18 ) and modified where needed. Original source code: {{\field{\*\fldinst{HYPERLINK http://dotnetzip.codeplex.com/SourceControl/changeset/view/29832#432677 }}{\fldrslt{http://dotnetzip.codeplex.com/SourceControl/changeset/view/29832#432677\ul0\cf0}}}}\f0\fs18\par -"DotNetZip" software is licensed under the Ms-PL license ({{\field{\*\fldinst{HYPERLINK http://dotnetzip.codeplex.com/license }}{\fldrslt{http://dotnetzip.codeplex.com/license\ul0\cf0}}}}\f0\fs18 )\par -\ul\i "JSON.Net 7.0 Release 1"\par -\ulnone\i0 This software links to binary code from the Codeplex project "JSON.Net"\line {{\field{\*\fldinst{HYPERLINK http://json.codeplex.com/ }}{\fldrslt{http://json.codeplex.com/\ul0\cf0}}}}\f0\fs18\par -"JSON.Net" software is licensed under the MIT License (MIT). Complete license text is provided below. Copyright (c) 2007 James Newton-King\par - -\pard\nowidctlpar\sa200\sl276\slmult1\qj\ul\b\i\fs20 The MIT License (MIT)\ulnone\b0\i0\fs18\par -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sl276\slmult1\qj The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\par - -\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sa200\sl276\slmult1\qj\i THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\i0\par -} - \ No newline at end of file diff --git a/1.5 'Kruger 60'/solution-license_es.txt b/1.5 'Kruger 60'/solution-license_es.txt deleted file mode 100644 index 12262b1b..00000000 --- a/1.5 'Kruger 60'/solution-license_es.txt +++ /dev/null @@ -1,89 +0,0 @@ -***************************************************************************** -IPTViewr: Decodificador virtual para movistar+ versin 1.5 Kruger 60 beta 1 -***************************************************************************** - -Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors -========================================================================= - -ESTE SOFTWARE SE PROPORCIONA TAL CUAL, SIN GARANTA DE NINGN TIPO, expresa o implcita, incluyendo (pero no limitndose a) las garantas de comerciabilidad, idoneidad para un propsito particular y no infraccin. -En ningn caso, los autores o titulares del Copyright sern responsables de ninguna reclamacin, daos o cualquier otra responsabilidad, ya sea en una accin de contrato, agravio o cualquier otro motivo, con o sin relacin con el software o el uso u otros aspectos del software. - -El software, ya sea en forma de cdigo binario o fuente, est sujeto a los trminos de la Licencia Recproca de Microsoft Microsoft Reciprocal License (Ms-RL), excepto cuanto se indica en EXCEPCIONES. Todos los dems derechos estn reservados por el/los autor(es) del software. - -AVISO IMPORTANTE: El presente software NO EST SOPORTADO NI RESPALDADO por Movistar ni por Telefnica. NO DEBE LLAMARSE NUNCA al 1002 o al 1004 si desaparecen canales de la lista o no pueden verse o cualquier otra anomala relaciona con el uso de este software. -Telefnica de Espaa slo proporciona ayuda y soporte tcnico para su decodificador fsico y slo para los servicios contratados. - -Se proporcionan los logotipos de la totalidad de canales de movistar+ en el momento de escribir el software. Estos logotipos son propiedad de los diferentes canales y sus compaas propietarias. Los logos se suministran de buena fe, para poder identificar adecuadamente los diferentes canales, sin nimo de infringir ningn derecho de copyright. - -Todas las marcas comerciales, marcas de servicio, nombres comerciales, nombres de productos y logotipos son propiedad de sus respectivos propietarios, incluyendo en algunos casos el Grupo Telefnica. -Su uso en el contexto de este software no constituye un respaldo ni apoyo por parte de sus respectivos propietarios. - ------------------------------------------------------------------------------ - Microsoft Reciprocal License (Ms-RL) ------------------------------------------------------------------------------ - -This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. - -1. DEFINITIONS - - The terms reproduce, reproduction, derivative works, and distribution have the same meaning here as under U.S. copyright law. - - A contribution is the original software, or any additions or changes to the software. - - A contributor is any person that distributes its contribution under this license. - - Licensed patents are a contributor's patent claims that read directly on its contribution. -2. GRANT of RIGHTS - - (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. - - (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. -3. CONDITIONS and LIMITATIONS - - (A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose. - - (B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. - - (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. - - (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. - - (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. - - (F) The software is licensed as-is. You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. - ------------------------------------------------------------------------------ - EXCEPTIONS ------------------------------------------------------------------------------ - ->> "Microsoft Exception Message Box" - -EULA is provided with the installation program. -The exception message box is a programmatic interface that you can use in your applications for any tasks for which MessageBox may be used. The exception message box is a supported managed assembly designed to elegantly handle managed code exceptions. It provides significantly more control over the messaging experience and gives your users the options to save error message content for later reference and to get help on messages. - -http://www.microsoft.com/en-us/download/details.aspx?id=20101 (Feature Pack for Microsoft SQL Server 2005 SP4) -x86: ENU\x86\SQLServer2005_EMB.msi; x64: ENU\x64\SQLServer2005_EMB.msi - ->> "Microsoft SQL Server Compact 4.0 SP1" - -EULA is provided with the installation program. -Microsoft SQL Server Compact 4.0 is a free, embedded database that software developers can use for building Windows desktop applications. SQL Server Compact 4.0 has a small footprint and supports private deployment of its binaries within the application folder. - -http://www.microsoft.com/en-us/download/details.aspx?id=30709 (Microsoft SQL Server Compact 4.0 SP1) -x86: ENU\SSCERuntime_x86-ENU.exe; x64: ENU\SSCERuntime_x64-ENU.exe.msi - ->> "Task Scheduler Managed Wrapper 2.2.2" - -This software links to binary code from the Codeplex project "Task Scheduler Managed Wrapper" -https://taskscheduler.codeplex.com/ - -"Task Scheduler Managed Wrapper" software is licensed under the MIT License (MIT). Complete license text is provided below. Copyright (c) 2003-2010 David Hall - ->> FolderBrowserDialogEx class (from DotNetZip) - -Contains code extracted from the DotNetZip Codeplex project (http://dotnetzip.codeplex.com/) and modified where needed. -Original source code: http://dotnetzip.codeplex.com/SourceControl/changeset/view/29832#432677 -"DotNetZip" software is licensed under the Ms-PL license (http://dotnetzip.codeplex.com/license) - ->> "JSON.Net 7.0 Release 1" - -This software links to binary code from the Codeplex project "JSON.Net" -http://json.codeplex.com/ - -"JSON.Net" software is licensed under the MIT License (MIT). Complete license text is provided below. Copyright (c) 2007 James Newton-King - ------------------------------------------------------------------------------ - The MIT License (MIT) ------------------------------------------------------------------------------ - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/LICENSE b/LICENSE index e832aee1..5ec38500 100644 --- a/LICENSE +++ b/LICENSE @@ -2,7 +2,7 @@ IPTViewr: Virtual IPTV Decoder for movistar+ ################################################ -Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors +Copyright (C) 2014-2019, GitHub/Codeplex user AlphaCentaury and its contributors ========================================================================= THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. diff --git a/LICENSE.md b/LICENSE.md index 37358ef0..c7babfc9 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # IPTViewr: Virtual IPTV Decoder for movistar+ # -### Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors +### Copyright (C) 2014-2019, Codeplex user AlphaCentaury and its contributors _**THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND**_, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. In no event shall the authors or the copyright holders be liable for any claim, damages or other liability, whether in action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. diff --git a/LICENSE_ES b/LICENSE_ES index 05190776..af1960ba 100644 --- a/LICENSE_ES +++ b/LICENSE_ES @@ -2,7 +2,7 @@ IPTViewr: Decodificador virtual IPTV para movistar+ ####################################################### -Copyright (C) 2014-2016, Codeplex user AlphaCentaury and its contributors +Copyright (C) 2014-2019, GitHub/Codeplex user AlphaCentaury and its contributors ========================================================================= EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO, expresa o implícita, incluyendo (pero no limitándose a) las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. diff --git a/README.md b/README.md index 2f9310ee..7d8df8d5 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ IPTViewr emula, parcialmente, el funcionamiento del decodificador físico de movistar+. El propósito de este proyecto es llegar a cubrir el 95% de la funcionalidad del decodificador. -La version actual, [v1.5 ‘Kruger 60’ alpha 4][Kruger-60], dispone de las siguientes funcionalidades: +La version actual, [v1.5 ‘Kruger 60’ beta 1][Kruger-60], dispone de las siguientes funcionalidades: - Lista completa de canales - Se muestran todos los canales disponibles, con independencia de si forman parte o no del programa contratado. - Sólo pueden visualizarse los canales contratados. @@ -53,5 +53,5 @@ Además, el nuevo portal alojará los archivos de instalación. [LICENSE]: LICENSE [LICENSE_ES]: LICENSE_ES [codeplex]: https://movistartv.codeplex.com -[Kruger-60]: https://www.alphacentaury.org/movistartv/2018/iptviewr-v1-5-kruger-60-beta-0/ +[Kruger-60]: https://www.alphacentaury.org/temas/movistartv/downloads/ [alphacentaury]: https://www.alphacentaury.org/movistartv/ diff --git a/docs/README.md b/docs/README.md index 07a34381..ae52ffc8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -7,4 +7,4 @@ Alpha Centaury dispone de página web propia en [alphacentaury.org][alphacentaur [alphacentaury]: https://www.alphacentaury.org/ [movistar+]: https://www.alphacentaury.org/movistartv/ [downloads]: https://www.alphacentaury.org/temas/movistartv/downloads/ -[github]: https://github.com/AlphaCentaury/MovistarTV +[github]: https://github.com/AlphaCentaury/MovistarTV \ No newline at end of file diff --git a/docs/images/IPTViewr@256.png b/docs/images/IPTViewr@256.png new file mode 100644 index 00000000..8ea9f721 Binary files /dev/null and b/docs/images/IPTViewr@256.png differ diff --git a/docs/releases/v1.5/IPTViewr_Movistar+_1-5_beta-0_en-us.msi b/docs/releases/v1.5/IPTViewr_Movistar+_1-5_beta-0_en-us.msi new file mode 100644 index 00000000..a36bd577 Binary files /dev/null and b/docs/releases/v1.5/IPTViewr_Movistar+_1-5_beta-0_en-us.msi differ diff --git a/docs/releases/v1.5/IPTViewr_Movistar+_1-5_beta-0_es-es.msi b/docs/releases/v1.5/IPTViewr_Movistar+_1-5_beta-0_es-es.msi new file mode 100644 index 00000000..d45e5abc Binary files /dev/null and b/docs/releases/v1.5/IPTViewr_Movistar+_1-5_beta-0_es-es.msi differ